diff --git a/.claude/skills/gkill-build-test/SKILL.md b/.claude/skills/gkill-build-test/SKILL.md new file mode 100644 index 000000000..d5ab41d32 --- /dev/null +++ b/.claude/skills/gkill-build-test/SKILL.md @@ -0,0 +1,34 @@ +--- +name: gkill-build-test +description: "gkill のビルド・テスト・E2E 実行・リリースゲートの約束。ビルドパイプライン(dist と i18n とマニュアルの embed への3コピー)、embed 無しの裸 go build が起動即死バイナリを作る罠、dev サーバの --api プロキシ指定、E2E の専用ホームと空きポート自動採番(ポートを固定しない)、テスト済み attestation(tree hash 束縛・run_test_suite.mjs だけが書く・verify_release_gate.mjs が release の先頭で CI/Nightly と併せて検査する)を扱う。package.json・src/tools/・vite.config.ts・playwright.config.ts・src/client/__tests__/e2e/・.github/workflows/ を編集するとき、ビルドやテストの実行・リリースを頼まれたとき必読。「ビルドは通るのに起動即死する」「E2E が本番サーバと衝突する」「release がゲートで止まる」の調査でも必読。" +--- + +# ビルド・テスト・E2E の約束 + +対象: `package.json` / `src/tools/**` / `vite.config.ts` / `playwright.config.ts` / `src/client/__tests__/e2e/**` / `.github/workflows/**` +(npm スクリプトの一覧表は `AGENTS.md` にある) + +**このファイルは全文が、実際に起きた事故の再発防止である。該当作業では飛ばさずに読むこと。** +多くは「例外もエラーも出さずに静かに壊れる」種類で、破っても目の前ではエラーにならない。 + +**Build pipeline** (`install_server` → `prepare_install`): `clean_dist` → clean embed dir → write `version.json` (commit hash + build time + version + tree hash; `src/tools/put_version_info.mjs`) → `vue-tsc` type-check → `vite build` → copy `dist/` to `src/server/gkill/api/embed/html/` → copy `src/locales/` to `src/server/gkill/api/embed/i18n/locales/` → `build_manuals` (`src/tools/build_manuals.mjs`: `resources/manual_src/` → `resources/manual/`) → copy `resources/manual/` to `src/server/gkill/api/embed/manual/` (3 copies: html + i18n + manual) → `go install` + +**Bare `go build` caveat:** any gkill binary panics at startup if `embed/i18n/locales` is empty (`gkill/api`'s `init()` reads it), so a `go build` without a preceding `npm run copy_i18n_to_app_embed` produces a binary that compiles but dies immediately. + +**APK リリース署名(指摘 F-006):** `npm run release` の APK 3本(Android / Wear companion / watch)は `assembleRelease` + リリース署名で作る(以前は `assembleDebug` の成果物を配布名へ rename しており、debug 鍵署名の APK が正式版として公開されていた)。鍵はリポジトリへ入れず、`~/.gradle/gradle.properties` か環境変数で `GKILL_RELEASE_KEYSTORE` / `GKILL_RELEASE_KEYSTORE_PASSWORD` / `GKILL_RELEASE_KEY_ALIAS` / `GKILL_RELEASE_KEY_PASSWORD` を渡す(初回は `keytool -genkeypair -v -keystore 〈保管先〉.jks -alias gkill -keyalg RSA -keysize 4096 -validity 10950` で作成し、keystore とパスワードはリポジトリ外で保管する)。未設定の `assembleRelease` は未署名 APK(`app-release-unsigned.apk`)になり、配布名への rename が見つからずパイプラインが止まる — 黙って debug 鍵の配布物へ戻ることはない。`verify_release_artifacts` が `apksigner verify --print-certs` で署名の実在と「debug 証明書(CN=Android Debug)でないこと」を検査し、apksigner が見つからない環境では fail-closed で止まる。**署名鍵が debug から変わった版へ更新する既存インストール端末は、署名不一致でそのまま更新できず、アンインストール→再インストールが必要**(リリースノートに明記すること)。 + +**リリースゲート(テスト済み attestation):** `npm run release` の先頭は `verify_release_gate`(`src/tools/verify_release_gate.mjs`)で、**外さない・抜け道フラグを作らない**(`--no-verify` 禁止と同じ思想)。ゲートは①作業ツリーがクリーン(untracked も不可)②必須スイート全部(`attestation.mjs` の `REQUIRED_SUITES` = `npm test` の並びから `install_server` を除いた9本)が **HEAD^{tree} と同じ tree hash** で `test_attestation.local.json` に記録済み ③E2E は PATH 上の `gkill_server version` が出す `tree:` も一致 ④GitHub の `ci.yml` がこの HEAD で success、直近の `nightly.yml` が success・48時間以内・HEAD の祖先・以後に依存の宣言(`DEPENDENCY_MANIFESTS`)が変わっていない — を fail-closed で検査し、通れば `release/RELEASE_ATTESTATION_.json` を書く(`verify_release_artifacts` が SHA256SUMS に載せ、ビルド後にも HEAD と clean を再検査する)。守ること: **記録は `run_test_suite.mjs`(`npm run test_*` / `verify_docs` の実体)だけが書く。手で書かない・`record` サブコマンドを足さない。** 束縛先は commit SHA ではなく作業ツリーの tree hash(dirty でテスト→そのまま全部コミットなら再テスト不要。バージョン bump も tree を変えるので bump 後に回す)。余剰引数(`npm run test_client_e2e -- --workers=2`)は各スイートへ素通しし、並列度・レポータなど許可リスト内なら記録、`-run`/`--grep`/ファイル名は記録しない。**`verify_docs` / `test_plugins` / `test_android` / `test_wear_os` は引数が検査内容を置き換える(`--list`・`vet`・Gradle タスク名)ので引数が1つでもあれば記録しない。** `CI` 環境変数があれば記録しない。git は全部 `-c core.autocrlf=true` で呼び、クリーン判定は `git status` ではなく `git diff --name-only HEAD` + `ls-files --others`(status はサイズ差だけで modified と言う。WSL の /mnt/c では素の status が百数十件の偽 dirty を出す、実測)。`gkill_server version` は `PersistentPreRun` でログを初期化するので必ず `--gkill_home_dir /gkill_test --log none` を付けて呼ぶ。`test_attestation.local.json` は `.gitignore` の**明示行**で ignore(`*.local` は `.local` で終わる名前にしか当たらない。ignore されていないと自己参照で壊れるので `assertAttestationIgnored` が止める)。リポジトリ外の配置スクリプトはこのゲートを通らない — 呼ぶ側で `npm run verify_release_gate` を先に実行すること。 + +**Dev server backend target:** `npm run dev` runs `src/tools/dev.mjs`, a thin wrapper that strips `--api` / `--api-target` (Vite errors on unknown CLI options) and passes the value to Vite as `GKILL_API_PROXY_TARGET`; all other args pass through untouched. Accepts a full URL, a bare port (`--api=19999` → `http://127.0.0.1:19999`), or `host:port`. Precedence: `--api` > `GKILL_API_PROXY_TARGET` > `http://localhost:9999`. `vite.config.ts` proxies `/api`, `/files`, `/zip_cache` and `/resources/manual` to that target — SPA routes (`/rykv`, `/kftl`, `/mi`, `/rudbeckia`, …) are deliberately not proxied since vue-router owns them in dev. + +**E2E test environment:** `$HOME/gkill_test` as dedicated gkill home. `npm run test_client_e2e` automatically cleans, starts gkill_server (fresh admin, no password) and a Vite dev server, runs Playwright, and stops both. See `src/client/__tests__/e2e/run-e2e.mjs`. + +**Ports are never fixed in tests.** `run-e2e.mjs` allocates free ports from the OS (`src/client/__tests__/e2e/free-port.mjs`) and passes them as `--address 127.0.0.1:` (gkill_server) and `--port --strictPort` (Vite), so a production gkill_server occupying `:9999` never collides. The ports reach the tests via `GKILL_E2E_BASE_URL` / `GKILL_E2E_VITE_URL` (read by `playwright.config.ts`, `check-server.ts`, `auth.setup.ts`), and Vite's `/api` proxy target via `GKILL_API_PROXY_TARGET` (`vite.config.ts`) — which also prevents E2E writes from ever reaching a production server. Leftover-process cleanup only kills `gkill_server` processes whose command line contains `gkill_test`. Nothing else in `npm test` binds a fixed port: Go tests use `httptest` (ephemeral), and MCP/Android/Wear OS tests bind none. + +**E2E の保存待ちは commit_tx まで**(2026-09-15)。追加/編集画面は本体とタグを `tx_id` で束ねて `commit_tx` で確定する(ADR-0410)ので、`crud-helpers.ts` の `clickDialogButton` は最初の書き込み応答(`add_*` / `update_*`=一時リポジトリに積んだだけ)を見たあと、そのリクエストに `tx_id` が付いていれば `commit_tx` の応答まで待つ。ここを待たずに `page.goto` で遷移すると commit が中断されて**記録は1件も書かれない**(Mi 画面系の spec がそれで落ちた)。commit_tx の `waitForResponse` は**クリックの前に張る**(応答が先に返ってから張ると永久に待つ)。tx を使わない保存では commit_tx は飛ばないので、その promise は使わずに捨てる。 + +**Test details:** See `documents/reverse/testing-guide.md`, `src/ABOUT_TEST.md` for per-directory test specs. + +## 関連スキル + +- [gkill-docs](../gkill-docs/SKILL.md) — `npm run verify_docs` が検査する内容(`npm test` に含まれる) diff --git a/.claude/skills/gkill-cli-ops/SKILL.md b/.claude/skills/gkill-cli-ops/SKILL.md new file mode 100644 index 000000000..9939020b3 --- /dev/null +++ b/.claude/skills/gkill-cli-ops/SKILL.md @@ -0,0 +1,79 @@ +--- +name: gkill-cli-ops +description: "gkill の CLI サブコマンドと運用(src/server/gkill/main/)の約束。gkill_server / gkill の2配布形態、update_cache と add_tag が起動中サーバの HTTP クライアントであること、configs 直書きの自己発行セッションとその権限、add_tag のルール JSON(FindKyouQuery)と rep_types_in_sidebar の展開・拒否する指定・消したタグは付け直すこと、clear_cache のユーザー別派生キャッシュ(thumb/video/zip/plugin)、generate_plugin_cache がプラグインを --gkill-build-cache で単独起動して同期構築すること(結果行 built / no_cache の完全一致・旧バイナリの exit 2 と空 stdout は失敗・稼働中サーバの常駐ビルダと同じ cache.db に2つの書き手)、CLI フラグ一覧、RunE + SilenceUsage/SilenceErrors と errors.Join を扱う。src/server/gkill/main/・gkill_options/・local_rep_cache_path.go を編集するとき、サブコマンドを足すとき必読。「削除したタグが復活する」「キャッシュがディスクを埋める」の調査でも必読。" +--- + +# CLI サブコマンドと運用の約束 + +対象: `src/server/gkill/main/**` / `src/server/gkill/main/common/gkill_options/**` / `src/server/gkill/dao/reps/local_rep_cache_path.go` + +**このファイルは全文が、実際に起きた事故の再発防止である。該当作業では飛ばさずに読むこと。** +多くは「例外もエラーも出さずに静かに壊れる」種類で、破っても目の前ではエラーにならない。 + +### Two Deployment Modes + +- **`gkill_server`** (`src/server/gkill/main/gkill_server/main.go`): Headless HTTP server (browser/PWA) +- **`gkill`** (`src/server/gkill/main/gkill/main.go`): Desktop app wrapping server with go-astilectron + +Both use cobra for CLI with shared subcommands: `version`, `dvnf`, `generate_thumb_cache`, `generate_video_cache`, `optimize`, `update_cache`, `clear_cache`, `generate_plugin_cache`, `reset_password`, `add_tag`. `idf` and `mcp` are registered by `gkill_server` only (`main/gkill/main.go` does not register `IDFCmd` / `MCPCmd`). `mcp --kind read|write|readwrite [--transport stdio|http] [--config ]` is the MCP server (an HTTP client of the running gkill_server, like `update_cache` / `add_tag`; `main/common/mcp.go` is wiring only, the implementation is package `gkill/mcp` — see [gkill-mcp](../gkill-mcp/SKILL.md)). It replaces the parent's `PersistentPreRun` with its own so that `gkill_log.InitNamed("gkill_mcp_", "gkill_mcp", ...)` opens `logs/gkill_mcp_*.log` instead of `gkill*.log`, and never mirrors to stdout (stdout is the JSON-RPC channel in stdio mode). Default listen address: `127.0.0.1:9999` with "local access only" on (loopback-only; the constants live in `dao/server_config/server_config.go`, see [gkill-go-backend](../gkill-go-backend/SKILL.md)), TLS disabled, initial user `admin` with no password. Serving other machines on the LAN is an explicit change in the server settings screen (address + local-only), not a default. + +`update_cache` and `add_tag` are **HTTP clients of the running server**, not offline operations — they need gkill_server to be up. Neither can log in with a password (Argon2id), so they mint a short-lived session by writing a row into `configs/account_state.db` directly (`main/common/password_admin.go`: `issueLocalSession` / `issueLocalAdminSession`); the trust basis is being able to write the config dir on the same machine. `update_cache` uses an admin session; `add_tag` uses **the target user's own session**, because `/api/get_kyous` and `/api/add_tag` act as the session's user and an admin session would see admin's repositories. Both resolve the endpoint through `common.ResolveLocalServerEndpoint` (reads `server_config.db`, skips TLS verification for the localhost self-signed cert). + +**`add_tag` のルールは検索条件 JSON そのもの。**`add_tag --rules_file | --rule '' [--dry_run]`(2026-09 に `auto_tag` から改名。旧 `--tag_by_rep_prefix` / `--tag_by_rep_name` は撤去)。ルール1件は `{"tag": "<タグ名>", "query": {}}` で、`--rules_file` はその配列(単一オブジェクトも可)、`--rule` は繰り返し可。`query` はクライアントの `FindKyouQuery` の JSON をそのまま受ける(`main/common/add_tag.go` の `addTagQueryJSON` = `find.FindQuery` の埋め込み + クライアント専用7キー)。**`rep_types_in_sidebar`(画面の「記録種別」= rep 名 `<種別>_<端末>_<日付>` の先頭要素。サーバの `rep_types` とは別物)を書くと、CLI が `/api/get_all_rep_names` の一覧を `rep_to_struct` と同じ規則(`_` で3要素に分かれれば先頭が種別・2つ目が端末、それ以外は名前全体が種別)で分解し、`reps` を上書きしてから送る。**`devices_in_sidebar` 省略=全端末。実環境の rep は `AutoScreenshot_<端末>_<日付>` の形で増え続けるので、`reps` を列挙する JSON は新しい rep を**静かに取りこぼす**。運用のルールは `rep_types_in_sidebar` で書くこと。端末名に `_` が入る rep は分類されない(UI と同じ)。 + +復号は厳格で、次の指定は**サーバに触る前に exit 1** にする(理由はどれも「エラーにならず意図と違う範囲に静かに当たる」から): 未知のキー(`"rep"` の綴り誤りは `reps` 未使用=全件になる)/絞り込みが1つも無い `query`(`{}`=全件)/常に0件になる非 null 空配列(`tags: []` `reps: []` `rep_types: []` `ids: []` `period_of_time_week_of_days: []`)/非空の `keywords`・`timeis_keywords`(入力欄の生文字列。`words` / `not_words` を書く)/`update_cache: true`(検索のたびにフルリビルド)/`devices_in_sidebar` 単独/地図3値の一部だけ/`timeis_words` 無しの `timeis_tags`。先頭 BOM は剥がし、旧 `use_*` 形式は `find.MigrateLegacyFindQueryJSON` で受理する。各ルールは展開後の有効な FindQuery を1行 JSON で印字するので、`--dry_run` でそれと `kyous = N` を見てから本番に流す。**UI から貼った JSON は `tags`(チェック済み一覧)・`hide_tags`・`calendar_*` で範囲が狭い**——差分計算は正しいので「target = 0」が静かに出るだけになる。Windows の運用スクリプトは `--rule` を使わない(PowerShell 5.1 はネイティブコマンドへ渡す引数の二重引用符を落とす)。経緯と却下案は [ADR-1002](../../../documents/adr/1002-add-tag-rules-are-find-queries.md)。 + +「付いているか」の判定は `/api/get_kyous` を2回投げた差分(条件そのまま vs. `tags: []` + **`tags_and: true`** を上書き。タグ以外の条件は残るので差分がそのまま未付与分)。`filterTagsKyous` は OR/AND どちらの分岐もタグ名を完全一致(大小無視)で照合する——`gkill` が `gkill_autolog` に当たることはない——ので単一タグの「付いているものだけ」は AND が直接表現。応答の `messages` のうち rep 読み込み失敗・プラグイン失敗の警告は印字する(黙って捨てるとその rep の記録が対象から消えたことに気付けない)。タグ行の ID は画面から付けるときと同じランダムな UUID で、判定はタグ名の差分だけ。だから**画面から消したタグは次回付け直される**(要件は「付いていなければ付ける」。2026-09-11 の判断)。かつては (対象ID, タグ名) の UUIDv5 にして「消したタグは復活しない」を実現していたが、その考慮が不要になったのでやめた——決定的 ID へ戻すと消したタグが二度と付かなくなる(`TestNewAddTagRowUsesFreshUUIDAndAppName` が固定)。裏返しの trade-off として、付与済み判定を取りこぼしたとき(キャッシュが古いまま実行した等)の同名2行を防ぐ保険は無い。運用スクリプトが直前に `update_cache` を回すのはそのため。`CREATE_APP` は `gkill_add_tag`(出所の表示用。判定には使わない。旧 auto_tag 分は `gkill_auto_tag` のまま残る)。 + +`clear_cache ` deletes the on-disk derived caches (`thumb_cache` / `video_cache` / `zip_cache` / `plugin_cache`). The target is required (matching `generate_thumb_cache`/`optimize` etc. which require positional user args): pass the literal `all` to remove the whole cache dirs under `$HOME/gkill/caches/` globally (no user context needed), or one or more user_ids to load each user's repositories (`LoadIDFRepOnly`) and clear only that user's IDF-rep caches via `IDFKyouReps.Clear{Thumb,Video,Zip}Cache(userID)`. `plugin` mode is a plain directory removal (`ClearPluginCache`) and skips the repository load entirely. Missing target or unknown mode prints usage. All three derived caches are keyed per user — `caches/zip_cache/{userID}/{repName}/{sha1(zipPath)}/` and `caches/{thumb,video}_cache/{userID}/{repName}/` — built by `derivedCacheDirForUser` in `dao/reps/local_rep_cache_path.go`. Rep names are NOT unique across users (`filepath.Base(contentDir)`, no UNIQUE constraint), so name matching alone cannot isolate them; that's why all three `Clear*Cache(userID)` take the user id. Thumb/video have no dedicated route — they are only reachable via `/files/{repName}/...?thumb=`. rep名の照合では原理的に守れない理由は [ADR-0705](../../../documents/adr/0705-per-user-derived-cache-dir.md)。 + +**`generate_plugin_cache ` はプラグインを単独モードで直接起動して同期構築する。稼働中サーバには頼らず、stdio プロトコルにもコマンドを足さない。**(`main/common/generate_plugin_cache.go`、2026-09-16)プラグインのキャッシュ(`caches/plugin_cache/{user}/{plugin}/cache.db`)は常駐ビルダが stdio の初回呼び出しの後に非同期で作るので、同期で新しいデータを置いても誰かが画面を開くまで取り込まれず、`update_cache` が作る型別索引も古い cache.db を読む。そこで各プラグインバイナリを `--gkill-plugin-dir --gkill-user-id --gkill-protocol-version --gkill-build-cache` で起動し(`--gkill-print-manifest` と同じ「stdio ループに入らない起動」の型。SDK 側は `sdk.Run` が `Handler.BuildCache` を同期で1回呼んで終わる)、終わるまで待つ。`plugin_name` は manifest.json の `name`(=フォルダ名)の完全一致で、無い名前は何も起動せず利用可能な名前を stderr に列挙して exit 1。**利用者の実在確認(account.db)はプラグインの走査より前に置く** —— 走査(`PluginManager.DiscoverPlugins`)は `plugins/{user}/` を MkdirAll するので、打ち間違えた user_id のたびにディレクトリが増える。実行ファイルの解決は `reps.PluginExecutablePath`(Windows の `.exe` 付与)を常駐起動と共有し、CLI 側で再実装しない。**成否は子プロセスの stdout 全体(前後の空白を除く)が `built` か `no_cache` に完全一致するときだけ成功**: exit 0 で stdout が空なのは「フラグを無視して stdio ループに入り stdin EOF で終わった」旧 SDK・古い独自実装のバイナリ、exit 2 は Go の `flag` が未知フラグで落ちた旧 SDK のバイナリで、どちらも失敗として報告する(静かに成功にしない)。SDK を使わないプラグインは自前で結果行を返す必要がある(`gkill_plugin_uguisu` は 2026-09-16 から `no_cache` を返す。配布前の古いバイナリが混ざっている間はその1本だけ失敗行が出る)。子の stdin は繋がない(nil。旧バイナリが EOF で自然に終わりハングしない)、stderr は素通し、stdout だけ捕捉、タイムアウト無し(fitbit の初回構築は実測で数分かかり環境により数倍ぶれる)、プラグインは**逐次**(並列は stderr が混ざり、fitbit の並列パーサが数 GB の ZIP を同時に開く)、1本失敗しても残りを続けて `errors.Join`。`BuildCache` が nil のプラグイン(雛形の `gkill_example`)は `no_cache` で成功扱い(`all` で毎回赤くしない)。**承知の上の制約**: サーバ稼働中に同じプラグインの常駐ビルダが走っていれば同じ WAL の cache.db に2プロセスが書く(`busy_timeout` 6秒で破損はしないが、衝突した側はその周回だけ失敗して次回やり直す。CLI なら exit 1 → 再実行)。サーバ側の型別索引は次の `update_cache`(か TTL 5分)まで新しい cache.db を読まないので、同期スクリプトでは `generate_plugin_cache all ` を `update_cache` の**前**に置く。経緯と却下案(HTTP API 追加/stdio に build_cache コマンド/ポーリング/並列/タイムアウト)は [ADR-1003](../../../documents/adr/1003-generate-plugin-cache-runs-plugin-standalone.md)。守るテストは `main/common/generate_plugin_cache_test.go`(偽プラグインをテストバイナリ自身で起動)、`plugin/sdk/build_cache_test.go`(同梱7本の `BuildCache` 配線をソース走査で固定)。 + +### CLI Flags + +| Flag | Default | Description | +|---|---|---| +| `--gkill_home_dir` | `$HOME/gkill` | Home directory for all data/config/logs | +| `--address` | (none) | Override listen address (e.g. `:19999`, `127.0.0.1:19999`). Runtime-only override — the config DB `ADDRESS` value is left untouched, so the settings UI may show a different address than the one actually bound. Resolved via `gkill_options.ResolveServerAddress` / `ServerAddressPortSuffix` | +| `--disable_tls` | `false` | Disable TLS enforcement | +| `--cache_in_memory` | `true` | Cache repository data in memory | +| `--cache_reps_local` | `false` | Cache repositories locally | +| `--goroutine_pool` | `runtime.NumCPU()` | Goroutine pool size | +| `--cache_clear_count_limit` | `3000` | Cache item limit before clearing | +| `--cache_update_duration` | `1m` | Cache refresh interval | +| `--pre_load_users` | (none) | Pre-load specified users' repositories on startup | +| `--log` | (none) | Log level: `none`, `error`, `warn`, `info`, `access`, `debug`, `trace`, `trace_sql`。プラグインの子プロセスへも環境変数 `GKILL_LOG_LEVEL` で継がれる | +| `--log_rotate_max_bytes` | `33554432` (32 MiB) | 1ログファイルの上限。0以下は回転を無効化する | +| `--log_rotate_keep` | `5` | 保持する旧世代数。0以下は旧ファイルを退避せず破棄する | + +- `gkill/main/common/` — Shared CLI commands, server initialization, logging +- `gkill/main/common/gkill_options/` — CLI flag definitions and directory structure + +**CLIサブコマンドは `RunE` + `SilenceUsage/SilenceErrors`**(指摘 M-8)。失敗で exit 1(main の `log.Fatal` が唯一のエラー出力)。ユーザごとのループは `errors.Join` で集約し、途中失敗でも成功分の結果(reset_password の URL 等)はその場で即出力してから続行する(`os.Exit` を足すと defer のセッション後始末が飛ぶので RunE 経由で返す)。**互換注意**: リポジトリ外の運用スクリプト(同期・配置)が update_cache の失敗を初めて exit code で観測する。`add_tag` は長時間実行向けに `issueLocalSession` の `refresh` でセッション期限を延長する(ルールごとの収集前と、付与の500件ごと。TTL は5分)。ルールの書式誤りは RunE のエラーに加えて stderr にも出す——`log.Fatal` はログファイルにしか書かず、端末には usage と exit 1 しか見えないため。 + +**ログは統合ファイルとレベル別ファイルへ同時に出し、両方へ同じ回転設定を適用する。** +既定は32 MiB・5世代で、現在のファイルを `.1`、古いものを `.2` 以降へ送る。 +Windows は開いたファイルを rename できないため、回転時の Close → rename → reopen の順序を変えないこと。 +回転失敗は本体を止めず書き込みを続ける。**プラグインの子プロセスへはレベルと回転設定を環境変数で継ぐ**(`GKILL_LOG_LEVEL` / `GKILL_LOG_ROTATE_MAX_BYTES` / `GKILL_LOG_ROTATE_KEEP`。`gkill_log.Init()` の `ExportEnvForChildProcesses` が書き出し、SDK の `sdk.Run` が `logs/gkill_plugin_*.log` を同じ語彙・同じ回転で開く。`GKILL_HOME` と同じ環境継承なので起動側の `cmd.Env` は触らない。[ADR-0313](../../../documents/adr/0313-plugin-logs-through-gkill-log.md))。`gkill_log_test.go` が統合・分割の二重出力、静的フィールド、 +Windowsでの世代回転、無効化時の非回転を固定する。 + +**`generate_thumb_cache` / `generate_video_cache` は1件ずつ stat しない。** 生成対象を親ディレクトリごとに `os.ReadDir` して、その列挙結果からキャッシュ名に要るファイルサイズを取る。キャッシュ側もrepごとに1回列挙して名前の集合と突き合わせる(生成済みと `.failed` の印を同じ列挙から2集合で取り、印のある対象は goroutine へ投入しない)。**「キャッシュ名の接頭辞(パスのSHA1)だけ見てサイズを無視する」近似を入れてはいけない** —— 差し替わったファイルのサムネイルが古いまま出続け、しかも画面で見ているぶんには正しいので原因に辿り着けない([ADR-0212](../../../documents/adr/0212-derived-cache-scan-lists-directories.md))。ファイル単位の並列化に `threads.Go` を使わないこと(rep単位のファンアウトが既にスロットを持っているので入れ子になる。[ADR-0206](../../../documents/adr/0206-no-nested-threads-go.md))。 + +**互換動画へ変換するのは、原本のまま再生できると言い切れないものだけ。** 判定は `videoNeedsCompat`(コンテナ×映像コーデック×画素形式×プロファイル×音声)で、**分からないもの・probe失敗はすべて変換する側に倒す**。クライアントには再生失敗の受け皿が無く、再生できなければエラーも出ずに無音の黒枠になる。緩める向きの変更をするなら受け皿を先に作ること。変換に失敗したら `<キャッシュ名>.failed` を残して次回以降やり直さない(**ctx が切れているときは印を残さない** —— ブラウザが待ちきれずに切っただけのものを恒久的な失敗として焼くと、変換できる動画が二度と変換されなくなる)。印を消すのは `clear_cache video <利用者ID>`([ADR-0213](../../../documents/adr/0213-transcode-only-what-the-browser-cannot-play.md))。 + +**rep 定義のパターン展開は対象ツリーを歩かない。** `GetRepositories` は `**` を含まないパターンを親ディレクトリ1回の列挙で展開する([ADR-0211](../../../documents/adr/0211-expand-rep-patterns-without-walking.md))。 + +**`LoadIDFRepOnly` のときはプラグインを探索しない。** 探索は1プラグインにつき1サブプロセスを起動するので、IDF のrepしか使わない CLI では丸ごと無駄になる。**この分岐は「プラグインのアダプタが `IDFKyouReps` へ入らない」ことに依存している** —— アダプタの登録先を増やすときは必ずここも見ること。破ると、そのプラグインぶんのサムネイルと互換動画がエラーも警告も出ないまま作られなくなる([ADR-0307](../../../documents/adr/0307-skip-plugin-discovery-when-only-idf-is-needed.md))。 + +## 関連スキル + +- [gkill-go-backend](../gkill-go-backend/SKILL.md) — 派生キャッシュの構造・rep名で利用者を分離できない理由 +- [gkill-build-test](../gkill-build-test/SKILL.md) — ビルドと E2E の実行手順 + +## 詳しい設計と却下案(ADR) + +- [ADR-0705 派生キャッシュはユーザー別ディレクトリ](../../../documents/adr/0705-per-user-derived-cache-dir.md) +- [ADR-0211 パターン展開は木を歩かない](../../../documents/adr/0211-expand-rep-patterns-without-walking.md) +- [ADR-0212 派生キャッシュの走査はディレクトリ列挙](../../../documents/adr/0212-derived-cache-scan-lists-directories.md) +- [ADR-0213 変換するのは再生できないものだけ](../../../documents/adr/0213-transcode-only-what-the-browser-cannot-play.md) +- [ADR-0307 IDFだけ要る経路ではプラグインを探索しない](../../../documents/adr/0307-skip-plugin-discovery-when-only-idf-is-needed.md) diff --git a/.claude/skills/gkill-client-columns/SKILL.md b/.claude/skills/gkill-client-columns/SKILL.md new file mode 100644 index 000000000..8eaee994d --- /dev/null +++ b/.claude/skills/gkill-client-columns/SKILL.md @@ -0,0 +1,126 @@ +--- +name: gkill-client-columns +description: "rykv / mi / dashboard の列と検索の不変条件。列の同一性 query_id、初期化順序、検索を期間の窓で刻まない、記録追加の局所挿入(kyou-local-insert.ts)、その場で作ったタグを列条件へ足す、画面間の変更伝播(kyou-change-bus.ts)、Mi の板名の並び順、ツリーの入れ物除外を扱う。rykv と mi はコピー由来の対称実装なので修正は必ず両方へ。use-rykv-view.ts・use-mi-view.ts・use-dashboard-page.ts・use-kyou-list-view.ts・kyou-local-insert.ts・use-registered-kyou-local-insert.ts・use-registered-tag-column-filter.ts・kyou-change-bus.ts・mi-board-names.ts・use-foldable-struct.ts を編集するとき必読。「検索結果が別の列に出る」「追加した記録が一覧に出ない・直後に消える」「画面が読み込み中のまま固まる」の調査でも必読。" +--- + +# rykv / mi / dashboard の列×検索の不変条件 + +対象: `src/client/classes/use-rykv-view.ts` / `use-mi-view.ts`(**対称実装。修正は必ず両方へ**)/ `use-dashboard-page.ts` / `use-kyou-list-view.ts` / `kyou-local-insert.ts` / `use-registered-kyou-local-insert.ts` / `use-registered-tag-column-filter.ts` / `kyou-change-bus.ts` / `mi-board-names.ts` / `use-foldable-struct.ts` / サイドバーの各クエリエディタ + +**このファイルは全文が、実際に起きた事故の再発防止である。該当作業では飛ばさずに読むこと。** +多くは「例外もエラーも出さずに静かに壊れる」種類で、破っても目の前ではエラーにならない。 + +**rykv/mi の「列×検索」不変条件**(2026-08-09 の誤配送根絶で確立。崩すと「検索結果が別の列に出る」が再発する): 列の同一性は `query_id`(**列の誕生時のみ採番、以後不変**)。`:key`・DOM id・テンプレート ref 逆引き(`get_kyou_list_view`)・`abort_controllers` / `search_seqs`(Map)のキーは全部これ。列リロード・画像トグル・サイドバー clear 系で**再採番してはいけない**(列が remount され、検索結果の帰属も切れる)。検索は列ごとの世代番号 `search_seqs` で「最後の検索だけが書き戻せる」。`focused_query` を更新してよいのはフォーカス列の検索だけ(無条件更新するとサイドバーが別列条件に乗っ取られ query_id 重複→誤配送になる)。サイドバー編集の宛先は `focused_column_index` ではなく `querys.findIndex(query_id)` で解決する。検索ボタンはサイドバーの `generate_query(列のquery_id)` で「今見えている条件」から検索する(`rykv_hot_reload` OFF 時は編集が列に保存されないため。なお既定は **ON**、サーバ既定値 true)。サイドバーの `emits_current_query` は**再生成結果が同期済みクエリと同値なら emit しない**(フォーカス切替で子ビューのprops同期の残響が機械的に届くのを検索にしないための値比較ガード。これが破れると「検索中の列をクリック→飛行中の検索がabortされ最初からやり直し」が再発する。`generate_query` は同期済みクエリに対して恒等であること —— とくに `include_*_mi` をtrue固定でドリフトさせない。`rykv-sidebar-mechanical-emission.test.ts` が守る)。`use-rykv-view.ts` と `use-mi-view.ts` はコピー由来の対称実装なので**修正は必ず両方へ**(`rykv-view-search-routing.test.ts` / `mi-view-search-routing.test.ts` が対で守る)。フォーカス切替時の検索抑止は**コールバック式 `run_with_sidebar_search_suppressed(fn)` だけ**を使う(`skip=true → fn()でリアクティブ書き込み → nextTick(解除)` の順が本質。書き込みより先に nextTick を登録すると、Vue の nextTick が resolvedPromise へ直結して解除がウォッチャ flush より先に走り、抑止が一度も効かない — 2026-08-10 のタブフリーズ回帰の正体)。サイドバーの子クエリビュー(Rep/Tag/TimeIs/Map/Calendar)は **props 同期では emit しない**:TimeIs は同期経路に `disable_emits=true` + `pre_uncheck_all=true`(累積させない)、Map は同期時 emit なし + radius ウォッチャの値ガード、Calendar は `clicked_date` の同値エコーガード(`sidebar-child-query-sync-emission.test.ts` が守る)。`use-kyou-list-view.ts` の `scroll_to` は世代カウンタ + 上限(2秒)つきで、打ち切り時は scrollTop を直接代入する(無限リトライに戻すと 0 件列への 50ms 周期の強制レイアウトが増殖する)。 誤配送が起きた経緯と却下案は [ADR-0405](../../../documents/adr/0405-column-identity-query-id.md)。 + +**rykv/mi/dashboard の初期化順序**(2026-08-17 に「初期取得の完了まで全画面を隠す」段階を外して確立)。順序は **列の骨組みを確定 → 可視化 → 検索**で、`inited` / `is_loading` は初期検索の完了に依存しない。守るべき約束: +- **`init()` の起動条件は `props.application_config.is_loaded` の watch**。サイドバーの `@inited` へ戻してはいけない ―― あれは「その節が描けた」の集約でしかなく、節を1つ画面から外すだけで画面ごとスピナーで固まる(経緯は ADR-0407) +- **サイドバーの `inited` 集約は無い**が、`inited_*_for_query_sidebar` の各フラグは**残す**。子へ `:inited` prop として降り、子が「初回同期か再同期か」を判定している(消すと props 同期のたびにチェックが列をまたいで累積する) +- **`init()` は hot reload の ON/OFF で分岐せず、列の骨組み(`querys` / `querys_backup` / `match_kyous_list`)を検索より前に確定させる**。1本ずつ足すと「列が確定した瞬間」が定義できず、復元中にユーザが列を足したとき `search(i, ...)` の固定 index と衝突する。`querys_backup` を先に埋めるのは、機械的な残響が `search()` の `deep_equals` 早期returnで確実に落ちるようにするため +- **`init()` で `skip_search_this_tick` を立てっぱなしにしない。** あれは「1tick分の残響を捨てる」短命フラグで、初期化全体の門番に流用すると機械的な emit が1つ届いただけで `onSidebarUpdatedQuery` が消費し、複数列のとき1列目の完了で抑止が途中で解ける。抑止は `run_with_sidebar_search_suppressed` だけを使う +- **復元の検索は `preserve_scroll=true`** で呼ぶ。`inited` が早期に立つので、落とすと `search()` が `scroll_to(0)` を撃って保存済みの復元先を潰す +- **`onSidebarUpdatedQuery` に「初期化が終わるまで捨てる」早期returnを置かない。** 初期検索の飛行中でもユーザの編集は通す。同じ `query_id` を共有するので `abort_controllers` が復元を中断し、`search_seqs` の世代照合が遅れて届いた復元結果を捨てる(=ユーザが勝つ) +- **`onColumnScrollList` は検索中の列の通知を捨てる。** リストを空にした副作用のスクロール通知を取り込むと `preserve_scroll` の復元先が0で潰れ、保存位置にも焼き付く +- **E2E の準備完了信号はルート要素の `data-gkill-view-ready`**(`is_view_ready` = `inited && !is_restoring_columns && running_search_count === 0`)。全画面オーバーレイが初期検索を待たなくなったので、`.v-overlay .v-progress-circular` の `.first()` は列スピナーを掴み「出る前に `toBeHidden` が通る」窓ができる。`crud-helpers.ts` の `waitForColumnViewReady` がこの属性を待つ。**真偽値をそのまま bind してはいけない**(Vue は false のとき属性ごと消すので「属性の有無」で判定するセレクタが壊れる) +- **①(ApplicationConfig 待ち)は残す。** 未ロードで既定クエリを作ると既定期間と強制非表示タグが黙って落ちる(`generate_default_query_for_rykv` が設定を読むため。初回起動のユーザだけが踏む) +- **設定取得の失敗は永久スピナーにしない。** `application_config_load_failed` を立ててオーバーレイの中身をエラー+再試行ボタンへ差し替える(文言は既存の `FAILED_GET_APPLICATION_CONFIG_MESSAGE` / `RELOAD_TITLE`) +- dashboard は列を持たないが同じ方針。初回ロードは日付変更時と同じ `fetch_for_date()` に寄せ、パネル単位のローディングで進行を見せる +- 守るテスト: `rykv-view-initial-load.test.ts` / `mi-view-initial-load.test.ts`(対)/ `column-view-init-source-scan.test.ts`(ソース走査)/ `dashboard-page-reload.test.ts` の「ApplicationConfig 取得の失敗」節 / `e2e/column-view-initial-load.spec.ts` 却下案と、@inited が偶然機能していた理由(→ ADR-0407)は [ADR-0406](../../../documents/adr/0406-visualize-before-initial-search.md)。 + +**検索を期間の窓へ刻んで複数回 `get_kyous` を投げてはいけない**(2026-08-18 に入れて 08-19 に撤去)。 +総時間が伸び、スピナーが回り続けているように見え、**境界のレコードがどちらの窓にも入らず静かに落ちる** +(SQL は `.Unix()` の秒切り捨て、`passesPeriodFilter` はナノ秒で、精度が違う)。 +狙いをどう外したかの内訳は [ADR-0401](../../../documents/adr/0401-do-not-split-search-window-in-client.md)。 + +ピークメモリのために分割するなら、固定費を1回で済ませられる**サーバの中**でやること。 +**列に部分的な結果を出さないこと** ―― 件数カレンダー・Dnote・Ryuu・フッタの件数はどれも +「列が全件を持っている」前提で書かれていて、部分状態ではエラーも出さずに間違える +(Ryuu は列の配列をサーバ検索の代わりに使うので、間違った「近くの記録」を返す)。 +フッタの件数は `has_loaded` が立つまで出さない。守るテストは +`rykv-view-search-routing.test.ts` の「検索は期間が広くても1回で引く」「検索中の列に部分的な結果を出さない」。 + +**記録の追加は再検索せず、その1件を列へ差し込む**(2026-08-15)。追加系ビューは `registered_kyou` だけを出し、`requested_reload_list` は「サーバが Kyou を返さなかった」ときのフォールバックに退いた。受け口は `use-registered-kyou-local-insert.ts` 1つで、rykv / mi / dashboard がこれを使う。判定と整列は純関数 `classes/kyou-local-insert.ts` にあり、意味論は `server/gkill/api/find_filter.go` の写し。守るべき約束: +- **`/api/get_kyou` は FindQuery を受けない**ので、「その列の条件に一致するか」はクライアントで判定する。判定できるのは rep / タグ(完全一致・大小無視、`"no tags"` 番兵つき)/ カレンダー(両端含む)/ 時間帯 / mi の板名(大小**区別**)・完了状態・`include_*_mi`。判定できないのは本文検索・TimeIs・地図・playing・画像のみ・`rep_types`(rep_name→rep_type の写像がクライアントに無い)で、**これらを使う列だけ従来どおり再検索する**。判定を足すときは「判定できないものを判定できると誤って宣言しない」ことがすべて —— 誤ると例外もエラーも出ずに黙って一致しない行が出る +- 並び順は非mi=`RelatedTime` 降順(**`.Unix()` 相当に秒へ切り捨ててから**比較。ミリ秒のままだと同一秒の隣接行で位置がずれる)、mi=ソート基準の時刻の昇順で**未設定は末尾**。mi の「未設定」は `typed_mi` ではなく `data_type` の接尾辞で判定する(一覧の既存行は `typed_mi` が未ロードなので、`typed_mi` を要求する比較子は既存行に対して動かない) +- 差し込みは **in-place `splice`**。`focused_kyous_list` は `match_kyous_list[focused_column_index]` へのエイリアスなので、参照ごと差し替えると件数カレンダーや Dnote と縁が切れる(数十万件のコピーも避けられる)。ただし Dnote は命令的 reload なので配列を触るだけでは追随せず、明示的に呼び直すこと +- `add_*` の応答は **hydrate を通っていない生 JSON**(`related_time` が文字列、`clone()` も無い)。受け口で必ず実体化する +- KFTL は送信全体を tx で包むが、**tx 中の `add_*` は `added_kyou` を返せない**。リクエストクラスが id だけ積み(`get_result_kyou_ids()`)、`commit_tx` の**あと**に `get_kyou` で引いてから emit する(引き直しは `gkill-tx.ts` の `fetch_committed_kyou`。2026-09-15 から追加/編集/削除画面も同じ tx の流れ、ADR-0410)。「終了」系は既存 TimeIs の更新なので `updated_kyou` +- 守るテスト: `kyou-local-insert.test.ts` / `kyou-local-insert-mi-parity.test.ts`(Go の `find_filter_mi_test.go` と対)/ `registered-kyou-local-insert.test.ts`(rykv・mi 両方でパラメタライズ)/ `kftl-submit-emits.test.ts` 判定できない条件の一覧と却下案は [ADR-0402](../../../documents/adr/0402-insert-registered-kyou-locally.md)。 + +**利用者がその場で作ったタグは、開いている列の検索条件へ足す**(2026-08-19)。 +直している不具合は **「タグを付けて追加した記録が、追加した直後に一覧から消える」**。 +根本原因は既定クエリがタグ宇宙を列挙で物質化して凍ること(詳細は ADR-0404)。タグが1つも無い時期に作られた列は +`tags = ["no tags"]` だけになり、**タグの付いた記録が1件も通らない**(サーバ検索と局所挿入の両方で落ち、 +**エラーも警告も出ない**)。実装は `classes/use-registered-tag-column-filter.ts` の1つで、 +rykv / mi が同じものを使う。守るべき約束: +- **使ってよいのは「そのタグがタグツリーに無かった」という決定可能な事実だけ。** 未知だった=利用者がついさっき + 作った=「意図的にチェックを外した」ことは原理的にありえない。逆に**既知のタグは触らない**(「保存後に増えたタグ」と + 「利用者が外したタグ」は現状の保存データでは区別できない)。推測しないので新しい永続フィールドは要らない +- **判定は `emits('registered_tag', …)` より前に、同期で行う。** emit 先(`use-rykv-page.ts` / `use-mi-page.ts`)の + `check_tag_update` がタグツリーへ足したあとでは、「ついさっき作った」ことを二度と知れない。 + 順序は `column-view-init-source-scan.test.ts` がソース走査で固定する +- **`tags_and === true` の列には足してはいけない。** AND は `query.tags.every(...)` なので `["no tags", "新タグ"]` の積は + 必ず空になる(新タグ付きの記録は `has_no_tags === false` で落ち、タグ無しの記録は `has_tag_name(新タグ)` で落ちる)。 + 足しても目当ての記録は救えず、ほかの記録を巻き込んで**列を丸ごと消す**。`tags === null` の列も触らない(元から通る) +- **`querys` と `querys_backup` を同じ tick で揃え、`run_with_sidebar_search_suppressed` で包む。** 控えがずれると + サイドバーの機械的な残響が `search()` の `deep_equals` 早期returnで落ちなくなる +- **localStorage へは自分で書かない。** `search()` が必ず `set_saved_*` を通るので、引き直しを通せば揃う。 + 自前で書くと「条件だけ変わって引き直さない」経路が生まれ、**次回起動時だけ列が変わる**という最悪の非対称になる +- **1tick ぶん溜めてから1回だけ流す。** `add_tags_to_target` はタグを1件ずつ登録して1件ずつ emit するので + (`kyou-tags.ts`)、まとめないと新タグ3つで列あたり3本 `search()` が走り2本が abort されるだけになる +- **ポート(rudbeckia)へも配る。** タグが検索条件に効くようになったので `kyou-change-bus.ts` の + 「タグは配る必要が無い」という前提が崩れた。publish するのは**未知と判定した発生元だけ**で、 + 受け手は既知判定を**やり直さない**(届く頃にはツリーに載っているので必ず取りこぼす)。`apply_registered_tag` は + optional(dashboard / playing は列のタグ絞り込みを持たない)。受け手では `reload_list` の畳み込みより**先**に適用する + (逆だと旧条件のまま全件取り直す) +- **今回の修正では直らないもの**(区別できる情報が保存データに無い): 他端末で作られたタグ、過去に作ったタグ、 + プラグインKyouのタグ。本命の対処(既定クエリの物質化をやめる)が別件である理由は ADR-0404 +- 守るテスト: `registered-tag-column-filter.test.ts` / `new-tag-column-search.test.ts`(rykv・mi 両方)/ + `column-view-init-source-scan.test.ts` / `kyou-change-bus.test.ts` / + `e2e/regression-fixes.spec.ts` の「新規タグを付けて追加した記録が、画面遷移せずに一覧へ残る」 + (**画面遷移しないことが本質** ―― 遷移すると既定クエリを作り直すのでこの不具合をすり抜ける) 既定クエリの物質化という根本原因と、この修正で直らない範囲は [ADR-0404](../../../documents/adr/0404-add-unknown-tag-to-column-filter.md)。 + +**画面間の変更伝播(`classes/kyou-change-bus.ts`)** +- **購読側へ渡してよいのは emit を含まない適用関数だけ。** 中継束(`crudRelayHandlers`)を渡すと適用のたびに `emits(...)` が走ってホストが再 publish し、通知が無限に往復する。そのために `onDeletedKyou` は `apply_deleted_kyou`(適用のみ)と `onDeletedKyou`(適用+emit)に割ってある +- **通知は seq 付きの追記ログ。** スカラー(最新の1件)だと同じ tick に複数件起きたとき最後の1件しか見えず、残りが黙って落ちる(KFTLの複数行保存が典型) +- **`KyouChangeBus.last_seq` は Ref ではなくメソッド。** Ref をそのまま公開すると、チャネルのオブジェクトが `reactive()` に包まれたとき Vue が自動アンラップして `.value` が `undefined` になり、**伝播が黙って効かなくなる**(テストのハーネスが実際に踏んだ) +- **バスは props で配る。`provide`/`inject` にしない。** 既存のテストは `useRykvView({props, emits})` をコンポーネントインスタンスの外から素で呼ぶので、`inject()` は警告を出して既定値へ落ちる = テストでは伝播が効かないのに緑になる +- **`new_reload_batch()` は発生元のビューが採番**し、自分のローカル適用と通知の両方に同じ値を使う。ホスト側で採番すると `kyou-reload.ts:226` の合流条件(`started_at >= requested_at`)に間に合わず、同じ Kyou を画面の枚数ぶん取りに行く +- **自分が出した通知は受けない**(`origin_id`)。受けると発生元が二重適用する。追加は `insert_kyou_sorted` の id 重複判定で救われるが、削除と引き直しは救われない +- **`reload_list` は1ドレイン1回に畳む。** 畳まないと1回の KFTL 保存で開いている画面ぶんの全件検索が走る +- **後から開いたウィンドウは購読開始時点の最大 seq から始める。** 0 から始めると過去の変更を全部再生する +- **`requested_reload_kyou` を握り潰さない。** タグ・テキスト・通知の変更はこれしか出さないので、配らないと付随データの変更が他の画面に一切届かない +- **`requested_update_check_kyous` は配らない。** 列ごとの選択状態であり、rykv/mi では未実装(throw する) +- ポートのFABから追加した記録も配る(発生元 `rudbeckia-page`)。配らないと「+から足したのに並べている一覧に出ない」になる +- 守るテスト: `e2e/rudbeckia.spec.ts` / `kyou-change-bus.test.ts` / `kyou-change-propagation.test.ts` / `dashboard-view-reload.test.ts` / `dashboard-page-reload.test.ts` / `column-view-init-source-scan.test.ts` / `kftl-dialog-host.test.ts` / `rykv・mi-view-initial-load.test.ts`(対) + +**Mi の板名の並び順と板ツリーのクリック**(2026-08-16)。純関数は `classes/mi-board-names.ts`、守るテストは `mi-board-names.test.ts` / `mi-board-query.test.ts`。 +- **板名プルダウンの並び順は ApplicationConfig の板ツリーが正。** `get_mi_board_list` は Go の map を回して集めているので**順序を保証しない**(`dao/reps/mi_repositories.go` / `mi_re_kyou_repositories.go`。interface の doc コメントにも明記)。素で `:items` に渡すと読み込むたびに並びが入れ替わるので、5箇所の `v-select`(add/edit Mi・add/edit MiReKyou・設定の既定の板)はどれも `sort_mi_board_names_by_config_order()` を通す +- 並べ替えは **`computed`** で表現する。`use-edit-mi-view.ts` / `use-mi-re-kyou-schedule-fields.ts` には `application_config` の watch が無く、ある側の watch も**参照同一性**しか見ないので(設定ダイアログでの並べ替えのような deep な変更では発火しない)、代入時に1回ソートすると板を並べ替えても追随しない。API の生の一覧は `mi_board_names_source` に持ち、`update_board_name()` の push 先もそちら +- 設定画面だけは並べ替えの基準が **`cloned_application_config`**。子の板構成ダイアログの「適用」は clone にだけ書くので、props を見ると並べ替え直後に既定板のプルダウンだけ古い順で取り残される +- **設定にしか無い名前を候補へ足さない。** とくに「すべて」は `append_all_mi_board()` が入れる仮想ノードで実在の板ではないので、Mi/MiReKyou の板名候補に混ぜてはいけない +- **サイドバーの板ツリーのルート行では何も開かない**(`resolve_clicked_mi_board_names()`)。ルートは `folder_name=''` で描いていて見た目は空白だが `.tree_item { min-width: 200px }` のクリック領域が残っており、踏むと `click_group_by_user()` が**自分自身の key(`__root__`)を含めて**サブツリー全部の key を上げてくる。素通しすると `__root__` という名前の列 + 板の数だけの列が一度に開く。判定は「フォルダ扱いのノード(`is_dir` か `board_name` が空)の key が混ざっていたらグループ行のクリック → 何も開かない」。**ツリーに無い key は開く** ―― 作った直後で `append_not_found_mi_boards()` がまだ拾えていないだけかもしれず、落とすと「板をクリックしても何も起きない」(エラーも出ない)になる +- 共有の `use-foldable-struct.ts` の `click_group_by_user` は**触らない**。自分の key を含める挙動は tag/rep/timeis のチェックボックス経路も使っており、そちらは「フォルダ行クリックで配下を一括チェック」が意図された機能(`foldable-struct-check.test.ts` が等価性を固定している)。直すのは読み取り側(下記) + +**ツリーの「入れ物」を検索条件へ混ぜない**(2026-08-16)。判定は `pages/views/foldable-struct-model.ts` の **`is_struct_container_node(struct)`**(`is_dir` またはキーが `__root__`)の1つだけ。守るテストは `foldable-struct-selected-items.test.ts` / `collect-inited-tag-names.test.ts`。 +- ルートとフォルダは並べ替えのための器でしかないのに、`key` にはフォルダ名が(ルートは `__root__` が)そのまま入る。チェックの入ったノードの key は**そのまま検索条件(`tags` / `reps` / `devices_in_sidebar` / `rep_types_in_sidebar` / `timeis_tags`)として流れる**ので、入れ物を混ぜると実在しない名前の条件が紛れ込む。**OR検索では無害だが AND検索(`tags_and` 等)では必ず0件になる**ため、症状が出るときだけ出る +- ルート行は `folder_name=''` の空白帯(`.tree_item { min-width: 200px }`)としてクリックでき、踏むと `click_group_by_user` が `__root__` を載せてくる。**誤クリックだけで条件に入る** +- 除外する場所は4つ: `use-foldable-struct.ts` の `get_selected_items()`(対話経路。tag/rep/timeis の3コンポーザブルが**唯一この関数から**条件を読む)、`collect-inited-tag-names.ts`、`find-kyou-query.ts` の `device_name_walk` / `rep_type_name_walk`(既定クエリ経路)、同 `apply_rep_summary_to_detaul` の `collect_checked_keys`。**最後のものは `indeterminate=false` のクリアが入れ物にも要るので、walk は打ち切らず集合へ入れないだけにする** +- **フォルダ名と同名のタグが実在しても条件は落ちない。** `apply_check_state_to_struct` が key 一致でツリー全体を走査して葉のほうにもチェックを入れるため。実運用の `TAG_STRUCT` ではフォルダの大半が同名タグを持たない純粋な入れ物で、しかもその一部は `check_when_inited=true` で保存されている ―― つまり誤クリックしなくても既定の検索条件に幽霊タグが入りうる +- 入れ物かどうかを `is_dir` だけで見ないこと。保存済みJSONのルートに `is_dir` が無い実例があり(`gkill-api.ts` は `children` が falsy のときしか立てない)、そのときルートは**葉として描かれて `__root__` がそのまま条件に入る** +- 入れ物のモデル `is_checked` は**表示の真偽にも使わない**(2026-09-13)。グループ行のチェックボックス表示は `use-foldable-struct.ts` の `update_check()` が**配下の葉だけ**から導出する(全葉チェック→チェック、一部または indeterminate な葉→indeterminate、葉が0個→未チェック)。フォルダの `is_checked` が true になるのはフォルダ行を直接クリックした経路だけで、葉を1つずつチェックした経路や、クエリからの再同期(`get_selected_items()` は入れ物を返さないので `pre_uncheck_all` でフォルダは false に戻る)では false のまま。それを数えると、フォルダ自身はチェック表示なのにその親だけが**「子が全部チェック済みなのに indeterminate」**になる。守るテストは `foldable-struct-update-check.test.ts` + +## 関連スキル + +- [gkill-client-foundation](../gkill-client-foundation/SKILL.md) — 必ず併読(中継束・Kyou の再読込・updated_kyou) +- [gkill-client-tags](../gkill-client-tags/SKILL.md) — `add_tag` → `registered_kyou` の順序(局所挿入の前提) +- [gkill-client-rudbeckia](../gkill-client-rudbeckia/SKILL.md) — 複数枚の保存キー分離・ウィンドウホスト +- [gkill-find-query](../gkill-find-query/SKILL.md) — 局所挿入の判定は `find_filter.go` の意味論の写し + +## 詳しい設計と却下案(ADR) + +- [ADR-0401 検索を期間の窓へ刻まない](../../../documents/adr/0401-do-not-split-search-window-in-client.md) +- [ADR-0402 追加は局所挿入](../../../documents/adr/0402-insert-registered-kyou-locally.md) +- [ADR-0404 未知タグを列条件へ足す](../../../documents/adr/0404-add-unknown-tag-to-column-filter.md) +- [ADR-0405 列の同一性は query_id](../../../documents/adr/0405-column-identity-query-id.md) +- [ADR-0406 可視化を初期検索より先に](../../../documents/adr/0406-visualize-before-initial-search.md) +- [ADR-0407 init は ApplicationConfig ロード後](../../../documents/adr/0407-init-on-application-config-loaded.md) diff --git a/.claude/skills/gkill-client-foundation/SKILL.md b/.claude/skills/gkill-client-foundation/SKILL.md new file mode 100644 index 000000000..4cd07c591 --- /dev/null +++ b/.claude/skills/gkill-client-foundation/SKILL.md @@ -0,0 +1,130 @@ +--- +name: gkill-client-foundation +description: "gkill フロントエンド(src/client/)全域の約束。他の gkill-client-* スキルに該当するかに関わらず src/client を触るなら読む。コンポーザブル規約と CRUD 中継束(kyou-view-relay.ts)、Kyou の再読込手順(kyou-reload.ts)、タグ変更は updated_kyou を出さない、コンテキストメニュー位置・チェックツリー単一パス・端末種別・自動フォーカス・行高さ・HTML リテラル禁止・設定の適用、Web Share Target の二重保存対策、check_auth のログイン画面ガードを扱う。src/client/ の .vue / classes/*.ts を編集・新規作成するとき必読。「タグを足しても表示が変わらない」「Android 共有が2件保存される」の調査でも必読。" +--- + +# クライアント全域の約束(src/client/) + +対象: `src/client/**` すべて。**他の gkill-client-* スキルに該当する場合も、このファイルの約束はすべて効く。** + +**このファイルは全文が、実際に起きた事故の再発防止である。該当作業では飛ばさずに読むこと。** +多くは「例外もエラーも出さずに静かに壊れる」種類で、破っても目の前ではエラーにならない。 + +### Frontend (Vue 3 + TypeScript) — `src/client/` + +Stack: Vue 3 + Vuetify 4 + Vue Router 5 + vue-i18n 11 + Vite 8 + TypeScript 6 + PWA (vite-plugin-pwa + Workbox) + +- `router/index.ts` — 13 page routes (login, kftl, mi, rykv, kyou, mkfl, playing, saihate, dashboard, rudbeckia, set_new_password, register_first_account, shared_page) + 2 redirect-only routes(`/regist_first_account` → `/register_first_account`、`/shared_mi` → `/shared_page`。どちらも query を引き継ぐ)。**旧パスの吸収は redirect でやること** ―― コンポーネントの setup から `router.replace` すると、`` から抜け出せないが、**遷移先そのものは値として実行されうる**。動的登録(RFC 7591)は認証を要求しないので、`javascript:` を登録できると「登録する → 被害者にログインさせる」の2手で gkill の生成元にスクリプトが入り、認可コードも持ち去られる。判定は `isSafeRedirectURI` 1箇所に置き、**登録時(`HandleRegister`)と認可要求時(`validateAuthorizeParams`)の両方で掛ける**。拒むのは `javascript` / `data` / `vbscript` / `blob` / `about` / `filesystem`(大小無視)で、ネイティブアプリのカスタム scheme は通す。**`url.Parse` の戻り値を捨てないこと**(捨てると解析失敗で nil 参照になり、プロセスごと落ちる)。http / https だけの許可リストは否決([ADR-0633](../../../documents/adr/0633-oauth-redirect-uri-rejects-script-capable-schemes.md))。 + +**GPSのカーソルは `gkill_get_kyous` のものと別方式。** Kyou 側は gkill 本体製の複合カーソル `{RFC3339Nano}::{ID}`、GPS 側は MCP 製の base64url(JSON `{t,n}`)。コーデックの正本は `gps_cursor.go` 1本だけで、発行(`PaginateGpsLogs`)と受理(`NormalizeGpsArgs`)の**両方がここを使う**。以前は受理側に Kyou 用の RFC3339 検証がコピペされており、説明文どおり `next_cursor` を verbatim で渡すと 100% 弾かれていた。片側だけのテストでは検出できないので、境界をまたぐ往復テストを消さないこと。 + +**Plugin tools** — 3サーバ共通は `plugin_tools.go` の `gkill_get_plugin_list` 1つだけ(読み取り専用。`post_plugin_config` は公開しない)。プラグインKyouの本文は gkill に保存されておらず、`get_kyous` が返すのはメタデータと `rep_name`/`kyou_id` を持つ `payload.kind="plugin"` だけ。本文は **`gkill_get_kyous` に `include_plugin_content:true` を渡して同じレスポンスに埋め込ませる**(1件ずつ取る `gkill_get_plugin_content` ツールは廃止。AIの往復が N+1 回になり非効率だったため)。インライン化は `plugin_tools.go` の `inlinePluginContents` が担当し、`/api/get_plugin_content_html` を rep ごとに直列・rep 間は並列(既定4)で叩き、`html_text.go` でHTML→テキスト変換して `payload.content_text` に入れる。各ペイロードには `content_status`(`ok`/`truncated`/`skipped`/`error`)が付き、`ok` 以外なら本文は不完全。上限は1件4000文字(`plugin_content_max_text_length` で最大200000まで)・合計200000文字・20件・30秒。`plugin_content_format` で `text`(既定)/`html`/`both` を選べる。 同一プラグインへ並列に投げても速くならない理由は [ADR-0602](../../../documents/adr/0602-mcp-inline-plugin-content.md)。 + +> **同一プラグインへ並列に投げてはいけない。** プラグインの stdio は1本しかなく呼び出しは直列化されるので、同時発行しても速くならず順番待ちが伸びるだけ。待ちきれなかったぶんは `ErrPluginBusy` になる。インライン取得が実行中のリクエストを abort しないのも同じ配慮(abort 自体は現在プロセスに影響しないが、MCPサーバは古い gkill にも接続しうる)。デッドラインは「新しいリクエストを始めない」だけで実現している。Write専用サーバには `gkill_get_kyous` が無いため、プラグイン本文を読むには ReadWrite サーバを使う。 +> +> (2026-08-06以前の gkill は30秒デッドラインを排他ロックの**前**に張っていたため、同時発行するとロック待ちで期限を食い潰し、期限切れ時の `Process.Kill()` でプラグインプロセスが回収されていた。現在は期限をスロット取得後に張るのでこの誤射はない。) + +**削除と過去版は `gkill_get_kyous` からは絶対に見えない。** gkill は追記型で、update は新しい版の追加、delete は `is_deleted=true` の版の追加。検索は最新版かつ未削除しか返さず、**`query.only_latest_data:false` は受理されるが無視される**(旧版を落としているゲートは `handle_get_kyous_mcp.go` の2箇所ではなく最低6箇所あり、うち `find_filter.go` の `replaceLatestKyouInfos` はフラグで分岐しないので、既知の2箇所を外しても件数は1件も変わらない。`dao/reps/repositories.go` がバケットキーを `ID+UpdateTime` に変える一方 `filterTagsKyous` は素のIDで引くため、開けるとタグ絞り込みが全部0件になる)。**代わりに使うもの**: 1件の全版は `gkill_get_kyou_history`(`data_type` 必須。型非依存の `/api/get_kyou` は `UnWrap()` でキャッシュを丸ごとバイパスするので使わないこと)、削除の取り消しは `gkill_restore_kyou`、削除済みの列挙は `query.include_deleted_data:true`(かつて併存した `query.is_deleted` は一度も実装されず、2026-08-24 に語彙ごと削除した。送ると未知キーとしてエラーになる)。**`update_time` は1秒解像度**なので、同じ秒の中で delete→restore すると新しい版が最新と見なされず黙って何も起きない。`write_handlers.go` の `nextUpdateTime` が必ず1秒以上進める。 却下案と6箇所のゲートの棚卸しは [ADR-0605](../../../documents/adr/0605-mcp-version-history-is-a-dedicated-tool.md)、削除の旗の意味論は [ADR-0110](../../../documents/adr/0110-deleted-data-opens-only-with-include-deleted-data.md)。 + +**`gkill_get_kyous` は `partial` と独立に `warnings` を必ず確認する。** `partial=false` はページング上の打ち切りが無いことだけを示し、記録保管場所の読み込み失敗で結果が欠けていても false のままになりうる。 +その場合は利用可能な場所の結果を使いながら利用者へ警告し、警告された名前を `query.reps` へ指定し直さないこと。 +指定すると利用可能な場所まで絞り落として、0件に見える。通常検索・`count_only`・`group_by` の全経路で +既存の `warnings` を保持し、新しい部分成功フラグを足さない([ADR-0216](../../../documents/adr/0216-detach-a-broken-rep-but-never-silently.md))。 + +**ディスパッチと要約の正本は `read_handlers.go` と `write_handlers.go` の2本だけ。** サーバファイル(`server_read.go` / `server_write.go` / `server_readwrite.go`)に case を書き足さないこと。以前は read が read/readwrite へ、write が write/readwrite へ逐語コピーされており、readwrite 側だけが廃止済み `callRead` を呼び続けて、IDF ファイルパス取得のツールが静かに TypeError で落ち続けた(そのツールは 2026-08-24 に削除済み)。`buildToolResult` と3段の要約(plugin→read→write)も `server_base.go` に1本化してある(write サーバの版だけ file-link 注入と IDF 画像ブロックを欠いた劣化コピーだった)。**ただし `composeTools(ReadTools, …)` の連結と `newNameSet(...)` の選抜集合は各サーバファイルに残すこと** ―― `src/tools/verify_docs.mjs` がサーバファイル中のこの呼び出しを走査して `*_tools.go` の `tool("gkill_…"` を辿りツール数を数えており、別の形に書くとツール数が黙って0になる。削除・復活・履歴が共有する型別エンドポイント表は `constants.go` の `ENTITY_TARGETS` 1箇所(以前は enum・`DELETE_DATA_TYPES`・対応表2つの4箇所に散っていた)。 + +**設定は1ファイル `$GKILL_HOME/configs/gkill_mcp.json`(無ければ初回起動時に既定値で生成・0600・`config_created` をログ)と環境変数で、優先順位は フラグ(`--transport`、親の `--log` は明示されたときだけ)> 環境変数 > ファイル > 既定値(`config.go` の `ResolveSettings`。守るテスト `config_test.go` / `main/common/mcp_test.go`)。** 既存のファイルは書き換えない。壊れていれば起動を止める(黙って既定へ落ちない)。`--config ` で場所を変えられる。平文 `GKILL_PASSWORD` は環境変数からだけ受け、ファイルには置かない。`GKILL_HOME` は `--gkill_home_dir` が明示されていないときだけ効く(`applyGkillHomeEnv`。`InitGkillOptions` がフラグ値で `GKILL_HOME` を上書きするので、その前に採る)。 + +**Environment variables(旧実装と同名・同義。ファイルより優先):** `GKILL_BASE_URL`, `GKILL_USER`, `GKILL_PASSWORD_SHA256`, `MCP_LOG` (default **`access`**。語彙は gkill_log と同じ `none / error / warn / info / access / debug / trace / trace_sql`。**未知の値は起動を止める** —— 旧実装は黙って info へ落としていた), `GKILL_MCP_MAX_FILE_BYTES` (default 8MB — cap for `get_idf_file` base64), `GKILL_MCP_FILE_LINK_TTL_MS` (default 1h — HTTP-mode file URL token TTL), and for HTTP mode: `MCP_TRANSPORT`, `MCP_PORT`, `MCP_BIND_ADDR` (listen address; default `0.0.0.0`, set `127.0.0.1` behind a reverse proxy/tunnel), `MCP_OAUTH_ISSUER`. Also read: `GKILL_PASSWORD` (plaintext alternative to the SHA256), `GKILL_SESSION_ID`, `GKILL_INSECURE`, `GKILL_LOCALE`, `GKILL_FETCH_TIMEOUT_MS`, `GKILL_HOME`. + +**stdout は JSON-RPC の専用チャネル。ログは gkill_log の別名ファイルへ。** `mcp` サブコマンドは親(`ServerCmd`)の `PersistentPreRun`(`gkill_log.Init()` = `logs/gkill*.log`)を継がず、自前の `PersistentPreRun` で `InitGkillOptions` → `threads.Init` を行い、設定を読んでから `gkill_log.InitNamed(spec.LogPrefix, "gkill_mcp", "kind", kind)` で **`logs/gkill_mcp_.log`(統合)と `gkill_mcp__{error,warn,info,access,debug,trace,trace_sql}.log`(レベル別)** を開く(静的フィールド `app=gkill_mcp` + `kind`。回転は `--log_rotate_*` がそのまま効く)。`StdoutMirror` は常に false、cobra の usage / エラーも stderr(`SilenceUsage` / `SilenceErrors` + `RunE`)。**stdout へ1バイトでも書くと NDJSON が壊れ、stdio の全ツールが黙って失敗する**(`stdio_e2e_test.go` がテストバイナリを子プロセスにして「stdout に JSON-RPC 以外が出ない」を固定する)。`http_request` / `tool_call` は ACCESS、`server_start` / `auth_success` / `config_created` は INFO、`token_rejected` / `token_scope_rejected` / `auth_failure` / `status_gkill_unreachable` は WARN、`http_handler_error` / `file_fetch_error` / `tool_call_error`(呼び出し側の誤りは WARN)は ERROR。`http_request` のパスはクエリを落として記録し、許可した欄以外は書かない(`logRequest`)。MCP のコードは `Logger`(`access_log.go`。slog の薄い包み)だけを通し、`slog` へフォーマット文字列を渡さない。 + +**旧 Node 実装との結果一致はゴールデンで機械証明する。** `testdata/golden/` は偽 gkill(`internal/fakegkill`)へ要求コーパス(`requests.json`、345 件)を流して採った tools/list(3サーバ)と応答(stdio / http × 3サーバ)と gkill へ送った要求で(Node 実装が消える前に Node の出力から採ったのは移植時の 328 件。以後に足した要求は Go の出力が期待値)、`golden_test.go` が **バイト単位**で照合する(時刻・UUID・トークンは採取時と同じ固定列。`jsonobj` パッケージが `JSON.stringify` 互換の直列化を担う)。**ツールの説明文・応答の形・キー順・エラー文言を変えたら golden が落ちる。意図した変更なら `GKILL_MCP_UPDATE_GOLDEN=1 go test ./gkill/mcp/ -run Golden` で Go の出力へ書き直し、`git diff testdata/golden` が意図した差分だけであることを読んでからコミットし、理由をコミットメッセージに書く(Node 実装はもう動かせない。以後のゴールデンは前回コミットした Go の出力との回帰検査)。手で行を直さない。** `schema_revision`(3サーバ)と `tool_schema_budget.json` の3値も Go 移植では変わらなかった(以後の意図した変更で動く。2026-09-20 の ADR-0632 で +822 バイト)。唯一マスクするのは JSON でない応答本文のパーサ文言(`detail.cause`。V8 と Go で違う)だけ。 + +**ツールスキーマはクライアントのセッション寿命で固定される。** クライアントは接続時に `tools/list` を1回取るだけで、サーバを再起動しても**生きているセッションには新しいスキーマが届かない**(2巡目の指摘で、削除済みの `gkill_get_idf_file_path` を配り続ける live コネクタから実測)。そのため後から足したトップレベル引数は**正規JSON文字列**として届く(`"true"` / `'["nlog"]'`)。救済は `normalization.go` の `reviveStaleSchemaArgs` で、`kyous` / `gps` / `appConfig` / `idf` / `repNames` / `tagNames` / `repInfos` / `kyouHistory` の `…StaleSchemaArgKinds` 表に載っている引数だけが型を復元される。**引数をスキーマへ足したら必ず同じ表と `StaleSchemaArgKindsByTool` へも足すこと。** 忘れると boolean / number / 配列の新引数は既存の全クライアントから型エラーになり、「新しいセッションでだけ動く」状態で出荷される(`is_video` が実際にそうなった)。string 型(`group_by` / `cursor` / `thumb` / `contains`)は素通しするので表に載せなくてよい。**古さが証明できたときは黙って直さず伝える**: 表の引数が文字列で届いた/廃止済み引数(`include_id` 等)が届いたときだけ `detectStaleSchemaSignals` が検出し、`handleReadToolCall` が payload の `warnings` へ「接続し直せ」を1行足す(証明できないときは出さない。推測で出すと常時ノイズになる)。実利用報告では、指摘9件のうち4件が「既に直っているのに古いスキーマから見えていなかった」だった。**同じ理由で、ツールを消したら `constants.go` の `REMOVED_TOOL_HINTS` へ1行足す** —— 旧セッションはそのツールを一覧に持ったまま呼び続けるので、`Unknown tool` だけ返すと代替が分からない。 + +**サーバ3種は「どのツールを載せるか」しか違わない。** `HandleToolCall`(plugin → read → write)は `server_base.go`、起動処理は `bootstrap.go`(`Start(ctx, spec, opts)`)が正本で、`server_read.go` / `server_write.go` / `server_readwrite.go` が持つのは `ServerOptions{Tools, ReadToolNames, WriteAppName}` と `StartSpec` の表1行だけ。**readwrite は read + write そのもの**で、read サーバと同じ `ReadTools` を `composeTools` で連結する(名前集合は `WriteTools` と重ならない)。**サーバ側へディスパッチや起動処理を書き戻さないこと。** 「read と readwrite でスキーマが違う」という報告は実際に来たが、実体は**昨日起動したままの MCP プロセスが昨日の定義を配っていた**だけだった(6項目すべてが `git show HEAD:` 版の文言と一致)。コードを疑う前にプロセスの起動時刻を見ること。プロセスが新しくても古い一覧が見えることはあり(上の「ツール一覧の世代」節の ChatGPT の件)、そのときはクライアント側の接続し直しでしか直らない。詳細と却下案は [ADR-0613](../../../documents/adr/0613-add-and-update-share-one-field-table.md)。 + +**追加と更新の引数検証は `entityFieldSpecs`(`write_normalization.go`)が正本。** 型ごとに手書きすると片方だけ厳しくなって静かにずれる —— 実際 `gkill_add_urlog` だけが `assertUrlWithScheme` を通し、`gkill_update_urlog` は素通しで、スキームの無いURLで更新すると gkill がページ取得を試みず **title が空のままエラーも出さずに保存**されていた。1行要約も同じ理由で `entitySummarizer`(`write_handlers.go`)から作る。**`normalizeXxxArgs` の中身を手書きへ戻さないこと。** + +**書き込みの後付けフラグはリクエストの修飾子であって、エンティティの列ではない。** `gkill_add_urlog` の `fetch_metadata` / `fetch_favicon`(既定 true = 外向き取得する。false で対象サイト・favicon サービスへの取得を項目別に抑止。Go 側へは `skip_fetch_*` へ**反転**して写す)と `gkill_add_mi` / `gkill_update_mi` の `allow_create_board`(既定 true = 未知の板名は従来どおり新しい板になる。false のときだけ板一覧と**完全一致**照合して typo を弾く)が該当し、どれも実体オブジェクトへは載せない(update_mi の `patchFields` へ足すと「変更なし」判定まで壊れる)。**update_urlog に抑止フラグは無い** —— Go は `re_get_urlog_content:true` を明示されたときだけ再取得し、MCP はそれを送らないので、update 経路に抑止すべき取得が無い(説明文にもそう書いてあり、`write_handlers_test.go` が非送信を固定する)。**板名未指定時の既定板への補完値は照合しない**(新規アカウントは板が0件で、照合すると既定板すら弾いてタスクが作れない)。既定値では照合の往復も発生させない。**後付けの boolean 引数は `revivesStaleBoolean` と `STALE_SCHEMA_ARG_KINDS_BY_TOOL` の両方へ載せる**(`write_tool_handlers_test.go` の表駆動メタテストが機械強制。片方を忘れると既存の全クライアントから型エラーになる)。既定を「取得しない」へ倒す案・2フラグを1本に束ねる案の却下理由は [ADR-0618](../../../documents/adr/0618-urlog-outbound-fetch-is-default-on-with-opt-out.md)。 + +**「cursor と併用できない」の検査は `assertAggregationNotCombinedWithCursor`(`normalization.go`)1本。** `count_only` / `group_by` と `cursor` の併用は gkill 側でも弾かれるが、返るのは `ERR000352: 記録の取得に失敗しました` という汎用文で**理由が本文に一切乗らない**(実測: 検索失敗と区別が付かなかった)。GPS 側(`paginateGpsLogs`)は前から MCP 層で弾いており、`get_kyous` だけが素通しだった。 + +**`count_only` と `group_by` の併用も同じ関数で弾く。** 以前は Go の `count_only` の早期 return が `group_by` を黙って捨て、`buckets` の無い応答が「集計できた」顔で返っていた(GPS の `paginateGpsLogs` も同じ順序の同じ穴。実利用報告)。`group_by` は既に件数だけを返す口なので重ねる意味が無く、cursor 併用と同じくエラーにする。検査は `assertAggregationNotCombinedWithCursor` の中(`normalizeKyouArgs` と `paginateGpsLogs` の両方が通る)で、Go 側にも同じ検査を置く。守るテスト: `normalization_test.go` の「集計と cursor の併用」describe、`TestHandleGetKyousMCP_CountOnlyAndGroupByRejectCursor`。 + +**cursor 頁では Mi / MiReKyou の entry を元の窓で選び直す。** カーソルを `CalendarEndDate` へ押し下げると(ADR-0604 の性能上の核心)、Mi rep の5射影 UNION は腕ごとに自分の時刻列で窓を当てるので、`mi_check`(UPDATE_TIME)の腕だけが窓外へ落ち、同じ Mi が `mi_create`(CREATE_TIME)として**カーソルより後ろに再出現**する。1頁目に返した記録の重複で、`remaining_count` が頁をまたいでも減らないのはその副作用(実利用報告)。`handle_get_kyous_mcp.go` は押し下げ前の検索条件を控え、cursor 頁では `batch` の Mi / MiReKyou の ID 群だけで `FindFilter.FindKyous` を元の窓で再実行し、`(ID, DataType)` が一致しない entry を落とす(`revalidateMiEntriesAgainstOriginalWindow`)。**潰し込みの規則(`newestKyouEntry`)をハンドラへ複製しないこと**(ADR-0611)。潰し込みを窓非依存にする(Web の rykv で「その日に作ったタスク」が消える)・押し下げをやめる(ADR-0603 の事故へ逆戻り)・Node 側で ID 重複除去(前頁を知らず残件数も直らない)はいずれも否決([ADR-0621](../../../documents/adr/0621-cursor-pages-revalidate-mi-against-original-window.md))。守るテスト: `TestHandleGetKyousMCP_RemainingCountMonotonicAcrossPages`(数頁に分けて引き、残件数が単調に減って合計が総件数に一致し、重複ゼロ)/ `TestHandleGetKyousMCP_ForMiPagingDoesNotRepeatTasks`。 + +**`query.ids` の不一致と `num_min` / `num_max` の種別混在は警告で名指しする。** tags / reps / rep_types / data_types は照合用の一覧があるので綴り違いを名指しできるが、ID には全 ID 一覧が無い。代わりに `collectMCPUnmatchedIDWarnings` が「要求した ID − `FindKyous` の結果に出た ID」(リクエストレベル絞り込みの**前**)を取り、存在しない/削除済み/他条件で落ちた、を**区別できないと言って**列挙する(20件で打ち切り)。`num_min` / `num_max` は kc / nlog / lantana を単位なしの1本の軸で比べるので、結果に2種以上が混ざったときだけ `mixedNumKindsWarning` が件数つきで警告する(1種だけなら黙る。`data_types` で絞った呼び出しをうるさくしない)。どちらも `count_only` でも出る。守るテスト: `TestHandleGetKyousMCP_UnmatchedIDsWarn` / `TestHandleGetKyousMCP_NumFilterWarnsWhenKindsMix`。 + +**`gkill_get_rep_infos` は列(`fields`)に加えて行も絞る。** `fields` で `rep_infos[]` を落としても、Archived Git の rep 名(`plugins[]`)と歴代端末の GPSLogs_ / Tag_ / Text_(`attached_data_reps[]`)だけで数百行残り、「`gkill_add_tag` はどこへ書くか」を知るために全部を読んでいた(実利用報告)。Go は `attached_data_reps[]` にも `use_to_write`(`WriteTargetRepNames` と同じ集合。omitempty 無し)を載せ、Node の `applyRepInfosRowFilters` が `writable_only`(`plugins[]` は `[]` になる)/ `rep_types`(応答の `canonical_rep_types` と照合し、無い値はエラー。正準値の表を Node に複製しない)/ `rep_names`(完全一致)/ `contains`(大小無視の部分一致。`gkill_get_all_rep_names` と同じ規則)を `fields` 射影の前に掛ける。**非 string の引数は `REP_INFOS_STALE_SCHEMA_ARG_KINDS` へ載せる** —— `data_kinds` は 2026-08-25 の追加時に載せ忘れており、古い一覧を握るクライアントからは配列が正規JSON文字列で届いて型エラーになっていた。守るテスト: `read_handlers_test.go` の rep_infos describe、`normalization_test.go`「行の絞り込み」、`TestHandleGetRepInfosMCPListsAttachedDataReps`。 + +**プラグインの説明文を Kyou ごとに焼き込まない。** 130〜150字あり、20件取ると同じ文が20回並ぶ(`include_plugin_content` とは無関係に常に載っていた)。`PluginPayloadMCPDTO` は `rep_name` / `plugin_name` だけを持ち、説明は応答トップレベルの `plugins[]` へ rep 名ごと1回。**`provides` を宣言しないプラグインには `typed_index` が付かない**ので、`gkill_get_plugin_list` からは「取り込み0件」と「正常」の区別が付かない(`is_alive:true` のまま全期間0件が実際に起きた)。件数はここでは数えない(全プラグインへ直列に往復することになる。ADR-0301)。代わりに warnings で名指しし、`count_only` + `data_types` での数え方を案内する。 + +**IDF file access**: 経路は「優先順位」ではなく**用途で分かれる**(実測、[ADR-0606](../../../documents/adr/0606-idf-file-reaches-ai-through-payload.md))。stdio クライアントには `get_kyous` が `file_path`(絶対パス)を載せるので、それを直接読むのが最良(base64 もサイズ上限も無い)。HTTP クライアントには代わりに `file_url` / `file_url_full`(`FileLinkStore` が発行する1ファイル束縛・期限付き・推測不能な公開URL。`GET /files/{token}` が Bearer 無しで配信し、画像は `file_url` がサムネ・`file_url_full` が原寸)が載るが、**MCP はそのURLを代わりに取りに行かない**し、クライアントが自前の機能で取れても会話の外側のバイトになるだけなので、これは人間へ渡すリンクと考える。**HTTP 接続の AI が画像を「見る」唯一の経路は `gkill_get_idf_file`**(`buildToolResult` が `type:"image"` の content ブロックを作る唯一の入力)で、画像生成ツールへ参照画像として渡す場合もこれ。上限(`GKILL_MCP_MAX_FILE_BYTES`、既定8MB)に当たる画像・動画は `thumb="WxH"`(一辺最大1024 = Go 側 `thumbFileServer.maxSize`。動画は `is_video:true` 併用)で縮小取得する。上限超えの `thumb` を渡すと Go は**黙って原本を返す**ので MCP 側で先に弾いている。**「URL を優先しろ」と書き戻さないこと** —— 実使用の ChatGPT はその誤誘導を無視して正しく base64 を呼んでいた。Local paths never go to remote clients; the transport type (stdio vs HTTP) is the gate. gkill itself stays private. + +**HTTPモードの1リクエスト文脈は `Server.Current*` 共有フィールドに書かず、不変の `RequestContext{SessionID,UserID,RemoteAddr}` を `HandlePayload→HandleMessage→HandleToolCall/BuildToolResult` へ引数で流す**(指摘 C-02)。以前は `_lastTokenUserId` と `server.currentSessionId/currentUserId/currentRemoteAddr` に書いて await をまたいで読んでいたため、並行リクエストで別要求の user/session が混線し、他人のセッションに紐づく file-link URL 発行や書き込みレコードの作成者誤記が起きた。`server_base.go` の入口(`requestContextOrCurrent`)で nil のときだけ `Current*` のスナップショットへフォールバックするので stdio と既存の直接呼び出しテストは無改修。**http_transport 側から `Server.Current*` への書き込みを復活させないこと**(渡し忘れは sessionId=null→gkill側401で顕在化し、静かな混線には戻らない)。OAuth は S256 必須・未登録 client_id は認可拒否(`oauth_server.go` の `validateAuthorizeParams`)、公開ファイル配信は nosniff + CSP sandbox(本体側 `withUserContentSecurityHeaders` のミラー)、`oauth_store.go` の保存は temp+rename の 0600 で**状態ファイルの書式は旧 Node 実装と互換**(`mcp_oauth__state.json`。移行で DCR クライアントと refresh token は引き継がれ、再認可は不要。`oauth_store_test.go` が Node が書いたファイルの読み込みを固定する)。守るテストは `src/server/gkill/mcp/http_transport_test.go`(Bearer 401 = C-01 回帰・並行分離 = C-02 回帰・M-06)。 却下案(AsyncLocalStorage 等)と渡し忘れが顕在化する理由は [ADR-0601](../../../documents/adr/0601-mcp-request-context-immutable.md)。 + +**`words:[]` は絞らない(説明に書き分けてあり、挙動は変えない)。** 非 null の `[]` が「0件」なのは `tags` / `hide_tags` / `reps` / `rep_types` / `ids` / `timeis_tags` / `period_of_time_week_of_days`。`words` / `not_words` の `[]` は条件なしで**全件が通り**(SQL も Go の `find_word` も語が0個なら条件を出さない。`HasWordFilter` が真でも同じ)、`timeis_words:[]` は「任意の打刻に覆われた記録」。AI がキーワードを抽出できずに `[]` を渡すと無関係な記録が正常な結果として返るので、`find_query_schema.go` と `SEARCH_TOPIC` は3種類を書き分けている。**「`[]` は一致なし(例外は `timeis_words` だけ)」の要約に戻さないこと。** + +**地図条件は入口で3値を要求する。** `normalizeKyouQuery` の `assertMapFilterComplete` が `map_latitude` / `map_longitude` / `map_radius` の1〜2個だけの指定を欠けた欄を名指しして拒否し、範囲(緯度 −90..90・経度 −180..180・半径 > 0)も弾く。gkill の `HasMapFilter` は3値揃いでしか真にならず、欠けると地図条件ごと**黙って無視**される(`map_latitude` だけで通常検索と同じ件数が返っていた。実利用報告)。半径の単位は**メートル**(Go が `/1000` して km にする)で、スキーマ・ヘルプ・Go の警告(`partialMapFilterWarning`。API 直叩き向け)の全部に書いてある([ADR-0625](../../../documents/adr/0625-mcp-map-filter-requires-all-three-values.md))。 + +**`max_size_mb` はプラグイン本文を埋め込んだ後に MCP が守り直す。** gkill 本体は本文の無い DTO しか測れないので、`InlinePluginContents` の後で `EnforceKyousSizeBudget`(`read_handlers.go`)が本体と同じ規則(2件目以降は足す前に判定、先頭1件は超えても返して警告)で `kyous[]` を切り、押し出した分は `remaining_count` / `has_more` / `next_cursor`(Go の `encodeMCPCursor` と同じ `{related_time}::{id}`。DTO の `related_time` はローカル時刻の RFC3339Nano で同じ書式)を直して次頁へ回し、`warnings[]` に件数を書く。**MCP がカーソルを組み立てる唯一の箇所**なので、本体のカーソル形を変えるときはここも直す([ADR-0624](../../../documents/adr/0624-mcp-max-size-is-enforced-after-plugin-inline.md))。 + +**`gkill_get_kyou_history` は `offset` で続きを読む。** gkill は全版を返し Node が切るので、ページングは Node で完結する(`next_offset` を `offset` に渡す。`limit` の公開上限 200 を超える履歴へ進む唯一の経路。`KYOU_HISTORY_STALE_SCHEMA_ARG_KINDS` に載せてある)。**版の `data_type` はエンティティ名に揃えて返す** —— 型別 API は射影名を経路ごとに違う規則で返す(検索 = `compareKyouEntryPriority` で `mi_start`、履歴 = UNION の出力順で `mi_check`、更新応答 = `compareMiProjectionPreference` で `mi_create`)ので、同じ Mi が3通りの名前を名乗っていた。delete / restore / update_* の応答(`withEntityDataType`)も同じく揃える。検索結果は射影名のまま([ADR-0626](../../../documents/adr/0626-mcp-kyou-history-pages-with-offset.md))。 + +**`for_mi` だけの検索は入口で `include_create_mi` を補う。** 5フラグが全て未指定なら `normalizeKyouArgs` が `include_create_mi:true` を足し、`normalized.notes` → `payload.warnings[]` の先頭で知らせる(`FOR_MI_DEFAULT_PROJECTION_NOTE`)。`for_mi` 自体は補わない(ADR-0610)。Go の `forMiWithoutProjectionWarning` は API 直叩き向けにそのまま([ADR-0627](../../../documents/adr/0627-mcp-for-mi-defaults-include-create-mi.md))。 + +**更新は現在値と同じ値だけのパッチも断る。** `runUpdate` は指定された全欄を `valuesEquivalent`(日時はオフセット違いを同じ瞬間として、数値は `Number`、`null` は現在値が空なら同じ)で現在値と比べ、全欄同じなら「No effective change」で書かない(ADR-0616 の「引数の有無」だけの判定では同じ内容の版が積まれていた)。Mi の `limit_time` / `estimate_start_time` / `estimate_end_time` は `timeis.end_time` と同じ `nullClears`(`null` で消す。以前は黙って無視されていた)([ADR-0628](../../../documents/adr/0628-mcp-update-rejects-a-no-op-patch-by-value.md))。 + +**応答の定常オーバーヘッドは削ってある。戻さないこと。** `tag_entities[]` / `text_entities[]` は `include_attached_ids:true` のときだけ(Go の `GetKyousMCPRequest.IncludeAttachedIDs`)。`is_deleted` は `omitempty` で削除済みにだけ現れる(指摘 C4 の判断を is_deleted に限って覆した。`is_zip` / `addition` / `deletion` は据え置き)。`PluginPayloadMCPDTO` は `kind` / `plugin_name` だけで、**本文取得の鍵は Kyou 側の `rep_name` / `id`**(`collectPluginPayloads` がそちらを読み、`{rep_name, kyou_id, payload}` を返す。payload へ戻さない)。`GitPayloadMCPDTO.commit_hash` は無い(`id` がハッシュ)。`gkill_get_application_config` は `compact`(既定 true。`children` の null / 空・`is_dir:false`・`ignore_check_rep_rykv:false`・識別欄と同じ `name` を落とす。**`check_when_inited` / `is_force_hide` は落とさない**)・`contains`(葉の名前で刈る)・`max_size_mb`(超える struct を大きい順に `{omitted_bytes}` へ置き換えて必ず収める)を持つ([ADR-0629](../../../documents/adr/0629-mcp-trims-per-entry-overhead.md))。 + +**設定ツリーの実データはルート 1 オブジェクトで、識別欄の語彙は Web の TS クラスが正本。偽 gkill を実データと違う形で書かないこと。** 6 ツリーはどれも `{name:"__root__", children:[…], is_dir:true}` の 1 オブジェクトで、葉の識別欄は `tag_name` / `rep_name` / `rep_type_name` / `device_name` / `board_name` / `title`(`src/client/classes/datas/config/*-struct-element-data.ts`)。`internal/fakegkill/fixtures.go` が配列ルート + `tag` / `device` / `rep_type` で書かれていた間、`FilterAppConfigStructs` は配列しか見ず **実環境では `contains` が 1 件も刈らず**(実測: タグの葉数百件がそのまま返る)、compact の `name` 落としも 3 ツリーで効いていなかったのに、テストは全部緑だった。`structIdentityKeys` の正本は `read_handlers.go` 1 箇所。各ノードの **`description` は利用者が設定画面で書く運用メモ**で、compact は空文字だけ落とし非空は必ず残す。**`fields:["descriptions"]`** は 6 ツリーから `description` が非空のノードだけを `{struct, name, path, is_dir, description}` の平坦な一覧にする仮想欄(`BuildAppConfigDescriptions`。fields で明示したときだけ載せ、既定の全量には含めない。`contains` は一覧には name / path / description で掛かる)。本文は topic `config`([ADR-0632](../../../documents/adr/0632-config-tree-descriptions-for-mcp.md))。 + +**公開ファイルURLは `include_file_urls` で頼まれたときだけ鋳造する。** ハンドラが payload に `MintFileLinksMark`(`payload.go`。`jsonobj.Object` の meta で JSON には出ない)を立て、`BuildToolResult` は HTTP かつ印があるときだけ `ApplyFileLinks`、それ以外は `StripFilePaths`。発行した URL には `file_url_expires_at` を添える(`FileLinkStore.MintLink`)。印を通常のプロパティにしない・`BuildToolResult` へ引数を通さない([ADR-0630](../../../documents/adr/0630-mcp-file-urls-are-opt-in-with-expiry.md))。 + +**未知キーは束ねて1回で返し、廃止済みは `detail.allowed` に載せない。** `AssertKnownKeys` は全部の未知キーを `detail.unknown` に集めて先頭のキーを `detail.field` にし、第4引数 `hidden`(`DeprecatedTopLevelArgs` / `DeprecatedQueryFields ∪ LegacyUseFlagKeys`)は受理するが列挙しない(載せると「`only_latest_data:false` なら過去版が読めるのか」と考えさせるだけ。ADR-0620)。`FindQuerySchema` の `additionalProperties` は `false`(「スキーマ上は何でも通る」と実際の拒否の不一致をやめた)。オフセットの無い日時は `NormalizeDateTimeString` が「no timezone offset」と名指しする(`ISODateTimeDesc` も「RFC 3339 with offset」と言う)。 + +**KFTL の `created[]` は delete の `targets[]` ではない。** `updated` / `related_time` を持つので `normalizeDeleteTargets` が「`created.filter(c => !c.updated).map(({id, data_type}) => ({id, data_type}))` を渡せ。`updated:true` は既存記録の更新(打刻の終了)で、消すと元から在った打刻が消える」と案内する。説明文で「そのまま渡せる」と書き戻さないこと。`gkill_submit_kftl` の応答は `replayed`(冪等キーで畳んだ再送。`created` は元の控え)を持ち、同じキーで別の本文は gkill が 409 `ERR000423` で断る([ADR-0510](../../../documents/adr/0510-kftl-idempotency-key-carries-fingerprint-and-result.md))。 + +**`gkill_add_tag` / `gkill_add_text` の not_found は target_id を名指しする。** gkill の文言は全失敗経路で「タグ追加に失敗しました」1本なので、`describeTargetNotFound`(`write_handlers.go`)が `error_kind:"not_found"` のときだけ「target_id X matched no kyou ...」で包み直す(元の detail は保持)。単件の delete / restore の要約は「Deleted (soft): kmemo 」(キー名ではなく型と id。`describeSingleSoftDelete`)、`gkill_get_all_tag_names` の要約は `truncated` のとき「N of M」。 + +**未知の `mi_board_name` と、プラグインの名札を `query.reps` に渡したときは Go が警告する。** `unknownMiBoardNameWarnings`(`GetBoardNames` との完全一致)と `pluginManifestRepNameHint`(値が emits_kyou なプラグインの manifest `rep_name` に一致したら「名札であって検索値ではない。`rep_names[]` を使え」)。`gkill_get_plugin_list` の `rep_names` は Kyou を出すプラグインでは**常に**「`query.reps` に渡せる値」(申告値。索引未構築なら `[]`。申告しなければ `[manifest の rep_name]`)で、`omitempty` に戻さない([ADR-0311](../../../documents/adr/0311-plugin-list-rep-names-are-always-the-query-values.md))。`group_by` の `week_of_day`(`sunday`..`saturday`)と `hour`(`00`..`23`)は 0 件のバケットも並べる(定義域が有限)。 + +**スキルのファイルは gkill_server だけが触り、AI の削除ツールは公開しない。** スキル(`$GKILL_HOME/skills///` の SKILL.md と付属ファイル)の4ツールは `/api/get_skill_list`・`/api/get_skill`・`/api/write_skill_file` を呼ぶだけで、MCP がファイルを直接読まない(`skill_handlers.go`)。`gkill_delete_skill` は `skill_delete_tool.go` に実装だけあり、`WriteTools` の登録行と `dispatchWriteToolCall` の `case` をコメントアウトしてある —— スキルは履歴を持たないので、AI が消したものは戻せない。**一覧に載せないまま `case` だけ戻しても呼べない**(`Server.HandleToolCall` が `IsWriteToolName` で弾く)。定義を `read_tools.go` / `write_tools.go` に書かないこと(verify_docs が `tool("gkill_…"` をコメントの中でも数える)、help topic や説明文で名前を出さないこと(`help_topics_test` が落ちるうえ、見えないツールを案内する)。AI へ返すときだけ `max_file_bytes` を超えるファイルは中身を省き(`content_omitted`)、バイナリは `gkill_get_idf_file` と同じキー(`file_content_base64` / `mime_type` / `is_image`)で返して `BuildToolResult` の base64 処理を共用する。mime は拡張子の固定表で決める(`mime.TypeByExtension` は Windows でレジストリを読むので golden が揺れる)。`gkill_add_skill` は frontmatter の値を JSON の文字列(YAML の二重引用符スカラー)で書く。公開の条件と却下案は [ADR-0634](../../../documents/adr/0634-per-user-skills-for-mcp.md)。守るテスト: `skill_handlers_test.go` / golden の `skill *`。 + +**ツール・叩く `/api`・HTTP の経路を足したら境界対応表にも載せる。** MCP は `gkill/api` を import しないので、ツールと `/api` のつながりは文字列だけで、呼び出しグラフの道具には見えない。[cross-boundary-map.md](../../../documents/reverse/cross-boundary-map.md) の §4(ツール・`EntityTargets`・HTTP の経路)を `npm run verify_docs` がコードと突き合わせ、MCP が叩くパスがルート表にあることも見る。 + +## 関連スキル + +- [gkill-plugin](../gkill-plugin/SKILL.md) — プラグインの stdio 直列化(並列に投げても速くならない理由) +- [gkill-find-query](../gkill-find-query/SKILL.md) — 旧形式JSONキーの移行(`LEGACY_USE_FLAG_KEYS`) +- [gkill-go-backend](../gkill-go-backend/SKILL.md) — サーバ側の認可・セキュリティヘッダ +- [gkill-cli-ops](../gkill-cli-ops/SKILL.md) — `gkill_server` のサブコマンド一覧、起動中サーバの HTTP クライアントという型、ログ基盤(`InitNamed`) +- [gkill-build-test](../gkill-build-test/SKILL.md) — `npm run test_mcp`(`go test ./gkill/mcp/...`)とリリースゲート、MCP を直したら本体と同じ exe を配り直すこと + +## 詳しい設計と却下案(ADR) + +- [ADR-0631 MCP サーバは gkill_server のサブコマンドで、Go の手書きミラー(旧 Node 実装とバイト一致のゴールデン)](../../../documents/adr/0631-mcp-lives-in-gkill-server.md) +- [ADR-0707 端末固有の文字列は出口で伏せ、診断文はAIへ返さない](../../../documents/adr/0707-redact-environment-specific-strings.md) +- [ADR-0601 リクエスト文脈は不変で引数渡し](../../../documents/adr/0601-mcp-request-context-immutable.md) +- [ADR-0602 プラグイン本文はインライン埋め込み](../../../documents/adr/0602-mcp-inline-plugin-content.md) +- [ADR-0603 カーソルは期間の端を進める](../../../documents/adr/0603-mcp-cursor-pushes-period-end.md)(Superseded) +- [ADR-0604 複合カーソルと厳密上限・count_only/group_by](../../../documents/adr/0604-mcp-composite-cursor-strict-limits.md) +- [ADR-0605 版履歴と削除の取り消しは専用ツール](../../../documents/adr/0605-mcp-version-history-is-a-dedicated-tool.md) +- [ADR-0110 削除済みは include_deleted_data だけが開ける](../../../documents/adr/0110-deleted-data-opens-only-with-include-deleted-data.md) +- [ADR-0611 同じ対応表を「表」と「直書き」の2形態で持たない](../../../documents/adr/0611-one-table-not-two-forms.md) +- [ADR-0612 付随データは Kyou 検索と同じ規則で判定する](../../../documents/adr/0612-attached-data-follows-kyou-search-rules.md) +- [ADR-0613 追加と更新は1つのフィールド表から作る](../../../documents/adr/0613-add-and-update-share-one-field-table.md) +- [ADR-0617 OAuth の scope はサーバ種別ごとに1値](../../../documents/adr/0617-oauth-scope-is-one-value-per-server-kind.md) +- [ADR-0633 OAuth の redirect_uri は「移動でスクリプトが走る」scheme を拒む](../../../documents/adr/0633-oauth-redirect-uri-rejects-script-capable-schemes.md) +- [ADR-0618 urlog の外向き取得は既定で行い、引数で項目別に抑止する](../../../documents/adr/0618-urlog-outbound-fetch-is-default-on-with-opt-out.md) +- [ADR-0619 ツール一覧の世代は gkill_status の schema_revision で見せ、未知の引数名では再接続を案内し、tools/list のバイト量を予算で固定する](../../../documents/adr/0619-mcp-schema-revision-and-stale-tool-list.md) +- [ADR-0620 廃止済み引数は公開スキーマに載せず、受理と古さの検出だけ残す](../../../documents/adr/0620-advertised-schema-omits-deprecated-arguments.md) +- [ADR-0621 カーソル頁では Mi の代表射影を元の期間で再検証する](../../../documents/adr/0621-cursor-pages-revalidate-mi-against-original-window.md) +- [ADR-0622 ツール説明は要約にとどめ、詳細は gkill_get_mcp_help で取り出す](../../../documents/adr/0622-tool-descriptions-are-summaries-details-via-help-tool.md) +- [ADR-0623 data_types はエンティティ名を射影へ展開して受理する](../../../documents/adr/0623-data-types-expands-entity-names-to-projections.md) +- [ADR-0624 max_size_mb はプラグイン本文を埋め込んだ後に Node が守り直す](../../../documents/adr/0624-mcp-max-size-is-enforced-after-plugin-inline.md) +- [ADR-0625 地図条件は MCP 入口で3値を要求し、Go は欠けを警告する](../../../documents/adr/0625-mcp-map-filter-requires-all-three-values.md) +- [ADR-0626 gkill_get_kyou_history は offset で続きを読む](../../../documents/adr/0626-mcp-kyou-history-pages-with-offset.md) +- [ADR-0627 for_mi だけの検索は MCP の入口で include_create_mi を補う](../../../documents/adr/0627-mcp-for-mi-defaults-include-create-mi.md) +- [ADR-0628 更新は現在値と同じ値だけのパッチも書かずに断る](../../../documents/adr/0628-mcp-update-rejects-a-no-op-patch-by-value.md) +- [ADR-0629 応答の定常オーバーヘッドを削る](../../../documents/adr/0629-mcp-trims-per-entry-overhead.md) +- [ADR-0630 公開ファイルURLは include_file_urls で頼まれたときだけ発行し、期限を添える](../../../documents/adr/0630-mcp-file-urls-are-opt-in-with-expiry.md) +- [ADR-0510 メモ帳の再送キーは本文の指紋と結果を控える](../../../documents/adr/0510-kftl-idempotency-key-carries-fingerprint-and-result.md) +- [ADR-0311 プラグイン一覧の rep_names は常に「query.reps に渡せる値」](../../../documents/adr/0311-plugin-list-rep-names-are-always-the-query-values.md) +- [ADR-0634 利用者ごとのスキルは gkill_server が読み書きし、MCP の削除ツールは公開しない](../../../documents/adr/0634-per-user-skills-for-mcp.md) diff --git a/.claude/skills/gkill-mobile/SKILL.md b/.claude/skills/gkill-mobile/SKILL.md new file mode 100644 index 000000000..ae94cc8e7 --- /dev/null +++ b/.claude/skills/gkill-mobile/SKILL.md @@ -0,0 +1,115 @@ +--- +name: gkill-mobile +description: "Android APK ラッパ(src/android/)と Wear OS(src/wear_os/)の約束。同梱 gkill_server の待受・TLS・WebView のアドレスは ServerConfig に従う(--address / --disable_tls を渡さない・URL は標準出力の起動行から取る)、jniLibs からの実行と useLegacyPackaging、configChanges、共有ストレージの権限が許可されるまで起動しないゲートと requestLegacyExternalStorage、Wear companion の TLS TOFU/ピン留め、companion が get_timeis の履歴の先頭(最新版)を使うこと(last() にすると編集が巻き戻る)、KFTL 送信の冪等キー(handle_submit_kftl_text.go と対。内容ハッシュにしない・markDone 配線を落とさない)、ウォッチの気分記録が送る KFTL テキストの3行(ASCII接頭辞・関連時刻行)、Wear OS の UI 文字列の7言語 strings.xml(既定 ja・locale_name はリソース由来・ワイヤコードは訳さない)を扱う。src/android/・src/wear_os/・handle_submit_kftl_text.go を編集するとき、SDK やビルド設定を上げるとき、文言を足す・直すとき必読。「打刻が二重登録される」「時計から終了すると打刻の編集が巻き戻る」「時計にエラーコードがそのまま出る」「設定画面の待受アドレスや TLS が Android だけ効かない」「Android 10 でだけデータ置き場に書けない」の調査でも必読。" +--- + +# Android / Wear OS の不変条件 + +対象: `src/android/**` / `src/wear_os/**` / `src/server/gkill/api/gkill_server_api/handle_submit_kftl_text.go` + +**このファイルは全文が、実際に起きた事故の再発防止である。該当作業では飛ばさずに読むこと。** +多くは「例外もエラーも出さずに静かに壊れる」種類で、破っても目の前ではエラーにならない。 + +**Android同梱サーバの待受・TLS・画面のアドレスは ServerConfig に従う**(2026-09-24、[ADR-1104](../../../documents/adr/1104-android-server-follows-server-config.md))。`MainActivity` は `--address` / `--disable_tls` を渡さず、Kotlin にポートもスキームも持たない。WebView の URL は、サーバが標準出力に出す `Access your record space at : ` 行(`close.go` の `PrintStartedMessage`。`ENABLE_THIS_DEVICE` 行の ADDRESS のポートと ENABLE_TLS から `localhost` で組む。**文言を変えないこと**)だけから取る。サーバ設定を保存すると行が出直すので、オリジンが変わったときだけ開き直す。**上書きのフラグや 9999 を Kotlin に書き戻さないこと** ―― 設定画面の待受アドレスと TLS が Android でだけ黙って効かなくなる(2026-09-24 まで `--address 127.0.0.1:9999 --disable_tls` で実際にそうだった)。新規の置き場の既定は `127.0.0.1:9999` +「ローカルアクセスのみ許可」なので既定では LAN に出ないが、古い設定 DB や PC から写した設定 DB は ADDRESS 次第で LAN に開く。ADDRESS に特定の LAN IP だけを書くとループバックで待ち受けず、WebView(`localhost`)から届かない。TLS 有効時の自己署名証明書は `onReceivedSslError` がループバックに限って通す。既存サーバの再利用(先行プローブ)は前回拾った URL のポートで行う。activity に `configChanges`(回転で Activity を再生成させず、SQLite書き込み中の `kill -9` を防ぐ)と `onBackPressedDispatcher`(WebView goBack)。cleartext は `network_security_config.xml` で localhost 限定、外部ストレージ権限は `maxSdkVersion` 付き。データ置き場(`--gkill_home_dir`)は `/sdcard/gkill`(2026-09-24 にアプリ専用領域から戻した。却下案は [ADR-1105](../../../documents/adr/1105-android-home-back-to-sdcard-and-gate-on-storage-access.md))なので、**起動ゲートは共有ストレージへの権限が許可されるまでサーバを起動しない**(M-15 の非ブロッキング化はデータが専用領域にあることが前提だった)。権限の要求画面を自動で出すのは Activity ごとに1回だけで、以後は画面のボタンから出す(onResume のたびに出すと設定画面から抜けられない)。**`AndroidManifest.xml` の `application` から `requestLegacyExternalStorage="true"` を消さないこと** ―― Android 10 は Scoped Storage のため、これが無いと `WRITE_EXTERNAL_STORAGE` を許可されても `/sdcard/gkill` へ実パスで書けず、gkill_server が置き場を作れずに落ちる。11 以上では無視されるので、11 以上の端末で試している限り消しても何も起きず気づけない(守るテストは `MainActivityUnitTest.kt` の `manifest_declaresSharedStorageAccessForAllSupportedVersions`)。専用領域にデータを置いていた版からの複製 `copyAppPrivateHomeIfNeeded` は `/sdcard/gkill` が無いか空のときだけ行い(中身があれば `/sdcard/gkill` を正とし、専用領域は消さない)、一時ディレクトリへ複製してから改名する。**複製に失敗したらサーバを起動しないこと** ―― 起動すると gkill_server が空の置き場を作り、次回から「中身あり」と見なされて専用領域のデータへ二度と戻れない。`MainActivityUnitTest.kt` の `migration_*` が守るのは複製の判定と失敗時に例外を投げるところまでで、`startGkillServer` が `migrateAppPrivateHome` の false を受けて `return@Thread` で止める配線を守るテストは無い(消してもビルドもテストも通る)。**Wear companion の TLS は TOFU/ピン留め**(H-05): `GkillServerTrust.kt` がプラットフォーム既定で検証し、失敗時のみ保存済み SHA-256 フィンガープリント一致で許可(trust-all は全廃)。ピン学習は companion の「保存&接続テスト」で利用者承認時のみ。ウォッチ→電話の送信は `WearRequestWorker`(WorkManager)で Service 破棄を跨ぎ、`WearSubmitLedger` で重複再配送を確認へ回す(S3-wear)。KFTL送信にはサーバ側冪等キーも付く: `GkillWearableListenerService` がメッセージ1件ごとに UUID を採番して WorkRequest の不変入力に載せるので、同じ要求のワーカー再送では同じキーになり `handle_submit_kftl_text.go` の `kftlIdempotencyStore`(TTL 10分・成功時のみ記録。本文の指紋と `created[]` も控え、同じ本文なら元の `created[]` を `replayed:true` で返し、別の本文なら `ERR000423`(409)で何も書かない。ADR-0510)が二重登録を畳む。意図的な再送は別メッセージ=別キーなので畳まれない。**冪等キーを内容ハッシュにしないこと**(意図的な同一内容の再送が畳まれて記録できなくなる)。**ハンドラでの `markDone` 配線を落とさないこと** ―― ストア単体テストは `markDone` を直接呼ぶので配線漏れを見逃す(ビルドも vet も素通しする=`idempotencyKey` は `alreadyDone` 分岐で使われ未使用にならない)。守るテストは `kftl_idempotency_test.go`(ストア単体)/ `handle_submit_kftl_text_test.go`(2回叩いて2回目が畳まれる end-to-end。同一キー=1件・別キー=2件・キー無し=2件)/ `WearRequestHandlerTest.kt`。 + +**同梱サーバのタイムゾーンは Go と libc の両方へ教える**(2026-09-16、[ADR-0220](../../../documents/adr/0220-sqlite-localtime-follows-libc-zone.md))。Go の `time.Local` は Android では常に UTC で、`main/common/fix_timezone.go` の `fixTimezone` が `getprop persist.sys.timezone` で直す。SQLite の `'localtime'` は Go ではなく libc(musl 転写)が `TZ` / `/etc/localtime` から決め、Android にはどちらも無いので UTC のままになる。`applyLibcTimezone` が端末の packed tzdata(`/apex/com.android.tzdata/etc/tz/tzdata` 等)から TZif を切り出して `$GKILL_HOME/tz/localtime` に置き、`TZ=:<パス>` を**最初の SQLite 接続より前**(`InitGkillOptions` の末尾)に入れる。tzdata が読めなければ POSIX 固定オフセット(`JST-9`)へ落ちる。**Go 側だけ直して libc 側を放置してはいけない** —— 時間帯フィルタが黙って0件になる。**`applyLibcTimezone` へ渡すパスは環境変数を展開した絶対パス** —— `gkill_options.GkillHomeDir` の既定値は `$HOME/gkill` の未展開文字列で、そのまま渡すと `TZ=:$HOME/...` のリテラルになり、musl は相対名を zoneinfo ディレクトリで探して無ければエラーなしで UTC にする(Termux は `--gkill_home_dir` 無しで起動するので踏む。APK は `MainActivity` が絶対パスを渡すので踏まない。実際に発覚した)。`InitGkillOptions` が展開済みを渡し、`applyLibcTimezoneFor` 側でも `filepath.Abs` して絶対パスにできなければ POSIX 文字列へ落ちる。**`TZ` を `InitGkillServerAPI` より後で入れてはいけない** —— modernc の libc は最初の接続で `os.Environ()` を写し取り、以後の `os.Setenv` を見ない。Android アプリ側(`MainActivity` の `ProcessBuilder`)で `TZ` を渡す案は Termux 等の手動起動に効かないので採らない。守るテストは `main/common/fix_timezone_test.go`(packed tzdata の切り出し・`TZ` の組み立て・fallback)と `dao/sqlite3impl/localtime_check_test.go`。 + +**ステータスバーは gkill のテーマ色で塗り、API 34 以下と 35 以上の2経路をそろえる**(2026-09-24)。色は `colors.xml` の `gkill_indigo`(Web の primary と同じ値)。API 34 以下はテーマの `android:statusBarColor` と `android:windowLightStatusBar=false` が塗る ―― **`values` と `values-night` の両方に書くこと**(夜間用の `Base.Theme.Gkill` は丸ごと差し替わり、昼の項目を継がない)。API 35 以上は edge-to-edge が強制されて `statusBarColor` が黙って無視されるので、`activity_main.xml` のステータスバーの裏の帯 `status_bar_background` を `MainActivity` の insets リスナがステータスバーの高さに合わせる ―― **`layout` と `layout-sw600dp` の両方に置くこと**。システムバーぶんの余白は `content_container` のマージンで取る(`android.R.id.content` にパディングを付けると帯ごと押し下がって塗れない)。守るテストは `MainActivityUnitTest.kt` の `statusBarColor_matchesWebPrimary`(`vuetify.ts` の primary との突き合わせ)/ `statusBar_isPaintedWithGkillIndigoInAllThemesAndLayouts`。 + +**Android**: APK wrapper (WebView) bundling the gkill_server binary as `jniLibs/arm64-v8a/libgkill_server.so` and exec'ing it from `nativeLibraryDir` — required because targetSdk 29+ forbids executing files under the app's data dir (W^X). Needs `packaging { jniLibs { useLegacyPackaging = true } }` so the `.so` is extracted as a real file. compileSdk 37 (androidx 1.19.x requires it), targetSdk 36, minSdk 26. **Wear OS**: Gradle multi-module project (phone_companion + watch_app), communicates via Wearable Data Layer. The Gradle wrapper is committed under `src/wear_os/`, so no copying is needed; `npm run setup_wear_os_gradle` re-syncs it from `src/android/` if it ever breaks. + +**ウォッチの気分記録は KFTL テキストで送り、ASCII接頭辞と関連時刻行を省かない**(2026-09-10)。 +星5個の UI が作る文字列は `?yyyy-MM-dd HH:mm:ss` / `/mood` / 値 の3行で、組み立ては +`LantanaKftl.kt` の `buildLantanaKftlText` に集約する(送信そのものは `/gkill/submit` の使い回しで、 +companion もサーバも無改修)。**全角の `ーら` / `?` を使わないこと** ―― 接頭辞の判定は完全一致なので、 +長音符(U+30FC)を漢数字の一や全角ハイフンと取り違えると行が本文へ落ち、エラーも警告も出ないまま +Kmemo が2件書かれる。**関連時刻の行を落とさないこと** ―― `WearSubmitLedger` はテキスト完全一致・TTL30分で +重複を判定するので(2026-09-21 まで24時間。同じ打刻テンプレートを半日後に押し直すだけで毎回確認が出ていた。 +窓は最後に保存した時刻から数える)、時刻が無いと「30分内の2回目の同じ気分値」が `DUPLICATE` になる。 +送信が WorkManager で後回しになったときにタップ時刻ではなくサーバ受信時刻が残る問題も同時に防いでいる。 +**日時にオフセット付き ISO8601 を使わないこと** ―― `kftl_related_time_statement_line.go` の `dateFormats` に +その形は無く、パースに失敗して送信全体が行エラーになる。**気分値 0 を送らないこと**(0 は「未入力」の意味で、 +KFTL パーサは 0 を受理してしまうため最低値の記録が黙って1件書かれる)。星と値の対応(左半分=2N-1 / 右半分=2N)は +Web 版 `use-lantana-flowers-view.ts` と同じ式にする。画面状態を足したら `MainActivityTest.kt` の状態数も直す +(`Screen` が file-private なので件数の突き合わせでしか守れない)。守るテストは `LantanaKftlTest.kt`(星と値の対応・ +文字列の完全一致・範囲外の拒否)/ `kftl_statement_test.go` の `TestStatement_LantanaFromWearOS`(サーバ側で +同じ文字列から Lantana 1件・mood・related_time が出ること)。却下案は +[ADR-1101](../../../documents/adr/1101-wear-mood-goes-through-kftl-text.md)。 + +**ウォッチから書いた記録は `create_app="gkill_wear"` で、Kotlin の `create_app` に既定値を付けない**(2026-09-11)。 +`/api/submit_kftl_text` はサーバが `gkill_kftl` を固定で書いていたが、`SubmitKFTLTextRequest` の任意項目 `create_app` +で申告できるようにし、companion は `GkillApiClient.APP_NAME`(`gkill_wear`。打刻終了の `update_app` と同じ定数)を送る。 +**データクラス側の `create_app` に既定値を書かないこと** ―― kotlinx.serialization は encodeDefaults=false なので、 +既定値のままだとキーごと落ち、サーバはエラーも警告も出さずに `gkill_kftl`(メモ帳と同じ値)へ戻す +(`locale_name` で 2026-09-10 まで実際に起きていた壊れ方と同型。既定値を付けると +`GkillApiClientTest.submitKFTLText_success_returnsNull` が落ちることを実測済み)。**サーバ側の既定値 `gkill_kftl` を変えないこと** +―― MCP と旧 companion は `create_app` を送らないので、既定値が動くと既存の記録と値が割れる。 +2026-09-11 より前にウォッチから書いた記録は `create_device` もサーバ名で Web と同じなので識別できず、遡って直せない。 +守るテストは `handle_submit_kftl_text_test.go` の `TestHandleSubmitKFTLText_CreateApp`(指定値が書かれる・無指定と空白は +`gkill_kftl`)/ `GkillApiClientTest.submitKFTLText_success_returnsNull`(本文に `create_app` が載る)。 + +**Wear companion は `/api/get_timeis` の `timeis_histories` の先頭を最新版として使い、`last()` にしない**(2026-09-26)。 +サーバ(`time_is_repositories.go` の `GetTimeIsHistories`)は `update_time` の新しい順に並べて返すので、先頭が最新版で +末尾が最古の版。Web の `datas/kyou.ts` も `get_kyou` の履歴は `kyou_histories[0]` を最新版として使い(打刻の本体は +`timeis_histories` の並びに頼らず `update_time` の一致で版を選ぶ)、MCP の更新系(`write_handlers.go`)も `histories[0]` を書き戻しの元にする。 +`GkillApiClient.kt` の `endTimeis` は get_timeis で取った最新版に `end_time` を付けて `update_timeis` で書き戻すので、 +**末尾を書き戻すと、作成後に入れた編集(タイトル変更など)がエラーも警告も出ないまま巻き戻る**(2026-09-26 まで +`histories.last()` で実際にそうなっていた。`getPlayingTimeis` も同じ取り方で、時計の実行中一覧に元のタイトルが出ていた)。 +履歴が1件だけの fixture では先頭と末尾が同じで見逃すので、守るテストは `GkillApiClientTest.kt` の +`getPlayingTimeis_multipleHistories_usesNewestFirstEntry` / `endTimeis_multipleHistories_writesBackNewestVersion` +(新しい順で2版ある fixture で、実行中一覧のタイトルと終了の書き戻し本文を見る)。 + +**Wear OS の UI 文字列は `strings.xml` の7言語セットで持ち、ワイヤコードと KFTL テキストは訳さない**(2026-09-10)。 +両モジュールの `res/values/strings.xml`(既定 = 日本語。Web の `fallbackLocale: 'ja'` とサーバの `GetLocalizer` の +フォールバックと同じ)と `values-{en,zh,ko,es,fr,de}/strings.xml` が正本で、Kotlin に文言を直書きしない +(Compose は `stringResource`、Activity / Service / Worker は `getString`)。**キーを足したら7ファイル同時に足すこと** ―― +Android のリソース解決はキーが欠けても例外を出さず既定言語へ静かに落ちるので、混在した画面が出るまで気づけない。 +守るのは両モジュールの `StringsParityTest.kt`(キー集合・`%1$s` の個数・`\'` `\"` `&` `%%` のエスケープ。 +aapt2 のエスケープ検査は `assemble` でしか走らず `test` では黙っている)。**サーバへ送る `locale_name` を +`Locale.getDefault()` から自前で判定しないこと** ―― API 24+ の言語優先リスト(例 `[ar, en]`)では UI は `values-en` に +解決されるのに `getDefault()` は `ar` を返し、UI 英語・サーバ文言日本語に割れる。`GkillLocale.serverLocaleName(context)` = +`R.string.server_locale_name`(各 `values-xx` に `xx`)から引く。`GkillApiClient` の既定値は定数 `ja`(環境依存にすると +JVM テストが実行機の OS 言語で変わる)で、`LoginRequest` を含む全リクエストが `locale_name` を明示して送る +(kotlinx.serialization は encodeDefaults=false なので既定値のままだとキーごと落ちてサーバ側フォールバックになる。 +2026-09-10 まで実際にそうなっていた)。**`WearRequestHandler` と `GkillApiClient` に日本語を戻さないこと** ―― +時計へ返す失敗は `ERROR:` + `WIRE_ERR_*` の ASCII コード(`WearRequestHandler.kt` 先頭に一元定義)で持ち、 +時計に見せる文言へは `WearRequestWorker` が送信直前に `GkillErrorText.localizeWireResponse` で訳す(時計側では訳さない。 +サーバの `error_message` もスマホの `locale_name` で訳されて届くので、時計に出る文言はすべてスマホのロケールで一貫する)。 +コードを足したら `strings.xml` の `error_*` と `GkillErrorText.stringResOf` にも足す(`GkillErrorTextTest` が +`WIRE_ERROR_CODES` を全件なめて訳漏れを落とす。忘れると時計に `login_failed` のような生コードが出る)。 +`OK` / `DUPLICATE` / JSON 本文と KFTL テキストは訳さない。依存ライブラリの80言語超のリソースは +`androidResources.localeFilters` で7言語に絞る(`"ja"` を含めるのは依存側の `values-ja` を残すため)。companion は +`generateLocaleConfig = true` + `res/resources.properties`(`unqualifiedResLocale=ja`)で Android 13+ のアプリ別言語設定に出る +―― **手書きの `locales_config.xml` と併用しないこと**(ビルドエラー)。タイルは `onTileRequest` 時の文言で固定されるので +`LocaleChangedReceiver` が `LOCALE_CHANGED` で再描画を要求する。却下案は +[ADR-1102](../../../documents/adr/1102-wear-ui-strings-in-android-resources-with-ja-default.md)。 + +**ウォッチアプリのチップはタイルと同じ見た目にし、確認画面は ScalingLazyColumn で収める**(2026-09-13)。 +見た目の基準はタイル(`GkillTileService.kt`。protolayout-material の `Chip` 既定 = 140dp × 52dp・primary 色・ +文字中央揃え・副ラベル無しなら2行/有りなら1行で末尾省略・隙間なく縦積み・画面中央)で、アプリ側は +`presentation/components/MenuChip.kt` を使う。幅の定数 `MENU_CHIP_WIDTH_DP` はタイルと共有しているので +**片方だけ変えないこと**、タイトルや隙間を片側だけ足さないこと。**トップメニューを `ScalingLazyColumn` に +しないこと** ―― 端の項目が縮小・減光されてタイルと見た目が割れる(3チップ 156dp が丸画面に収まるのは、タイルが +同じ配置で収まっているのが根拠)。**本文+操作チップ2つの確認画面を固定 `Column` にしないこと** ―― 192dp の +丸画面から余白を引くと 160dp しか無く、3行本文+全幅チップ2つ(約190dp)では下の「キャンセル」が +エラーも警告も出さずに画面外へ落ちる(重複確認で実際に起きた)。`ScalingLazyColumn` に +`initialCenterItemIndex = 0` / `AutoCenteringParams(itemIndex = 0)` で本文を最初に中央へ置く(既定の item 1 中央だと +本文の1行目が上端で欠ける)。却下案は [ADR-1103](../../../documents/adr/1103-wear-app-chips-match-tile.md)。 + +**Data Layer のパス・companion が叩く `/api`・起動行の字面を足したり変えたりしたら境界対応表も直す。** 時計とスマホは同じパスの定数を別々に持ち、companion と Android はサーバと文字列だけでつながる。[cross-boundary-map.md](../../../documents/reverse/cross-boundary-map.md) の §5・§6・§11 を `npm run verify_docs` が時計・スマホ・サーバのコードと突き合わせる。 + +## 関連スキル + +- [gkill-go-backend](../gkill-go-backend/SKILL.md) — サーバ側の冪等ストアと HTTP セキュリティ、SQLite の 'localtime' と Go の time.Local の関係 +- [gkill-build-test](../gkill-build-test/SKILL.md) — ビルドパイプライン(embed 3コピー) +- [gkill-client-kftl](../gkill-client-kftl/SKILL.md) — KFTL の接頭辞と行の解釈(ウォッチが組み立てるテキストの受け手) + +## 詳しい設計と却下案(ADR) + +- [ADR-0220 SQLite の 'localtime' は libc のゾーンに従う(同梱サーバのタイムゾーンを Go と libc の両方へ教える)](../../../documents/adr/0220-sqlite-localtime-follows-libc-zone.md) +- [ADR-0510 メモ帳の再送キーは本文の指紋と結果を控え、同じ本文は再生し、別の本文は 409 で断る](../../../documents/adr/0510-kftl-idempotency-key-carries-fingerprint-and-result.md) +- [ADR-1101 ウォッチの気分記録は KFTL テキストで送る](../../../documents/adr/1101-wear-mood-goes-through-kftl-text.md) +- [ADR-1102 Wear OS の UI 文字列は Android リソースで持ち既定は ja](../../../documents/adr/1102-wear-ui-strings-in-android-resources-with-ja-default.md) +- [ADR-1103 ウォッチアプリのチップはタイルと同じ見た目にする](../../../documents/adr/1103-wear-app-chips-match-tile.md) +- [ADR-1104 Android 同梱サーバの待受・TLS・画面のアドレスは ServerConfig に従う](../../../documents/adr/1104-android-server-follows-server-config.md) +- [ADR-1105 Android の $GKILL_HOME を /sdcard/gkill に戻し、共有ストレージの権限が許可されるまでサーバを起動しない](../../../documents/adr/1105-android-home-back-to-sdcard-and-gate-on-storage-access.md) diff --git a/.claude/skills/gkill-plugin/SKILL.md b/.claude/skills/gkill-plugin/SKILL.md new file mode 100644 index 000000000..eaa0b85da --- /dev/null +++ b/.claude/skills/gkill-plugin/SKILL.md @@ -0,0 +1,156 @@ +--- +name: gkill-plugin +description: "gkill プラグイン(src/plugins/ の独立バイナリ・plugin/sdk/・本体側 dao/reps/plugin_*.go)の約束。manifest.json の provides と型別/付随データ、PluginTypedIndex から即答してプラグインへ往復しない読み取り、stdio のスロット直列化とプロセス回収条件、常駐ビルダ+WAL、Google Takeout の zip 直読みと CRC32+Size 差分、本文表示 plugin-html-view.vue の iframe 注入手順を扱う。src/plugins/・src/server/gkill/plugin/・api/gkill_plugin/・dao/reps/plugin_*.go・plugin-html-view.vue を触るとき必読。「プラグインの本文がときどき空白」「プロセスが殺され続ける」「歩数が2倍になる」の調査でも必読。" +--- + +# プラグインの不変条件 + +対象: `src/plugins/**` / `src/server/gkill/plugin/**` / `src/server/gkill/api/gkill_plugin/**` / `src/server/gkill/dao/reps/plugin_*.go` / `src/client/pages/views/plugin-html-view.vue` + +**このファイルは全文が、実際に起きた事故の再発防止である。該当作業では飛ばさずに読むこと。** +多くは「例外もエラーも出さずに静かに壊れる」種類で、破っても目の前ではエラーにならない。 + +## プラグイン一覧と実測仕様 + +``` + plugins/ # Standalone plugin binaries (each has its own go.mod, manifest.json, executable) + # examples/gkill_example/ — sample plugin (fixed Kyou response) + # gkill_plugin_archived_git_commit_log/ — Git repositories archived as zip + # (`name/.git/…`, root `.git/…`, several per zip, nested). + # Reads the zip's central directory only (sdk.OpenSources), + # streams the `.git/**` entries into a go-billy memfs and + # opens it with go-git — never extracts. One Kyou per + # commit with the native shape (ID = hash, rep name = + # repository dir name, times = committer, user = author, + # app = "git"), `provides: ["git_commit_log"]` and + # `data_type: git_commit_log` so the native + # GitCommitLogView draws it and commits that also live + # in a working repo collapse to one row. Declares one + # rep name per repository through `rep_names`. + # Same hash in two zips = one row named after the repo + # whose newest commit is latest (renames follow the new + # name; recomputed every build); fingerprint per repo + # is sha256 of (entry name, CRC32, size). Real data: + # tens of zips → thousands of commits / dozens of rep names in about a minute + # gkill_plugin_chatgpt/ — ChatGPT conversation history plugin. Reads the export + # ZIP as-is via sdk.OpenSources, never the extracted JSON + # (a loose conversations*.json folder/file is reported as + # `source_problems` on the config screen, not silently 0). + # Per archive `conversations-NNN.json` is preferred, else + # `conversations.json`. Signature = Path:CRC32:Size of the + # entries → whole rebuild on change; the same conversation + # id across zips → the newest update_time wins and the + # other version's messages are dropped (ADR-0310) + # gkill_plugin_claudeai/ — Claude.ai conversation history plugin. Same zip rules as + # chatgpt: `conversations-000.zip` holds one + # `conversations.json` (hundreds of MB in a real export) whose entry mtime is + # fixed at 1980-01-01, so only CRC32/Size can detect change + # gkill_plugin_claudecode/ — Claude Code chat log plugin (one Kyou per human + # message + one per its whole response run, + # source folder configurable, SQLite differential cache) + # gkill_plugin_codex/ — OpenAI Codex CLI rollout logs, same Kyou granularity as + # claudecode. Thread id is the FILENAME uuid, never + # `session_meta.session_id` (absent in nearly half of real files and, + # on a sub-agent, holds the PARENT's id). `session_meta` + # repeats once to a dozen-plus times per file: take identity from the FIRST + # occurrence only (a sub-agent file carries the parent's + # meta as its second) but merge cwd/git/originator across + # all. Conversation comes from the `event_msg` lane only + # (`response_item/message` mixes in injected preambles); + # tool *calls* come from `response_item`, tool *results* + # are never stored — they are over 90% of the bytes. Kyou IDs + # are UUIDv5 of (thread id, role, ordinal) since event_msg + # records have no id; append-only logs keep them stable. + # A single real line can be tens of MB, so `reader.go` classifies from + # the first 512 bytes and drains unwanted lines without + # buffering. Background builder + WAL (a few seconds first build / + # <1s incremental on hundreds of MB, dozens of files → hundreds of Kyou) + # gkill_plugin_fitbit/ — Google Takeout Fitbit/Google Health, aggregated to + # one KC per (day, metric). 34 metrics, background + # build (a few minutes first / <1s incremental on a zip of hundreds of MB). + # Partials are per (file, day, data source): from + # some day on the steps CSV carries the phone's + # `Phone Health Connect` rows beside the watch's on + # the same day, and the Fitbit app's own daily total + # is the watch alone. The fold takes every tracker + # source when one exists, else the first listed + # `secondary_data_sources` (ADR-0312); summing them + # doubled hundreds of days of steps + # gkill_plugin_google_locationhistory/ — Google Takeout location history as + # GPSLog (no Kyou, `emits_kyou: false` so it stays out + # of the rep list). Format detected by content, not path + # The two Takeout plugins, archived_git_commit_log, chatgpt and claudeai read their + # zips **as a zip, never extracted** — scan lives in `plugin/sdk/source.go` + # (`sdk.OpenSources`), shared by all five. Differential test is + # `(CRC32, Size)`, NOT mtime: Takeout stamps every entry with the same export time, so + # mtime never moves when content changes. One export = "dir + the takeout timestamp in + # the zip name", so split `-1-001`/`-1-002` parts merge but a second export dropped in + # the same folder does not (folder alone would double every summed metric). fitbit + # keeps an `export` table and folds only the lowest-rank export per (metric, day); + # locationhistory needs no ranking because its read-time `SELECT DISTINCT (time, lat, + # lng)` already collapses points across exports. + # The seven shippable plugins (archived_git_commit_log / chatgpt / claudeai / + # claudecode / codex / fitbit / locationhistory — gkill_example is + # excluded) take `source_dirs` in config.json (folders/globs), auto-create + # that config.json next to manifest.json on first start (existing files are never + # overwritten, via sdk.EnsureConfig + Handler.DefaultConfig), and can print their + # embedded manifest.json / default config.json via --gkill-print-manifest / + # --gkill-print-config, and build their cache synchronously without the stdio loop + # via --gkill-build-cache (SDK-level; `gkill_server generate_plugin_cache` drives it, + # see gkill-cli-ops). Their SQLite caches live under gkill's own cache dir + # ($GKILL_HOME/caches/plugin_cache/{userID}/{pluginName}/cache.db — resolved in + # plugin/sdk/cache_path.go (sdk.CacheDBPath) from the inherited GKILL_HOME env + # var, falling back to the plugin folder), so `clear_cache plugin` can wipe them. + # The 6 older plugins had a byte-identical cache_path.go each; it now lives in the SDK +``` + +- `gkill/api/gkill_plugin/` — Plugin protocol types: `PluginManifest`, `PluginRequest`, `PluginResponse`, `PluginKyou`, `PluginTypedData`, `PluginGPSLog` (stdio newline-delimited JSON) +- `gkill/plugin/sdk/` — Plugin author SDK. `sdk.Run(sdk.Handler{...})` starts the stdio JSON message loop. Logging goes through `sdk.LogWarn` / `LogError`(stderr + file)and `sdk.LogInfo` / `LogDebug`(file only)— never `os.Stdout`. `Handler` has 10 fields: `FindKyous` (required), `GetKyou`, `GetContentHTML`, `GetConfigHTML`, `PostConfig`, `GetGPSLogs`, `RepName`, `RepNames`, `DefaultConfig`, `BuildCache` (called once, synchronously, outside the stdio loop when the binary is started with `--gkill-build-cache`; nil = "no cache", reported as `no_cache`). Plugins are standalone binaries in `src/plugins/` + +**1本のプラグインが複数の rep 名を名乗れる(`rep_names`)。** `get_rep_name` の応答に `rep_names[]` を載せると(SDK は `Handler.RepNames`)、gkill はその名前を `get_all_rep_names`・rep 名の絞り込み(`find_filter.go` Step4)・本文取得の引き当て(`PluginManager.GetPluginByRepName`)・MCP の `get_rep_infos.plugins[]` / `get_plugin_list.rep_names` に使う。**null(欄なし)と `[]` は別**: null は「未対応」で manifest の `rep_name` 1つ、`[]` は「いまは0個」。名前を列挙する側は `GetRepName` を直接見ず **`reps.RepNamesOf`** を通すこと(`GetRepName` は代表名で、MatchReps のキーとログ用)。本体側は `pluginRepositoryImpl.GetRepNames` が **TTL 60秒**でキャッシュし、失敗しても前回値か manifest 名にフォールバックしてエラーにしない(Step4 は fan-out の外で逐次に走るので、失敗を返すと全検索が落ち、毎回取りに行くと全検索が期限ぶん止まる)。申告済みの名前は `warnPluginRepNameMismatchOnce` の対象外。zip の Git リポジトリを束ねる `gkill_plugin_archived_git_commit_log` が最初の利用者([ADR-0308](../../../documents/adr/0308-plugin-multiple-rep-names.md))。 + +**プラグインの型別/付随データ:** `manifest.json` の `provides`(既定は空=従来どおり)に種別を書くと、そのプラグインの記録が **native と同じ型別リポジトリに載る**。`kc` を宣言して `data_type: "kc"` を返せば `typed_kc` が埋まり Dnote の推移グラフで集計できる。`git_commit_log` を宣言して `data_type: "git_commit_log"` で `typed.git_commit_log{commit_message, addition, deletion}` を返せば `GitCommitLogReps` に載り、クライアントは native の `GitCommitLogView` で描き、MCP は `git_commit_log` payload を組み、**稼働中リポジトリと同じハッシュのコミットは `(ID, data_type, related_time)` の重複除去で1件に畳まれる**(別 data_type にすると2件並ぶ。[ADR-0309](../../../documents/adr/0309-plugin-provides-git-commit-log.md))。型別アダプタは全部読み取り専用で、`AddXxxInfo` はエラー、`WriteXxxRep` には決して入らない。`tag` を宣言すればタグ一覧(`get_all_tag_names`)に載るので、rykv の既定の絞り込み「タグ無し」から漏れる問題が起きない。`gpslog` は Kyou ではないので専用コマンド `get_gps_logs`(ページング必須)で受け渡す。**`provides` が `gpslog` だけのプラグインには型別索引を作らない**(`PluginManifest.NeedsTypedIndex()`)—— 索引の材料が1件も無いので、作ると `state:"never_built"` / `record_count:0` で永久に固定され「索引が壊れている」と誤読される。GPSの取り込み状況は `get_plugin_list` の別枠 `gps_index`。また `emits_kyou:false` のプラグインの `rep_name` / `data_type` は**どの検索値でもない**ので、「渡せる値」を並べる一覧(`get_all_rep_names` / `get_rep_infos` の `plugins[]` / 既知 data_type 集合)には載せないこと([ADR-0608](../../../documents/adr/0608-plugin-role-is-emits-kyou-and-provides.md))。 + +アダプタ(`dao/reps/plugin_typed_adapters.go` / `plugin_attached_adapters.go` / `gps_log_repository_plugin_impl.go`)の**読み取りは決してプラグインへ往復しない**。`PluginTypedIndex`(`plugin_typed_index.go`)が `find_kyous` 1回ぶんの不変スナップショットを持ち、そこから即答する。プラグイン呼び出しは容量1のスロットで直列化されるので、1件ずつ聞きに行くと一覧の行数ぶんの直列 stdio 呼び出しになりプロセスが殺され続ける。`GetLatestDataRepositoryAddress` は**型別は空・付随は実データ**(型別が返すと `UpdateTime` の揺れでレコードごと消え、付随が返さないと `--cache_in_memory=false` でタグが全部落ちる)。アダプタの `Close` は no-op(プロセスを閉じるのは本体と `PluginManager.CloseAll` だけ)。登録は `gkill_dao_manager.go` の `KCReps`→`Reps` コピーループより**後**(先だと二重検索になる)。詳細は `documents/reverse/plugin-system.md` の14章、却下案は [ADR-0302](../../../documents/adr/0302-plugin-provides-typed-index.md)。 + +本体側の受け口(`gkill/dao/reps/`)のプロセス管理: + +`plugin_repository_impl.go` manages plugin subprocess lifecycle (start, slot-guarded stdio, one persistent reader goroutine per process, response-ID matching, auto-restart on crash). **呼び出し元のキャンセル(HTTPクライアントの切断)ではプロセスを回収しない**(フロントは全リクエストに `AbortController` を張っているため)。回収するのは gkill 自身のデッドライン超過時だけ。直列化は mutex ではなく容量1のチャネル(`callSlot`)で行い、**期限はスロットを取ってから張る**。順番待ちの上限は別枠(`maxPluginQueueWait` 既定10秒)で、待ちきれなければ `ErrPluginBusy` を返すだけでプロセスには手を出さない。プラグイン rep は `Repositories` の fan-out でスレッドプールのスロットを取らない(`goForRep`)ので、プラグインのロック待ちで検索全体が止まることはない + +**プラグインの重い構築は常駐ビルダ + WAL + バッチcommit**(指摘 M-6)。claudecode も codex/fitbit と同じく `builder.go`(`EnsureStarted`/`Kick`/`loop`、mu(DB初期化)/buildMu(構築)分離で読み取り無待機、WAL 自前DSN、`cache_meta` に進捗)へ移行済み。`GetMessages`/`GetMessage`/`GetStats` は refresh を呼ばず現キャッシュ即答+Kick。同期・単一tx構築(デッドラインkill→進捗ゼロループ)を新規に書かないこと。 却下案(同期構築/ロック共有/デッドライン延長)と実測は [ADR-0305](../../../documents/adr/0305-plugin-background-builder-wal.md)。**同期構築を書いてよい唯一の場所は `Handler.BuildCache`**(`--gkill-build-cache` の単独モードで、stdio ループの外。ハンドラ期限が無い)。同梱7本は常駐ビルダが呼ぶのと同じ構築関数(`buildOnce` / `build` / `refresh`)をそこから呼ぶだけで、`EnsureStarted` / `Kick` は起こさない。配線の欠落は `plugin/sdk/build_cache_test.go` のソース走査が落とす(欠けると `generate_plugin_cache all` でそのプラグインだけ `no_cache` になり、エラーも出ない)。 + +**プラグインのログは `sdk.LogXxx` を通す。** `sdk.Run` が起動時(flag 解析の直後)に `$GKILL_HOME/logs/gkill_plugin_.log`(統合)と `gkill_plugin__{error,warn,info,access,debug,trace,trace_sql}.log` を開く(`` は `--gkill-plugin-dir` の末尾=manifest の `name`。既に `gkill_plugin_` で始まる名前は二重にしない。静的フィールドは `app=gkill_plugin` / `plugin` / `user_id` / `pid`。`plugin/sdk/plugin_log.go`)。レベルと回転は本体の `--log` / `--log_rotate_*` を **環境変数 `GKILL_LOG_LEVEL` / `GKILL_LOG_ROTATE_MAX_BYTES` / `GKILL_LOG_ROTATE_KEEP`** で継ぐ(`gkill_log.Init()` が書き出し、子は環境継承で受ける。`GKILL_HOME` と同じ経路なので起動側の `cmd.Env` は nil のまま。フラグにしないのは、SDK を使わない第三者バイナリが未知フラグで exit 2 になるため)。`LogWarn` / `LogError` は **stderr の `WARN: ` / `ERROR: ` 行をこれまでどおり出した上で**ファイルにも書き、`LogInfo` / `LogDebug` はファイルにだけ書く(stderr のリングは 4KB しか無いので節目で肝心のエラーを押し出さない)。SDK 自身は `plugin start` / `plugin stop` / `build cache` を Info、**1コマンド1行**(command / id / duration_ms / count / error)を Access で残す——「プロセスが殺され続ける」の調査で、どのコマンドが何ミリ秒かかったかはここにしか出ない。壊れた環境変数は既定(error / 32MiB / 5)へ倒して stderr に1行、ログ dir が作れない・home が分からない手起動は stderr だけで続行し、**ログの都合でプラグインを止めない**(panic も exit もしない)。同じプラグインを2プロセス(別利用者、常駐 + `generate_plugin_cache`)が同じファイルへ書きうるので、32MiB の回転は Windows では他方が閉じるまで失敗してファイルが育つ(承知の上。`pid` で出所は分かる)。`LogDebug` の定義は1行関数のままにする(`log_level_source_scan_test` の握り潰し検査が複数行の定義を誤検知する)。設計と却下案は [ADR-0313](../../../documents/adr/0313-plugin-logs-through-gkill-log.md)。 + +**stderr の診断は人間が読む前提で書く。** gkill はプラグインプロセスの stderr 末尾4KBをリングに保持し、`get_plugin_list` の `last_error` に載せる(`plugin_stderr_ring.go`。「is_alive=true なのに0件」の最初の手がかり。全文はログファイル側)。**プラグイン側に「実パスを書くな」の制約は課さない** —— 読み取り元やホームは診断に要る(ホームが `systemprofile` へ化ける事故はそれでしか分からない)。代わりに出口で伏せる: リングには生のまま入れ、`handle_get_plugin_list.go` が `message.RedactEnvironmentSpecific` を通してユーザー名を伏せ、MCP は中身自体を返さず `has_last_error` だけを返す([ADR-0707](../../../documents/adr/0707-redact-environment-specific-strings.md))。**stdout はプロトコルのチャネルなので、診断を書くのは必ず stderr かログファイル側**(`os.Stdout` に1バイトでも書くと NDJSON が壊れる)。 + +**プラグイン本文(`plugin-html-view.vue`)の iframe 越しの受け渡し**(2026-08-15 に「Ryuu の PluginKyou がときどき空白」「本文をダブルクリックしても KyouDialog が開かない」を潰して確立)。本文の入れ方は `is_list_view = typeof props.height === 'number'` で分岐し、一覧は `srcdoc` 直書き、Ryuu(`'fit-content'`)・rykv 詳細ペイン(`'auto'`)・KyouDialog(`'unset'`) は定数ローダーへの postMessage 注入(ダイアログの `pushState` より後に iframe がナビゲートするとブラウザバックが2回要るため、ローダー方式は外せない)。注入は**ローダーが `gkill_plugin_loader_ready` を名乗ってから**行う ―― `iframe.contentWindow` は about:blank の時点から真なので、それを見て先に送るとリスナー未登録の iframe に届いて黙って消え、`sent_html` のせいで送り直さないぶん本文が二度と入らない(ServiceWorker が `get_plugin_content_html` をキャッシュ優先で返すので、2回目以降の表示ほど負けやすい=「ときどき」)。ready のたびに `sent_html` を落として送り直し、Kyou が変わったら iframe ごと作り直す(`:key`。`document.open()` はローダーが `window` に張ったリスナーごと捨てるので使い回すと2件目が入らない)。**`@load` で `sent_html` を落としてはいけない**(`document.close()` でも `load` は発火しうるので注入ループになる)。iframe 内のダブルクリックは親のDOMへ伝播しないので、本文HTMLの末尾に転送スクリプトを足して `gkill_iframe_dblclick` を受け、**親が本物の `dblclick` を撃ち直す**(新しい emit 経路を作らないので `kyou-view.vue` と `ryuu-item-view.vue` の既存の `@dblclick` がそのまま拾う)。テーマ通知を最初のサイズ通知だけに限るのは、本文側がテーマ受信で測り直して送り返すため(毎回返すと10ms周期のピンポンになる)。`plugin-html-view.test.ts` が守る。 + +**ワード検索の判定はプラグインが唯一の判定者。SDK の `Query.MatchText` を使い、自前のループを書かない。** gkill 本体はプラグインが返した Kyou の本文を持たないので、`words` / `not_words` を再判定しない(`plugin_repository_impl.go` の `pluginKyouMatchesQuery` は Calendar と IDs だけ)。判定規則は本体の各 rep と同じで、正本は `api/find_word`(大小無視の部分一致、肯定語は「text に含む OR ID が語で始まる」—— ただし ID の前方一致を見るのは**語が7文字以上のときだけ**で、しきい値は `find_word.MinIDPrefixMatchLength` の1か所、判定は `find_word.IsIDPrefixMatchWord`。短い語は text にしか当たらない。前方一致でも気分の `8` で git のコミットが混ざっていた([ADR-0114](../../../documents/adr/0114-word-filter-id-prefix-needs-seven-chars.md))。除外語は text だけ、空語は無視)。プラグインは SDK 経由で同じ関数を使うので規則は自動で揃うが、**各プラグインのバイナリを作り直して配り直すまでは旧規則のまま動く**(本体だけ更新しても、プラグイン rep の結果だけ食い違い、エラーは出ない)。2026-09-12 まで SDK に判定が無く、4プラグインが同じループをコピペし、fitbit は空文字の語で結果が変わり、雛形の `gkill_example` はワードを完全に無視していた(雛形を写した第三者プラグインも無視する)。**照合に掛けるテキストはプラグインが決める**(chatgpt / claudeai は本文+会話タイトル、claudecode / codex は `search_text`+セッション名、fitbit は指標名・キー・単位・数値・デバイス・日付)。一覧をループで判定するときは `q.Matcher()` を1回作って回す。**単語で絞るときは SQL の LIMIT を押し込まない**(`matcher.HasWords()` で切り替える。絞る前に切ると後段で落ちたぶん取りこぼす。codex / fitbit の `QueryKyous` / `FindKyous`)。**型別アダプタ(`plugin_typed_adapters.go`)は索引の型別データを native と同じ列で判定する**(KC=TITLE+NUM_VALUE、Mi=TITLE+BOARD_NAME、Lantana=MOOD 等)ので、`rep_types` 指定や Mi 画面ではプラグインが独自に照合対象へ足した語(fitbit の "Fitbit")は当たらない。索引にプラグインの照合テキストを持たせる案は却下([ADR-0113](../../../documents/adr/0113-word-filter-columns-and-id-prefix.md))。守るテストは `plugin/sdk/match_words_test.go`、各プラグインの `find_kyous_test.go`、`dao/reps/plugin_typed_adapters_test.go` の `TestPluginTypedAdapter_FindKyousFiltersByWord`。 + +**`get_plugin_list` の `rep_names` は Kyou を出すプラグインでは常に載せ、値は「`query.reps` に渡せる rep 名」にする。** 申告があればその値(索引未構築なら `[]`)、申告しない・取得に失敗したプラグインは `[manifest の rep_name]`、`emits_kyou:false` は `null`。2026-09-19 まで申告があるときだけ載せる `omitempty` で、zip の Git リポジトリを束ねるプラグインの索引が未構築だとキーごと消え、応答には検索に使えない名札 `"ArchivedGit"` しか見えなかった(実利用報告)。manifest の `rep_name` を `query.reps` に渡すと Go の `pluginManifestRepNameHint` が「名札であって検索値ではない。`rep_names[]` を使え」と名指しする([ADR-0311](../../../documents/adr/0311-plugin-list-rep-names-are-always-the-query-values.md))。**manifest の `description` は実装の粒度と合わせること** —— `gkill_plugin_claudecode` は「1ターン=1Kyou」と書いたまま実装は「1発言=1Kyou(人間の発言と応答で2件)」になっていた(2026-09-19 に文言を直した。`data_type` の `claude_code_turn` は改名しない)。 + +**stdio のコマンド・起動フラグ・postMessage のキーを足したら境界対応表にも載せる。** SDK は本体の型を import しないので、両側は JSON のキーと文字列だけでつながる。[cross-boundary-map.md](../../../documents/reverse/cross-boundary-map.md) の §8・§9 を `npm run verify_docs` が本体・SDK・画面のコードと3者で突き合わせる。 + +## 関連スキル + +- [gkill-go-backend](../gkill-go-backend/SKILL.md) — `len(XxxReps) == 1` 判定禁止(provides プラグイン1つで長さが2になる)と検索フィルタ +- [gkill-find-query](../gkill-find-query/SKILL.md) — ワード検索の照合規則(SQL / Go / SDK の3実装を揃える) +- [gkill-mcp](../gkill-mcp/SKILL.md) — MCP からのプラグイン本文取得(`include_plugin_content`、同一プラグインへ並列に投げない) +- [gkill-client-foundation](../gkill-client-foundation/SKILL.md) — クライアント全域の規約(plugin-html-view の周辺) + +## 詳しい設計と却下案(ADR) + +- [ADR-0301 キャンセルとプロセス回収の切り分け](../../../documents/adr/0301-plugin-cancel-vs-kill.md) +- [ADR-0302 provides と PluginTypedIndex](../../../documents/adr/0302-plugin-provides-typed-index.md) +- [ADR-0303 差分判定は CRC32 と Size](../../../documents/adr/0303-plugin-cache-use-crc32-and-size.md) +- [ADR-0304 GPSLog 専用プラグインは Rep に出さない](../../../documents/adr/0304-plugin-emits-kyou-false.md) +- [ADR-0305 常駐ビルダと WAL](../../../documents/adr/0305-plugin-background-builder-wal.md) +- [ADR-0306 Codex のスレッドIDはファイル名から](../../../documents/adr/0306-codex-thread-id-from-filename.md) +- [ADR-0308 プラグインが複数の rep 名を名乗る](../../../documents/adr/0308-plugin-multiple-rep-names.md) +- [ADR-0309 provides に git_commit_log](../../../documents/adr/0309-plugin-provides-git-commit-log.md) +- [ADR-0310 ChatGPT / Claude.ai はエクスポート ZIP のまま読み、展開済み JSON は読まない](../../../documents/adr/0310-chat-export-plugins-read-zip.md) +- [ADR-0312 fitbit は同じ日に並ぶデータソースを合算せず、時計を優先して1系統だけ採る](../../../documents/adr/0312-fitbit-one-data-source-per-day.md) +- [ADR-0313 プラグインのログは gkill_log の別名ファイルへ出し、stderr には WARN / ERROR の接頭辞行だけを残す](../../../documents/adr/0313-plugin-logs-through-gkill-log.md) +- [ADR-0113 ワード検索の型別の対象列と ID の前方一致(プラグインは SDK の判定を使う)](../../../documents/adr/0113-word-filter-columns-and-id-prefix.md) +- [ADR-0114 ID の前方一致は7文字以上の語だけ(プラグインは配り直すまで旧規則)](../../../documents/adr/0114-word-filter-id-prefix-needs-seven-chars.md) +- [ADR-0707 端末固有の文字列は出口で伏せる](../../../documents/adr/0707-redact-environment-specific-strings.md) diff --git a/.cursor/rules/gkill.mdc b/.cursor/rules/gkill.mdc new file mode 100644 index 000000000..3f0a9eccd --- /dev/null +++ b/.cursor/rules/gkill.mdc @@ -0,0 +1,10 @@ +--- +description: gkill の規約の入口(AGENTS.md とルーティング表へ誘導) +alwaysApply: true +--- + +このリポジトリの規約は `AGENTS.md` にある。まずそれを読むこと。 +AGENTS.md の「触る場所ごとの必読資料(ルーティング表)」が、編集対象パスごとに読むべき +`.claude/skills/gkill-*/SKILL.md`(領域別の不変条件の正本)を指している。 +**表に一致する行があれば、編集を始める前にその SKILL.md を開くこと。** +このファイルには規約本文を書かない(正本は AGENTS.md と .claude/skills/。npm run verify_docs が検査する)。 diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index ade85716e..000000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-env node */ -require('@rushstack/eslint-patch/modern-module-resolution') - -module.exports = { - root: true, - 'extends': [ - 'plugin:vue/vue3-essential', - 'eslint:recommended', - '@vue/eslint-config-typescript' - ], - parserOptions: { - ecmaVersion: 'latest' - } -} diff --git a/.gemini/settings.json b/.gemini/settings.json new file mode 100644 index 000000000..f41546e4b --- /dev/null +++ b/.gemini/settings.json @@ -0,0 +1,3 @@ +{ + "contextFileName": ["AGENTS.md"] +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..c3b0dc2e6 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +# gradlew は Linux/WSL から直接実行するため LF 固定。 +# CRLF で checkout されるとビルドスクリプト側が毎回 LF へ書き換えて作業ツリーが汚れる。 +src/android/gradlew text eol=lf +src/wear_os/gradlew text eol=lf +*.bat text eol=crlf + +# マニュアル(生成物)・原稿フラグメント・docs ツールは LF 固定。 +# 生成鮮度チェック(verify_docs)が Windows/Linux で一致するようにするため。 +resources/manual/** text eol=lf +resources/manual_src/** text eol=lf +src/tools/*.mjs text eol=lf diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 000000000..978092654 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,14 @@ +#!/bin/sh +# コミット前の必須検査。何があっても飛ばさないこと(--no-verify の使用は禁止)。 +# +# verify_docs は資料の件数・リンク検査に加えて、個人情報・実環境情報の混入検査 +# (checkPersonalInfo)を全ソース・資料・マニュアル原稿に対して行う。 +# リポジトリ直下に verify_docs_personal_ngwords.local.txt(gitignore 済み・1行1語・ +# 大小無視の部分一致)があれば、その環境固有の NG 語も検査に加わる。 +# 検査の実体は src/tools/verify_docs.mjs。 +npm run verify_docs || { + echo "" + echo "verify_docs が失敗したためコミットを中止しました。" + echo "個人情報の疑いが出た場合は、該当箇所をプレースホルダへ置換してから再コミットすること。" + exit 1 +} diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml new file mode 100644 index 000000000..8a7156fac --- /dev/null +++ b/.github/codeql/codeql-config.yml @@ -0,0 +1,36 @@ +name: "gkill CodeQL config" + +# セキュリティに加えて品質クエリも実行する +queries: + - uses: security-and-quality + +# 解析対象から外すパス +paths-ignore: + # ビルド時にのみ実行される補助スクリプト群。 + # 製品バイナリには含まれず、入力も自リポジトリ内のファイルに限られる。 + - src/tools/** + + # マニュアルの生成物(.gitignoreで無視しているが明示しておく) + - resources/manual/** + + # テストコード。製品バイナリには含まれず、入力も自リポジトリ内に限られる。 + # os.tmpdir() をテストだけが使っているために、テイントを追われた lib 側が + # js/insecure-temporary-file として報告されるのを避ける。 + # なお paths-ignore が効くのは js-ts のようにビルドせず解析する言語だけで、 + # autobuild の go / manual build の java-kotlin では無視される。 + - "**/__tests__/**" + + # ビルド生成物。いずれも .gitignore 済みで、CI はクリーンチェックアウトなので + # そもそも存在しない。ローカル実行(npm run codeql)では作業ツリーに残っており、 + # 外さないと生成物由来の指摘が本物を埋めてしまう。 + # 実測: 除外前 2919件 → 除外後 5件(2919件のうち 2812件が Gradle の + # configuration-cache レポート、81件が Playwright レポート、22件が Vite の + # minified バンドル。いずれも手で書いたコードではない)。 + - dist/** + - "**/build/**" + - playwright-report/** + - test-results/** + + # embed 配下は dist/ と resources/manual/ のコピー(//go:embed 用)。 + # 追跡しているのは PLACEHOLDER.md だけ。 + - "**/embed/**" diff --git a/.github/codeql/local-baseline.json b/.github/codeql/local-baseline.json new file mode 100644 index 000000000..6d59bc070 --- /dev/null +++ b/.github/codeql/local-baseline.json @@ -0,0 +1,670 @@ +{ + "note": "npm run codeql が「既知」として扱う指摘の一覧。ここに無い指摘が出たら失敗する。 GitHub 側で棄却した指摘や、修正しないと決めた指摘を入れておく。 更新するときは npm run codeql -- --update-baseline。 lang は記録した言語。指定した言語ぶんだけが差し替わる。", + "findings": [ + { + "fingerprint": "go/disabled-certificate-check|src/server/gkill/main/common/common.go|26a8d23b4fc877c4:1", + "lang": "go", + "rule": "go/disabled-certificate-check", + "file": "src/server/gkill/main/common/common.go", + "message": "InsecureSkipVerify should not be used in production code." + }, + { + "fingerprint": "go/log-injection|src/server/gkill/api/gkill_server_api/gkill_server_api_access_log.go|d8cd7a779f84cb4f:1", + "lang": "go", + "rule": "go/log-injection", + "file": "src/server/gkill/api/gkill_server_api/gkill_server_api_access_log.go", + "message": "This log entry depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/path-injection|src/server/gkill/api/gkill_server_api/handle_update_server_configs.go|d15c00a8f4fa2dd8:1", + "lang": "go", + "rule": "go/path-injection", + "file": "src/server/gkill/api/gkill_server_api/handle_update_server_configs.go", + "message": "This path depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/path-injection|src/server/gkill/api/gkill_server_api/handle_update_server_configs.go|d2f57d703240cfe6:1", + "lang": "go", + "rule": "go/path-injection", + "file": "src/server/gkill/api/gkill_server_api/handle_update_server_configs.go", + "message": "This path depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/path-injection|src/server/gkill/dao/plugin_manager.go|5ac2060ff08e526f:1", + "lang": "go", + "rule": "go/path-injection", + "file": "src/server/gkill/dao/plugin_manager.go", + "message": "This path depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/path-injection|src/server/gkill/dao/plugin_manager.go|ad5a0c7526c5f22e:1", + "lang": "go", + "rule": "go/path-injection", + "file": "src/server/gkill/dao/plugin_manager.go", + "message": "This path depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/path-injection|src/server/gkill/dao/plugin_manager.go|f3b11d4a44786ebc:1", + "lang": "go", + "rule": "go/path-injection", + "file": "src/server/gkill/dao/plugin_manager.go", + "message": "This path depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/reflected-xss|src/server/gkill/mcp/http_transport.go|9666f999db56f0da:1", + "lang": "go", + "rule": "go/reflected-xss", + "file": "src/server/gkill/mcp/http_transport.go", + "message": "Cross-site scripting vulnerability due to [user-provided value](1)." + }, + { + "fingerprint": "go/request-forgery|src/server/gkill/api/safefetch/safefetch.go|30b724f1cf0039e2:1", + "lang": "go", + "rule": "go/request-forgery", + "file": "src/server/gkill/api/safefetch/safefetch.go", + "message": "The [URL](1) of this request depends on a [user-provided value](2)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/cache/latest_data_repository_address_dao_sqlite3_impl.go|44fb594b933564cb:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/cache/latest_data_repository_address_dao_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/cache/latest_data_repository_address_dao_sqlite3_impl.go|6922ad60c479bc9b:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/cache/latest_data_repository_address_dao_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go|23225c03817a010c:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go|2852978e85eb34f7:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go|8ac629cc4c619e48:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go|8cc75df9ae43c90d:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go|a46489e1d6b455d:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go|a6bf28308e8badc1:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/git_commit_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/idf_kyou_repository_cached_sqlite3_impl.go|7e23ba83b878eef8:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/idf_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/idf_kyou_repository_cached_sqlite3_impl.go|8a8d2c16059abe9c:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/idf_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/idf_kyou_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/idf_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/idf_kyou_repository_cached_sqlite3_impl.go|94feaa0cc68b77e:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/idf_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/idf_kyou_repository_sqlite3_impl.go|d49fc0ab1ca9f6f:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/idf_kyou_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kc_repository_cached_sqlite3_impl.go|2cba809f7ed14409:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kc_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kc_repository_cached_sqlite3_impl.go|426ce13290800221:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kc_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kc_repository_cached_sqlite3_impl.go|512ee20da2d3e8d0:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kc_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kc_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kc_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kc_repository_sqlite3_impl.go|bc4171b7fbcfed18:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kc_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kmemo_repository_cached_sqlite3_impl.go|426ce13290800221:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kmemo_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kmemo_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kmemo_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kmemo_repository_cached_sqlite3_impl.go|8fcca1d1c5379a14:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kmemo_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kmemo_repository_cached_sqlite3_impl.go|e3e1259ac7044474:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kmemo_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/kmemo_repository_sqlite3_impl.go|86ecd175403212ac:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/kmemo_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/lantana_repository_cached_sqlite3_impl.go|4df9cbf92b6d766c:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/lantana_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/lantana_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/lantana_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/lantana_repository_cached_sqlite3_impl.go|cf6fcd9300e13700:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/lantana_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/lantana_repository_cached_sqlite3_impl.go|efd64200c90f1066:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/lantana_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/lantana_repository_sqlite3_impl.go|86ecd175403212ac:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/lantana_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_re_kyou_repository_cached_sqlite3_impl.go|5e14867b2a62950:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_re_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_re_kyou_repository_cached_sqlite3_impl.go|bcbf8a1bb44da7e0:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_re_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_re_kyou_repository_cached_sqlite3_impl.go|cc239d3aefd1424d:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_re_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_re_kyou_repository_sqlite3_impl.go|6e13a03fd4c65ef9:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_re_kyou_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go|5e2d0be5276e2520:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go|64b094ef7f6b69d1:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go|b3c8dd93248aa439:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go|ba773361f3fee05c:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go|fcb5ed20b65a0dcf:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/mi_repository_sqlite3_impl.go|2b50297df47d5995:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/mi_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/nlog_repository_cached_sqlite3_impl.go|4aa9039d3a2d2cf0:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/nlog_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/nlog_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/nlog_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/nlog_repository_cached_sqlite3_impl.go|8f7f97b900a1d5e1:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/nlog_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/nlog_repository_cached_sqlite3_impl.go|9627f4c0dbde5f2b:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/nlog_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/nlog_repository_sqlite3_impl.go|86ecd175403212ac:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/nlog_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/notification_repository_cached_sqlite3_impl.go|831c787356b1d81f:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/notification_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/notification_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/notification_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/notification_repository_cached_sqlite3_impl.go|bd094344fed8c049:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/notification_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/notification_repository_cached_sqlite3_impl.go|d6af7130710e1dff:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/notification_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/re_kyou_repository_cached_sqlite3_impl.go|1269362319218069:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/re_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/re_kyou_repository_cached_sqlite3_impl.go|303274a3bf3d2df9:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/re_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/re_kyou_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/re_kyou_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go|3d6019597c967e88:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go|442f487813ddb4ab:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go|75cc38903257a002:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go|8471dc9923018c2f:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go|89950ad1984b5a5:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go|f5d48fa19c3930eb:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/tag_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go|1a0914d96dc4bcc5:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go|2c0fc9329e761d0e:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go|36659008c04ccb00:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go|3d6019597c967e88:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go|442f487813ddb4ab:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/text_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/time_is_repository_cached_sqlite3_impl.go|474ac114f11ebd6d:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/time_is_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/time_is_repository_cached_sqlite3_impl.go|7cfc2e9b625a70ff:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/time_is_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/time_is_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/time_is_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/time_is_repository_cached_sqlite3_impl.go|d77328b5f756aa1:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/time_is_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/time_is_repository_sqlite3_impl.go|bc4171b7fbcfed18:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/time_is_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go|4cdc34b818b7a07c:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go|88aa940c61690d3:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go|8ce191d96afcb433:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go|a8ba6e9a6aae94a0:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/reps/ur_log_repository_sqlite3_impl.go|86ecd175403212ac:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/reps/ur_log_repository_sqlite3_impl.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go|1004f39141ca443f:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/sql-injection|src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go|13635ce25fb867b2:1", + "lang": "go", + "rule": "go/sql-injection", + "file": "src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go", + "message": "This query depends on a [user-provided value](1)." + }, + { + "fingerprint": "go/weak-sensitive-data-hashing|src/server/gkill/mcp/gkill_client.go|6536a53f6c50ddb6:1", + "lang": "go", + "rule": "go/weak-sensitive-data-hashing", + "file": "src/server/gkill/mcp/gkill_client.go", + "message": "[Sensitive data (password)](1) is used in a hashing algorithm (SHA256) that is insecure for password hashing, since it is not a computationally expensive hash function." + }, + { + "fingerprint": "java/android/missing-certificate-pinning|src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt|31a6956c7e3ed32b:1", + "lang": "java-kotlin", + "rule": "java/android/missing-certificate-pinning", + "file": "src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt", + "message": "This network call does not implement certificate pinning. (no explicitly trusted domains)" + }, + { + "fingerprint": "java/android/missing-certificate-pinning|src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt|376e02e8165f93f1:1", + "lang": "java-kotlin", + "rule": "java/android/missing-certificate-pinning", + "file": "src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt", + "message": "This network call does not implement certificate pinning. (no explicitly trusted domains)" + }, + { + "fingerprint": "java/android/missing-certificate-pinning|src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt|528a06b46657fe6c:1", + "lang": "java-kotlin", + "rule": "java/android/missing-certificate-pinning", + "file": "src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt", + "message": "This network call does not implement certificate pinning. (no explicitly trusted domains)" + }, + { + "fingerprint": "java/android/missing-certificate-pinning|src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt|53f5f0df4695d1e7:1", + "lang": "java-kotlin", + "rule": "java/android/missing-certificate-pinning", + "file": "src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt", + "message": "This network call does not implement certificate pinning. (no explicitly trusted domains)" + }, + { + "fingerprint": "java/android/missing-certificate-pinning|src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt|7ecee88b7f60280:1", + "lang": "java-kotlin", + "rule": "java/android/missing-certificate-pinning", + "file": "src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt", + "message": "This network call does not implement certificate pinning. (no explicitly trusted domains)" + }, + { + "fingerprint": "java/android/missing-certificate-pinning|src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt|7ecee88b7f60280:2", + "lang": "java-kotlin", + "rule": "java/android/missing-certificate-pinning", + "file": "src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt", + "message": "This network call does not implement certificate pinning. (no explicitly trusted domains)" + }, + { + "fingerprint": "java/android/missing-certificate-pinning|src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt|aac56fcde3017ee0:1", + "lang": "java-kotlin", + "rule": "java/android/missing-certificate-pinning", + "file": "src/wear_os/phone_companion/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/wear/companion/GkillApiClient.kt", + "message": "This network call does not implement certificate pinning. (no explicitly trusted domains)" + }, + { + "fingerprint": "java/android/websettings-javascript-enabled|src/android/app/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/MainActivity.kt|dd08c410ec3caaa5:1", + "lang": "java-kotlin", + "rule": "java/android/websettings-javascript-enabled", + "file": "src/android/app/src/main/java/com/gkill_android/mobile_app/src/gkill/mt3hr/gkill/MainActivity.kt", + "message": "JavaScript execution enabled in WebView." + }, + { + "fingerprint": "js/clear-text-storage-of-sensitive-data|src/client/classes/api/gkill-api.ts|3b69bff77e043f47:1", + "lang": "javascript-typescript", + "rule": "js/clear-text-storage-of-sensitive-data", + "file": "src/client/classes/api/gkill-api.ts", + "message": "This stores sensitive data returned by [an access to map_latitude](1) as clear text." + }, + { + "fingerprint": "js/clear-text-storage-of-sensitive-data|src/client/classes/api/gkill-api.ts|5a6e0c6c90dc7cd4:1", + "lang": "javascript-typescript", + "rule": "js/clear-text-storage-of-sensitive-data", + "file": "src/client/classes/api/gkill-api.ts", + "message": "This stores sensitive data returned by [an access to map_latitude](1) as clear text." + } + ] +} diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 000000000..ed38914df --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,7 @@ +# GitHub Copilot instructions + +このリポジトリの規約は `AGENTS.md` にある。まずそれを読むこと。 +AGENTS.md の「触る場所ごとの必読資料(ルーティング表)」が、編集対象パスごとに読むべき +`.claude/skills/gkill-*/SKILL.md`(領域別の不変条件の正本)を指している。 +**表に一致する行があれば、編集を始める前にその SKILL.md を開くこと。** +このファイルには規約本文を書かない(正本は AGENTS.md と .claude/skills/。npm run verify_docs が検査する)。 diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..bd772e9cb --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,49 @@ +# Dependabotの更新設定。 +# +# この設定を置くまではセキュリティ更新しか動いておらず、通常のバージョン更新が +# 止まっていた。依存が古びたまま放置されると新しいadvisoryが出るたびに +# アラートが積み上がるので、定期的に上げる。 +# +# PRが洪水にならないよう、npmはminor/patchを1本のPRにまとめ、 +# 各エコシステムに同時オープン数の上限を入れている。 +version: 2 +updates: + # ルートのpackage.json / package-lock.json。 + # npm の依存はルートの1つだけ(MCP サーバは Go 実装で node_modules を使わない)。 + - package-ecosystem: npm + directory: / + schedule: + interval: weekly + open-pull-requests-limit: 5 + groups: + # minor/patchはまとめて1本にする。majorは個別PRのまま目視で見る + npm-minor-patch: + update-types: + - minor + - patch + + # Goは本体とプラグインを「1つのPRにまとめて」上げる。 + # + # src/plugins配下の4モジュールは replace で ../../server を参照しているので、 + # src/server の依存が動くとプラグイン側のgo.modに載っている indirect が古くなり、 + # go mod tidy を打つまで `go: updates to go.mod needed` でビルドが落ちる。 + # 本体だけを対象にすると、立つPRが必ず「Plugins (go test)」ジョブを落とす。 + # directories(複数形) + groups で全モジュールを同じPRに入れて足並みを揃える。 + - package-ecosystem: gomod + directories: + - /src/server + - /src/plugins/* + schedule: + interval: weekly + open-pull-requests-limit: 3 + groups: + gomod-all: + patterns: + - "*" + + # ワークフローで使うActions。現状すでに全部最新メジャーなのでmonthlyで十分。 + - package-ecosystem: github-actions + directory: / + schedule: + interval: monthly + open-pull-requests-limit: 3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..16f9587b7 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,198 @@ +name: CI + +# ビルドとテストを回すワークフロー。 +# これまでCIはCodeQLだけで、push/PRでコンパイルもテストも実行していなかった。 +# ローカルの `npm test` は install_server から始まって30分近くかかるため、 +# ここでは E2E / Android / Wear OS を外した「速い層」だけを回す。 +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + workflow_dispatch: + +# ビルド・テストだけのワークフローに書き込み権限は不要。 +# 既定の広い GITHUB_TOKEN を checkout に必要な最小権限へ絞る (指摘 F-012)。 +permissions: + contents: read + +jobs: + go: + name: Go (build / vet / test) + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Set up Go + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 + with: + go-version-file: src/server/go.mod + cache-dependency-path: src/server/go.sum + + - name: Set up Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + cache: npm + + # api パッケージの init() は embed/i18n/locales を読み、 + # 見つからなければ panic する。localesのコピーはViteのビルドを伴わないので、 + # フロントエンド一式をビルドしなくてもここだけ用意すればGoのテストが回る。 + - name: Install dependencies + run: npm ci + + # サムネイル生成の外部ツール経路(ffmpeg / libvips の CLI)を CI でも実際に走らせる。 + # 無ければ該当テストは Skip で緑になり、外部ツールの引数や出力の扱いが壊れても + # 一度も走らないまま通ってしまう(2026-09-22 まで ffmpeg 系は全部 Skip だった)。 + - name: Install ffmpeg and libvips (thumbnail backends) + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends ffmpeg libvips-tools + ffmpeg -version | head -1 + vips --version + + # api パッケージが必要とする埋め込み資産を用意する。 + # locales : init() が読む。無いと panic する + # version.json: GetVersion() が読む。/api/get_application_config が使う + # どちらも Vite のビルドを伴わないので、フロントエンド一式は不要。 + - name: Prepare embedded assets + run: | + npm run copy_i18n_to_app_embed + npm run put_version_info_embed + + - name: go build + working-directory: src/server + run: go build ./... + + - name: go vet + working-directory: src/server + run: go vet ./... + + # gofmt はこれまでCIに無く、実質60ファイルぶんの崩れが溜まっていた。 + # 1行足すだけで二度と溜まらない + - name: gofmt + working-directory: src/server + run: test -z "$(gofmt -l .)" || (gofmt -l . && echo '::error::gofmt が必要なファイルがあります' && exit 1) + + - name: go test + working-directory: src/server + run: go test ./... + + # 共有状態の競合はレースディテクタでしか出ないものがある。 + # 全パッケージに掛けると時間がかかるので、共有インスタンスを扱う層に絞る。 + - name: go test -race (dao) + working-directory: src/server + run: go test -race ./gkill/dao/... + + frontend: + name: Frontend (type-check / lint / unit) + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Set up Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Type check + run: npm run type-check + + # vue-tsc の型検査だけでは Vite / PWA 側の設定破損(プラグイン構成や + # PWA マニフェスト生成など、型に現れない壊れ方)を見逃す。実ビルドを + # 1回通して検出する。build は run-p で type-check と二重実行になるので + # build-only を直接呼ぶ。 + - name: Build (Vite) + run: npm run build-only + + # npm run lint は --fix なのでCIでは使わない。差分を書き換えずに検査する。 + # --max-warnings 0: E2Eの固定sleep / 条件分岐(=静かに成功するテスト)や + # 未使用インポートを警告のまま溜めないための歯止め + - name: Lint + run: npx eslint --max-warnings 0 + + - name: Unit test + run: npm run test_client_unit + + # src/tools/ のリリースゲート・attestation ランナーのテスト(vitest.config.tools.ts)。 + # ゲートが壊れると「テスト未実施のコミットが配布される」に戻るので CI でも回す。 + - name: Tools test + run: npm run test_tools + + docs: + name: Docs (verify_docs) + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Set up Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + # resources/manual/ は生成物で追跡していない。 + # verify_docs はマニュアルの生成鮮度と言語間のページ集合一致を見るので、 + # 先に manual_src から生成しておく必要がある。 + - name: Build manuals + run: npm run build_manuals + + - name: Verify docs + run: npm run verify_docs + + plugins: + name: Plugins (go test) + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Set up Go + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 + with: + go-version-file: src/server/go.mod + cache-dependency-path: src/server/go.sum + + - name: Set up Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + # 各プラグインは独立したGoモジュールで、go.mod が ../../server を replace している。 + # server 側がコンパイルできる必要があるので locales を用意する。 + # api パッケージが必要とする埋め込み資産を用意する。 + # locales : init() が読む。無いと panic する + # version.json: GetVersion() が読む。/api/get_application_config が使う + # どちらも Vite のビルドを伴わないので、フロントエンド一式は不要。 + - name: Prepare embedded assets + run: | + npm run copy_i18n_to_app_embed + npm run put_version_info_embed + + - name: Plugin vet + run: npm run vet_plugins + + - name: Plugin tests + run: npm run test_plugins diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 000000000..0cdd0df2e --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,187 @@ +name: "CodeQL Advanced" + +on: + push: + branches: ["main"] + + pull_request: + branches: ["main"] + + schedule: + - cron: "44 14 * * 1" + + # GitHub Actions画面から手動実行できるようにする + workflow_dispatch: + +jobs: + analyze: + name: Analyze (${{ matrix.language }}) + + runs-on: ubuntu-latest + + # GradleやCodeQLが停止した場合に無制限に実行し続けないための上限 + timeout-minutes: 60 + + permissions: + # Code scanningの解析結果を登録するために必要 + security-events: write + + # CodeQL query packや依存関係の取得に使用 + packages: read + + # リポジトリ読み取り + actions: read + contents: read + + strategy: + fail-fast: false + + matrix: + include: + # Goはこれまでどおり自動ビルド + - language: go + build-mode: autobuild + + # Kotlinは自動ビルドに失敗するため手動ビルド + - language: java-kotlin + build-mode: manual + + # JavaScript / TypeScriptはビルド不要 + - language: javascript-typescript + build-mode: none + + steps: + # ------------------------------------------------------------ + # リポジトリ取得 + # ------------------------------------------------------------ + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + # ------------------------------------------------------------ + # Android / Kotlinの実行環境 + # + # AGP 8.9.0を動かすため、JDK 17を使用する。 + # Gradleキャッシュもここで有効化する。 + # ------------------------------------------------------------ + - name: Set up JDK 17 + if: matrix.language == 'java-kotlin' + uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 + with: + distribution: temurin + java-version: "17" + cache: gradle + cache-dependency-path: | + src/android/**/*.gradle* + src/android/gradle/libs.versions.toml + src/android/gradle/wrapper/gradle-wrapper.properties + src/wear_os/**/*.gradle* + src/wear_os/gradle/libs.versions.toml + src/wear_os/gradle/wrapper/gradle-wrapper.properties + + # ------------------------------------------------------------ + # CodeQL初期化 + # + # Java/Kotlinの場合、この処理より後に実行されたコンパイルを + # CodeQLが追跡して解析データベースを作る。 + # ------------------------------------------------------------ + - name: Initialize CodeQL + uses: github/codeql-action/init@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + + # 実行するクエリスイートと解析対象パスは設定ファイル側で定義している + config-file: ./.github/codeql/codeql-config.yml + + # ------------------------------------------------------------ + # Gradle Wrapper確認 + # + # Wrapper関連ファイルが不足している場合に、 + # 分かりやすい場所で失敗させる。 + # ------------------------------------------------------------ + - name: Verify Gradle wrappers + if: matrix.language == 'java-kotlin' + shell: bash + run: | + test -f src/android/gradlew + test -f src/android/gradle/wrapper/gradle-wrapper.jar + test -f src/android/gradle/wrapper/gradle-wrapper.properties + + test -f src/wear_os/gradlew + test -f src/wear_os/gradle/wrapper/gradle-wrapper.jar + test -f src/wear_os/gradle/wrapper/gradle-wrapper.properties + + chmod +x src/android/gradlew + chmod +x src/wear_os/gradlew + + # ------------------------------------------------------------ + # CodeQL解析用のKotlinバージョン固定 + # + # CodeQLのKotlin extractorは 2.4.10 未満にしか対応しておらず、 + # 2.4.10 のままだと compileDebugKotlin が + # KotlinVersionTooRecentError で落ちて解析が一切行われない + # (java-kotlinの解析結果が0件のままになる)。 + # ここでの書き換えはCIの作業ツリー限りで、コミットはしない。 + # CodeQLが 2.4.10 に対応したらこのステップごと削除する。 + # ------------------------------------------------------------ + - name: Pin Kotlin version for CodeQL + if: matrix.language == 'java-kotlin' + shell: bash + run: | + sed -i 's/^kotlin = ".*"/kotlin = "2.4.0"/' \ + src/android/gradle/libs.versions.toml \ + src/wear_os/gradle/libs.versions.toml + + grep -n '^kotlin' \ + src/android/gradle/libs.versions.toml \ + src/wear_os/gradle/libs.versions.toml + + # ------------------------------------------------------------ + # AndroidアプリのKotlin / Javaをビルド + # + # 対象: + # src/android/app + # ------------------------------------------------------------ + # --no-build-cache が要る理由: + # CodeQLはinit以降に走ったコンパイルを追跡して解析データベースを作る。 + # ビルドキャッシュ(org.gradle.caching=true)が効くとコンパイルタスクが + # キャッシュから復元されて実際には走らないため、CodeQLは何も観測できず + # 「didn't build any of it」で解析ごと失敗する。 + # キャッシュが温まった2回目以降に必ず起きるので、ここでは無効にする。 + - name: Build Android application + if: matrix.language == 'java-kotlin' + working-directory: src/android + shell: bash + run: | + ./gradlew \ + :app:assembleDebug \ + --no-build-cache \ + --no-daemon \ + --stacktrace + + # ------------------------------------------------------------ + # Wear OSアプリのKotlin / Javaをビルド + # + # 対象: + # src/wear_os/watch_app + # src/wear_os/phone_companion + # ------------------------------------------------------------ + - name: Build Wear OS applications + if: matrix.language == 'java-kotlin' + working-directory: src/wear_os + shell: bash + run: | + ./gradlew \ + :watch_app:assembleDebug \ + :phone_companion:assembleDebug \ + --no-build-cache \ + --no-daemon \ + --stacktrace + + # ------------------------------------------------------------ + # 解析実行・GitHubへの結果登録 + # ------------------------------------------------------------ + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4 + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 000000000..528c11a0b --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,181 @@ +name: Nightly + +# 夜間に回す重いチェック。 +# CI (ci.yml) は push / PR 用の「速い層」で、E2E / Android / Wear OS / 脆弱性検査を +# 外している (ローカルの `npm test` は install_server から始まり30分近くかかるため)。 +# それらをまとめてここで毎日回す。 +# +# 各ジョブは独立。E2E と Android/Wear は既知フレーク (mi-operations 2本 / +# add-dialog-crud / delete-crud。全体負荷依存で Mi 板変更・MiReKyou ダイアログ系も +# 揺れることが 点検ランで観測された) があるため continue-on-error のままにし、 +# 安定したら外していく。govulncheck / npm_audit にはフレーク要因が無いので +# fail-closed (指摘 F-009)。外部 advisory の増減で赤くなるのは +# 「新しい既知脆弱性が届いた」という本物の信号で、握りつぶすと次の配布物へ入る。 +# +# すべて ubuntu-latest で回す。Windows は並列プロセス過多で 0xC0000142 の +# 偽失敗が出るため、夜間の自動実行には向かない。 +on: + schedule: + # 毎日 15:17 UTC。分をずらして GitHub 側のスケジュール混雑ピークを避ける + - cron: "17 15 * * *" + + # GitHub Actions画面から手動実行できるようにする + workflow_dispatch: + +# テスト・検査だけのワークフローに書き込み権限は不要 (指摘 F-012) +permissions: + contents: read + +jobs: + e2e: + name: E2E (Playwright) + runs-on: ubuntu-latest + # 既知フレークがあるので、E2Eの flake で夜間全体を赤にしない + continue-on-error: true + timeout-minutes: 45 + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Set up Go + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 + with: + go-version-file: src/server/go.mod + cache-dependency-path: src/server/go.sum + + - name: Set up Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + # E2E は Vite dev server でフロントを配信するが、gkill_server は + # embed/i18n/locales が無いと起動時に panic する。prepare_install で + # 埋め込み資産一式 (locales / version.json / フロントビルド) を用意してから + # サーバをビルドする。 + - name: Prepare install (frontend build + embed assets) + run: npm run prepare_install + + # run-e2e.mjs は PATH から gkill_server を探して起動する。 + # RUNNER_TEMP にビルドして次のステップで PATH へ通す。 + - name: Build gkill_server + working-directory: src/server + run: | + mkdir -p "$RUNNER_TEMP/bin" + go build -o "$RUNNER_TEMP/bin/gkill_server" ./gkill/main/gkill_server + + - name: Add gkill_server to PATH + run: echo "$RUNNER_TEMP/bin" >> "$GITHUB_PATH" + + # E2E は Chromium だけ使う。--with-deps でランナーに不足しているライブラリも入れる + - name: Install Playwright browser + run: npx playwright install --with-deps chromium + + # run-e2e.mjs が gkill_server と Vite を空きポートで自動起動・停止し、 + # Playwright を回す。 + - name: Run E2E tests + run: node src/client/__tests__/e2e/run-e2e.mjs + + android_wear: + name: Android / Wear OS (gradle test) + runs-on: ubuntu-latest + continue-on-error: true + timeout-minutes: 45 + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + # AGP を動かすため JDK 17 を使う。Gradleキャッシュもここで有効化する + # (codeql.yml の Android / Kotlin 環境と同じ構成)。 + - name: Set up JDK 17 + uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 + with: + distribution: temurin + java-version: "17" + cache: gradle + cache-dependency-path: | + src/android/**/*.gradle* + src/android/gradle/libs.versions.toml + src/android/gradle/wrapper/gradle-wrapper.properties + src/wear_os/**/*.gradle* + src/wear_os/gradle/libs.versions.toml + src/wear_os/gradle/wrapper/gradle-wrapper.properties + + # test_android / test_wear_os は node 製ラッパー (gradle_test.mjs) 経由で走る + - name: Set up Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Android tests + run: npm run test_android + + - name: Wear OS tests + run: npm run test_wear_os + + govulncheck: + name: govulncheck (Go) + runs-on: ubuntu-latest + timeout-minutes: 20 + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Set up Go + uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 + with: + go-version-file: src/server/go.mod + cache-dependency-path: src/server/go.sum + + - name: Set up Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + # api パッケージの init() は embed/i18n/locales を読み、無いと panic する。 + # govulncheck は解析のためにビルドを通すので、埋め込み資産が要る。 + # Vite のビルドは不要なので locales と version.json だけ用意する。 + - name: Prepare embedded assets + run: | + npm run copy_i18n_to_app_embed + npm run put_version_info_embed + + - name: govulncheck + working-directory: src/server + run: go run golang.org/x/vuln/cmd/govulncheck@latest ./... + + npm_audit: + name: npm audit + runs-on: ubuntu-latest + timeout-minutes: 15 + + steps: + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Set up Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 + with: + node-version: 24 + cache: npm + + - name: Install dependencies + run: npm ci + + # high 以上の脆弱性がある依存を検出する。閾値未満は落とさない + - name: npm audit + run: npm audit --audit-level=high diff --git a/.gitignore b/.gitignore index 19bd5cff6..ae3ba540d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,17 @@ .DS_Store -node_modules +/node_modules /dist -/**/html/* -go.mod -go.sum +/release/* +/**/embed/**/* +# embed配下は生成物だが、1件も無いと //go:embed がコンパイルエラーになるため +# プレースホルダだけ追跡する (詳細は PLACEHOLDER.md) +!/src/server/gkill/api/embed/PLACEHOLDER.md +/**/assets/* +# src/client/assets/ はビルド生成物ではなくソース(コンポーネントがimportする画像)なので追跡する +!/src/client/assets/* +/**/jniLibs/**/*.so +/**/*.exe + ~$* *.asta.lock m_plus.conf @@ -38,3 +46,44 @@ coverage *.sw? *.tsbuildinfo + +# .claude 直下は無視するが、リポジトリで共有する規約スキルだけ追跡する。 +# (/.claude のままではネガティブパターンが効かない。skills を追跡しないと CI に存在せず、 +# verify_docs の checkSkills が「1つも見つからない」で落ちる。settings.local.json は無視のまま) +/.claude/* +!/.claude/skills/ +# 個人情報検査のローカル NG 語リスト(コミットしない。checkPersonalInfo が読む) +verify_docs_personal_ngwords.local.txt +# ローカル専用の資料と道具(独立した git リポジトリ。実環境固有の事実を置く。AGENTS.md の Documentation 節)と、 +# それを Claude Code に読ませる個人設定。*.local は「.local で終わる名前」にしか当たらないので明示する +/local/ +/CLAUDE.local.md +# テスト済み attestation(run_test_suite.mjs が書き、verify_release_gate.mjs が読む。環境固有・コミットしない) +# *.local は「.local で終わる名前」にしか当たらないので明示する +test_attestation.local.json + +# Wear OS (Gradle project) +src/wear_os/.gradle/ +src/wear_os/.idea/ +src/wear_os/**/*.iml +src/wear_os/**/build/ +src/wear_os/local.properties +src/wear_os/phone_companion/src/main/res/raw/wearable_app.apk + +test-results +playwright-report +src/client/__tests__/e2e/.auth/ + +# 生成されたManual +resources/manual/* + +# Windowsのアイコン埋め込み用リソース。 +# rsrc が build_windows_amd64 / build_windows_amd64_app の中で生成し、 +# ビルド後に消す一時ファイル。中断すると残る +*.syso + +# Git Bash のクラッシュダンプ(作業と無関係な事故ファイル) +*.stackdump + +# 手元検証で作られる SQLite の残骸 +user_config_test.db diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..1a4cd61cd --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,169 @@ +# AGENTS.md + +このリポジトリで作業する AI エージェント共通の入口(Codex CLI / Cursor / Claude Code / Gemini CLI / Copilot 等)。 +Claude Code は `CLAUDE.md` の import 経由でこのファイルを読み込む。**規約の編集は必ずこのファイル側で行うこと。** + +## Project Overview + +gkill is a lifelogging application that records and reviews life events (memos, bookmarks, tasks, mood values, expenses, timestamps, files, git commits, etc.). Standalone client-server app: Go backend + Vue 3 frontend, compiled into a single binary with the frontend embedded via `//go:embed`. Licensed under MIT. + +## 触る場所ごとの必読資料(ルーティング表) + +下の表で**触るファイルに一致する行があれば、編集を始める前に「先に読む」のスキルファイルを Read すること**。 +gkill の不変条件の多くは「例外もエラーも出さずに静かに壊れる」種類で、読まずに書くと3列目が起きる。 +パス連動のスキル機構を持たないエージェントも、これらはただの Markdown なので同じパスを Read すればよい。 + + + +| 触るファイル | 先に読む | 読み落とすと | +|---|---|---| +| `src/server/gkill/api/**`・`src/server/gkill/dao/**`・`src/server/gkill/usecase/**`・`req_res/**` | [gkill-go-backend](.claude/skills/gkill-go-backend/SKILL.md) | rep名絞り込みがキャッシュを丸ごとバイパスし検索が十数rep→数百rep・十数秒になる/`FindQuery.IDs` が6553件でエラーも立てず0件になる/追加したタグが最大1分消え PWA に焼き付く | +| `src/server/gkill/api/find/**`・`find_word/**`・`find_filter.go`・`src/client/classes/api/find_query/**`・`src/server/gkill/mcp/constants.go` | [gkill-find-query](.claude/skills/gkill-find-query/SKILL.md) | null と `[]` の意味を取り違えて例外もエラーも出ずに全件 or 0件になる/TS 側の `undefined` が localStorage 往復で既定値を復活させる/ワード照合を SQL と Go の片方だけ変えて rep 種別ごとに結果が食い違う | +| `src/server/gkill/main/**`・`gkill_options/**`・`local_rep_cache_path.go` | [gkill-cli-ops](.claude/skills/gkill-cli-ops/SKILL.md) | update_cache / add_tag をオフライン操作と誤解する(実体は起動中サーバの HTTP クライアント)/派生キャッシュの削除で他ユーザーの分を巻き込む | +| `package.json`・`src/tools/**`・`vite.config.ts`・`playwright.config.ts`・`src/client/__tests__/e2e/**` | [gkill-build-test](.claude/skills/gkill-build-test/SKILL.md) | embed 無しの裸 `go build` が「コンパイルは通るのに起動即死する」バイナリを作る/E2E がポート固定で本番サーバと衝突する/リリースゲートを外してテスト未実施のコミットが配布される | +| `src/plugins/**`・`src/server/gkill/plugin/**`・`api/gkill_plugin/**`・`dao/reps/plugin_*.go`・`plugin-html-view.vue` | [gkill-plugin](.claude/skills/gkill-plugin/SKILL.md) | 1件ずつプラグインへ聞きに行き、一覧の行数ぶんの直列 stdio でプロセスが殺され続ける/Takeout の歩数が2倍になる | +| `src/client/**`(どのファイルでも) | [gkill-client-foundation](.claude/skills/gkill-client-foundation/SKILL.md) | 中継束・再読込手順の手書きで「タグを足しても表示が変わらない」が再発する/成功時 `errors` は null をスプレッドして TypeError | +| `use-rykv-view.ts`・`use-mi-view.ts`(**対称実装。修正は必ず両方へ**)・`use-dashboard-page.ts`・`kyou-local-insert.ts`・`kyou-change-bus.ts` ほか列まわり | [gkill-client-columns](.claude/skills/gkill-client-columns/SKILL.md) | 検索結果が別の列に出る/初期化が永久スピナーで固まる/追加した記録がエラーも警告も出ないまま一覧から消える | +| `src/client/classes/kftl/**`・`kftl-tabs.ts`・`use-kftl-*.ts`・`kftl-view.vue`・`mkfl-view.vue`・`kftl-dialog.vue`・`src/server/gkill/api/kftl/**` | [gkill-client-kftl](.claude/skills/gkill-client-kftl/SKILL.md) | メモ帳が二重登録される/別のタブへ誤配送される/行ラベルが NaN で丸ごと消える | +| `edit-kyou-tags-view.vue`・`kyou-tags.ts`・`use-add-*.ts`・`use-edit-*.ts` | [gkill-client-tags](.claude/skills/gkill-client-tags/SKILL.md) | `add_tag` 完了前に `registered_kyou` を emit すると、タグ付きで追加した記録がエラーも警告も出ないまま一覧に現れない(順序が唯一の防御線) | +| `rudbeckia-page.vue`・`use-rudbeckia-page.ts`・ホストされる `rykv-view.vue` / `mi-view.vue` / `dashboard-view.vue` / `playing-time-is-view.vue` | [gkill-client-rudbeckia](.claude/skills/gkill-client-rudbeckia/SKILL.md) | バーが画面最上部へ飛ぶ/4枚のウィンドウが完全に重なって1枚に見える/2枚目が1枚目の保存条件を上書きする | +| `src/server/gkill/mcp/**` | [gkill-mcp](.claude/skills/gkill-mcp/SKILL.md) | 並行リクエストで別ユーザーの session/user が混線し、他人のセッションに紐づく file-link URL を発行する | +| `src/android/**`・`src/wear_os/**`・`handle_submit_kftl_text.go` | [gkill-mobile](.claude/skills/gkill-mobile/SKILL.md) | 起動引数や Kotlin に待受アドレスを書き戻すと、設定画面の待受アドレス・TLS が Android でだけ黙って効かなくなる/打刻が二重登録される | +| `AGENTS.md`・`CLAUDE.md`・`.claude/skills/**`・`documents/**`・`resources/manual_src/**`・各 `ABOUT_TEST.md` | [gkill-docs](.claude/skills/gkill-docs/SKILL.md) | 件数・リンク・生成鮮度の機械検査(verify_docs)が落ちる/マニュアルの7言語セットが崩れる | + + + +### 症状から引く + +| 症状 | 読む | +|---|---| +| 検索が黙って0件になる/HTTP 200 で `errors` が null なのに結果が空 | gkill-go-backend, gkill-find-query | +| タグの個数で検索結果が変わる | gkill-go-backend | +| `8` のような7文字未満の語で ID や git のハッシュが先頭一致し無関係な記録が出る/7文字以上の語で UUID・短縮ハッシュが引けない/除外語で消える/気分記録が検索に出ない | gkill-find-query | +| 実在する記録にタグ/テキストを付けると ERR000092(対象が見つからない) | gkill-go-backend | +| 追加したタグ・記録が最大1分見えない/PWA が古いまま焼き付く | gkill-go-backend | +| 全種類の検索が数分止まる | gkill-go-backend | +| 障害の原因がログに1行も残らない/`gkill_error.log` が利用者由来の403で埋まる | gkill-go-backend | +| 検索結果が別の列に出る/列クリックで検索がやり直しになる | gkill-client-columns | +| 追加した記録が一覧に出ない・直後に消える | gkill-client-columns, gkill-client-tags | +| 画面が読み込み中のまま固まる/スピナーが消えない | gkill-client-columns | +| タグを足しても表示が変わらない | gkill-client-foundation(Kyou の再読込) | +| メモ帳が二重登録される/別のタブへ保存された | gkill-client-kftl | +| ダイアログが後ろに隠れる/FAB が押せない/集計リストだけ消える | gkill-client-rudbeckia | +| Android 共有が2件保存される/ログイン失敗でエラー表示が消える | gkill-client-foundation | +| プラグインの本文がときどき空白/プロセスが殺され続ける/歩数が2倍 | gkill-plugin | +| MCP で他人のセッションの URL が発行される/`ErrPluginBusy` | gkill-mcp | +| 利用者のスキル(`$GKILL_HOME/skills`)が読めない・一覧に `invalid_reason` が付く/スキルの更新が 409(ERR000437、`revision` が古い) | gkill-mcp, gkill-go-backend | +| 設定画面の待受アドレスや TLS が Android だけ効かない/打刻が二重登録される | gkill-mobile | +| `npm run verify_docs` が落ちた | gkill-docs | + +## Build & Development Commands + +All commands are npm scripts defined in `package.json`. No CGO required (pure Go SQLite driver). + +| Command | Purpose | +|---|---| +| `npm run dev` | Start Vite dev server (frontend only). `-- --api=` selects the backend | +| `npm run build` | Build frontend (`vue-tsc --build` + `vite build` in parallel) | +| `npm run lint` | ESLint with auto-fix (flat config, `eslint.config.js`) | +| `npm run install_server` | Full build: frontend → embed → `go install` (headless HTTP server) | +| `npm run install_app` | Full build: frontend → embed → `go install` (desktop app with go-astilectron window) | +| `npm run go_install` | Go install only (skip frontend rebuild) | +| `npm run go_mod` | Regenerate `go.mod` and `go.sum` from scratch | +| `npm test` | Run all tests (build + docs verification + server + client + MCP + tools + plugins + Android + Wear OS)。各 `test_*` は `src/tools/run_test_suite.mjs` 経由で、成功時に `test_attestation.local.json` へ記録する | +| `npm run test_plugins` | Go tests for each standalone plugin module under `src/plugins/` | +| `npm run vet_plugins` | `go vet` for the same plugin modules (CI runs it before `test_plugins`; `npm test` does not) | +| `npm run verify_docs` | Docs CI: checks doc counts against code, cross-links, referenced paths, Mermaid blocks, manual freshness. `--list` prints the measured metrics | +| `npm run test_server` | Go tests (`go test ./...` in `src/server`) | +| `npm run test_client_unit` | Vitest unit tests | +| `npm run test_client_e2e` | Playwright E2E tests (gkill_server + Vite を空きポートで自動起動・停止、`$HOME/gkill_test`使用) | +| `npm run test_mcp` | MCP server tests (Go, `go test ./gkill/mcp/...` in `src/server`。`test_server` にも含まれる) | +| `npm run test_tools` | `src/tools/` のリリースゲート・attestation ランナーのテスト (Vitest) | +| `npm run verify_release_gate` | リリースゲート。作業ツリーがクリーン・全スイートの attestation が HEAD の tree と一致・GitHub の CI / Nightly が緑でなければ止める(抜け道なし) | +| `npm run release` | `verify_release_gate` → Cross-compile release for all platforms | + +**Prerequisites:** Go 1.26.6+ (`src/server/go.mod` declares `go 1.26.6`), Node.js 20.19+ (24.x recommended — `package.json` has no `engines` field, so this is not enforced), `npm i` + +ビルドパイプラインの内訳・`go build` の罠・dev プロキシ・E2E 環境・リリースゲートの詳細は [gkill-build-test](.claude/skills/gkill-build-test/SKILL.md)。 + +## Architecture + +### Source Directory Structure + +``` +src/ + client/ # Vue 3 + TypeScript frontend (App.vue, main.ts, classes/, pages/) + server/ # Go backend (go.mod at src/server/, packages under gkill/)。gkill/mcp/ が MCP server (read/write/readwrite, stdio + HTTP OAuth 2.1。`gkill_server mcp` サブコマンド) + android/ # Android APK wrapper (WebView + bundled gkill_server binary) + wear_os/ # Wear OS project (phone_companion/ + watch_app/) + locales/ # i18n JSON files (ja, en, zh, ko, es, fr, de) — shared by frontend & backend + tools/ # Utility scripts + plugins/ # 独立プラグインバイナリ群(1プラグイン=1 go.mod。実測仕様と約束は gkill-plugin スキル) +``` + +**Core entity — "Kyou"** (record). Data types: kmemo (text), timeis (timestamps), lantana (mood 0-10), kc (numeric), nlog (expense), urlog (bookmark), mi (task), idf_kyou (file, with `is_zip` flag for .zip/.cbz), re_kyou (repost), mi_re_kyou (an existing Kyou turned into a task: `target_id` + Mi scheduling fields, no title; `data_type` is `mirekyou_create` / `_check` / `_limit` / `_start` / `_end`, so prefix checks must test `mirekyou` **before** `mi`; the client's `load_typed_datas` guarantees this structurally by sorting its prefix table longest-first rather than relying on the order the branches are written in — `kyou-typed-data-dispatch.test.ts`), tag, text, notification, git_commit_log, gps_log (GPS tracks), plugin_kyou (external plugin data — `typed_plugin` field non-null in TypeScript `Kyou` class; `data_type` is plugin-defined e.g. `claude_conversation`). + +**Response structure:** All API responses include `messages` and `errors` arrays (`message.GkillMessages` / `message.GkillErrors`). Each error carries `error_code` + `error_message` + `error_kind`(誰の問題か。9種)and, when classifiable, `reason`(何が起きたか。14種); each message carries `level`(`info` / `warning`). 語彙と分類の正本は `api/message/error_kind.go` / `error_reason.go`、Web のヒント文は `src/client/classes/api/message/error-hints.ts`([ADR-0710](documents/adr/0710-error-kind-and-reason-on-the-wire.md))。**`if err != nil` の中で `GkillError` を組み立てるときは `Cause: err` を付ける**(ソース走査テストが強制。reason とログの cause の源)。 **ステータスはエラーコードから決まる**(400/401/403/404/409/413/429/500)。正本は `src/server/gkill/api/message/http_status.go` の表で、新しいコード・新しいハンドラには1行ずつ足す必要がある(機械検査あり。詳細は [gkill-go-backend](.claude/skills/gkill-go-backend/SKILL.md))。**ステータスが変わっても本文は変わらない** ので、判定は今までどおり `errors` 配列で行ってよい。 **成功時も `messages` / `errors` は `[]` で返る**(2026-09-15 まで `null` だった。名前付きスライス型の `MarshalJSON` が境界で揃える)。クライアントの `res.errors ?? []` / `if (res.errors && res.errors.length !== 0)` のガード(約180箇所)は**そのまま残す** —— SW キャッシュに残った古い応答や古いサーバとの組み合わせでは今も `null` が来うるので、「null のまま展開しない」は引き続き守る。書き換える必要も、新しく書くときに省く理由も無い。 + +## Cross-cutting conventions + +**Naming convention (files):** `{action}-{feature}-{entity}-{component}` (e.g., `add-dnote-item-view.vue`, `confirm-delete-ryuu-item-dialog.vue`), kebab-case. Dnote and Ryuu follow the same pattern. + +**Frozen spellings:** **現在、凍結している綴りは無い。** かつて `plaing` / `Plaing` を「永続データと外部契約に乗っているから直さない」として凍結していたが([ADR-0802](documents/adr/0802-freeze-plaing-spelling.md))、2026-09-08 に `playing` へ全面改名し、**互換は一切残していない**(ルート `/playing`、`FindQuery` の `playing_time`、MCP ツールスキーマ、Wear OS データレイヤーパス、マニュアルのページ名、`default_page` の保存値)。旧綴りが追跡ファイルに再び現れると `npm run verify_docs` が落ちる。綴り誤りを見つけたら互換を気にせず直してよく、永続データに乗っていた場合は旧綴りのデータを一度きりの変換で直すこと。経緯と却下案は [ADR-0806](documents/adr/0806-fix-spellings-instead-of-freezing.md)。詳細は `documents/reverse/glossary.md` の「凍結された綴り」節。 + +**Naming convention (identifiers):** データクラスのプロパティ/メソッド・ローカル変数・通常関数は snake_case(Go 側 JSON タグとの写像)。コンポーザブルは `useXxx`、イベントコールバックは `onXxx`、CRUD リレーハンドラ束は `xxxHandlers`(束の生成は `kyou-view-relay.ts` に一元化。いずれも camelCase)。型は PascalCase、enum メンバーは snake_case。`@typescript-eslint/naming-convention` で機械検査される(`eslint.config.js` の `app/naming-convention` ブロック。対象は `src/client` 本体のみで、`__tests__`・`src/server/gkill/mcp`・`src/tools`・`*.d.ts` は別流儀として対象外)。 + +**i18n:** 7 languages (ja, en, zh, ko, es, fr, de) in `src/locales/`. 1028 keys per locale. Flat key-value JSON. Shared between frontend (import) and backend (Go embed). + +## Lint & Code Quality + +ESLint 10 flat config (`eslint.config.js`). Zero violations policy (levels per rule as listed below). + +| Rule | Level | Note | +|---|---|---| +| `@typescript-eslint/no-explicit-any` | error | `any` 使用禁止。`unknown` or 具体的型を使うこと | +| `@typescript-eslint/no-empty-object-type` | error | 空の `{}` 型禁止。`type X = ParentType` を使うこと | +| `@typescript-eslint/no-unused-vars` | warn | `_` プレフィックスで無視 (`argsIgnorePattern: '^_'`) | +| `@typescript-eslint/naming-convention` | error | 識別子の命名規約(上記 Naming convention 節)。対象は `src/client` 本体のみ | +| `playwright/no-conditional-in-test` / `no-wait-for-timeout` | error(全 spec) | 「静かに成功するテスト」の防止。免除リストは撤去済み。CI は `npx eslint --max-warnings 0` | + +Go: `slices.SortFunc` (not `sort.Slice`), `for range n` (not `for i := 0; i < n; i++`), `any` (not `interface{}`), `errors.Join` for multi-error collection. + +## Language + +The codebase (variable names, comments, commit messages) is primarily in Japanese. README and documentation are in Japanese. + +**Comment language policy** (現状追認、2026-08 明文化): Go 本体(`src/server/gkill/`、kftl を除く)と `src/plugins/` は日本語。`src/client/` は「構造バナーコメント(`// ── Template refs ──` 等)は英語、処理説明は日本語」の複合。`src/wear_os/`・`src/server/gkill/api/kftl/`(TS 版からの移植、`// Mirrors:` 注記付き)は英語容認(`src/server/gkill/mcp/` は 2026-09-20 の Go 移植で日本語)。新規コメントは各領域の既存スタイルに合わせること。 + +## Documentation + +- 領域別の禁止文・不変条件の正本: `.claude/skills/gkill-*/SKILL.md`(上のルーティング表から引く) +- なぜそうなっているか(却下案・実測値・事件譚): `documents/adr/`(索引: [documents/adr/README.md](documents/adr/README.md)) +- 現在どうなっているか(リバース資料): `documents/reverse/`(索引: [documents/reverse/README.md](documents/reverse/README.md))。 + 言語・プロセスをまたぐつながり(TS → `/api` → Go、MCP・Android・Wear OS・CLI・プラグイン)は呼び出しグラフ系の道具では辿れないので、 + [cross-boundary-map.md](documents/reverse/cross-boundary-map.md) の対応表を引く +- テスト仕様の目次: `src/ABOUT_TEST.md`。利用者向けマニュアル原稿: `resources/manual_src/`(7言語セット、`npm run build_manuals` で生成) +- 資料の件数・リンク・ファイル名実在・スキル索引は `npm run verify_docs` が機械検査する。 + 資料層の保守手順は [gkill-docs](.claude/skills/gkill-docs/SKILL.md) スキルにある +- **ローカル専用の資料(あれば)**: リポジトリ直下に `local/`(gitignore 済みの独立リポジトリ)があれば、作業を始める前に + `local/CLAUDE.md` とそこから案内されるスキル(`local/.claude/skills/*/SKILL.md`)も読むこと。実環境固有の事実 + (検証用 dev 環境の使い方、本番運用スクリプトへの参照、本番環境へ接続しない約束)はそこにあり、この追跡ファイル群には書かない。 + Claude Code は `CLAUDE.local.md`(同じく gitignore 済み)経由で自動的に読む。`local/` が無い環境ではこの項は無視してよい + +## AI エージェントへの約束 + +- **個人情報・実環境の情報をリポジトリへ入れない(最重要)。** 実在の利用者ID・人名・メールアドレス・ + 端末のローカル絶対パス(`C:\Users\〈名前〉` など)・実データの中身を、コード・資料・テストデータ・ + コミットメッセージのどこにも書かない。テストの利用者IDは `testuser` 系、例示パスは `$HOME` や + `〈ユーザー名〉` のプレースホルダで書く。`npm run verify_docs` が混入をパターン検査し、 + リポジトリ直下の `verify_docs_personal_ngwords.local.txt`(gitignore 済み・1行1語・大小無視の部分一致)が + あればその環境固有の NG 語検査も加わるが、検査は網でしかない — 書く前に止めることがすべて。 +- **コミット前に必ず `npm run verify_docs` を通す(例外なし)。** pre-commit フック + (`.githooks/pre-commit`。`npm i` の postinstall が `core.hooksPath` を設定する)が機械強制する。 + `--no-verify` でフックを飛ばすことは何があっても禁止。 +- **このファイルと `CLAUDE.md` に領域別の規約本文を書き足さない。** 正本は `.claude/skills/*/SKILL.md`。 + ここが太ると全タスクの常時コンテキストを食う。サイズ上限(verify_docs が検査)に当たったら、 + 上限を上げるのではなく中身をスキルへ落とすこと。 +- 資料に書いた件数・リンク・ファイル名は `npm run verify_docs`(`npm test` に含まれる)が機械検査する。 + 数字を書いたら `src/tools/verify_docs.mjs` の検査にも載せること。 +- 作業報告・コミットメッセージ・新規コメントは日本語で書く(コメント言語の詳細は Language 節)。 diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000..0c6cf7fc1 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,13 @@ +# CLAUDE.md + +このリポジトリの規約は [AGENTS.md](AGENTS.md) にある(Claude Code / Codex CLI / Cursor / Gemini CLI 等で共通)。 +次の1行がその内容をこのファイルへ展開する。**規約の編集は AGENTS.md 側で行うこと。** + +@AGENTS.md + +## Claude Code 固有 + +- 領域別の不変条件は `.claude/skills/gkill-*/`(13スキル)が正本。該当パスを触るとスキルとして自動で読める。 + スキルが発動しなくても、AGENTS.md のルーティング表から同じファイルを Read すれば同じ内容になる。 +- このファイルと AGENTS.md に領域別の規約本文を書き足さないこと。`npm run verify_docs` が + サイズ上限・スキル索引の網羅・個人情報パターンを機械検査する。 diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..a176f36c4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 mt3hr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/LICENSES_DEPENDENCE b/LICENSES_DEPENDENCE new file mode 100644 index 000000000..55790554c --- /dev/null +++ b/LICENSES_DEPENDENCE @@ -0,0 +1,15677 @@ +=== 依存ライセンス一覧 === + +=== [Go Modules] === + +=== [cyphar.com/go-pathrs v0.2.5] === +License file: COPYING + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +=== [dario.cat/mergo v1.0.2] === +License file: LICENSE + +Copyright (c) 2013 Dario Castañé. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/BurntSushi/toml v1.6.0] === +License file: COPYING + +The MIT License (MIT) + +Copyright (c) 2013 TOML authors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/DATA-DOG/go-sqlmock v1.5.2] === +License file: LICENSE + +The three clause BSD license (http://en.wikipedia.org/wiki/BSD_licenses) + +Copyright (c) 2013-2019, DATA-DOG team +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* The name DataDog.lt may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/Microsoft/go-winio v0.6.2] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2015 Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/ProtonMail/go-crypto v1.4.1] === +License file: LICENSE + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/PuerkitoBio/goquery v1.13.0] === +License file: LICENSE + +Copyright (c) 2012-2021, Martin Angers & Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/SherClockHolmes/webpush-go v1.4.0] === +License file: LICENSE + +MIT License + +Copyright (c) 2016 Ethan Holmes + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/alecthomas/assert/v2 v2.10.0] === +License file: COPYING + +Copyright (C) 2021 Alec Thomas + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/alecthomas/repr v0.4.0] === +License file: COPYING + +The MIT License (MIT) + +Copyright (c) 2016 Alec Thomas + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/andybalholm/cascadia v1.3.5] === +License file: LICENSE + +Copyright (c) 2011 Andy Balholm. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be] === +License file: LICENSE + +Copyright (c) anmitsu + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2014 Armon Dadgar + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [github.com/asticode/go-astikit v0.59.0] === +License file: LICENSE + +MIT License + +Copyright (c) 2020 Quentin Renard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/asticode/go-astilectron v0.30.0] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2017 Quentin RENARD + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394] === +License file: LICENSE + +BSD 3-Clause License +https://opensource.org/licenses/BSD-3-Clause + +=== [github.com/bwesterb/go-ristretto v1.2.4] === +License file: LICENSE + +MIT License + +Copyright (c) 2021 Bas Westerbaan + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/cloudflare/circl v1.6.5] === +License file: LICENSE + +Copyright (c) 2019 Cloudflare. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Cloudflare nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +======================================================================== + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/cpuguy83/go-md2man/v2 v2.0.6] === +License file: LICENSE.md + +The MIT License (MIT) + +Copyright (c) 2014 Brian Goff + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/cyphar/filepath-securejoin v0.7.0] === +No license or notice file found. + +=== [github.com/davecgh/go-spew v1.1.1] === +License file: LICENSE + +ISC License + +Copyright (c) 2012-2016 Dave Collins + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [github.com/dustin/go-humanize v1.1.0] === +License file: LICENSE + +Copyright (c) 2005-2008 Dustin Sallings + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + + +=== [github.com/elazarl/goproxy v1.7.2] === +License file: LICENSE + +Copyright (c) 2012 Elazar Leibovich. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Elazar Leibovich. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/emirpasic/gods v1.18.1] === +License file: LICENSE + +Copyright (c) 2015, Emir Pasic +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +------------------------------------------------------------------------------- + +AVL Tree: + +Copyright (c) 2017 Benjamin Scher Purcell + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [github.com/frankban/quicktest v1.14.6] === +License file: LICENSE + +MIT License + +Copyright (c) 2017 Canonical Ltd. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/fsnotify/fsnotify v1.10.1] === +License file: LICENSE + +Copyright © 2012 The Go Authors. All rights reserved. +Copyright © fsnotify Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +* Neither the name of Google Inc. nor the names of its contributors may be used + to endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/gliderlabs/ssh v0.3.8] === +License file: LICENSE + +Copyright (c) 2016 Glider Labs. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Glider Labs nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376] === +License file: LICENSE + +Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go +Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/go-git/go-billy/v5 v5.9.1] === +License file: LICENSE + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Sourced Technologies S.L. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399] === +License file: LICENSE + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Sourced Technologies, S.L. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [github.com/go-git/go-git/v5 v5.19.2] === +License file: LICENSE + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2018 Sourced Technologies, S.L. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [github.com/go-viper/mapstructure/v2 v2.5.0] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2013 Mitchell Hashimoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/golang-jwt/jwt/v5 v5.3.1] === +License file: LICENSE + +Copyright (c) 2012 Dave Grijalva +Copyright (c) 2021 golang-jwt maintainers + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8] === +License file: LICENSE + +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and +distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright +owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities +that control, are controlled by, or are under common control with that entity. +For the purposes of this definition, "control" means (i) the power, direct or +indirect, to cause the direction or management of such entity, whether by +contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including +but not limited to software source code, documentation source, and configuration +files. + +"Object" form shall mean any form resulting from mechanical transformation or +translation of a Source form, including but not limited to compiled object code, +generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made +available under the License, as indicated by a copyright notice that is included +in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that +is based on (or derived from) the Work and for which the editorial revisions, +annotations, elaborations, or other modifications represent, as a whole, an +original work of authorship. For the purposes of this License, Derivative Works +shall not include works that remain separable from, or merely link (or bind by +name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version +of the Work and any modifications or additions to that Work or Derivative Works +thereof, that is intentionally submitted to Licensor for inclusion in the Work +by the copyright owner or by an individual or Legal Entity authorized to submit +on behalf of the copyright owner. For the purposes of this definition, +"submitted" means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, and +issue tracking systems that are managed by, or on behalf of, the Licensor for +the purpose of discussing and improving the Work, but excluding communication +that is conspicuously marked or otherwise designated in writing by the copyright +owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf +of whom a Contribution has been received by Licensor and subsequently +incorporated within the Work. + +2. Grant of Copyright License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the Work and such +Derivative Works in Source or Object form. + +3. Grant of Patent License. + +Subject to the terms and conditions of this License, each Contributor hereby +grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, +irrevocable (except as stated in this section) patent license to make, have +made, use, offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such Contributor +that are necessarily infringed by their Contribution(s) alone or by combination +of their Contribution(s) with the Work to which such Contribution(s) was +submitted. If You institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work or a +Contribution incorporated within the Work constitutes direct or contributory +patent infringement, then any patent licenses granted to You under this License +for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. + +You may reproduce and distribute copies of the Work or Derivative Works thereof +in any medium, with or without modifications, and in Source or Object form, +provided that You meet the following conditions: + +You must give any other recipients of the Work or Derivative Works a copy of +this License; and +You must cause any modified files to carry prominent notices stating that You +changed the files; and +You must retain, in the Source form of any Derivative Works that You distribute, +all copyright, patent, trademark, and attribution notices from the Source form +of the Work, excluding those notices that do not pertain to any part of the +Derivative Works; and +If the Work includes a "NOTICE" text file as part of its distribution, then any +Derivative Works that You distribute must include a readable copy of the +attribution notices contained within such NOTICE file, excluding those notices +that do not pertain to any part of the Derivative Works, in at least one of the +following places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided along +with the Derivative Works; or, within a display generated by the Derivative +Works, if and wherever such third-party notices normally appear. The contents of +the NOTICE file are for informational purposes only and do not modify the +License. You may add Your own attribution notices within Derivative Works that +You distribute, alongside or as an addendum to the NOTICE text from the Work, +provided that such additional attribution notices cannot be construed as +modifying the License. +You may add Your own copyright statement to Your modifications and may provide +additional or different license terms and conditions for use, reproduction, or +distribution of Your modifications, or for any such Derivative Works as a whole, +provided Your use, reproduction, and distribution of the Work otherwise complies +with the conditions stated in this License. + +5. Submission of Contributions. + +Unless You explicitly state otherwise, any Contribution intentionally submitted +for inclusion in the Work by You to the Licensor shall be under the terms and +conditions of this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify the terms of +any separate license agreement you may have executed with Licensor regarding +such Contributions. + +6. Trademarks. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of the Licensor, except as required for +reasonable and customary use in describing the origin of the Work and +reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. + +Unless required by applicable law or agreed to in writing, Licensor provides the +Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, +including, without limitation, any warranties or conditions of TITLE, +NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are +solely responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your exercise of +permissions under this License. + +8. Limitation of Liability. + +In no event and under no legal theory, whether in tort (including negligence), +contract, or otherwise, unless required by applicable law (such as deliberate +and grossly negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, incidental, +or consequential damages of any character arising as a result of this License or +out of the use or inability to use the Work (including but not limited to +damages for loss of goodwill, work stoppage, computer failure or malfunction, or +any and all other commercial damages or losses), even if such Contributor has +been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. + +While redistributing the Work or Derivative Works thereof, You may choose to +offer, and charge a fee for, acceptance of support, warranty, indemnity, or +other liability obligations and/or rights consistent with this License. However, +in accepting such obligations, You may act only on Your own behalf and on Your +sole responsibility, not on behalf of any other Contributor, and only if You +agree to indemnify, defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason of your +accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included on +the same "printed page" as the copyright notice for easier identification within +third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [github.com/golang/protobuf v1.5.4] === +License file: LICENSE + +Copyright 2010 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/google/go-cmp v0.7.0] === +License file: LICENSE + +Copyright (c) 2017 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/google/pprof v0.0.0-20260802141513-ef3492d7dac3] === +License file: LICENSE + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [github.com/google/uuid v1.6.0] === +License file: LICENSE + +Copyright (c) 2009,2014 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/gorilla/mux v1.8.1] === +License file: LICENSE + +Copyright (c) 2023 The Gorilla Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/hashicorp/golang-lru/v2 v2.0.7] === +License file: LICENSE + +Copyright (c) 2014 HashiCorp, Inc. + +Mozilla Public License, version 2.0 + +1. Definitions + +1.1. "Contributor" + + means each individual or legal entity that creates, contributes to the + creation of, or owns Covered Software. + +1.2. "Contributor Version" + + means the combination of the Contributions of others (if any) used by a + Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + + means Source Code Form to which the initial Contributor has attached the + notice in Exhibit A, the Executable Form of such Source Code Form, and + Modifications of such Source Code Form, in each case including portions + thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + a. that the initial Contributor has attached the notice described in + Exhibit B to the Covered Software; or + + b. that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the terms of + a Secondary License. + +1.6. "Executable Form" + + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + + means a work that combines Covered Software with other material, in a + separate file or files, that is not Covered Software. + +1.8. "License" + + means this document. + +1.9. "Licensable" + + means having the right to grant, to the maximum extent possible, whether + at the time of the initial grant or subsequently, any and all of the + rights conveyed by this License. + +1.10. "Modifications" + + means any of the following: + + a. any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered Software; or + + b. any new file in Source Code Form that contains any Covered Software. + +1.11. "Patent Claims" of a Contributor + + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the License, + by the making, using, selling, offering for sale, having made, import, + or transfer of either its Contributions or its Contributor Version. + +1.12. "Secondary License" + + means either the GNU General Public License, Version 2.0, the GNU Lesser + General Public License, Version 2.1, the GNU Affero General Public + License, Version 3.0, or any later versions of those licenses. + +1.13. "Source Code Form" + + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that controls, is + controlled by, or is under common control with You. For purposes of this + definition, "control" means (a) the power, direct or indirect, to cause + the direction or management of such entity, whether by contract or + otherwise, or (b) ownership of more than fifty percent (50%) of the + outstanding shares or beneficial ownership of such entity. + + +2. License Grants and Conditions + +2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + a. under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + b. under Patent Claims of such Contributor to make, use, sell, offer for + sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + +2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + a. for any code that a Contributor has removed from Covered Software; or + + b. for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + c. under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + +2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights to + grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + +2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted in + Section 2.1. + + +3. Responsibilities + +3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + +3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + a. such Covered Software must also be made available in Source Code Form, + as described in Section 3.1, and You must inform recipients of the + Executable Form how they can obtain a copy of such Source Code Form by + reasonable means in a timely manner, at a charge no more than the cost + of distribution to the recipient; and + + b. You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter the + recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + +3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, or + limitations of liability) contained within the Source Code Form of the + Covered Software, except that You may alter any license notices to the + extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + +4. Inability to Comply Due to Statute or Regulation + + If it is impossible for You to comply with any of the terms of this License + with respect to some or all of the Covered Software due to statute, + judicial order, or regulation then You must: (a) comply with the terms of + this License to the maximum extent possible; and (b) describe the + limitations and the code they affect. Such description must be placed in a + text file included with all distributions of the Covered Software under + this License. Except to the extent prohibited by statute or regulation, + such description must be sufficiently detailed for a recipient of ordinary + skill to be able to understand it. + +5. Termination + +5.1. The rights granted under this License will terminate automatically if You + fail to comply with any of its terms. However, if You become compliant, + then the rights granted under this License from a particular Contributor + are reinstated (a) provisionally, unless and until such Contributor + explicitly and finally terminates Your grants, and (b) on an ongoing + basis, if such Contributor fails to notify You of the non-compliance by + some reasonable means prior to 60 days after You have come back into + compliance. Moreover, Your grants from a particular Contributor are + reinstated on an ongoing basis if such Contributor notifies You of the + non-compliance by some reasonable means, this is the first time You have + received notice of non-compliance with this License from such + Contributor, and You become compliant prior to 30 days after Your receipt + of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all end user + license agreements (excluding distributors and resellers) which have been + validly granted by You or Your distributors under this License prior to + termination shall survive termination. + +6. Disclaimer of Warranty + + Covered Software is provided under this License on an "as is" basis, + without warranty of any kind, either expressed, implied, or statutory, + including, without limitation, warranties that the Covered Software is free + of defects, merchantable, fit for a particular purpose or non-infringing. + The entire risk as to the quality and performance of the Covered Software + is with You. Should any Covered Software prove defective in any respect, + You (not any Contributor) assume the cost of any necessary servicing, + repair, or correction. This disclaimer of warranty constitutes an essential + part of this License. No use of any Covered Software is authorized under + this License except under this disclaimer. + +7. Limitation of Liability + + Under no circumstances and under no legal theory, whether tort (including + negligence), contract, or otherwise, shall any Contributor, or anyone who + distributes Covered Software as permitted above, be liable to You for any + direct, indirect, special, incidental, or consequential damages of any + character including, without limitation, damages for lost profits, loss of + goodwill, work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses, even if such party shall have been + informed of the possibility of such damages. This limitation of liability + shall not apply to liability for death or personal injury resulting from + such party's negligence to the extent applicable law prohibits such + limitation. Some jurisdictions do not allow the exclusion or limitation of + incidental or consequential damages, so this exclusion and limitation may + not apply to You. + +8. Litigation + + Any litigation relating to this License may be brought only in the courts + of a jurisdiction where the defendant maintains its principal place of + business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. Nothing + in this Section shall prevent a party's ability to bring cross-claims or + counter-claims. + +9. Miscellaneous + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides that + the language of a contract shall be construed against the drafter shall not + be used to construe this License against a Contributor. + + +10. Versions of the License + +10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + +10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + +10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses If You choose to distribute Source Code Form that is + Incompatible With Secondary Licenses under the terms of this version of + the License, the notice described in Exhibit B of this License must be + attached. + +Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the + terms of the Mozilla Public License, v. + 2.0. If a copy of the MPL was not + distributed with this file, You can + obtain one at + http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular file, +then You may include the notice in a location (such as a LICENSE file in a +relevant directory) where a recipient would be likely to look for such a +notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible + With Secondary Licenses", as defined by + the Mozilla Public License, v. 2.0. + +=== [github.com/hexops/gotextdiff v1.0.3] === +License file: LICENSE + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/inconshreveable/mousetrap v1.1.0] === +License file: LICENSE + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2022 Alan Shreve (@inconshreveable) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2014 Juan Batiz-Benet + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/kevinburke/ssh_config v1.6.0] === +License file: LICENSE + +Copyright (c) 2017 Kevin Burke. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +=================== + +The lexer and parser borrow heavily from github.com/pelletier/go-toml. The +license for that project is copied below. + +The MIT License (MIT) + +Copyright (c) 2013 - 2017 Thomas Pelletier, Eric Anderton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/klauspost/cpuid/v2 v2.4.0] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2015 Klaus Post + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/kr/pretty v0.3.1] === +License file: License + +Copyright 2012 Keith Rarick + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/kr/pty v1.1.1] === +License file: License + +Copyright (c) 2011 Keith Rarick + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall +be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [github.com/kr/text v0.2.0] === +License file: License + +Copyright 2012 Keith Rarick + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/lib/pq v1.10.9] === +License file: LICENSE.md + +Copyright (c) 2011-2013, 'pq' Contributors +Portions Copyright (C) 2011 Blake Mizerany + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [github.com/mattn/go-isatty v0.0.24] === +License file: LICENSE + +Copyright (c) Yasuhiro MATSUMOTO + +MIT License (Expat) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [github.com/mattn/go-zglob v0.0.8] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2017 Yasuhiro Matsumoto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/ncruces/go-strftime v1.0.0] === +License file: LICENSE + +MIT License + +Copyright (c) 2022 Nuno Cruces + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/nicksnyder/go-i18n/v2 v2.6.1] === +License file: LICENSE + +Copyright (c) 2014 Nick Snyder https://github.com/nicksnyder + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/onsi/gomega v1.34.1] === +License file: LICENSE + +Copyright (c) 2013-2014 Onsi Fakhouri + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [github.com/pelletier/go-toml/v2 v2.4.3] === +License file: LICENSE + +The MIT License (MIT) + +go-toml v2 +Copyright (c) 2021 - 2023 Thomas Pelletier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/pjbgf/sha1cd v0.6.0] === +License file: LICENSE + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023 pjbgf + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [github.com/pkg/errors v0.9.1] === +License file: LICENSE + +Copyright (c) 2015, Dave Cheney +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/pmezard/go-difflib v1.0.0] === +License file: LICENSE + +Copyright (c) 2013, Patrick Mezard +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + The names of its contributors may not be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec] === +License file: LICENSE + +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/rogpeppe/go-internal v1.14.1] === +License file: LICENSE + +Copyright (c) 2018 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/russross/blackfriday/v2 v2.1.0] === +License file: LICENSE.txt + +Blackfriday is distributed under the Simplified BSD License: + +> Copyright © 2011 Russ Ross +> All rights reserved. +> +> Redistribution and use in source and binary forms, with or without +> modification, are permitted provided that the following conditions +> are met: +> +> 1. Redistributions of source code must retain the above copyright +> notice, this list of conditions and the following disclaimer. +> +> 2. Redistributions in binary form must reproduce the above +> copyright notice, this list of conditions and the following +> disclaimer in the documentation and/or other materials provided with +> the distribution. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +> "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +> LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +> COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +> INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +> BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +> LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +> ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +> POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd] === +License file: LICENSE + + +Copyright (c) 2012, Robert Carlsen & Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/sagikazarmark/locafero v0.12.0] === +License file: LICENSE + +Copyright (c) 2023 Márk Sági-Kazár + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d] === +License file: LICENSE + +Copyright (c) 2012 chardet Authors + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +Partial of the Software is derived from ICU project. See icu-license.html for +license of the derivative portions. + +=== [github.com/sergi/go-diff v1.4.0] === +License file: LICENSE + +Copyright (c) 2012-2016 The go-diff Authors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +=== [github.com/sirupsen/logrus v1.9.3] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2014 Simon Eskildsen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/skeema/knownhosts v1.3.3] === +License file: LICENSE + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +License file: NOTICE + +Copyright 2026 Skeema LLC and the Skeema Knownhosts authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +=== [github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8] === +License file: LICENSE + +MIT License + +Copyright (c) 2023 Sourcegraph + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/spf13/afero v1.15.0] === +License file: LICENSE.txt + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +=== [github.com/spf13/cast v1.10.0] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2014 Steve Francia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/spf13/cobra v1.10.2] === +License file: LICENSE.txt + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +=== [github.com/spf13/pflag v1.0.10] === +License file: LICENSE + +Copyright (c) 2012 Alex Ogier. All rights reserved. +Copyright (c) 2012 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/spf13/viper v1.21.0] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2014 Steve Francia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/stretchr/objx v0.1.0] === +License file: LICENSE + +The MIT License + +Copyright (c) 2014 Stretchr, Inc. +Copyright (c) 2017-2018 objx contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/stretchr/testify v1.11.1] === +License file: LICENSE + +MIT License + +Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [github.com/subosito/gotenv v1.6.0] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2013 Alif Rachmawadi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/twpayne/go-geom v1.6.1] === +License file: LICENSE + +Copyright (c) 2013, Tom Payne +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [github.com/twpayne/go-gpx v1.5.0] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2015 Tom Payne + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/twpayne/go-kml/v3 v3.2.1] === +License file: LICENSE + +The MIT License (MIT) + +Copyright (c) 2015 Tom Payne + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [github.com/xanzy/ssh-agent v0.3.3] === +License file: LICENSE + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [github.com/yuin/goldmark v1.4.13] === +License file: LICENSE + +MIT License + +Copyright (c) 2019 Yusuke Inuzuka + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [go.yaml.in/yaml/v3 v3.0.5] === +License file: LICENSE + + +This project is covered by two different licenses: MIT and Apache. + +#### MIT License #### + +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original MIT license, with the additional +copyright staring in 2011 when the project was ported over: + + apic.go emitterc.go parserc.go readerc.go scannerc.go + writerc.go yamlh.go yamlprivateh.go + +Copyright (c) 2006-2010 Kirill Simonov +Copyright (c) 2006-2011 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +### Apache License ### + +All the remaining project files are covered by the Apache license: + +Copyright (c) 2011-2019 Canonical Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +License file: NOTICE + +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +=== [golang.org/x/crypto v0.57.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/image v0.46.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/mod v0.41.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/net v0.59.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/sync v0.23.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/sys v0.48.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2] === +License file: LICENSE + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/term v0.46.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/text v0.42.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/tools v0.49.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/tools v0.50.0] === +License file: LICENSE + +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7] === +License file: LICENSE + +Copyright (c) 2019 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [google.golang.org/protobuf v1.33.0] === +License file: LICENSE + +Copyright (c) 2018 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c] === +License file: LICENSE + +Gocheck - A rich testing framework for Go + +Copyright (c) 2010-2013 Gustavo Niemeyer + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [gopkg.in/warnings.v0 v0.1.2] === +License file: LICENSE + +Copyright (c) 2016 Péter Surányi. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [gopkg.in/yaml.v2 v2.4.0] === +License file: LICENSE + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +License file: NOTICE + +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +=== [gopkg.in/yaml.v3 v3.0.1] === +License file: LICENSE + + +This project is covered by two different licenses: MIT and Apache. + +#### MIT License #### + +The following files were ported to Go from C files of libyaml, and thus +are still covered by their original MIT license, with the additional +copyright staring in 2011 when the project was ported over: + + apic.go emitterc.go parserc.go readerc.go scannerc.go + writerc.go yamlh.go yamlprivateh.go + +Copyright (c) 2006-2010 Kirill Simonov +Copyright (c) 2006-2011 Kirill Simonov + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +### Apache License ### + +All the remaining project files are covered by the Apache license: + +Copyright (c) 2011-2019 Canonical Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +License file: NOTICE + +Copyright 2011-2016 Canonical Ltd. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +=== [modernc.org/cc/v4 v4.29.7] === +License file: LICENSE + +Copyright (c) 2014 The CC Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/ccgo/v4 v4.36.0] === +License file: LICENSE + +Copyright (c) 2017 The CCGO Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/fileutil v1.4.0] === +License file: LICENSE + +Copyright (c) 2014 The fileutil Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/gc/v2 v2.6.5] === +License file: LICENSE + +------------------------------------------------------------------------------- +Copyright (c) 2016 The GC Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------------------------- + +Code in this repository contains or may contain + + - copied original code from + - code based on original code from + - code inspired by original code in + + "The Go Programming Language" project at https://go.googlesource.com/go/. + +Copy of the license of the original code follows below + +------------------------------------------------------------------------------- +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------------------------- + +=== [modernc.org/gc/v3 v3.1.5] === +License file: LICENSE + +------------------------------------------------------------------------------- +Copyright (c) 2016 The GC Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------------------------- + +Code in this repository contains or may contain + + - copied original code from + - code based on original code from + - code inspired by original code in + + "The Go Programming Language" project at https://go.googlesource.com/go/. + +Copy of the license of the original code follows below + +------------------------------------------------------------------------------- +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------------------------- + +=== [modernc.org/goabi0 v0.2.0] === +License file: LICENSE + +Copyright (c) 2025 The goabi0 Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/libc v1.77.0] === +License file: LICENSE + +Copyright (c) 2017 The Libc Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/mathutil v1.7.1] === +License file: LICENSE + +Copyright (c) 2014 The mathutil Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/memory v1.12.1] === +License file: LICENSE + +Copyright (c) 2017 The Memory Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/opt v0.2.0] === +License file: LICENSE + +Copyright (c) 2019 The Opt Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/sortutil v1.2.1] === +License file: LICENSE + +Copyright (c) 2014 The sortutil Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/sqlite v1.59.0] === +License file: LICENSE + +Copyright (c) 2017 The Sqlite Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/strutil v1.2.1] === +License file: LICENSE + +Copyright (c) 2014 The strutil Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the names of the authors nor the names of the +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [modernc.org/token v1.1.0] === +License file: LICENSE + +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [Node.js Modules] === + +=== [@antfu/install-pkg@2.1.0] === +License: MIT +Repository: https://github.com/antfu-collective/install-pkg + +MIT License + +Copyright (c) 2021 Anthony Fu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@babel/helper-string-parser@7.29.7] === +License: MIT +Repository: https://github.com/babel/babel + +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [@babel/helper-validator-identifier@7.29.7] === +License: MIT +Repository: https://github.com/babel/babel + +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [@babel/parser@7.29.9] === +License: MIT +Repository: https://github.com/babel/babel + +Copyright (C) 2012-2014 by various contributors (see AUTHORS) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@babel/types@7.29.8] === +License: MIT +Repository: https://github.com/babel/babel + +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [@braintree/sanitize-url@7.1.2] === +License: MIT +Repository: https://github.com/braintree/sanitize-url + +MIT License + +Copyright (c) 2017 Braintree + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@chevrotain/cst-dts-gen@11.1.2] === +License: Apache-2.0 +Repository: git://github.com/Chevrotain/chevrotain + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [@chevrotain/gast@11.1.2] === +License: Apache-2.0 +Repository: git://github.com/Chevrotain/chevrotain + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [@chevrotain/regexp-to-ast@11.1.2] === +License: Apache-2.0 +Repository: git://github.com/Chevrotain/chevrotain + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [@chevrotain/types@11.1.2] === +License: Apache-2.0 +Repository: git://github.com/Chevrotain/chevrotain + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [@chevrotain/utils@11.1.2] === +License: Apache-2.0 +Repository: git://github.com/Chevrotain/chevrotain + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [@googlemaps/js-api-loader@2.1.1] === +License: Apache-2.0 +Repository: https://github.com/googlemaps/js-api-loader + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [@googlemaps/markerclusterer@2.6.2] === +License: Apache-2.0 +Repository: https://github.com/googlemaps/js-markerclusterer + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [@iconify/types@2.0.0] === +License: MIT +Repository: https://github.com/iconify/iconify + +MIT License + +Copyright (c) 2021 - 2022 Vjacheslav Trushkin / Iconify OÜ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@iconify/utils@3.1.7] === +License: MIT +Repository: https://github.com/iconify/iconify + +MIT License + +Copyright (c) 2021-PRESENT Vjacheslav Trushkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@intlify/core-base@11.4.12] === +License: MIT +Repository: https://github.com/intlify/vue-i18n + +The MIT License (MIT) + +Copyright (c) 2020 kazuya kawaguchi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [@intlify/devtools-types@11.4.12] === +License: MIT +Repository: https://github.com/intlify/vue-i18n + +The MIT License (MIT) + +Copyright (c) 2024 kazuya kawaguchi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [@intlify/message-compiler@11.4.12] === +License: MIT +Repository: https://github.com/intlify/vue-i18n + +The MIT License (MIT) + +Copyright (c) 2020 kazuya kawaguchi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [@intlify/shared@11.4.12] === +License: MIT +Repository: https://github.com/intlify/vue-i18n + +The MIT License (MIT) + +Copyright (c) 2020 kazuya kawaguchi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [@jridgewell/gen-mapping@0.3.13] === +License: MIT +Repository: https://github.com/jridgewell/sourcemaps + +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@jridgewell/remapping@2.3.5] === +License: MIT +Repository: https://github.com/jridgewell/sourcemaps + +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@jridgewell/resolve-uri@3.1.2] === +License: MIT +Repository: https://github.com/jridgewell/resolve-uri + +Copyright 2019 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@jridgewell/sourcemap-codec@1.6.0] === +License: MIT +Repository: https://github.com/jridgewell/sourcemaps + +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@jridgewell/trace-mapping@0.3.31] === +License: MIT +Repository: https://github.com/jridgewell/sourcemaps + +Copyright 2024 Justin Ridgewell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@mdi/font@7.4.47] === +License: Apache-2.0 +Repository: https://github.com/Templarian/MaterialDesign-Webfont + +Pictogrammers Free License +-------------------------- + +This icon collection is released as free, open source, and GPL friendly by +the [Pictogrammers](http://pictogrammers.com/) icon group. You may use it +for commercial projects, open source projects, or anything really. + +# Icons: Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) +Some of the icons are redistributed under the Apache 2.0 license. All other +icons are either redistributed under their respective licenses or are +distributed under the Apache 2.0 license. + +# Fonts: Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) +All web and desktop fonts are distributed under the Apache 2.0 license. Web +and desktop fonts contain some icons that are redistributed under the Apache +2.0 license. All other icons are either redistributed under their respective +licenses or are distributed under the Apache 2.0 license. + +# Code: MIT (https://opensource.org/licenses/MIT) +The MIT license applies to all non-font and non-icon files. + +=== [@mermaid-js/parser@2.0.0] === +License: MIT +Repository: https://github.com/mermaid-js/mermaid + +The MIT License (MIT) + +Copyright (c) 2023 Yokozuna59 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@types/d3-array@3.2.2] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-axis@3.0.6] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-brush@3.0.6] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-chord@3.0.6] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-color@3.1.3] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-contour@3.0.6] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-delaunay@6.0.4] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-dispatch@3.0.7] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-drag@3.0.7] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-dsv@3.0.7] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-ease@3.0.2] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-fetch@3.0.7] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-force@3.0.10] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-format@3.0.4] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-geo@3.1.1] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-hierarchy@3.1.7] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-interpolate@3.0.4] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-path@3.1.1] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-polygon@3.0.2] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-quadtree@3.0.6] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-random@3.0.4] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-scale-chromatic@3.1.0] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-scale@4.0.9] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-selection@3.0.12] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-shape@3.2.0] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-time-format@4.0.3] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-time@3.0.4] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-timer@3.0.2] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-transition@3.0.9] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3-zoom@3.0.8] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/d3@7.4.3] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/geojson@7946.0.16] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/google.maps@3.66.3] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/supercluster@7.1.3] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@types/trusted-types@2.0.7] === +License: MIT +Repository: https://github.com/DefinitelyTyped/DefinitelyTyped + + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE + +=== [@upsetjs/venn.js@2.0.0] === +License: MIT +Repository: https://github.com/upsetjs/venn.js + +MIT License + +Copyright (c) 2013 Ben Frederickson +Copyright (c) 2021 Samuel Gratzl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@vue-macros/common@3.1.4] === +License: MIT +Repository: https://github.com/vue-macros/vue-macros + +MIT License + +Copyright (c) 2022-PRESENT Kevin Deng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@vue/compiler-core@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vue/compiler-dom@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vue/compiler-sfc@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vue/compiler-ssr@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vue/devtools-api@6.6.4] === +License: MIT +Repository: https://github.com/vuejs/vue-devtools + +(ライセンス本文が見つかりませんでした) + +=== [@vue/devtools-api@8.2.1] === +License: MIT +Repository: https://github.com/vuejs/devtools + +MIT License + +Copyright (c) 2023 webfansplz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@vue/devtools-kit@8.2.1] === +License: MIT +Repository: https://github.com/vuejs/devtools + +MIT License + +Copyright (c) 2023 webfansplz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@vue/devtools-shared@8.2.1] === +License: MIT +Repository: https://github.com/vuejs/devtools + +MIT License + +Copyright (c) 2023 webfansplz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [@vue/reactivity@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vue/runtime-core@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vue/runtime-dom@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vue/server-renderer@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vue/shared@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [@vuetify/v0@1.2.2] === +License: MIT +Repository: https://github.com/vuetifyjs/0 + +The MIT License (MIT) + +Copyright (c) 2016-now Vuetify, LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [acorn@8.18.0] === +License: MIT +Repository: https://github.com/acornjs/acorn + +MIT License + +Copyright (C) 2012-2022 by various contributors (see AUTHORS) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [ansi-regex@5.0.1] === +License: MIT +Repository: chalk/ansi-regex + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [ansi-styles@4.3.0] === +License: MIT +Repository: chalk/ansi-styles + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [ast-kit@2.2.0] === +License: MIT +Repository: https://github.com/sxzz/ast-kit + +The MIT License (MIT) + +Copyright © 2023-PRESENT Kevin Deng (https://github.com/sxzz) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [ast-walker-scope@0.9.0] === +License: MIT +Repository: https://github.com/sxzz/ast-walker-scope + +The MIT License (MIT) + +Copyright © 2022-PRESENT Kevin Deng (https://github.com/sxzz) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [balanced-match@4.0.4] === +License: MIT +Repository: git://github.com/juliangruber/balanced-match + +(MIT) + +Original code Copyright Julian Gruber + +Port to TypeScript Copyright Isaac Z. Schlueter + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [birpc@2.9.0] === +License: MIT +Repository: https://github.com/antfu-collective/birpc + +MIT License + +Copyright (c) 2021 Anthony Fu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [brace-expansion@5.0.12] === +License: MIT +Repository: https://github.com/juliangruber/brace-expansion + +MIT License + +Copyright Julian Gruber + +TypeScript port Copyright Isaac Z. Schlueter + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [chevrotain@11.1.2] === +License: Apache-2.0 +Repository: git://github.com/Chevrotain/chevrotain + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +=== [chokidar@5.0.0] === +License: MIT +Repository: https://github.com/paulmillr/chokidar + +The MIT License (MIT) + +Copyright (c) 2012 Paul Miller (https://paulmillr.com), Elan Shanker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the “Software”), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [cliui@7.0.4] === +License: ISC +Repository: yargs/cliui + +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [color-convert@2.0.1] === +License: MIT +Repository: Qix-/color-convert + +Copyright (c) 2011-2016 Heather Arthur + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [color-name@1.1.4] === +License: MIT +Repository: git@github.com:colorjs/color-name + +The MIT License (MIT) +Copyright (c) 2015 Dmitry Ivanov + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [commander@7.2.0] === +License: MIT +Repository: https://github.com/tj/commander.js + +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [commander@8.3.0] === +License: MIT +Repository: https://github.com/tj/commander.js + +(The MIT License) + +Copyright (c) 2011 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [confbox@0.1.8] === +License: MIT +Repository: unjs/confbox + +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +js-yaml: https://github.com/nodeca/js-yaml/tree/master + +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +--- + +smol-toml: https://github.com/squirrelchat/smol-toml/blob/mistress/LICENSE + +Copyright (c) Squirrel Chat et al., All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- + +jsonc-parser: https://github.com/microsoft/node-jsonc-parser/blob/main/LICENSE.md + +The MIT License (MIT) + +Copyright (c) Microsoft + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- + +json5: https://github.com/json5/json5/blob/main/LICENSE.md + +MIT License + +Copyright (c) 2012-2018 Aseem Kishore, and others (https://github.com/json5/json5/graphs/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- + +detect-indent: https://github.com/sindresorhus/detect-indent/blob/main/license + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [confbox@0.2.4] === +License: MIT +Repository: unjs/confbox + +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +## Third-Party Licenses + +This software includes bundled third-party dependencies. The licenses and +copyright notices for these dependencies are available in +`dist/THIRD-PARTY-LICENSES.md` within the distributed package. + +=== [confbox@0.3.1] === +License: MIT +Repository: unjs/confbox + +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +## Third-Party Licenses + +This software includes bundled third-party dependencies. The licenses and +copyright notices for these dependencies are available in +`dist/THIRD-PARTY-LICENSES.md` within the distributed package. + +=== [copyfiles@2.4.1] === +License: MIT +Repository: git://github.com/calvinmetcalf/copyfiles + +# Copyright (c) 2014-2018 Calvin Metcalf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE.** + +=== [core-util-is@1.0.3] === +License: MIT +Repository: git://github.com/isaacs/core-util-is + +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +=== [cose-base@1.0.3] === +License: MIT +Repository: https://github.com/iVis-at-Bilkent/cose-base + +MIT License + +Copyright (c) 2019 - present, iVis@Bilkent. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [cose-base@2.2.0] === +License: MIT +Repository: https://github.com/iVis-at-Bilkent/cose-base + +MIT License + +Copyright (c) 2019 - present, iVis@Bilkent. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [csstype@3.2.3] === +License: MIT +Repository: https://github.com/frenic/csstype + +Copyright (c) 2017-2018 Fredrik Nicol + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [cytoscape-cose-bilkent@4.1.0] === +License: MIT +Repository: https://github.com/cytoscape/cytoscape.js-cose-bilkent + + + +Copyright (c) 2016-2018, The Cytoscape Consortium. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the “Software”), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [cytoscape-fcose@2.2.0] === +License: MIT +Repository: https://github.com/iVis-at-Bilkent/cytoscape.js-fcose + +Copyright (c) 2018 - present, iVis-at-Bilkent. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the “Software”), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [cytoscape@3.34.3] === +License: MIT +Repository: https://github.com/cytoscape/cytoscape.js + +Copyright (c) 2016-2026, The Cytoscape Consortium. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the “Software”), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +import fs from 'fs'; +import path from 'path'; + +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const year = (new Date()).getFullYear(); + +const license = `Copyright (c) 2016-${year}, The Cytoscape Consortium. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the “Software”), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.`; + +fs.writeFileSync(path.join(__dirname, 'LICENSE'), license); + +=== [d3-array@2.12.1] === +License: BSD-3-Clause +Repository: https://github.com/d3/d3-array + +Copyright 2010-2020 Mike Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [d3-array@3.2.4] === +License: ISC +Repository: https://github.com/d3/d3-array + +Copyright 2010-2023 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-axis@3.0.0] === +License: ISC +Repository: https://github.com/d3/d3-axis + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-brush@3.0.0] === +License: ISC +Repository: https://github.com/d3/d3-brush + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-chord@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-chord + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-color@3.1.0] === +License: ISC +Repository: https://github.com/d3/d3-color + +Copyright 2010-2022 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-contour@4.0.2] === +License: ISC +Repository: https://github.com/d3/d3-contour + +Copyright 2012-2023 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-delaunay@6.0.4] === +License: ISC +Repository: https://github.com/d3/d3-delaunay + +Copyright 2018-2021 Observable, Inc. +Copyright 2021 Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-dispatch@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-dispatch + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-drag@3.0.0] === +License: ISC +Repository: https://github.com/d3/d3-drag + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-dsv@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-dsv + +Copyright 2013-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-ease@3.0.1] === +License: BSD-3-Clause +Repository: https://github.com/d3/d3-ease + +Copyright 2010-2021 Mike Bostock +Copyright 2001 Robert Penner +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [d3-fetch@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-fetch + +Copyright 2016-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-force@3.0.0] === +License: ISC +Repository: https://github.com/d3/d3-force + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-format@3.1.2] === +License: ISC +Repository: https://github.com/d3/d3-format + +Copyright 2010-2026 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-geo@3.1.1] === +License: ISC +Repository: https://github.com/d3/d3-geo + +Copyright 2010-2024 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +This license applies to GeographicLib, versions 1.12 and later. + +Copyright 2008-2012 Charles Karney + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [d3-hierarchy@3.1.2] === +License: ISC +Repository: https://github.com/d3/d3-hierarchy + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-interpolate@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-interpolate + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-path@1.0.9] === +License: BSD-3-Clause +Repository: https://github.com/d3/d3-path + +Copyright 2015-2016 Mike Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [d3-path@3.1.0] === +License: ISC +Repository: https://github.com/d3/d3-path + +Copyright 2015-2022 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-polygon@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-polygon + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-quadtree@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-quadtree + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-random@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-random + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-sankey@0.12.3] === +License: BSD-3-Clause +Repository: https://github.com/d3/d3-sankey + +Copyright 2015, Mike Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [d3-scale-chromatic@3.1.0] === +License: ISC +Repository: https://github.com/d3/d3-scale-chromatic + +Copyright 2010-2024 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +Apache-Style Software License for ColorBrewer software and ColorBrewer Color Schemes + +Copyright 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. + +=== [d3-scale@4.0.2] === +License: ISC +Repository: https://github.com/d3/d3-scale + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-selection@3.0.0] === +License: ISC +Repository: https://github.com/d3/d3-selection + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-shape@1.3.7] === +License: BSD-3-Clause +Repository: https://github.com/d3/d3-shape + +Copyright 2010-2015 Mike Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the author nor the names of contributors may be used to + endorse or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [d3-shape@3.2.0] === +License: ISC +Repository: https://github.com/d3/d3-shape + +Copyright 2010-2022 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-time-format@4.1.0] === +License: ISC +Repository: https://github.com/d3/d3-time-format + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-time@3.1.0] === +License: ISC +Repository: https://github.com/d3/d3-time + +Copyright 2010-2022 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-timer@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-timer + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-transition@3.0.1] === +License: ISC +Repository: https://github.com/d3/d3-transition + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3-zoom@3.0.0] === +License: ISC +Repository: https://github.com/d3/d3-zoom + +Copyright 2010-2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [d3@7.9.0] === +License: ISC +Repository: https://github.com/d3/d3 + +Copyright 2010-2023 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [dagre-d3-es@7.0.14] === +License: MIT +Repository: https://github.com/tbo47/dagre-es + +Original dagre-d3 copyright: Copyright (c) 2013 Chris Pettitt +Original dagre copyright: Copyright (c) 2012-2014 Chris Pettitt +Original graphlib copyright: Copyright (c) 2012-2014 Chris Pettitt + +Copyright (c) 2022-2024 Thibaut Lassalle, David Newell, Alois Klink, Sidharth Vinod and dagre-es contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [dayjs@1.11.23] === +License: MIT +Repository: https://github.com/iamkun/dayjs + +MIT License + +Copyright (c) 2018-present, iamkun + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [delaunator@5.1.0] === +License: ISC +Repository: https://github.com/mapbox/delaunator + +ISC License + +Copyright (c) 2026, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [dompurify@3.4.15] === +License: (MPL-2.0 OR Apache-2.0) +Repository: git://github.com/cure53/DOMPurify + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. + +=== [elkjs@0.9.3] === +License: EPL-2.0 +Repository: https://github.com/kieler/elkjs + +# Eclipse Public License - v 2.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE +PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF +THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +## 1. DEFINITIONS + +“Contribution” means: + +- a\) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and +- b\) in the case of each subsequent Contributor: + - i\) changes to the Program, and + - ii\) additions to the Program; + + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + “originates” from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's + behalf. Contributions do not include changes or additions to the + Program that are not Modified Works. + +“Contributor” means any person or entity that Distributes the Program. + +“Licensed Patents” mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +“Program” means the Contributions Distributed in accordance with this +Agreement. + +“Recipient” means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +“Derivative Works” shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +“Modified Works” shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +“Distribute” means the acts of a) distributing or b) making available in +any manner that enables the transfer of a copy. + +“Source Code” means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +“Secondary License” means either the GNU General Public License, Version +2.0, or any later versions of that license, including any exceptions or +additional permissions as identified by the initial Contributor. + +## 2. GRANT OF RIGHTS + +- a\) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. +- b\) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent license + under Licensed Patents to make, use, sell, offer to sell, import and + otherwise transfer the Contribution of such Contributor, if any, in + Source Code or other form. This patent license shall apply to the + combination of the Contribution and the Program if, at the time the + Contribution is added by the Contributor, such addition of the + Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. +- c\) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. Each + Contributor disclaims any liability to Recipient for claims brought by + any other entity based on infringement of intellectual property rights + or otherwise. As a condition to exercising the rights and licenses + granted hereunder, each Recipient hereby assumes sole responsibility to + secure any other intellectual property rights needed, if any. For + example, if a third party patent license is required to allow Recipient + to Distribute the Program, it is Recipient's responsibility to acquire + that license before distributing the Program. +- d\) Each Contributor represents that to its knowledge it has sufficient + copyright rights in its Contribution, if any, to grant the copyright + license set forth in this Agreement. +- e\) Notwithstanding the terms of any Secondary License, no Contributor + makes additional grants to any Recipient (other than those set forth in + this Agreement) as a result of such Recipient's receipt of the Program + under the terms of a Secondary License (if permitted under the terms of + Section 3). + +## 3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + +- a\) the Program must also be made available as Source Code, in accordance + with section 3.2, and the Contributor must accompany the Program with a + statement that the Source Code for the Program is available under this + Agreement, and informs Recipients how to obtain it in a reasonable + manner on or through a medium customarily used for software exchange; + and +- b\) the Contributor may Distribute the Program under a license different + than this Agreement, provided that such license: + - i\) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including warranties or + conditions of title and non-infringement, and implied warranties or + conditions of merchantability and fitness for a particular purpose; + - ii\) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, incidental + and consequential damages, such as lost profits; + - iii\) does not attempt to limit or alter the recipients' rights in the + Source Code under section 3.2; and + - iv\) requires any subsequent distribution of the Program by any party to + be under a license that satisfies the requirements of this section 3. + +3.2 When the Program is Distributed as Source Code: + +- a\) it must be made available under this Agreement, or if the Program (i) + is combined with other material in a separate file or files made + available under a Secondary License, and (ii) the initial Contributor + attached to the Source Code the notice described in Exhibit A of this + Agreement, then the Program may be made available under the terms of + such Secondary Licenses, and +- b\) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability (‘notices’) contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +## 4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, the +Contributor who includes the Program in a commercial product offering +should do so in a manner which does not create potential liability for +other Contributors. Therefore, if a Contributor includes the Program in +a commercial product offering, such Contributor (“Commercial +Contributor”) hereby agrees to defend and indemnify every other +Contributor (“Indemnified Contributor”) against any losses, damages and +costs (collectively “Losses”) arising from claims, lawsuits and other +legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the +Program in a commercial product offering. The obligations in this +section do not apply to any claims or Losses relating to any actual or +alleged intellectual property infringement. In order to qualify, an +Indemnified Contributor must: a) promptly notify the Commercial +Contributor in writing of such claim, and b) allow the Commercial +Contributor to control, and cooperate with the Commercial Contributor +in, the defense and any related settlement negotiations. The Indemnified +Contributor may participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those +performance claims and warranties, and if a court requires any other +Contributor to pay any damages as a result, the Commercial Contributor +must pay those damages. + +## 5. NO WARRANTY {#warranty} + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs or +equipment, and unavailability or interruption of operations. + +## 6. DISCLAIMER OF LIABILITY {#disclaimer} + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +## 7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further action +by the parties hereto, such provision shall be reformed to the minimum +extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity (including +a cross-claim or counterclaim in a lawsuit) alleging that the Program +itself (excluding combinations of the Program with other software or +hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails +to comply with any of the material terms or conditions of this Agreement +and does not cure such failure in a reasonable period of time after +becoming aware of such noncompliance. If all Recipient's rights under +this Agreement terminate, Recipient agrees to cease use and distribution +of the Program as soon as reasonably practicable. However, Recipient's +obligations under this Agreement and any licenses granted by Recipient +relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and may +only be modified in the following manner. The Agreement Steward reserves +the right to publish new versions (including revisions) of this +Agreement from time to time. No one other than the Agreement Steward has +the right to modify this Agreement. The Eclipse Foundation is the +initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is +published, Contributor may elect to Distribute the Program (including +its Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +## Exhibit A – Form of Secondary Licenses Notice {#exhibit-a} + +“This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}.” + +> Simply including a copy of this Agreement, including this Exhibit A is +> not sufficient to license the Source Code under Secondary Licenses. +> +> If it is not possible or desirable to put the notice in a particular +> file, then You may include the notice in a location (such as a LICENSE +> file in a relevant directory) where a recipient would be likely to +> look for such a notice. +> +> You may add additional accurate notices of copyright ownership. + +=== [emoji-regex@8.0.0] === +License: MIT +Repository: https://github.com/mathiasbynens/emoji-regex + +Copyright Mathias Bynens + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [entities@7.0.1] === +License: BSD-2-Clause +Repository: https://github.com/fb55/entities + +Copyright (c) Felix Böhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [es-toolkit@1.52.0] === +License: MIT +Repository: https://github.com/toss/es-toolkit + +MIT License + +Copyright (c) 2024 Viva Republica, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +[NOTICE] (from es-toolkit@1.52.0): +es-toolkit + +Parts of the test suite and compatibility layer in es-toolkit/compat are +derived from Lodash (https://github.com/lodash/lodash). + +Lodash copyright notice and MIT permission notice: + +Copyright OpenJS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [escalade@3.2.0] === +License: MIT +Repository: lukeed/escalade + +MIT License + +Copyright (c) Luke Edwards (lukeed.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [estree-walker@2.0.2] === +License: MIT +Repository: https://github.com/Rich-Harris/estree-walker + +Copyright (c) 2015-20 [these people](https://github.com/Rich-Harris/estree-walker/graphs/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [exsolve@1.1.1] === +License: MIT +Repository: unjs/exsolve + +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +This is a derivative work based on: +. + +--- + +This is a derivative work based on: +. + +Which is licensed: + +""" +(The MIT License) + +Copyright (c) 2021 Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +""" + +--- + +This is a derivative work based on: +. + +Which is licensed: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +=== [fast-deep-equal@3.1.3] === +License: MIT +Repository: https://github.com/epoberezkin/fast-deep-equal + +MIT License + +Copyright (c) 2017 Evgeny Poberezkin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [fast-equals@5.4.3] === +License: MIT +Repository: https://github.com/planttheidea/fast-equals + +MIT License + +Copyright (c) 2025 Tony Quetano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [fdir@6.5.0] === +License: MIT +Repository: https://github.com/thecodrr/fdir + +Copyright 2023 Abdullah Atta + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [fs.realpath@1.0.0] === +License: ISC +Repository: https://github.com/isaacs/fs.realpath + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +---- + +This library bundles a version of the `fs.realpath` and `fs.realpathSync` +methods from Node.js v0.10 under the terms of the Node.js MIT license. + +Node's license follows, also included at the header of `old.js` which contains +the licensed code: + + Copyright Joyent, Inc. and other Node contributors. + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + +=== [get-caller-file@2.0.5] === +License: ISC +Repository: https://github.com/stefanpenner/get-caller-file + +ISC License (ISC) +Copyright 2018 Stefan Penner + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [glob@7.2.3] === +License: ISC +Repository: git://github.com/isaacs/node-glob + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +## Glob Logo + +Glob's logo created by Tanya Brassie , licensed +under a Creative Commons Attribution-ShareAlike 4.0 International License +https://creativecommons.org/licenses/by-sa/4.0/ + +=== [hachure-fill@0.5.2] === +License: MIT +Repository: https://github.com/pshihn/hachure-fill + +MIT License + +Copyright (c) 2023 Preet Shihn + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [hookable@5.5.3] === +License: MIT +Repository: unjs/hookable + +The MIT License (MIT) + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [iconv-lite@0.6.3] === +License: MIT +Repository: git://github.com/ashtuchkin/iconv-lite + +Copyright (c) 2011 Alexander Shtuchkin + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [import-meta-resolve@4.2.0] === +License: MIT +Repository: wooorm/import-meta-resolve + +(The MIT License) + +Copyright (c) Titus Wormer + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- + +This is a derivative work based on: +. +Which is licensed: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +=== [inflight@1.0.6] === +License: ISC +Repository: https://github.com/npm/inflight + +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [inherits@2.0.4] === +License: ISC +Repository: git://github.com/isaacs/inherits + +The ISC License + +Copyright (c) Isaac Z. Schlueter + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + +=== [internmap@1.0.1] === +License: ISC +Repository: https://github.com/mbostock/internmap + +Copyright 2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [internmap@2.0.3] === +License: ISC +Repository: https://github.com/mbostock/internmap + +Copyright 2021 Mike Bostock + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [is-fullwidth-code-point@3.0.0] === +License: MIT +Repository: sindresorhus/is-fullwidth-code-point + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [isarray@0.0.1] === +License: MIT +Repository: git://github.com/juliangruber/isarray + +(ライセンス本文が見つかりませんでした) + +=== [isarray@1.0.0] === +License: MIT +Repository: git://github.com/juliangruber/isarray + +(ライセンス本文が見つかりませんでした) + +=== [katex@0.16.47] === +License: MIT +Repository: https://github.com/KaTeX/KaTeX + +The MIT License (MIT) + +Copyright (c) 2013-2020 Khan Academy and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [kdbush@4.1.0] === +License: ISC +Repository: git://github.com/mourner/kdbush + +ISC License + +Copyright (c) 2026, Vladimir Agafonkin + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [khroma@2.1.0] === +License: UNKNOWN +Repository: github:fabiospampinato/khroma + +The MIT License (MIT) + +Copyright (c) 2019-present Fabio Spampinato, Andrew Maney + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +=== [layout-base@1.0.2] === +License: MIT +Repository: https://github.com/iVis-at-Bilkent/layout-base + +MIT License + +Copyright (c) 2019 iVis@Bilkent + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [layout-base@2.0.1] === +License: MIT +Repository: https://github.com/iVis-at-Bilkent/layout-base + +MIT License + +Copyright (c) 2019 iVis@Bilkent + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [local-pkg@1.2.1] === +License: MIT +Repository: https://github.com/antfu-collective/local-pkg + +MIT License + +Copyright (c) 2021 Anthony Fu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [lodash-es@4.18.1] === +License: MIT +Repository: lodash/lodash + +Copyright OpenJS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. + +=== [magic-string-ast@1.0.3] === +License: MIT +Repository: https://github.com/sxzz/magic-string-ast + +The MIT License (MIT) + +Copyright © 2023-PRESENT Kevin Deng (https://github.com/sxzz) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [magic-string@0.30.21] === +License: MIT +Repository: https://github.com/Rich-Harris/magic-string + +Copyright 2018 Rich Harris + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [marked@16.4.2] === +License: MIT +Repository: git://github.com/markedjs/marked + +# License information + +## Contribution License Agreement + +If you contribute code to this project, you are implicitly allowing your code +to be distributed under the MIT license. You are also implicitly verifying that +all code is your original work. `` + +## Marked + +Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/) +Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +## Markdown + +Copyright © 2004, John Gruber +http://daringfireball.net/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. + +=== [marked@18.0.13] === +License: MIT +Repository: https://github.com/markedjs/marked + +# License information + +## Contribution License Agreement + +If you contribute code to this project, you are implicitly allowing your code +to be distributed under the MIT license. You are also implicitly verifying that +all code is your original work. `` + +## Marked + +Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/) +Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +## Markdown + +Copyright © 2004, John Gruber +http://daringfireball.net/ +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. + +=== [mermaid@12.0.0] === +License: MIT +Repository: https://github.com/mermaid-js/mermaid + +The MIT License (MIT) + +Copyright (c) 2014 - 2022 Knut Sveidqvist + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [minimatch@3.1.5] === +License: ISC +Repository: git://github.com/isaacs/minimatch + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [mkdirp@1.0.4] === +License: MIT +Repository: https://github.com/isaacs/node-mkdirp + +Copyright James Halliday (mail@substack.net) and Isaac Z. Schlueter (i@izs.me) + +This project is free software released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [mkdirp@3.0.1] === +License: MIT +Repository: https://github.com/isaacs/node-mkdirp + +Copyright (c) 2011-2023 James Halliday (mail@substack.net) and Isaac Z. Schlueter (i@izs.me) + +This project is free software released under the MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [mlly@1.8.2] === +License: MIT +Repository: unjs/mlly + +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [moment@2.31.0] === +License: MIT +Repository: github:moment/moment + +Copyright (c) OpenJS Foundation and other contributors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +=== [muggle-string@0.4.1] === +License: MIT +Repository: https://github.com/johnsoncodehk/muggle-string + +MIT License + +Copyright (c) 2022-present Johnson Chu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [nanoid@3.3.19] === +License: MIT +Repository: ai/nanoid + +The MIT License (MIT) + +Copyright 2017 Andrey Sitnik + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [noms@0.0.0] === +License: ISC +Repository: https://github.com/calvinmetcalf/noms + +(ライセンス本文が見つかりませんでした) + +=== [nostics@1.2.0] === +License: MIT +Repository: https://github.com/vercel-labs/nostics + +The MIT License (MIT) + +Copyright (c) 2026-present Vercel Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [once@1.4.0] === +License: ISC +Repository: git://github.com/isaacs/once + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [package-manager-detector@1.8.0] === +License: MIT +Repository: https://github.com/antfu-collective/package-manager-detector + +MIT License + +Copyright (c) 2020-PRESENT Anthony Fu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [path-data-parser@0.1.0] === +License: MIT +Repository: https://github.com/pshihn/path-data-parser + +MIT License + +Copyright (c) 2020 Preet Shihn + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [path-is-absolute@1.0.1] === +License: MIT +Repository: sindresorhus/path-is-absolute + +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [pathe@2.0.3] === +License: MIT +Repository: unjs/pathe + +MIT License + +Copyright (c) Pooya Parsa - Daniel Roe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +Copyright Joyent, Inc. and other Node contributors. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +--- + +Bundled zeptomatch (https://github.com/fabiospampinato/zeptomatch) + +The MIT License (MIT) + +Copyright (c) 2023-present Fabio Spampinato + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +=== [perfect-debounce@2.1.0] === +License: MIT +Repository: unjs/perfect-debounce + +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [picocolors@1.1.1] === +License: ISC +Repository: alexeyraspopov/picocolors + +ISC License + +Copyright (c) 2021-2024 Oleksii Raspopov, Kostiantyn Denysov, Anton Verinov + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [picomatch@4.0.7] === +License: MIT +Repository: micromatch/picomatch + +The MIT License (MIT) + +Copyright (c) 2017-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [pkg-types@1.3.1] === +License: MIT +Repository: unjs/pkg-types + +MIT License + +Copyright (c) Pooya Parsa - Daniel Roe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- + +Copyright Joyent, Inc. and other Node contributors. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [pkg-types@2.3.3] === +License: MIT +Repository: unjs/pkg-types + +MIT License + +Copyright (c) Pooya Parsa - Daniel Roe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +-------------------------------------------------------------------------------- + +Copyright Joyent, Inc. and other Node contributors. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [points-on-curve@0.2.0] === +License: MIT +Repository: https://github.com/pshihn/bezier-points + +MIT License + +Copyright (c) 2020 Preet Shihn + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [points-on-path@0.2.1] === +License: MIT +Repository: https://github.com/pshihn/points-on-path + +MIT License + +Copyright (c) 2020 Preet + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [postcss@8.5.28] === +License: MIT +Repository: postcss/postcss + +The MIT License (MIT) + +Copyright 2013 Andrey Sitnik + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [process-nextick-args@2.0.1] === +License: MIT +Repository: https://github.com/calvinmetcalf/process-nextick-args + +# Copyright (c) 2015 Calvin Metcalf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.** + +=== [quansync@0.2.11] === +License: MIT +Repository: https://github.com/quansync-dev/quansync + +MIT License + +Copyright (c) 2025-PRESENT Anthony Fu and Kevin Deng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [readable-stream@1.0.34] === +License: MIT +Repository: git://github.com/isaacs/readable-stream + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +=== [readable-stream@2.3.8] === +License: MIT +Repository: git://github.com/nodejs/readable-stream + +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +=== [readdirp@5.1.1] === +License: MIT +Repository: https://github.com/paulmillr/readdirp + +MIT License + +Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [require-directory@2.1.1] === +License: MIT +Repository: git://github.com/troygoode/node-require-directory + +The MIT License (MIT) + +Copyright (c) 2011 Troy Goode + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [robust-predicates@3.0.3] === +License: Unlicense +Repository: https://github.com/mourner/robust-predicates + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to + +=== [roughjs@4.6.6] === +License: MIT +Repository: https://github.com/pshihn/rough + +MIT License + +Copyright (c) 2019 Preet Shihn + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [rw@1.3.3] === +License: BSD-3-Clause +Repository: http://github.com/mbostock/rw + +Copyright (c) 2014-2016, Michael Bostock +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* The name Michael Bostock may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [safe-buffer@5.1.2] === +License: MIT +Repository: git://github.com/feross/safe-buffer + +The MIT License (MIT) + +Copyright (c) Feross Aboukhadijeh + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [safer-buffer@2.1.2] === +License: MIT +Repository: https://github.com/ChALkeR/safer-buffer + +MIT License + +Copyright (c) 2018 Nikita Skovoroda + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [scule@1.3.0] === +License: MIT +Repository: unjs/scule + +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [source-map-js@1.2.1] === +License: BSD-3-Clause +Repository: 7rulnik/source-map-js + + +Copyright (c) 2009-2011, Mozilla Foundation and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the names of the Mozilla Foundation nor the names of project + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=== [string-width@4.2.3] === +License: MIT +Repository: sindresorhus/string-width + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [string_decoder@0.10.31] === +License: MIT +Repository: git://github.com/rvagg/string_decoder + +Copyright Joyent, Inc. and other Node contributors. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [string_decoder@1.1.1] === +License: MIT +Repository: git://github.com/nodejs/string_decoder + +Node.js is licensed for use as follows: + +""" +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. +""" + +=== [strip-ansi@6.0.1] === +License: MIT +Repository: chalk/strip-ansi + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [stylis@4.4.0] === +License: MIT +Repository: https://github.com/thysultan/stylis.js + +MIT License + +Copyright (c) 2016-present Sultan Tarimo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [supercluster@8.0.1] === +License: ISC +Repository: git://github.com/mapbox/supercluster + +ISC License + +Copyright (c) 2021, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [through2@2.0.5] === +License: MIT +Repository: https://github.com/rvagg/through2 + +# The MIT License (MIT) + +**Copyright (c) Rod Vagg (the "Original Author") and additional contributors** + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [tinyexec@1.3.1] === +License: MIT +Repository: https://github.com/tinylibs/tinyexec + +MIT License + +Copyright (c) 2024 Tinylibs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [tinyglobby@0.2.17] === +License: MIT +Repository: https://github.com/SuperchupuDev/tinyglobby + +MIT License + +Copyright (c) 2024 Madeline Gurriarán + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [ts-dedent@2.3.0] === +License: MIT +Repository: https://github.com/tamino-martinius/node-ts-dedent + +MIT License + +Copyright (c) 2018 Tamino Martinius + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [ufo@1.6.4] === +License: MIT +Repository: unjs/ufo + +MIT License + +Copyright (c) Pooya Parsa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [unplugin-utils@0.3.2] === +License: MIT +Repository: https://github.com/sxzz/unplugin-utils + +The MIT License (MIT) + +Copyright © 2025-PRESENT Kevin Deng (https://github.com/sxzz) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +The MIT License (MIT) + +Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [unplugin@3.4.0] === +License: MIT +Repository: https://github.com/unjs/unplugin + +MIT License + +Copyright (c) 2021-PRESENT Nuxt Contrib + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [untildify@4.0.0] === +License: MIT +Repository: sindresorhus/untildify + +MIT License + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [util-deprecate@1.0.2] === +License: MIT +Repository: git://github.com/TooTallNate/util-deprecate + +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +=== [uuid@14.0.2] === +License: MIT +Repository: https://github.com/uuidjs/uuid + +The MIT License (MIT) + +Copyright (c) 2010-2020 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [vue-i18n@11.4.12] === +License: MIT +Repository: https://github.com/intlify/vue-i18n + +The MIT License (MIT) + +Copyright (c) 2020 kazuya kawaguchi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [vue-router@5.3.1] === +License: MIT +Repository: https://github.com/vuejs/router + +The MIT License (MIT) + +Copyright (c) 2019-present Eduardo San Martin Morote + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [vue3-google-map@0.27.2] === +License: MIT +Repository: https://github.com/inocan-group/vue3-google-map + +The MIT License (MIT) + +Copyright (c) 2020-present, Inocan Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [vue@3.5.43] === +License: MIT +Repository: https://github.com/vuejs/core + +The MIT License (MIT) + +Copyright (c) 2018-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [vuetify@4.2.1] === +License: MIT +Repository: https://github.com/vuetifyjs/vuetify + +The MIT License (MIT) + +Copyright (c) 2016-now Vuetify, LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [webpack-virtual-modules@0.6.2] === +License: MIT +Repository: https://github.com/sysgears/webpack-virtual-modules + +MIT License + +Copyright (c) 2017 SysGears + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +=== [wrap-ansi@7.0.0] === +License: MIT +Repository: chalk/wrap-ansi + +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=== [wrappy@1.0.2] === +License: ISC +Repository: https://github.com/npm/wrappy + +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [xtend@4.0.2] === +License: MIT +Repository: git://github.com/Raynos/xtend + +The MIT License (MIT) +Copyright (c) 2012-2014 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [y18n@5.0.8] === +License: ISC +Repository: yargs/y18n + +Copyright (c) 2015, Contributors + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=== [yargs-parser@20.2.9] === +License: ISC +Repository: https://github.com/yargs/yargs-parser + +Copyright (c) 2016, Contributors + +Permission to use, copy, modify, and/or distribute this software +for any purpose with or without fee is hereby granted, provided +that the above copyright notice and this permission notice +appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +=== [yargs@16.2.2] === +License: MIT +Repository: https://github.com/yargs/yargs + +MIT License + +Copyright 2010 James Halliday (mail@substack.net); Modified work Copyright 2014 Contributors (ben@npmjs.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=== [Android (Gradle) Modules] === + +=== [androidx.activity:activity:1.13.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.annotation:annotation-experimental:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.annotation:annotation-jvm:1.10.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.annotation:annotation:1.10.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.appcompat:appcompat-resources:1.7.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.appcompat:appcompat:1.7.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.arch.core:core-common:2.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.arch.core:core-runtime:2.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.cardview:cardview:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.collection:collection-jvm:1.4.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.collection:collection:1.4.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-annotation-android:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-annotation:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.concurrent:concurrent-futures:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.constraintlayout:constraintlayout-core:1.1.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.constraintlayout:constraintlayout:2.2.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.coordinatorlayout:coordinatorlayout:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.core:core-ktx:1.19.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.core:core-viewtree:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.core:core:1.19.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.cursoradapter:cursoradapter:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.customview:customview:1.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.drawerlayout:drawerlayout:1.1.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.dynamicanimation:dynamicanimation:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.emoji2:emoji2-views-helper:1.3.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.emoji2:emoji2:1.3.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.fragment:fragment:1.5.4] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.graphics:graphics-shapes-android:1.0.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.graphics:graphics-shapes:1.0.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.interpolator:interpolator:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-common:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-livedata-core:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-livedata:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-process:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-runtime:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.loader:loader:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigationevent:navigationevent-android:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigationevent:navigationevent:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.profileinstaller:profileinstaller:1.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.recyclerview:recyclerview:1.2.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.resourceinspection:resourceinspection-annotation:1.0.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.savedstate:savedstate:1.2.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.startup:startup-runtime:1.1.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.tracing:tracing:1.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.transition:transition:1.5.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.vectordrawable:vectordrawable-animated:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.vectordrawable:vectordrawable:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.versionedparcelable:versionedparcelable:1.1.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.viewpager2:viewpager2:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.viewpager:viewpager:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.google.android.material:material:1.14.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.google.errorprone:error_prone_annotations:2.15.0] === +License: Apache 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.google.guava:listenablefuture:1.0] === +License: 不明(リポジトリURL参照) + +=== [org.jetbrains.kotlin:kotlin-bom:1.8.22] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlin:kotlin-stdlib:2.4.10] === +License: Apache-2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains:annotations:23.0.0] === +License: The Apache Software License, Version 2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jspecify:jspecify:1.0.0] === +License: The Apache License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [Wear OS (Gradle) Modules] === + +=== [androidx.activity:activity-compose:1.13.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.activity:activity-ktx:1.13.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.activity:activity:1.13.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.activity:activity:1.8.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.annotation:annotation-experimental:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.annotation:annotation-jvm:1.10.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.annotation:annotation:1.10.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.appcompat:appcompat-resources:1.7.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.appcompat:appcompat:1.7.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.arch.core:core-common:2.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.arch.core:core-runtime:2.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.autofill:autofill:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.cardview:cardview:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.collection:collection-jvm:1.4.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.collection:collection-jvm:1.5.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.collection:collection-ktx:1.5.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.collection:collection:1.4.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.collection:collection:1.5.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.animation:animation-android:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.animation:animation-core-android:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.animation:animation-core:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.animation:animation:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.foundation:foundation-android:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.foundation:foundation-layout-android:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.foundation:foundation-layout:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.foundation:foundation:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.material:material-icons-core-android:1.7.8] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.material:material-icons-core:1.7.8] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.material:material-ripple-android:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.material:material-ripple:1.9.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-annotation-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-annotation:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-retain-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-retain:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-saveable-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime-saveable:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.runtime:runtime:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-geometry-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-geometry:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-graphics-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-graphics:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-text-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-text:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-unit-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-unit:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-util-android:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui-util:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.compose.ui:ui:1.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.concurrent:concurrent-futures-ktx:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.concurrent:concurrent-futures-ktx:1.3.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.concurrent:concurrent-futures:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.concurrent:concurrent-futures:1.3.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.constraintlayout:constraintlayout-core:1.1.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.constraintlayout:constraintlayout:2.2.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.coordinatorlayout:coordinatorlayout:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.core:core-ktx:1.19.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.core:core-viewtree:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.core:core:1.19.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.cursoradapter:cursoradapter:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.customview:customview-poolingcontainer:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.customview:customview:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.customview:customview:1.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.documentfile:documentfile:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.drawerlayout:drawerlayout:1.1.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.dynamicanimation:dynamicanimation:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.dynamicanimation:dynamicanimation:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.emoji2:emoji2-views-helper:1.3.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.emoji2:emoji2:1.3.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.emoji2:emoji2:1.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.fragment:fragment:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.fragment:fragment:1.5.4] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.graphics:graphics-path:1.0.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.graphics:graphics-shapes-android:1.0.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.graphics:graphics-shapes:1.0.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.interpolator:interpolator:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.legacy:legacy-support-core-utils:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-common-jvm:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-common:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-common:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-livedata-core-ktx:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-livedata-core:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-livedata-core:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-livedata:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-livedata:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-process:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-process:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-runtime-android:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-runtime-compose-android:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-runtime-compose:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-runtime-ktx-android:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-runtime-ktx:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-runtime:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-runtime:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-service:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel-android:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel-compose-android:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel-compose:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel-ktx:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel-savedstate-android:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel-savedstate:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel:2.11.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.lifecycle:lifecycle-viewmodel:2.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.loader:loader:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.localbroadcastmanager:localbroadcastmanager:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigation:navigation-common-ktx:2.6.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigation:navigation-common:2.6.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigation:navigation-compose:2.6.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigation:navigation-runtime-ktx:2.6.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigation:navigation-runtime:2.6.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigationevent:navigationevent-android:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigationevent:navigationevent-compose-android:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigationevent:navigationevent-compose:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.navigationevent:navigationevent:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.print:print:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.profileinstaller:profileinstaller:1.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.recyclerview:recyclerview:1.2.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.resourceinspection:resourceinspection-annotation:1.0.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.room:room-common:2.6.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.room:room-ktx:2.6.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.room:room-runtime:2.6.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.savedstate:savedstate-android:1.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.savedstate:savedstate-compose-android:1.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.savedstate:savedstate-compose:1.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.savedstate:savedstate-ktx:1.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.savedstate:savedstate:1.2.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.savedstate:savedstate:1.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.sqlite:sqlite-framework:2.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.sqlite:sqlite:2.4.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.startup:startup-runtime:1.1.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.startup:startup-runtime:1.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.tracing:tracing-ktx:1.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.tracing:tracing:1.2.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.transition:transition:1.5.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.transition:transition:1.6.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.vectordrawable:vectordrawable-animated:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.vectordrawable:vectordrawable:1.1.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.versionedparcelable:versionedparcelable:1.1.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.viewpager2:viewpager2:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.viewpager:viewpager:1.0.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.compose:compose-foundation:1.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.compose:compose-material-core:1.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.compose:compose-material:1.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.compose:compose-navigation:1.6.2] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.protolayout:protolayout-expression-pipeline:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.protolayout:protolayout-expression:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.protolayout:protolayout-external-protobuf:1.4.1] === +License: BSD-3-Clause +License URL: https://opensource.org/licenses/BSD-3-Clause + +=== [androidx.wear.protolayout:protolayout-material-core:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.protolayout:protolayout-material3:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.protolayout:protolayout-material:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.protolayout:protolayout-proto:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.protolayout:protolayout:1.4.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.tiles:tiles-proto:1.6.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.wear.tiles:tiles:1.6.1] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.window:window-core-android:1.5.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.window:window-core:1.5.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.window:window:1.5.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.work:work-runtime-ktx:2.10.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [androidx.work:work-runtime:2.10.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.google.android.gms:play-services-base:18.5.0] === +License: Android Software Development Kit License +License URL: https://developer.android.com/studio/terms.html + +=== [com.google.android.gms:play-services-basement:18.9.0] === +License: Android Software Development Kit License +License URL: https://developer.android.com/studio/terms.html + +=== [com.google.android.gms:play-services-tasks:18.2.0] === +License: Android Software Development Kit License +License URL: https://developer.android.com/studio/terms.html + +=== [com.google.android.gms:play-services-wearable:20.0.1] === +License: Android Software Development Kit License +License URL: https://developer.android.com/studio/terms.html + +=== [com.google.android.material:material:1.14.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.google.errorprone:error_prone_annotations:2.15.0] === +License: Apache 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.google.guava:listenablefuture:1.0] === +License: 不明(リポジトリURL参照) + +=== [com.squareup.okhttp3:okhttp-android:5.4.0] === +License: The Apache Software License, Version 2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.squareup.okhttp3:okhttp:5.4.0] === +License: The Apache Software License, Version 2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.squareup.okio:okio-jvm:3.17.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [com.squareup.okio:okio:3.17.0] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlin:kotlin-bom:1.8.22] === +License: The Apache Software License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlin:kotlin-stdlib-common:2.4.10] === +License: Apache-2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.22] === +License: The Apache License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.22] === +License: The Apache License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlin:kotlin-stdlib:2.4.10] === +License: Apache-2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-core:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-serialization-bom:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-serialization-core:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains.kotlinx:kotlinx-serialization-json:1.11.0] === +License: Apache-2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jetbrains:annotations:23.0.0] === +License: The Apache Software License, Version 2.0 +License URL: https://www.apache.org/licenses/LICENSE-2.0.txt + +=== [org.jspecify:jspecify:1.0.0] === +License: The Apache License, Version 2.0 +License URL: http://www.apache.org/licenses/LICENSE-2.0.txt diff --git a/README.md b/README.md index ba8c25334..bc4550821 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,208 @@ -# gkill +# ライフログアプリケーション「gkill」 +gkill is not a lifelogging application. +gkillはライフログアプリケーションじゃないです。 +![gkill_sample_view](https://github.com/mt3hr/gkill/blob/main/documents/resources/gkill_sample_view.png?raw=true) -This template should help get you started developing with Vue 3 in Vite. +## これはなに? What's this? +gkillはライフログアプリケーションです...(葛藤) +あなたの人生上のできごとを記録し、見返すことができます。 -## Recommended IDE Setup +gkill is a lifelogging application😖 +It allows you to record and reflect on the events of your life. -[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). +### い +①都度、今の情報を細切れに記録する +②gkillは記録を時系列順に表示します +③懐かしむ あるいは自省する もしくはAIに称賛してもらう など -## Type Support for `.vue` Imports in TS +とりあえず都度記録をしておけば、その日の情景が思い出せるんじゃないですかね。 +どうでもいいことも記録しておいて、3ヶ月後、1年後、3年後に見返してみてほしいです。 +面白いと思うので。 +今のあなたは今のあなたですが、過去未来のあなたはどうなんでしょうね。侘び寂び(適当) -TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) to make the TypeScript language service aware of `.vue` types. +| 記録種別 | 用途 | +| --------------- | ----------------------------------------------------------- | +| 📝テキストメモ | テキストメモ | +| ⌚打刻 | いつからいつまで、何をしていたか(状況) | +| ⭐️気分 | 今の気分を10段階評価 | +| 🔢数値 | 腹筋した回数や、体重など | +| 💰️支出 | お金の出入り | +| 🔗ブックマーク | ウェブサイトメモ | +| ✅️タスク | 軽量TODO(すでにある記録をそのままタスクにすることもできます) | +| 📁ファイル | 画像や動画など、ファイル(ZIPファイルの中身をブラウズ可能。Markdownファイルはリッチ表示・Mermaid図描画対応) | +| 📋️クリップボード | クリップボードの内容を貼り付けて保存 | +| 📍位置情報 | GPSログ(GPXファイル)を取り込んで地図に表示 | +| 🌀Gitコミット | ローカルGitリポジトリのコミット履歴を自動収集 | -## Customize configuration +| その他補佐機能 | 用途 | +| -------------- | --------------------------------------------------------------------------------- | +| 🏷️タグ | タグによる情報整理、検索補助 | +| ✍テキスト | テキストメモによる検索補助 | +| 📊集計 | 数値や支出、件数や気分などの集計(カスタマイズ可能。トレンドグラフで時系列推移も表示) | +| 🌕️関連情報 | 関連情報(直近の記録。カスタマイズ可能) | +| ⏺️定型文 | 定型文メモをボタンに登録可能。よく吸う煙草を予め登録して、最短操作で記録! | +| 🤖AI | 分析用データをダウンロードして添付、もしくはMCPサーバへの接続でAIに分析依頼可能! | +| 🔌プラグイン | ChatGPT・Claude.ai・Claude Codeの会話履歴など、gkill以外に残った記録を取り込んで同じ一覧に並べられます | -See [Vite Configuration Reference](https://vitejs.dev/config/). +### ろ +gkillは、打刻記録を用いて「状況」から検索することができます! +「友人Aと東京のカラオケに居た時の写真」のように情報を掘り返すことができます。 +「会社にいる時の平均気分」を出すこともできますよ。 -## Project Setup +### は +あなたが記録したいものをgkillに記録してください。 +そして願わくば。記録沼にはまってください。 +欲を言えば、もっともっといいライフログアプリケーションを作って世に放ってください。お待ちしております。 +(gkillはスタンドアロンで動きます。あなたの記録が勝手に外へ送られることはありません。 +外部と通信するのは、地図の表示・ブックマーク登録時のページ取得・自分で設定したときのMCP接続・ +通知(Web Push)を設定したときの配送だけです) -```sh -npm install -``` +## ダウンロード・インストール +[gkillダウンロード](https://github.com/mt3hr/gkill/releases/latest) -### Compile and Hot-Reload for Development +以下のファイル名の `<バージョン>` は、リリースページに並んでいる最新の番号(例: `1.1.10`)に読み替えてください。 -```sh -npm run dev -``` +### ⭐️gkill体験 +Windows用の利用例サンプルデータがあります。 +まず「gkill_sample_data_<バージョン>.zip」で軽く試して体験してほしいです。 +ダウンロード/展開後、LAUNCH_GKILL_SAMPLE_DATA.batを起動してください。 +[説明書](documents/gkill_user_document.pdf)に利用イメージのドキュメントがあります。 -### Type-Check, Compile and Minify for Production +### 💻️Windowsユーザ向け +①Assetsから「windows_amd64_gkill_<バージョン>.zip」をダウンロード +②zipを解凍して「gkill.exe」を実行 +※初回起動には時間がかかります。コーヒーでも淹れてお待ち下さい。 -```sh -npm run build -``` +### 📱Androidユーザ向け +①Assetsから「gkill_<バージョン>.apk」をダウンロード +②インストール +③ホーム画面から起動 +※初回起動時に「すべてのファイルへのアクセス」の許可を求められます -### Lint with [ESLint](https://eslint.org/) +### ⌚Wear OS(Pixel Watch等)ユーザ向け +腕時計からメモ帳構文で記録できます。スマホ側とウォッチ側の2つをインストールしてください。 +①Assetsから「gkill_wear_companion_<バージョン>.apk」(スマホ側)と「gkill_wear_watch_<バージョン>.apk」(ウォッチ側)をダウンロード +②それぞれインストール +③スマホ側でgkillサーバのアドレスとアカウントを設定 -```sh -npm run lint -``` +### 😎上級者・サーバ構築派向け +①あなたの環境の「<プラットフォーム>_gkill_server_<バージョン>.zip」をダウンロード + (windows_amd64 / linux_amd64 / linux_arm64 / linux_arm / android_arm / android_arm64 を配布しています。macOS版はありません) +②適当な場所に展開して「gkill_server」を実行 +③その後「[http://localhost:9999](http://localhost:9999)」にアクセス +④ブラウザからインストール(PWA) +(環境のzipがリリースされていなかったら[自分でビルド](./documents/reverse/dev-setup.md)してください。) + +## 初回起動 +初回起動すると、アカウント登録画面が表示されます。 +管理用アカウント(admin)はサーバ初回起動時に自動作成されます。 +この画面では、普段使うアカウントのユーザーID・パスワードと、管理用パスワードを設定してください。 +登録が完了するとログインページに遷移します。 +ログインして、右下の+ボタンから記録を始められます! +各画面右上の「?」ボタンからヘルプを参照できます。 + +## 運用・安全 +記録を貯め始めたら、まず以下に目を通してください。 + +- **バックアップ・復旧**: 手順は [運用ガイド](documents/reverse/operations-guide.md) の「バックアップ・リストア」章にあります。スナップショット方式と停止方式の2通り、復元の検証手順まで載っています。 +- **外部との通信**: 上記のとおり、地図・ブックマーク登録時のページ取得・自分で設定したMCP接続・通知(Web Push)配送だけです。記録本文が勝手に外へ送られることはありません。 +- **スマホ・ウォッチの接続**: Wear OSコンパニオンからサーバへ繋ぐ場合、ローカル(localhost)以外へは HTTPS が必須です(平文HTTPでは資格情報が漏れるため保存時に拒否されます)。 +- **脆弱性の報告**: [SECURITY.md](SECURITY.md) を参照してください。公開Issueには書かないでください。 + +## 資料の在り処 +[利用説明書](documents/gkill_user_document.pdf) +アプリ内ヘルプ(各画面右上の「?」ボタンから開けます。原稿は [resources/manual_src/](resources/manual_src/ja/getting-started.html)) +[開発者向け起点要件書・設計書](documents/gkill_develop_document.xlsx) +[開発者向けリバース資料(ソース対応済)](documents/reverse/README.md) +[開発者向け実装資料(ソース対応済)](src/README.md) +[AIエージェント向け規約(AGENTS.md)](AGENTS.md) + +| 資料 | 対象読者 | 内容 | +| --------------------------------- | ---------------- | ------------------------- | +| アプリ内ヘルプ(getting-started) | 初めてのユーザー | 最短の導入手順 | +| アプリ内チュートリアル | 全ユーザー | 段階的な学習ガイド | +| 利用説明書(PDF) | 全ユーザー | 機能の説明 | +| リバース資料 | 開発者 | アーキテクチャ・設計・API | +| 実装資料(src/README.md) | 開発者 | ソースの歩き方・ビルド手順 | +| AIエージェント向け規約(AGENTS.md) | AIコーディングエージェント | 全領域の核と、触る場所ごとの必読資料へのルーティング表 | + +## ライセンス + +MIT License です。詳細は [LICENSE](LICENSE) を参照してください。 +依存パッケージのライセンス一覧は [LICENSES_DEPENDENCE](LICENSES_DEPENDENCE) にあります。 + +## その他・進捗状況 + +
+かいはつすけじゅーる(完了) +【開発フェーズ】(2025-02-01 リスケ) + +100% 2024-07-18 対応完了 01.計画準備 + +100% 2024-08-15 対応完了 02.全体設計 + +100% 2025-02-02 対応完了 03.実装 + +100% 2025-02-16 対応完了 04.全体テスト + +100% 2025-02-28 対応完了 05.トライアルテスト フィードバック対応 + +100% 2025-03-01 対応完了 06.リリース + +
+ +
+2025年中対応スケジュール(完了) +【保守性向上フェーズ】 + +100% 2025-05-17 対応完了 機能追加実装 + +100% 2026-03-25 対応完了 ソース保守性向上対応 + +100% 2026-03-25 対応完了 v1.0.0リリース + +100% 2025-08-16 対応完了 マニュアル用サンプルデータ取得 + +100% 2025-11-28 対応完了 マニュアル&ヘルプ同梱版リリース ユーザ導入用資料の作成 + +
+ +
+2026年中対応スケジュール(完了) +【内部保守性向上/導線整備/クローズフェーズ】 + +100% 2026-03-25 対応完了 イマイチ設計やイマイチ実装の内部改修 + +100% 2026-03-25 対応完了 資料整備の実施(下部参照) + +100% 2026-03-25 対応完了 導線整備(ヘルプ画面の設置、ツールチップの整備、チュートリアルの整備) + +100% 2026-03-25 対応完了 i18n見直し + +100% 2026-03-25 対応完了 全体テスト実施(自動化) + +100% 2026-03-25 対応完了 gkill v1.1.0リリース + +
+ +
+資料整備しんちょく(完了) +【資料整備フェーズ】 + +100% 2026-03-25 対応完了 A-1 画面遷移仕様図 + +100% 2026-03-25 対応完了 A-2 ユースケース仕様書 + +100% 2026-03-25 対応完了 B-1 ER仕様図 + +100% 2026-03-25 対応完了 C-1 詳細クラス仕様書 + +100% 2026-03-25 対応完了 C-2 主要プログラム仕様説明書 + +100% 2026-03-25 対応完了 D-1 サンプルデータ + +100% 2026-03-25 対応完了 D-2 ユーザ展開用資料 + +100% 2026-03-25 対応完了 E-1 README + +
diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 000000000..83d72c664 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,40 @@ +# セキュリティポリシー / Security Policy + +## 対象バージョン / Supported Versions + +セキュリティ修正は最新リリースに対してのみ提供します。 +[リリースページ](https://github.com/mt3hr/gkill/releases/latest) の最新版をご利用ください。 + +Security fixes are provided for the latest release only. + +## 脆弱性の報告 / Reporting a Vulnerability + +**公開の Issue に脆弱性の詳細を書かないでください。** +gkill はライフログを扱うため、脆弱性情報の公開は利用者の記録の露出に直結します。 + +報告は GitHub の **Private Vulnerability Reporting** からお願いします: +リポジトリの [Security タブ → Report a vulnerability](https://github.com/mt3hr/gkill/security/advisories/new) + +Please do NOT open a public issue for security vulnerabilities. +Use GitHub's Private Vulnerability Reporting (Security tab → Report a vulnerability). + +報告に含めてほしいもの: + +- 影響を受けるバージョン・コンポーネント(Go サーバ / Web クライアント / MCP / Android / Wear OS) +- 再現手順(可能なら最小構成で) +- 想定される影響(情報漏えい・改ざん・サービス停止など) + +## 対応の目安 / Response Targets + +個人開発のプロジェクトのため、以下は目標であり保証ではありません。 + +- 受領確認: 7日以内 +- 初期評価(影響と深刻度の見立て): 14日以内 +- 修正の公開: 深刻度に応じて順次。修正リリースまで詳細の公開は控えてください + (coordinated disclosure) + +## 範囲外 / Out of Scope + +- 利用者が自分の環境で TLS を無効化した構成(`disable_tls` はローカル利用向けの明示オプション) +- 物理アクセスや端末ロック解除を前提とする攻撃 +- 依存パッケージ自体の脆弱性のうち、gkill から到達不能なもの(報告自体は歓迎します) diff --git a/documents/adr/0000-template.md b/documents/adr/0000-template.md new file mode 100644 index 000000000..2c16f5ed4 --- /dev/null +++ b/documents/adr/0000-template.md @@ -0,0 +1,47 @@ +# ADR-NNNN: <日本語のタイトル。決定を1行で> + +| | | +|---|---| +| Status | Accepted | +| Date | YYYY-MM-DD | +| Sources | `` / `.claude/skills/xxx/SKILL.md`「節名」 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/...`(アンカーを置いた場所。無ければ「なし — 理由」) | + +## Context + +何が問題だったか。どういう制約があったか。この決定が無いとどうなるか。 + +**規則そのものは書かない。** 規則の正本は `.claude/skills/*/SKILL.md`(横断規約は `AGENTS.md`)とコードコメント。 +ここに書くのは「なぜその規則が要るのか」の側だけ。 + +## Decision + +何を決めたか。断定形で1〜3文。 + +## Rejected alternatives + +**この節がこの資料の存在理由。** 採らなかった案と、採らなかった理由。 +「AI や新規開発者が言いそうな改善提案」を疑問文の形で先回りして書く。 +却下案が1つも無いなら、それは決定ではなく仕様なので `documents/reverse/` の担当。 + +- **<却下案>** — <なぜ駄目か。できれば実測値つきで> + +## Consequences + +この決定を守ることで受け入れる制約。守らないと何が起きるか。 + +**壊れ方が静か(例外もエラーも出ない)なら必ずそう書く。** +テストで守れていない決定は、そのことをここに書く。 + +## Evidence + +実測値・ベンチマーク・プロファイル。 + +実測が無い決定は空欄にせず、理由を書く。 +(例:「実測なし — 脅威モデルからの判断」「実測なし — 構造上の背理」) + +## Related tests + +- `src/...`(実在するもののみ。verify_docs が実在を検査する) diff --git a/documents/adr/0101-filter-rep-after-cache.md b/documents/adr/0101-filter-rep-after-cache.md new file mode 100644 index 000000000..ea056e3a3 --- /dev/null +++ b/documents/adr/0101-filter-rep-after-cache.md @@ -0,0 +1,65 @@ +# ADR-0101: rep名の絞り込みは「検索するrep」ではなく「検索結果」で行う + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-19 | +| Sources | `06fcdec4` / `44b2be68` / `df9ceeb8` / `.claude/skills/gkill-go-backend/SKILL.md`「rep名の絞り込みは『検索するrep』ではなく『検索結果』でやる」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find_filter.go` | + +## Context + +本番プロファイルで、rykv の検索に残っていた最大の項目が **git rep の十数秒=実質CPUの過半** だった。go-git の `Repository.Log()` が全コミットをディスクから読み直していた。 + +「キャッシュ構築中だけ」「repの配線ミス」の2説は一時ログと info ログでどちらも否定された(`Reps` に入っているのはキャッシュrep、`isCacheBuilding` は偽)。 + +真因は `selectMatchRepsFromQuery` の Step4 だった。クエリが rep名を指定していると `matchRep.UnWrap()` でラッパーを剥がし、**生のディスクrepを `MatchReps` に登録して検索していた**。すぐ上の Step3 には「ここで `UnWrap()` してはいけない」と理由まで書いてあるのに、Step4 には適用されていなかった。 + +これが常時経路だったことが効いた。**GUI は常に非nullの `reps` を送る**(`FindKyouQuery` のコンストラクタ既定が `[]` で、`apply_rep_summary_sets_to_detaul` が必ず配列を入れる)ので、rykv/mi の検索は毎回ここを通る。rykv は `rep_types` を送らないため、十数個のキャッシュrepが**数百個の生rep**に展開されていた(実データでは大半が端末別の重複登録)。`--cache_reps_local` のローカルコピー層も同時に剥がれ、クエリが外付けUSB上の元DBへ戻っていた。影響は git だけでなく全型に及び、キャッシュ版でない `idfKyouRepositorySQLite3Impl.FindKyous` が数秒でプロファイルに出ていた。 + +## Decision + +rep名の絞り込みを「**どのrepを検索するか**」から「**どの結果を残すか**」へ移す。`selectMatchRepsFromQuery` はラッパーのまま `MatchReps` へ入れ、実際の絞り込みは `findKyous` の `filterKyousByRepName` が `Kyou.RepName` に対して行う。 + +`UnWrap()` を使ってよいのは「そのラッパに選ばれた実repが1つでもあるか」の**枝刈り判定だけ**。 + +## Rejected alternatives + +- **`UnWrap()` した生repを `MatchReps` に入れたまま、検索する rep を絞る(改修前の実装)** — キャッシュを丸ごとバイパスする。実データで十数キャッシュrep→数百生rep、git だけでプロファイル1窓あたり十数秒。`--cache_reps_local` のローカルコピー層も剥がれ、外付けUSB上の元DBへクエリが戻る。 + +- **枝刈りの `UnWrap()` も省いて、そもそも候補repを絞らない** — 省くと「キャッシュOFF」「1種別だけチェック」「一致0件」の3ケースがむしろ悪化する。枝刈りは残す。 + +- **`dao/reps` 側に絞り込みを置く** — そこを通るのは利用者のクエリだけではない。ReKyou / MiReKyou は参照先を解決するために `target_resolution_memo.go` で**利用者のクエリをそのまま** `FindKyousSequential` へ渡す。ここで rep名で絞ると、チェックしていないrepに参照先を持つリポストが「参照先が見つからない」扱いになり、**語句検索に黙って当たらなくなる**(エラーも0件表示も出ず、ヒット数が減るだけ)。ソース走査 `TestNoRepNameFilterInDaoReps` が見張っている。 + +- **SQL の WHERE へ押し込む** — 別起案。→ ADR-0102 + +## Consequences + +意味論は変わらない。`OnlyLatestData` は本番の全経路で true 固定で、ID X について M=全rep横断の最大 `UpdateTime`、I=指定rep とすると、旧は「各leafの自表内MAXの行」、新は「横断MAX(=M)の行のうち `RepName`∈I」。`replaceLatestKyouInfos` が全rep由来のアドレス表と突き合わせて「最大がMに届かなければレコードごと落とし、届けば `UpdateTime`==M の行だけ残す」ので、どちらも同じ集合に収束する。キャッシュOFFでは `UnWrap()` が自分自身を返すので完全一致。 + +結果側で絞ることの代償として、**5つの落とし穴が生まれた**。どれも例外もエラーも出さずに壊れる。規則そのものは `.claude/skills/gkill-go-backend/SKILL.md` にあるが、なぜ必要かはここに残す。 + +1. 本文ヒット由来の2本目の検索(`matchTextFindByIDQuery`)にも同じ絞り込みが要る。片方だけだと本文で当たった記録が rep 絞り込みをすり抜ける +2. 全部落ちたIDは**キーごと消す**。空スライスを残すと `kyous[0]` を見る `filterLocationKyous` / `filterMiForMi` / `overrideKyous` が **panic** する +3. `Reps == nil` は「未指定」。`len()` で判定すると**全件消える** +4. **`RepName` が空の行は残す。** キャッシュrepへの write-through は呼び出し側の値をそのまま INSERT するので、追加直後の行は `REP_NAME` が空(実rep名が入るのは次の `UpdateCache`)。落とすと**いま追加した記録が最大1分間一覧から消える**。残しすぎても「チェックを外したrepの、たった今書いた記録が1分だけ残る」で済むので、非対称に安全側へ倒す +5. 書き込み側に**実在しないrep名を入れさせない**。非空のrep名は「実在するが選ばれていないrep」として落とされるので、合成した名前を渡すと記録が黙って消える。実例: `commit_tx`(KFTLの送信経路)は一時リポジトリから読み直した記録をそのまま write-through していたが、`GetXxxByTXID` は `? AS REP_NAME` に temp rep の名前を差し込んで返すため、**KFTLで書いた記録だけが一覧から丸ごと消えていた** + +落とし穴4の裏返しとして、フィルタ側に `*Temp` の例外を足してはいけない(temp rep 名は流儀がばらばらで、一覧を2箇所で維持することになる)。直すのは常に**書き込み側**。 + +## Evidence + +- 改修前: git rep 十数秒/プロファイル1窓(実質CPUの過半)、十数キャッシュrep → 数百生rep(大半が端末別の重複登録)、キャッシュ版でない `idfKyouRepositorySQLite3Impl.FindKyous` が数秒 +- 実データ(本番プロファイルで実測) + +## Related tests + +キャッシュONでの rep 絞り込みは改修前まで**未テスト**だった(既存の `TestHandleGetKyous_RepFilter` はキャッシュOFFかつ「存在しないrep名で0件」しか見ていなかった)。以下はすべてキャッシュON/OFFの両方で回る。 + +- `src/server/gkill/api/select_match_reps_cache_test.go` +- `src/server/gkill/api/find_kyou_rep_name_filter_test.go` +- `src/server/gkill/api/gkill_server_api/get_kyous_rep_filter_test.go` +- `src/server/gkill/api/gkill_server_api/get_kyous_tx_rep_filter_test.go` +- `src/server/gkill/usecase/source_conventions_scan_test.go`(`TestNoRepNameFilterInDaoReps`) diff --git a/documents/adr/0102-no-rep-name-in-sql.md b/documents/adr/0102-no-rep-name-in-sql.md new file mode 100644 index 000000000..2ea7962cb --- /dev/null +++ b/documents/adr/0102-no-rep-name-in-sql.md @@ -0,0 +1,52 @@ +# ADR-0102: SQL の WHERE へ rep名の条件を押し込まない(暫定的な否決) + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-19 | +| Sources | `06fcdec4` / `src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go` | + +## Context + +ADR-0101 で rep名の絞り込みを検索結果側(`filterKyousByRepName`)へ移した。これは「取ってから捨てる」形なので、**「SQL の WHERE で最初から絞れば速いのでは」という提案が必ず出る**。実際 ADR-0101 の起案時にも同じ検討をしている。 + +この提案が危険なのは、**もっともらしく、かつ壊れ方が静かだから**である。一見すると「取得件数が減る=速くなる」に見えるが、gkill の SQL 層はその前提を満たしていない。 + +## Decision + +`FindQuery.Reps` を SQL へ降ろさない。`GenerateFindSQLCommon` に `Reps` の参照は0件のまま保つ。 + +**これは暫定的な否決である。** 必要になったときは実測してから別 ADR として起案する。「なんとなく速そう」を根拠に足さない、というのが決定の実体。 + +## Rejected alternatives + +- **leaf表の WHERE に rep名の条件を足す** — **leaf表に `REP_NAME` 列が無い。** 各 `*_repository_sqlite3_impl.go` は `? AS REP_NAME` でバインド値を別名として返しているだけなので、述語として書く先が存在しない。書けるのは cached 実装の表だけで、そこでも `REP_NAME` は索引されていない。 + +- **`onlyLatestData` の相関サブクエリにも rep名の条件を足す** — **これをやると壊れる。** 相関サブクエリは「そのIDの最新版」を選ぶためのもので、rep名で絞ると**repごとの最新版が復活し、古い版が現在版として見える**。しかもエラーは出ない。この誘惑が leaf 表の WHERE のすぐ隣にあることが、この決定を明文化しておく最大の理由。 + +- **cached 表だけで rep名を述語にする** — `filterKyousByRepName` は **`RepName` が空の行を意図的に残す**(ADR-0101 の落とし穴4)。素朴な `REP_NAME IN (...)` はこの行を落とすので、**追加直後の記録が最大1分間一覧から消える**。同じ意味論にするには `REP_NAME IN (...) OR REP_NAME = ''` が要り、索引が効かないぶんの利得はさらに小さくなる。 + +- **`dao/reps` 層で `query.Reps` を見て絞る** — 別の理由で駄目。→ ADR-0101 の Rejected alternatives。 + +## Consequences + +rep名で絞った検索も、絞る前の件数ぶんは取得してから捨てる。ADR-0101 の測定では、キャッシュを効かせたうえでのこのコストは問題になっていない(問題だったのはキャッシュのバイパスのほうだった)。 + +**この決定は「rep名を SQL に書くこと」全般の禁止ではない。** 管理系の DML(たとえば cached 実装の rep 単位の部分リビルド `DELETE FROM ... WHERE REP_NAME = ?`)は対象外で、あれは検索の絞り込みではない。禁じているのは**検索の絞り込みを SQL へ降ろすこと**の1点。 + +再提案するときに必要なもの: 実データのプロファイルで、rep絞り込みのある検索の時間の内訳を示し、「取ってから捨てる」ぶんが実際に効いていることを出すこと。ADR-0101 と同じく `allocs/op`・`B/op`・`EXPLAIN QUERY PLAN` で判断する(→ ADR-0801)。 + +## Evidence + +実測なし — 構造上の背理による否決(述語を書く列が leaf 表に存在しない/相関サブクエリに足すと最新版判定が壊れる/空 `REP_NAME` の意味論が保てない)。 + +出典コミット `06fcdec4` も同じ判断を「必要なら実測してから別起案」として記録している。 + +## Related tests + +- `src/server/gkill/api/find_kyou_rep_name_filter_test.go` +- `src/server/gkill/dao/reps/cached_find_only_latest_test.go` +- `src/server/gkill/usecase/source_conventions_scan_test.go`(`TestNoRepNameFilterInDaoReps`。`dao/reps` と `dao/sqlite3impl` の両方を走査し、SQL を組み立てる層に `query.Reps` が現れたら落とす) diff --git a/documents/adr/0103-tag-filter-threshold-32.md b/documents/adr/0103-tag-filter-threshold-32.md new file mode 100644 index 000000000..e55efbdc4 --- /dev/null +++ b/documents/adr/0103-tag-filter-threshold-32.md @@ -0,0 +1,67 @@ +# ADR-0103: タグ絞り込みの取得は2経路を持ち、切り替えはタグ名の個数(閾値32)で決める + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-19 | +| Sources | `f2c4f280` / `a6e4967c` / `bb364253` / `.claude/skills/gkill-go-backend/SKILL.md`「タグ絞り込みの取得は2経路。切り替えは『タグ名の個数』で決める」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find_filter.go` | + +## Context + +本番データのプロファイルで、rykv の検索の**実質CPUの半分近く(数十秒)がタグ名の絞り込み**だった。内訳は cached SQLite tag rep とプラグインのタグアダプタがおよそ 6:4 で、sqlite の `_lowerFunc` だけで全体の4割ほど。 + +tag rep のワード検索は `findWordUseLike=false` / `ignoreCase=true` なので `LOWER(TAG) = LOWER(?) OR LOWER(ID) = LOWER(?)` を出す。**列に関数がかかるため索引が効かず、全行に `LOWER()` を適用**したうえで、それをクエリのタグ名の数だけ繰り返す(O(行数 × 名前の数))。利用者はサイドバーで多数のタグにチェックが入る構成なので、名前の数がそのまま倍率になっていた。 + +## Decision + +タグ絞り込みの取得を `collectTagsForFilter` に統合し、**2経路を持たせて「タグ名の個数」で切り替える**。閾値は `maxTagNamesForSQLFilter = 32`(クエリのタグ名と強制非表示タグ名の**合計**で見る)。 + +「タグ無し」仮想タグ(`NoTags`)を使う検索では、名前の個数によらず Go 側で照合する。 + +## Rejected alternatives + +- **SQL 側(`LOWER(TAG) = LOWER(?)`)に一本化する** — 名前の数に比例する。実測で100名前のとき724.7ms。利用者のサイドバー構成では名前が数十になるのが普通なので、そのまま倍率になる。 + +- **「全部取って Go で照合」に一本化する(最初に試した案)** — **ベンチで否決した。** 名前が少ないうちは全タグの実体化(`reps.Tag` は240B + 文字列10本)のほうが高い。1名前のとき SQL 12.5ms / 91確保 に対し Go 141.8ms / 580,074確保。 + +- **行数に応じて閾値を動かす** — 不要。SQL側は名前の数に比例、Go側はほぼ一定で、**どちらも行数には比例する**ので、交差する「名前の個数」は行数によらずほぼ一定になる。よって固定の閾値でよい。 + +- **照合を SQL と Go で別の意味論にする(片方だけ大小区別、など)** — タグの個数によって検索結果が変わるという静かな壊れ方になる。`strings.EqualFold` の完全一致・大小無視で、`filterTagsKyous` のAND分岐と同じ意味論に揃える。SQL は `TAG` 列だけでなく `ID` 列とも突き合わせていたので、そこも Go 側へ写してある。 + +- **`NoTags` を使う検索でも個数で切り替える** — 損。`RelatedTagIDs`(タグが1つでも付いているIDの集合)のために結局は全タグを取るので、**そこから名前を拾うぶんはタダになる**。以前は「全タグの取得」「クエリのタグ名で絞る検索」「非表示タグ名で絞る検索」を別々に投げていた。 + +## Consequences + +閾値の 32 は交差点(約30)より**やや上**に置いてある。確保の少ないSQL側へ寄せる意図。 + +**2経路が同じ結果を出すことをテストで固定してある**(`find_filter_test.go`)。ずれると「タグの個数によって検索結果が変わる」という、エラーも警告も出ない壊れ方になる。強制非表示タグについても2経路の一致を `TestHandleGetKyous_HideTagsBothPaths` が固定する。 + +`RelatedTagIDs` の読み手は `NoTags` 分岐しか無いので、`NoTags` を使わない検索では作らない(→ ADR-0104)。走らせ忘れると**全件が「タグなし」扱い**になり、タグの付いた記録まで返る。 + +閾値を動かすときは `dao/reps/tag_find_bench_test.go` の実測表を取り直すこと。**`ns/op` で判断してはいけない**(→ ADR-0801)。 + +## Evidence + +2万タグでの実測(`dao/reps/tag_find_bench_test.go` に表を残してある): + +| タグ名の数 | SQLで絞る | 全部取ってGoで照合 | +|---|---|---| +| 1 | 12.5ms / 91確保 | 141.8ms / 580,074確保 | +| 10 | 69.2ms / 425確保 | 153.2ms / 580,074確保 | +| 30 | 197.6ms / 1,148確保 | 180.5ms / 580,074確保 ← 交差 | +| 100 | 724.7ms / 3,684確保 | 257.0ms / 580,076確保 | + +統合後、rykv の検索の実質CPUは約4割減った(強制非表示タグの取得ぶんの削減を含む)。 + +判断は `allocs/op` と `B/op` で行っている。`ns/op` はこのマシンで倍近くぶれる。 + +## Related tests + +- `src/server/gkill/api/find_filter_test.go`(2経路の結果一致を固定) +- `src/server/gkill/dao/reps/tag_find_bench_test.go`(実測表) +- `src/server/gkill/api/gkill_server_api/get_kyous_tag_filter_test.go` +- `src/server/gkill/api/find_filter_tags_test.go` +- `src/server/gkill/api/find_filter_timeis_test.go`(TimeIs 側も同じ2経路・同じ閾値で対称化されている) diff --git a/documents/adr/0104-related-tag-ids-only-for-no-tags.md b/documents/adr/0104-related-tag-ids-only-for-no-tags.md new file mode 100644 index 000000000..d60c10576 --- /dev/null +++ b/documents/adr/0104-related-tag-ids-only-for-no-tags.md @@ -0,0 +1,49 @@ +# ADR-0104: 全タグ走査(RelatedTagIDs)は「タグ無し」仮想タグを使う検索のときだけ走らせる + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-19 | +| Sources | `b45e6236` / `src/server/gkill/api/find_filter.go` / `.claude/skills/gkill-go-backend/SKILL.md`「タグ絞り込みの取得は2経路」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find_filter.go` | + +## Context + +`find_filter.go` の `getAllTags` は**全repの全タグ**を集めて `RelatedTagIDs`(タグが1つでも付いているIDの集合)を作る。実データでは1検索あたり数十万行になる。 + +ところが `RelatedTagIDs` の読み手は `filterTagsKyous` / `filterTagsTimeIs` の **`NoTags`("no tags" 仮想タグ)分岐しか無い**(OR・ANDそれぞれ2箇所)。つまり `NoTags` が条件に入っていなければ、この全走査は結果に一切影響しない。 + +起動条件が `Tags != nil || (HasTimeIsFilter() && TimeIsTags != nil)` だったので、rykv の既定クエリは `tags` が常に非null(コンストラクタ既定が `[]`)なぶん、**タグを明示的に選んだだけの検索でも毎回まるごと無駄に走っていた**。 + +## Decision + +起動条件を `containsNoTags` ベースへ絞る。`NoTags` を使わない検索では `RelatedTagIDs` を作らない。 + +強制非表示タグの集合(`getAllHideTagsWhenUnChecked`)は `NoTags` と無関係なので、同じ `if` から切り出して従来の条件のまま残す。 + +## Rejected alternatives + +- **条件はそのままにして `getAllTags` を速くする** — 消しているのは「**結果に影響しないと確認できた仕事**」なので、速くするより走らせないほうが正しい。量に関係なく消してよい。 + +- **`RelatedTagIDs` を遅延生成にして、読み手が必要になったときに作る** — 読み手は `NoTags` 分岐の4箇所だけで、そこに到達するかどうかは検索の頭で分かる。遅延にすると「作られたかどうか」の状態が増えるだけで、判定の場所が読み手側へ移るぶん見通しが悪くなる。 + +- **強制非表示タグの取得も同じ条件に載せる** — 別物。`AllHideTagsWhenUnchecked` は `RelatedTagIDs` に依存していないので、載せると `NoTags` を使わない検索で強制非表示タグが効かなくなる。 + +## Consequences + +**走らせ忘れると壊れ方が静か。** `RelatedTagIDs` が空になると**全件が「タグなし」扱い**になり、タグの付いた記録まで返る。エラーも警告も出ない。 + +そのため両方向を固定してある。実装を `if false` にすると「タグ無しで絞ると、タグの付いていない記録だけが返る」と、既存の `TestHandleGetKyous_TimeIsTagsFilterWorksWithoutKyouTagFilter` が落ちることを確認済み。 + +タグ条件が空配列(=フィルタ有効かつ0件指定)のケースも走らなくなる。これは `NoTags` を含まないので正しい。 + +## Evidence + +実測なし — 到達可能性からの判断(読み手が `NoTags` 分岐の4箇所しか無いことをソースで確認した)。削減幅そのものは → ADR-0103 の統合後の数字(実質CPU 90.9秒→52.3秒)に含まれる。 + +## Related tests + +- `src/server/gkill/api/gkill_server_api/get_kyous_tag_filter_test.go`(「タグ名で絞る」「タグ無しで絞る」「両方(OR)」「空配列は0件」を固定) +- `src/server/gkill/api/gkill_server_api/get_kyous_regressions_test.go`(`TestHandleGetKyous_TimeIsTagsFilterWorksWithoutKyouTagFilter`) diff --git a/documents/adr/0105-chunk-find-query-ids.md b/documents/adr/0105-chunk-find-query-ids.md new file mode 100644 index 000000000..084d5b2b5 --- /dev/null +++ b/documents/adr/0105-chunk-find-query-ids.md @@ -0,0 +1,54 @@ +# ADR-0105: FindQuery.IDs は分割して渡し、検索が失敗したのに GkillError が空のまま return しない + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-18 | +| Sources | `7c5f07f2` / `.claude/skills/gkill-go-backend/SKILL.md`「FindQuery.IDs は分割して渡す」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/repositories.go` | + +## Context + +IDリストは各repのSQLへ `ID IN (?, ?, ...)` として展開される。ところが **Mi / MiReKyou は5射影のUNION**で、5本それぞれに同じリストを丸ごと展開する。バインド変数は `5N+5` になり、SQLite の上限(`SQLITE_MAX_VARIABLE_NUMBER` = 32766)を **N=6553** で超えて Prepare が落ちる(実測: 6552は成功、6553で `too many SQL variables`)。 + +**この壊れ方は静かで気付けなかった。** 失敗が `GkillError` にならず、`/api/get_kyous` も `/api/get_kyous_mcp` も **HTTP 200 + `errors: null` + 0件**で返っていた(内部の `err` は Debug ログにしか出ない)。呼び出し側からは「成功・該当0件」と区別が付かない。 + +(2026-08 追記: [ADR-0706](0706-http-status-from-error-code.md) でステータスをエラーコードから決めるようにしたので、`ERR000410` が立つ今の実装では **HTTP 500** で返る。ただしそれは `message.EnsureNotEmpty` で `GkillError` を必ず立てているからで、**「失敗したのに `GkillError` が空」で return する分岐を作れば、やはり 200 + 0件に戻る。** 防御線は今も EnsureNotEmpty 側にある。) + +実データでは確認待ちの記録数千件のIDを一度に渡して踏んだ。 + +## Decision + +2つを同時に決めた。片方だけでは足りない。 + +1. `reps` 側の入口に `findChunkedByIDs`(`repositories.go`)を置き、**4000件ずつに割って和を取る**。新しくIDリストを渡す検索を書くときは必ずこれを通す +2. 検索が失敗したのに `GkillError` が空のときは `message.EnsureNotEmpty` で **`ERR000410` を必ず立てる** + +## Rejected alternatives + +- **分割せず、上限に近づいたらエラーを返す** — 利用者から見れば「検索できない」になる。IDリストはORの羅列なので分割は意味論を変えない(塊どうしでIDが重ならないので重複も出ない)。できることをエラーにする理由がない。 + +- **`Mi` / `MiReKyou` の5射影UNIONを1本にまとめてバインド変数を減らす** — UNION の5本は実仕事をしている(作成/確認/期限/開始/終了の5つの時刻でそれぞれ射影する)。まとめると意味論が変わる。→ ADR-0801 でも「Mi の UNION は実仕事をしている」として同じ結論に達している。 + +- **呼び出し側(ハンドラ)で分割する** — 入口が複数あり、新しい呼び出しを書く人が毎回気付く必要がある。`reps` 側の入口に置けば、通らない経路のほうが例外になる。 + +- **エラーを立てる件だけ直す** — 上限を超える呼び出しは実在するので、エラーになるだけでは利用者は救われない。逆に分割だけ直すと、**次に同じ「静かに0件」を作ったときにまた気付けない**。この2つは対で意味を持つ。 + +## Consequences + +かかっているのは `Repositories.findKyous` / `MiRepositories.FindMi` / `MiReKyouRepositories.FindMiReKyou` と、`GkillRepositories.FindTags` / `FindTexts` の中で最新版アドレスからIDリストを作っている箇所。上限は `maxIDsPerFindQuery`(4000)。 + +**「失敗したのに `GkillError` が空」で return する分岐を新しく作らないこと。** この不具合の本体は上限そのものではなく、失敗が呼び出し側に届かなかったことのほうだった。 + +## Evidence + +- 実測: 6552件は成功、6553件で `too many SQL variables`(Mi の 5N+5 = 32771 > 32766) +- 実データで確認待ち数千件のIDを渡して再現 + +## Related tests + +- `src/server/gkill/dao/reps/repositories_id_chunk_test.go` +- `src/server/gkill/api/gkill_server_api/handle_get_kyous_mcp_test.go`(`TestHandleGetKyousMCP_ManyIDs`) +- `src/server/gkill/api/message/gkill_error_test.go` diff --git a/documents/adr/0106-find-query-null-semantics.md b/documents/adr/0106-find-query-null-semantics.md new file mode 100644 index 000000000..0d9e14e9d --- /dev/null +++ b/documents/adr/0106-find-query-null-semantics.md @@ -0,0 +1,60 @@ +# ADR-0106: FindQuery の use_* 有効化フラグを全廃し「値が非nullならフィルタ有効」に一本化する + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-11 | +| Sources | `de0f330c` / `397d5100` / `.claude/skills/gkill-find-query/SKILL.md`「検索条件(FindQuery)の null 判定セマンティクス」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find/find_query.go` | + +## Context + +`FindQuery` には値フィールドとは別に `use_*` 有効化フラグが14個あった。「フィルタを使うか」と「フィルタの値」を二重に持つ形で、どちらかを書き忘れると**例外もエラーも出ずに静かに0件になる**。 + +とくに危険だったのは「フラグは true なのに値が空」「値は入っているのにフラグが false」の2状態で、どちらも呼び出し側からは「該当0件」と見分けが付かない。 + +## Decision + +`use_*` フラグを全廃し、**値フィールドが非null(Go では非nil)ならそのフィルタが有効**に一本化する。`FindQuery` は 55 → 41 フィールドになった。 + +- `null` / `nil` = フィルタ未使用 +- **非nullの空配列 `[]` = フィルタ有効かつ0件指定** + +判定は生の nil 比較を書き散らさず、`HasWordFilter()` / `HasTimeIsFilter()` / `HasCalendarFilter()` / `HasMapFilter()` / `HasPeriodOfTimeFilter()` の**ゲートヘルパ経由**で行う。 + +## Rejected alternatives + +- **フラグを残して「値が空ならフラグを無視する」ルールにする** — 「フィルタ有効かつ0件指定」が表現できなくなる。これは実在する状態で、rykv がタグを1つもチェックしていない列でまさにこれを送る。 + +- **フラグ側を正として値を無視する** — 二重管理が残るので、書き忘れの静かな0件も残る。 + +- **TypeScript 側で `undefined` を「未使用」に使う** — **禁止。** `JSON.stringify` でキーが落ち、localStorage 往復でコンストラクタ既定値が復活し、`deep_equals` のキー数比較が壊れてサイドバーの機械的 re-emit ガードが死ぬ。未使用は必ず `null` で表現する。 + +- **旧形式JSONの移行を実装1つに任せる** — 移行は Go・client・MCP の**3実装が同じ16キー**を扱う必要がある(`find_query_legacy_json.go` / `normalize-legacy-find-kyou-query-json.ts` / `constants.go` の `LEGACY_USE_FLAG_KEYS`)。どれかが欠けると、そのフラグを送る古いクライアントの保存クエリが移行されない(MCP では未知キー扱いで throw する)。 + +## Consequences + +意味論の例外が2つ残る。どちらも「揃えるほうが壊れる」ので意図的。 + +- `timeis_words: []` は「任意の TimeIs に覆われた Kyou」を意味する(空配列=0件指定ではない) +- `FindKyouQuery` のコンストラクタ既定は `tags` / `reps` だけ **`null` ではなく `[]`**(旧 `use_tags=true` + 空配列と厳密等価にするため) + +3値そろって初めて有効になるグループがある(地図の `map_latitude` / `map_longitude` / `map_radius`)。 + +`PeriodOfTimeWeekOfDays` は **nil を先行ガードで弾く**こと。`len==0` / `len!=7` の分岐へ落とすと全件が消える(`find_filter.go` の `sortAndTrimKyousMap` と `sqlite3impl_util.go` の両方に同じ罠がある)。 + +共有URL用の `share_kyou_info.db` は起動時にスキーマ 1.0.0→1.1.0 で**保存済みJSONそのものを書き換える**(共有URLは配布済みで再発行できないため)。 + +## Evidence + +実測なし — 構造からの判断(二重管理の不整合が原理的に表現できなくなる)。 + +## Related tests + +- `src/server/gkill/api/find/find_query_test.go` +- `src/server/gkill/api/find/find_query_legacy_json_test.go` +- `src/server/gkill/api/find_filter_sort_trim_test.go` +- `src/client/__tests__/unit/api/normalize-legacy-find-kyou-query-json.test.ts` +- `src/client/__tests__/unit/api/find-kyou-query.test.ts` diff --git a/documents/adr/0107-memoize-rekyou-target-resolution.md b/documents/adr/0107-memoize-rekyou-target-resolution.md new file mode 100644 index 000000000..7ae0ceaec --- /dev/null +++ b/documents/adr/0107-memoize-rekyou-target-resolution.md @@ -0,0 +1,51 @@ +# ADR-0107: ReKyou / MiReKyou のターゲット解決はリクエスト単位でメモ化する + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-04 | +| Sources | `ce9578b6` / `f80ff665` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/target_resolution_memo.go` | + +## Context + +ReKyou も MiReKyou もタイトルを持たないので、ワード検索を**ターゲット Kyou を持つ実データrepへ委譲する**。この委譲が入れ子になっていて、既定構成の1検索で + +``` +ReKyou → 実データrep + MiReKyou (MiReKyou はさらに実データrepへ) +MiReKyou → 実データrep +``` + +と、**まったく同じ query で実データrepを3回舐めていた**。委譲先には query がそのまま渡っているので3回とも結果は同一。 + +## Decision + +リクエスト単位のメモを `context` に載せ、同じ query・同じrep集合の解決を1回に畳む。ReKyou の委譲先は「実データrep + MiReKyou」なので、実データrepぶんは MiReKyou 側と共有し、MiReKyou ぶんだけ追加で引く。 + +メモが無い経路(repの直叩き・単体テスト)は今までどおり自前で解決する。 + +## Rejected alternatives + +- **委譲クエリを1本に正規化する** — **結果が変わる。** 委譲先の絞り込み(カレンダー・IDs・期間)が効かなくなる。例: 今日作った、2020年の Kmemo を指す ReKyou が、カレンダー範囲=今日の検索で落ちるようになる。速さのために意味論を変えることになるので採らない。 + +- **委譲そのものをやめて、ReKyou 側にターゲットのタイトルを非正規化して持つ** — 追記専用DAO(→ ADR-0201)では、ターゲットが更新されても ReKyou の版は増えないので、非正規化した値が古いまま残る。ターゲットの本文を編集したら参照側の検索結果も変わってほしい、が要件。 + +- **メモをプロセス全体のキャッシュにする** — 追記専用なのでデータは増え続け、無効化の条件が「どのrepのどのIDが更新されたか」に依存する。1リクエストの中でだけ同一性が保証されればこの問題は解けるので、リクエスト単位に閉じる。 + +## Consequences + +最新版アドレスも共有キャッシュから引くようにした。`find_filter` が検索の頭で `RefreshLatestDataRepositoryAddresses` を呼んで `GkillRepositories` に載せているのに、ReKyou / MiReKyou はそれを使わず `GetAllLatestDataRepositoryAddresses` で全件を map に写し取り直していた。検索経路以外から呼ばれたときのために `EnsureLatestDataRepositoryAddresses`(未取得なら読み込む)を通す。 + +メモは**リクエスト単位に閉じる**。`context` から取れなければ自前で解決する経路を残しておくこと(repの直叩きと単体テストがそこを通る)。 + +## Evidence + +- 既定構成の1検索で、同一 query による実データrepの走査が **3回 → 1回** + +## Related tests + +- `src/server/gkill/dao/reps/re_kyou_repository_sqlite3_impl_test.go` +- `src/server/gkill/dao/reps/mi_re_kyou_repository_sqlite3_impl_test.go` +- `src/server/gkill/dao/reps/gkill_repositories_test.go` diff --git a/documents/adr/0108-period-of-time-second-of-day.md b/documents/adr/0108-period-of-time-second-of-day.md new file mode 100644 index 000000000..71ad5feb5 --- /dev/null +++ b/documents/adr/0108-period-of-time-second-of-day.md @@ -0,0 +1,71 @@ +# ADR-0108: 時間帯フィルタの秒値は「86400未満は秒オブデイ、以上はepoch」の二重解釈にする + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-23 | +| Sources | `5c976332` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find/period_of_time.go` | + +## Context + +`period_of_time_start_time_second` / `period_of_time_end_time_second` には歴史的に2つの表現が届いていた。 + +- **Webクライアント**は「今日のローカル h:m:s」の絶対epoch秒を送る + (`use-period-of-time-query.ts` の `moment().startOf("day").hour(h)...unix()`)。 + サーバは `time.Unix(v, 0).In(time.Local)` の時分秒を抽出するので、これは正しく往復する。 +- **MCPスキーマ**は最初から「0-86399 の秒オブデイ」を宣言し、値も 0-86399 で検証していた。 + サーバはこれもepochとして解釈するため、`32400`(09:00のつもり)は + 1970-01-01T09:00:00Z → JST 18:00 として評価され、**MCP経由の時間帯検索だけが+9時間ずれた窓で + 1年間動いていた**(1年分十数万件の指摘で発覚。窓がずれているだけでフィルタ自体は + 正しく効いていたため、「返却行にフィルタが効かない」ように見えて誤診を誘った)。 + +さらにこの秒解釈は find_filter.go / sqlite3impl_util.go / git_commit_log_repository_local_dir_impl.go の +3箇所に写経されており、契約の食い違いにどこからも気付けなかった。 + +## Decision + +- `find.NormalizeSecondOfDay` を唯一の正本とし、**0..86399 は秒オブデイそのまま、 + それ以外は従来どおり「絶対epoch秒 → ローカル時刻の時分秒」**で解釈する +- 根拠: 0..86399 の絶対epoch秒は 1970-01-01/02 UTC にしか存在せず、 + 時間帯フィルタとしてその時刻を指定する実クライアントは存在しない。 + よって二重解釈は既存のWeb・保存済み検索条件を**一切壊さずに** MCP契約を成立させる +- 3箇所の写経はアクセサ(`PeriodStartSecondOfDay` / `PeriodEndSecondOfDay`)へ収束させる。 + SQL経路のバインド値は正規化済み秒を `SecondOfDayToHHMMSS` で "HH:MM:SS" 文字列にして + 列側の `strftime('%H:%M:%S', ...)` と文字列比較する +- 既存の時間帯テストは「1日全体を覆う窓」しか無く秒解釈が変わっても赤くならないため、 + **狭窓(09:00-10:00)と夜跨ぎ(23:00-01:00)の回帰テストを両表現×両経路×キャッシュON/OFFで**新設する + +## Rejected alternatives + +- **MCP(Node)側で秒オブデイ→epochへ変換する** — サーバの「epochの時分秒を取る」という + 奇妙な契約が残り、次の非Webクライアントが同じ罠を踏む。変換はNodeプロセスのTZに依存し、 + サーバと別TZで動かすと再びずれる。 +- **サーバを秒オブデイ解釈へ全面変更する** — Webは epoch を送るので、`epoch % 86400` 相当の + 解釈になり**Webの時間帯検索がJSTで9時間ずれる**。既存テストは1日全体窓のため赤くならず、 + 静かに壊れる最悪の形。 +- **MCPスキーマの範囲検証(0-86399)を撤去してepochを要求する** — AIクライアントにとって + 「時間帯」を絶対epochで表現させるのは不自然で、エラーの発見も遅れる。宣言済みの契約を + サーバ側が受け入れるほうが正しい。 + +## Consequences + +MCPの時間帯検索が宣言どおりに動く。Webの挙動は不変。 +仮に epoch 0..86399(1970-01-01/02 UTC の実時刻)を指定したいクライアントが現れた場合は +秒オブデイとして解釈されるが、その用途は時間帯フィルタの目的上存在しない。 + +## Evidence + +- 1年分の点検での実測: `period_of_time_start_time_second: 0, end: 21599`(00:00-05:59のつもり)が + JST 09-14時台の件数(百件余り)と完全一致し、`32400-53999` が JST 18-23時台の実測件数(百件余り)と完全一致した +- Webの符号化: `src/client/classes/use-period-of-time-query.ts` は常に当日epoch(≥1.7e9)を送る + +## Related tests + +- `src/server/gkill/api/find/period_of_time_test.go` +- `src/server/gkill/api/find_filter_test.go` +- `src/server/gkill/dao/sqlite3impl/sqlite3impl_util_test.go` +- `src/server/gkill/dao/reps/git_commit_log_repository_local_dir_impl_test.go` +- `src/server/gkill/api/gkill_server_api/get_kyous_period_of_time_test.go` diff --git a/documents/adr/0109-hide-tags-standalone.md b/documents/adr/0109-hide-tags-standalone.md new file mode 100644 index 000000000..15efed377 --- /dev/null +++ b/documents/adr/0109-hide-tags-standalone.md @@ -0,0 +1,69 @@ +# ADR-0109: hide_tags はタグ絞り込み(tags)の有無と独立に適用する + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-23 | +| Sources | `df6cd60d` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find_filter.go` | + +## Context + +`hide_tags` は「このタグが付いた記録を消す。ただし同じ名前が `tags` にも入っていれば消さない」 +という除外リストだが、実装は**タグ絞り込み(`tags` / `timeis_tags`)を使うときにしか** +収集も適用もしていなかった(`needHideTags := usesTagFilter && ...` と `Tags == nil` の早期return)。 + +Webクライアントは `hide_tags` を ApplicationConfig の強制非表示タグ(`is_force_hide`)から +組み立てて**常に `tags` と同時に送る**ため、このゲートは一度も露呈しなかった。 +一方MCPスキーマは `hide_tags` を "Explicit tag exclusion list" と単独で使える体で宣言しており、 +1年分の指摘で「`tags` 未指定 + `hide_tags` 指定が、エラーも警告も出さずに +1件も除外しない」ことが実測で確定した(数千件の total_count が hide_tags を足しても不変、 +先頭行が除外対象タグ持ちのまま)。 + +## Decision + +- `hide_tags` の収集ゲートを `len(HideTags) != 0` だけにする(`tags` 非依存) +- 適用を `filterTagsKyous` の中から独立ステップ **`filterHideTagsKyous`** へ切り出し、 + `Tags == nil` でも走らせる。「同名が `tags` にあれば消さない」意味論は + 集合を作る `getMatchHideTagsWhenUnchecked` 側がそのまま担う + (`checkedTagNames` が nil なら「チェック済みタグ無し」=全 hide_tags 有効) +- TimeIs 側も対称に、`TimeIsTags == nil` の分岐で非表示集合を適用する + (以前ここにあった delete は集合が常に空で発火しない死にコードだった) +- クライアントの局所挿入ミラー(`kyou-local-insert.ts` の `is_hidden_by_hide_tags`)も + 対で変更する(`query.tags === null` ゲートを外す)。放置すると + 「追加直後は見えるが再検索で消える」静かなズレになる + +## Rejected alternatives + +- **現状維持(tags 併用時のみ有効)** — MCPスキーマの宣言と実装が食い違ったまま、 + AIクライアントの hide_tags 単独指定が黙って無視され続ける。「効かないフィルタ」は + 0件系の静かな壊れ方の中でも最悪の形(結果が*減らない*ので検算でも気付きにくい)。 +- **Node(MCP)側で hide_tags を可視タグ全列挙の tags へ変換する** — タグ数依存で + 巨大クエリになり、「タグ無し」記録の扱い(NoTags 仮想タグ)と衝突する。 +- **単独指定をエラーにする** — 宣言済みの契約を後から拒否に変える理由が無い。 + 有効化のほうが意図に合致し、Webへの影響も実質無い(常に tags と併送のため)。 + +## Consequences + +- Web の挙動は実質不変(`hide_tags` は常に `tags` と併送されるため、従来から適用されていた + 経路がそのまま通る)。変わるのは `tags` 未指定の検索=MCP経由と、 + playing の既定クエリのような hide_tags 空のケース(空なら no-op で不変) +- 旧挙動を明示的に固定していた `TestFilterTagsTimeIs_NoTagFilter_DoesNotApplyHideTags` は + 期待を反転して `_AppliesHideTags` に改名した + +## Evidence + +- 点検での実測: `{calendar 〈期間〉, rep_types:["timeis"]}` の total_count(数千件)に + `hide_tags:["Memo"]` を足しても同じ値のまま、kyous[0] は + `tags:["Memo"]` だった(エラー・メッセージ無し) +- 改修後: tags 無し × SQL経路/Go照合経路(名前33個で閾値超え)の両方で除外が効くことを + E2E で固定 + +## Related tests + +- `src/server/gkill/api/find_filter_tags_test.go` +- `src/server/gkill/api/find_filter_timeis_test.go` +- `src/server/gkill/api/gkill_server_api/get_kyous_tag_filter_test.go` +- `src/client/__tests__/unit/classes/kyou-local-insert.test.ts` diff --git a/documents/adr/0110-deleted-data-opens-only-with-include-deleted-data.md b/documents/adr/0110-deleted-data-opens-only-with-include-deleted-data.md new file mode 100644 index 000000000..2d9d4b666 --- /dev/null +++ b/documents/adr/0110-deleted-data-opens-only-with-include-deleted-data.md @@ -0,0 +1,80 @@ +# ADR-0110: 削除済みの Kyou は include_deleted_data だけが開ける(is_deleted は使わない) + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-24 | +| Sources | `ae969ce8` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find_filter.go`(削除済みの除外) | + +## Context + +`FindFilter` は「最新版が `IsDeleted` の ID」を**フラグ分岐なしに無条件で**結果から落としていた。 +そのため「今日なにを消したか」を検索で数える手段が存在しなかった。 + +`FindQuery` には `IsDeleted` フィールドが定義されているが、`api/find/README.md` の +「未実装フィールド」表に載っており、Kyou 検索では読まれない。 +にもかかわらず MCP のスキーマは `is_deleted: "Include soft-deleted entries."` と説明しており、 +**事実に反する記述**になっていた。 + +ADR-0605 で1件ずつ読み返す手段(`gkill_get_kyou_history`)は用意したが、 +それは ID を知っている場合の経路で、列挙はできない。 + +## Decision + +`find_filter.go` の削除済み除外を `IncludeDeletedData`(JSON `include_deleted_data`)でゲートする。 +既定(false)は従来どおり除外。`IsDeleted` は Kyou 検索では今後も読まない。 +`KyouMCPDTO` に `is_deleted` と `update_time` を足し、返ってきた行を判別できるようにする。 + +## Rejected alternatives + +- **`IsDeleted` を実装する** — 唯一の読み手である + `git_commit_log_repository_local_dir_impl.go` が `if query.IsDeleted { continue }` と書き、 + コメントで「gitコミットに削除の概念はないため、削除済み検索(IsDeleted=true)には該当しない」と + 明言している。つまりそこでは `IsDeleted=true` が **「削除済みのみを探す」という逆の意味**。 + 「含める」として実装すると、同じ旗が層によって反対の意味を持つ +- **三値(`*bool`)の新フィールドを足す** — `FindQuery` のフィールド数は `verify_docs` が + 機械検査しており(現在41)、資料側の連鎖が動く。`IncludeDeletedData` は既に + `tag_repositories.go` / `text_repositories.go` / `notification_repositories.go` で + 「削除済みも含める」の意味を持っているので、新設せずに Kyou 検索へ広げるほうが + 1つの旗が全層で1つの意味を保てる +- **削除済み専用の API を足す** — 検索条件(期間・タグ・語)は生きている記録と同じものを使いたい。 + 専用 API にすると `FindQuery` の語彙をもう一組維持することになる +- **MCP の `is_deleted` プロパティを削除する** — 送っているクライアントが未知キーで + throw するようになる。「受理するが無視される」と説明を直すに留める。 + **この却下は [ADR-0111](0111-drop-never-implemented-query-fields.md) が覆した** ―― 前提にしていた + 「送っているクライアントがいるかもしれない」を確かめておらず、実測すると送信元は + 全 git 履歴・出荷バンドル・稼働中DBのいずれにも存在しなかった。 + 黙って無視するのは指摘が問題にした静かな失敗そのもので、弾くほうが正しい + +## Consequences + +- **`find_filter.go` は gkill で最も熱い関数**で、rykv / mi / dashboard / Web UI / 全 MCP が通る。 + コードは `if` 1つだが影響範囲は全画面。既定 false を厳格に担保する必要がある +- 既定 false の担保: クライアントの `FindKyouQuery` に該当フィールドが無いので JSON から落ち、 + Go のゼロ値になる。Go 側に Kyou 検索でこれを立てる呼び出し元も無い +- **旗を立ててもタグ/テキストは漏れない。** `find_filter.go` は利用者のクエリを + `TagReps.FindTags` / `TextReps.FindTexts` へ渡しておらず、呼び出しごとに新しい `FindQuery` を組む +- **rekyou / mirekyou はこの旗の対象外。** rep の内部で削除済みを弾いており、 + 削除済みを指す rekyou も落とす。`git_commit_log` には削除の概念が無い +- `KyouMCPDTO` の `is_deleted` / `update_time` に `omitempty` を付けてはいけない。 + false / ゼロ値で消えると「生きている」と「フィールドが無い」の区別が付かなくなる + (`IsZip` / `Addition` / `Deletion` と同じ理由) +- **キャッシュ ON / OFF の両方でテストすること。** 削除の判定はどちらの経路でも同じでなければならない + +## Evidence + +readwrite MCP の点検(実測): + +- D-1 の件数が、通常検索でも `is_deleted:true` を付けても **どちらも20件**(増えない) +- 削除した mi をボード検索 + `mi_check_state:"all"` + `is_deleted:true` で引いても出ない + +修正の検証(実測): ゲートを `if true` に潰すと +「include_deleted_data を立てても削除済みのKyouが出ない」がキャッシュ ON / OFF の両方で落ちる。 + +## Related tests + +- `src/server/gkill/api/gkill_server_api/handle_get_kyous_mcp_test.go` +- `src/server/gkill/api/gkill_server_api/gkill_server_api_test.go` diff --git a/documents/adr/0111-drop-never-implemented-query-fields.md b/documents/adr/0111-drop-never-implemented-query-fields.md new file mode 100644 index 000000000..631e76ad8 --- /dev/null +++ b/documents/adr/0111-drop-never-implemented-query-fields.md @@ -0,0 +1,92 @@ +# ADR-0111: 実装されなかった検索条件は消す — 受理して無視するより未知キーとして弾く + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-24 | +| Sources | ADR-0110 の却下案を1つ覆す | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find/find_query.go` / `src/server/gkill/mcp/constants.go`(`KYOUS_QUERY_*_FIELDS`) | + +## Context + +`FindQuery` には「定義だけあって検索処理が一度も参照しないフィールド」が2つあった。 +`api/find/README.md` にも「未実装フィールド」という節を作って明記していた。 + +| フィールド | 実態 | +|---|---| +| `HideTimeIsTags` | 読み手が1つも無い。定義とテスト literal だけ | +| `IsDeleted` | Kyou 検索では読まれない。唯一の読み手 `git_commit_log_repository_local_dir_impl.go` が **「削除済みのみを探す」という逆の意味**で読み、0件を返す | + +MCP のスキーマは `is_deleted` を "Deprecated and ignored for Kyou searches" と説明し、 +`hide_timeis_tags` は "Explicit TimeIs tag exclusion list" と、**効くかのように**説明していた。 + +ADR-0110 で削除済みの列挙は `IncludeDeletedData` に一本化したが、 +紛らわしい `IsDeleted` はそのまま残していた。 +残した理由は「送っているクライアントが未知キーで throw するようになる」だったが、 +これは**送っているクライアントがいるかどうかを確かめていない**推測だった。 + +## Decision + +`FindQuery` から `IsDeleted` と `HideTimeIsTags` を削除する(41→39 フィールド)。 +MCP の語彙(`KYOUS_QUERY_BOOLEAN_FIELDS` / `KYOUS_QUERY_STRING_ARRAY_FIELDS` / +`find_query_schema.go`)からも外す。送られたら `normalizeKyouQuery` が未知キーとして throw し、 +`detail.allowed` に正しい候補(`include_deleted_data` を含む)を添えて返す。 + +`git_commit_log_repository_local_dir_impl.go` の逆意味の分岐は削除する。 +契約コメントを「git コミットに削除の概念が無いため、削除に関する検索条件は一切効かない」へ改める。 + +**プラグインプロトコルの `IsDeleted` は残す。** `findQueryToPluginQuery` が常に `false` を渡す形にし、 +`plugin_protocol.go` の doc に「gkill 本体からは常に false が渡る」と明記する。 + +## Rejected alternatives + +- **受理して黙って無視する現状のまま残す(ADR-0110 の判断)** — その判断の前提 + 「送っているクライアントがいるかもしれない」が実測で崩れた(Evidence 参照)。 + さらに、黙って無視するのは**指摘が問題にした「静かに壊れる」そのもの**で、 + AI は「フィルタを掛けたつもり」で結果を読んでしまう。 + 未知キーとして弾けば「そのフィルタは存在しない」と即座に学べる。**うるさいほうが正しい** +- **`LEGACY_USE_FLAG_KEYS` のような「受理して捨てる」バケツへ入れる** — あのバケツは + 旧 `use_X` フラグを**実際に送っている古いクライアントが存在した**ための移行装置。 + 送信元が実在しないものを同じ装置に載せると、装置の意味が + 「後方互換のため」から「なんとなく残す場所」へ薄まる +- **`IsDeleted` を「削除済みのみ」の意味で実装する** — `IncludeDeletedData` と意味が重なり、 + 1つの旗が層によって反対の意味を持つ状態が固定される(ADR-0110 の議論と同じ) +- **プラグイン SDK の `sdk.Query.IsDeleted` も消す** — サードパーティ製プラグインが見る公開 API で、 + `src/plugins/` の4モジュール(それぞれ独立 go.mod、`replace` 参照)の tidy も要る破壊的変更になる。 + 常に `false` を渡す1行で済むものに、外部への破壊を払う理由が無い + +## Consequences + +- **スキーマをキャッシュしている MCP クライアントが `is_deleted` を送るとエラーになる。** + これは意図した挙動だが、旧スキーマはセッション寿命で固定されるので + (`project-mcp-stale-schema-cache` の事情)、切り替え直後に一度だけ起きうる +- `FindQuery` のフィールド数は `verify_docs` が機械検査する。41→39 にすると + `api/find/README.md` と `api/README.md` の3行が連動する +- **git の rep には削除に関する条件が一切効かなくなった**(従来 `IsDeleted=true` で0件を返していたのが、 + 条件そのものが無くなった)。git コミットに削除の概念が無いので実害は無いが、 + 契約コメントを読む側には「効かない」と明示されている必要がある +- プラグインプロトコルの `IsDeleted` は永久に `false` になる。 + プラグイン側でこの値に分岐を書いても意味が無いことを `src/plugins/README.md` にも書いた + +## Evidence + +実測で「送信元が実在しない」を3方向から確かめた。 + +- **コード**: `src/client/classes/api/find_query/` に `hide_timeis_tags` / `is_deleted` が + **全 git 履歴で一度も存在しない**。出荷済みバンドルにも0件 +- **永続化されたクエリ**: 稼働中インストールの `$GKILL_HOME/configs/` を読み取りのみで確認。 + `share_kyou_info.db` と `user_config.db` のどちらにも両キーが **0件**。 + 対照として `timeis_tags` はどちらにも数件ヒットする。 + `hide_timeis_tags` は `timeis_tags` を部分文字列に含むので、存在すれば対照カウントに必ず出る +- **読み手**: `query.IsDeleted` を読む非テストコードは4箇所だけで、うち2つは + `&find.FindQuery{IsDeleted: false, ...}` というゼロ値の明示(挙動に影響しない)。 + `HideTimeIsTags` は定義とテスト literal の2箇所のみで、読み手ゼロ + +## Related tests + +- `src/server/gkill/api/find/find_query_test.go` +- `src/server/gkill/dao/reps/git_commit_log_repository_local_dir_impl_test.go` +- `src/server/gkill/mcp/normalization_test.go` +- `src/server/gkill/mcp/constants_test.go` diff --git a/documents/adr/0112-tag-vocabulary-drops-dead-targets.md b/documents/adr/0112-tag-vocabulary-drops-dead-targets.md new file mode 100644 index 000000000..62301691e --- /dev/null +++ b/documents/adr/0112-tag-vocabulary-drops-dead-targets.md @@ -0,0 +1,94 @@ +# ADR-0112: タグ語彙は「生存する対象を持つタグ」だけを返す — カスケード削除はしない + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-24 | +| Sources | MCP の2巡目の指摘(Q-07)。gkill-go-backend スキルの「タグ絞り込みの取得は2経路」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/gkill_repositories.go`(`GetAllTagNames` / `GetAllTagNamesIncludingDeletedTargets`) | + +## Context + +記録を削除してもタグは削除されない。`gkill_delete_kyou` は Kyou 側へ `is_deleted=true` の版を +追記するだけで、`TAG` テーブルには一切触らない。**これは意図した設計**で、そうでなければ +`gkill_restore_kyou` で復活させたときにタグが失われる。 + +しかし語彙の列挙(`get_all_tag_names`)はタグ自身の `is_deleted` しか見ていなかったので、 +**対象がもう見えないタグが候補に残り続けた**。2巡目の指摘での実測: + +| 検索 | 件数 | +|---|---| +| `tags:["点検タグ"]` | **0** | +| `tags:["点検タグ"]` + `include_deleted_data:true` | 1 | +| `get_all_tag_names` | **載っている** | + +削除は日常操作なので、使うほど「選んでも0件しか返らない候補」が溜まっていく。 +AI から見ると、存在しない切り口を提示され続けることになる。 + +同じ症状は ADR より前にも1度出ている(存在しない `target_id` へタグを付けられた件、 +`5609f9c1` で塞いだ)。あれは「そもそも対象が無かった」経路で、今回は +**「実在する記録に正しく付けたあと、その記録を消した」**経路。後者のほうが日常的に起きる。 + +## Decision + +**語彙を列挙する側で、対象が削除済みのタグを落とす。** + +生存判定には既にある最新版アドレス表(`GkillRepositories.latestDataRepositoryAddresses`)を使う。 +タグ行は対象 Kyou の ID を `TargetID` に持ち、Kyou 行はその ID をキーに `IsDeleted` を持っているので、 +`reader.Get(tag.TargetID)` で対象の生死が直接引ける。 + +- **追加の I/O はゼロ。** `GetAllTagNames` は今も内部で `GetAllTags`(全 rep 並列・全タグ取得)を + 呼んでおり、`TargetID` は取得済み。増えるのは読み取りロック1回とタグ数ぶんのマップ参照だけ +- **アドレス表に載っていない対象は落とさない。** プラグインや git の記録は表に載らない。 + 載っていないことを「削除済み」と読むと語彙が黙って痩せる +- **検証用の一覧は分ける。** `GetAllTagNamesIncludingDeletedTargets` を用意し、 + 「そのタグ名は実在するか」の判定(`collectMCPUnknownValueWarnings`)はそちらを使う。 + フィルタ済みの一覧で検証すると、`include_deleted_data:true` で削除済みを開いた + タグ検索に「未知のタグ」という**誤った警告**が出る + +置き場所は `GkillRepositories`。`TagRepositories` は `[]TagRepository` でしかなく +Kyou rep への参照を持たないため、そちらへ入れると値コピー由来の同期問題に触れる。 + +## Rejected alternatives + +- **記録と一緒にタグも削除する(カスケード削除)** — `gkill_restore_kyou` で復活させたときに + タグが失われる。追記専用(ADR-0201)にも反する。「消したものを戻せる」を売りにしている以上、 + タグが残ること自体は筋が通っている +- **SQL に降ろす(TAG × Kyou の JOIN)** — キャッシュ OFF では TAG と各 Kyou 型が別ファイル DB で、 + キャッシュ ON でも `git_commit_log` だけ別ファイル。11型の UNION も要る。 + ADR-0102 の「横断ロジックを SQL へ降ろさない」に逆行する +- **`TagRepositories.GetAllTagNames` の側に入れる** — この型は Kyou rep への参照を持たない。 + 持たせると `GkillRepositories` の値コピーと同期状態の問題に触れる +- **アドレス表に無い対象を落とす** — プラグイン・git の記録が表に載らないので、 + それらに付いたタグが全部消える。「静かに痩せる」ほうが「0件候補が残る」より悪い +- **何もしない(AI 側で0件を確かめてもらう)** — 候補ごとに1往復かかる。 + 語彙は「まず候補を出す」ためのものなので、0件が混じると用をなさない + +## Consequences + +- 削除した記録にしか付いていないタグは候補から消える。**タグそのものは消えない**ので、 + 対象を復活させれば候補にも戻る +- 未知タグ検証は対象の生死を問わない一覧を使うので、削除済みを開いた検索でも誤警告は出ない +- 出力を名前順に並べるようにした(以前は map の反復順で不定だった) +- 同じ穴が **Mi の板名**(`MiRepositories.GetBoardNames`)にも残っている。 + 設計はそのまま使い回せるが、今回のスコープ外 + +## Evidence + +- 2巡目の指摘での実測(本番 gkill へ stdio 接続、サンドボックス垢 `testuser`): + `tags:["点検タグ"]` が 0件 / `include_deleted_data:true` を足すと 1件 / + それでも `get_all_tag_names` には載る +- 最新版アドレス表の `IsDeleted` は素の `bool` 列で、`UpdateCache` の Phase 2 が + 各 rep の `IS_DELETED` 列を最新版の行から読み直して埋める(同じ表の + `LatestDataRepositoryName` がプレースホルダで壊れていた件(`8f8234b2`)とは別のフィールド) +- 追加 I/O が無いことはコード上で確認: `GetAllTagNames` は元から `GetAllTags` を呼んでおり、 + `Tag.TargetID` は取得済み + +## Related tests + +- `src/server/gkill/dao/reps/gkill_repositories_test.go` + - `TestGkillRepositoriesGetAllTagNames_DropsTagsWhoseTargetIsDeleted` + - `TestGkillRepositoriesGetAllTagNames_KeepsTagsWhoseTargetIsNotInTheAddressTable` + - `TestGkillRepositoriesGetAllTagNamesIncludingDeletedTargets_KeepsEverything` diff --git a/documents/adr/0113-word-filter-columns-and-id-prefix.md b/documents/adr/0113-word-filter-columns-and-id-prefix.md new file mode 100644 index 000000000..ceaccf4b5 --- /dev/null +++ b/documents/adr/0113-word-filter-columns-and-id-prefix.md @@ -0,0 +1,101 @@ +# ADR-0113: ワード検索は型別の対象列を決め、ID は前方一致だけ、除外語は付随テキストにも効かせ、判定は SQL / Go / プラグイン SDK で1つに揃える + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-09-12 | +| Sources | `.claude/skills/gkill-find-query/SKILL.md`「ワード検索の照合規則は SQL(`GenerateFindSQLCommon`)と Go(`find_word.MatchLoweredWords`。プラグイン SDK も同じ関数)で揃える」節 / `.claude/skills/gkill-plugin/SKILL.md`「ワード検索の判定はプラグインが唯一の判定者」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find_word/match_words.go`(パッケージコメント)/ `src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go`(ワード検索の SQL 追記の直前)/ `src/server/gkill/api/find_filter.go`(`findKyous` の除外語の2経路)/ `src/server/gkill/plugin/sdk/match_words.go` | + +## Context + +ワード検索(`FindQuery.words / not_words / words_and`)は型ごとに見る列がばらばらで、テキスト列を持たない +Lantana は「ID 列だけを部分一致」という実装になっていた。その結果、次の歪みがあり、いずれもエラーにならず静かに起きていた。 + +- **ID の部分一致が短い英数字語でノイズを生む。** `1` / `a` / `cafe` のような `[0-9a-f]` だけの語は UUID に含まれうるので、 + Lantana が「ランダムに」出る。除外側も同じで `-1` は UUID に 1 を含む記録を本文と無関係に消していた。 +- 付随テキスト経由で合流した記録には除外語が効かず、付随テキストに除外語があっても本体は残っていた。 +- 空文字の語 `[""]` をサーバで弾いておらず、`words:[""]` は全件、`not_words:[""]` は0件になっていた(画面は空語を作らないが MCP / API 直叩きで届く)。 +- プラグイン: SDK に共通判定が無く、4プラグインが同じループをコピペし、fitbit は独自実装(空文字の語で結果が変わる)、 + 雛形の `gkill_example` はワードを完全に無視していた。gkill 本体はプラグインが返した Kyou のワードを再判定しない + (本文を持たない)ので、プラグインが唯一の判定者だが、その契約はどこにも書かれていなかった。 + 型別アダプタ(`plugin_typed_adapters.go`)の `findKyous` もワードを見ておらず、`rep_types` 指定・ForMi・ReKyou の委譲では + 語に関係なくプラグインの記録が全件当たっていた。 +- `lantana_repository.go` の doc「ワード条件が有効なら常に0件」、MCP スキーマの「`[]` matches nothing」がどちらも実装と食い違っていた。 + +## Decision + +型別の対象列を決める(Lantana は MOOD、Nlog は AMOUNT、KC は NUM_VALUE、Mi は BOARD_NAME を足す。数値列は SQLite の暗黙変換で +文字列として LIKE する)。肯定語は「対象列に含む OR ID が語で**始まる**」、除外語は「対象列に含まない」で **ID は見ない**。 +除外語は付随テキスト経由にも効かせ、語なし・除外語だけのときは「素通しした全体から除外語のヒットを引く」。 +空文字・空白だけの語は Kyou 検索の入口で捨てる。Go 側の判定は依存ゼロの `api/find_word` に1つだけ置き、本体(IDF / git / +型別アダプタ)とプラグイン SDK(`Query.MatchText`)の両方がそれを使う。 + +## Rejected alternatives + +- **Lantana はワード条件の対象外(常に素通し)にする** — 「テキストを持たない型はワードで絞れない」という筋は通るが、 + キーワード列に気分記録が全部混ざり、キーワード欄へ ID を貼る検索でも Lantana が全件出る。利用者が却下。 +- **Lantana は語ありなら常に0件(現状維持)** — 除外語だけなら全件残るのに肯定語なら0件という非対称が残り、 + doc とも食い違ったまま。気分値を文字列として照合すれば `7` で気分7が引け、他の数値列と同じ規則で説明できる。 +- **タグ名にもヒットさせる** — タグは別次元のフィルタ(`tags`)で既に絞れる。合流経路をもう1本足す実装の大きさに対して + 利用者が見送り。将来の検討。 +- **数値列は完全一致にする** — REAL 由来の `1500.0` と `1500` が外れ、`65.4` に `65` が当たらない。部分一致なら + 保存型(TEXT / INTEGER / REAL)によらず当たる(`TestGenerateFindSQLCommon_NumericColumnMatchesAsText`)。 + `1` が 1 と 10 に当たる程度の緩さは受け入れる。 +- **ID は部分一致のまま** — UUID は hex なので、`[0-9a-f]` だけの語は偶然含まれる。1文字なら約 86% の UUID が当たり + (30桁の hex に特定の1文字が含まれない確率 (15/16)^30 ≈ 14%)、3文字でも約 0.7%。本文ヒットに隠れて気付かないが、 + 本文列の無い Lantana ではそれが唯一の照合だったので露骨に出ていた。前方一致なら UUID 丸ごとの貼り付けと + git の短縮ハッシュ(前方一致)はそのまま引ける。 +- **除外語も ID を見る** — 「`-1` で UUID に 1 を含む記録が消える」の再発。ID を除外したい用途は無い。 +- **除外語の再検査は ID 再検索に `NotWords` を直接足す** — ReKyou の委譲(`isWordFilterEnabled`)が `IDs` 付きで走り、 + 参照先を `IDs` で引けずに付随テキストが当たった ReKyou が全部落ちる。除外語を肯定語として検索して引くなら + ReKyou は保守的に残る。 +- **語ありのときも「全体から引く」に統一する** — `foo -の` のような頻出除外語で除外集合が本検索と同規模になり、 + 走査と実体化が2回になる。SQL の `NOT LIKE` は同じ走査の中で済むので、語ありは従来どおり SQL で除外し、 + 付随テキストで合流した記録だけ再検査する。 +- **除外語の再検査で ID 照合を切らない** — 除外語を肯定語として検索するので、旗(`WordsSkipIDMatch`)が無いと + 「ID が除外語で始まる記録」まで除外され、`-a` で 1/16 の記録が消える。 +- **Go 側の判定を `api/find` に置く** — `find` は `gkill_log` → `gkill_options` を引く。プラグイン SDK は gkill のパッケージを + 1つも import しない方針(`cache_path.go` の「SDK と本体の依存を混ぜない」)なので、標準ライブラリだけの葉 `api/find_word` に分けた。 + (追記 2026-09-20: 同じ「標準ライブラリだけの葉」として `gkill_log` / `gkill_options` も SDK から import するようになった。[ADR-0313](0313-plugin-logs-through-gkill-log.md)) +- **SDK 内に判定を複製して「直すときは両方」コメントにする(`cache_path.go` 方式)** — 判定規則は今回まさに変わった。 + 複製は必ずずれ、rep 種別によって結果が食い違う静かな壊れ方になる。 +- **型別索引にプラグインの照合テキストを持たせるプロトコル拡張** — 索引が本文サイズぶん膨らむ。型別アダプタは native と + 同じ列で判定するほうが説明できる(fitbit の "Fitbit" という語が `rep_types` 指定では当たらない差は資料に明記する)。 + +## Consequences + +- 判定規則を変えるときは SQL(`GenerateFindSQLCommon`)と Go(`find_word.MatchLoweredWords`)の両方と、 + 実 SQLite に投げる `sqlite3impl_util_test.go` を同時に直す。片方だけ変えても**エラーは出ず、rep 種別によって結果が食い違う**。 +- プラグインが SDK の `Query.MatchText` を使わずに自前判定を書いても gkill 側では検出できない。雛形 `gkill_example` が + SDK 経由になったので、写した第三者プラグインも同じ規則になる。 +- 型別アダプタ経由(`rep_types` 指定・ForMi)とプラグイン本体経由で照合対象が違いうる(後者はプラグインが決める)。 +- プラグイン本体 rep には `WordsSkipIDMatch` が届かない(`PluginQuery` に無い)ので、除外語の再検査で + 「ID が除外語で始まるプラグイン記録」だけは消えうる。実害が出たら `PluginQuery` に旗を足す。 +- `timeis_words` / `timeis_not_words`(TimeIs 側のワード)は今回対象外で、従来どおり SQL の `NOT LIKE` だけ。 +- chatgpt / claudeai は会話タイトルも照合対象になった。既存キャッシュの作り直しは不要(照合時に JOIN で載せる)。 + プラグインの配布は本タスクの外で、バイナリを更新するまでは旧規則で動く。 + +## Evidence + +- ID の部分一致が偶然当たる確率(UUID の hex 30桁、語が hex だけの場合): 1文字 ≈ 86%、2文字 ≈ 11%、3文字 ≈ 0.7%、4文字 ≈ 0.04%。 + 非 hex 文字(g〜z、日本語)を含む語は当たらない。 +- 性能の実測なし — 語なし・除外語だけの検索は「素通し(全件)+除外語の肯定検索」の2走査で、除外語の検索は通常の + ワード検索1回ぶん。語ありの検索は従来どおり1走査+付随テキスト分の ID 検索。 + +## Related tests + +- `src/server/gkill/api/find_word/match_words_test.go` +- `src/server/gkill/api/find/find_query_test.go` +- `src/server/gkill/dao/sqlite3impl/sqlite3impl_util_test.go` +- `src/server/gkill/dao/reps/find_word_match_test.go` +- `src/server/gkill/dao/reps/plugin_typed_adapters_test.go` +- `src/server/gkill/api/gkill_server_api/get_kyous_word_filter_test.go` +- `src/server/gkill/plugin/sdk/match_words_test.go` +- `src/plugins/gkill_plugin_chatgpt/find_kyous_test.go` +- `src/plugins/gkill_plugin_claudeai/find_kyous_test.go` +- `src/plugins/gkill_plugin_claudecode/find_kyous_test.go` +- `src/plugins/gkill_plugin_codex/find_kyous_test.go` +- `src/plugins/gkill_plugin_fitbit/find_kyous_test.go` diff --git a/documents/adr/0114-word-filter-id-prefix-needs-seven-chars.md b/documents/adr/0114-word-filter-id-prefix-needs-seven-chars.md new file mode 100644 index 000000000..90d1d08c8 --- /dev/null +++ b/documents/adr/0114-word-filter-id-prefix-needs-seven-chars.md @@ -0,0 +1,63 @@ +# ADR-0114: ワード検索の ID 前方一致は7文字以上の語だけにする + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-09-23 | +| Sources | `.claude/skills/gkill-find-query/SKILL.md`「ワード検索の照合規則は SQL(`GenerateFindSQLCommon`)と Go(`find_word.MatchLoweredWords`。プラグイン SDK も同じ関数)で揃える」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/api/find_word/match_words.go`(`MinIDPrefixMatchLength` / `IsIDPrefixMatchWord`)/ `src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go`(ワード検索の SQL 追記の直前) | + +## Context + +[ADR-0113](0113-word-filter-columns-and-id-prefix.md) で ID の照合を部分一致から前方一致へ狭めた。 +部分一致なら1文字の hex 語が UUID の約 86% に当たっていたのが、前方一致では 1/16 になった。 +それでも短い語は当たる。利用者から「気分の `8` を検索すると git のコミットが出てくる」と報告があった。 +git のコミットハッシュも ID として前方一致に掛かるので、`8` で始まるハッシュのコミットが本文と無関係に混ざる。 +UUID の記録も同じで、`8` なら 1/16、`8a` なら 1/256 が本文に関係なく当たる。 + +ID の前方一致を残しているのは、UUID を丸ごと貼る検索と、git の短縮ハッシュで引く検索のためだけである。 +どちらも短い語は使わない。 + +## Decision + +肯定語が ID の前方一致を見るのは、語が **7文字(rune 数、前後の空白を除く)以上**のときだけにする。 +しきい値は `find_word.MinIDPrefixMatchLength` の1か所に置き、SQL(`GenerateFindSQLCommon`)と Go(`MatchLoweredWords`。 +プラグイン SDK も同じ関数)の両方が `find_word.IsIDPrefixMatchWord` で判定する。 +完全一致(`findWordUseLike=false` の `ID = ?`)は偶然には当たらないので、長さを問わない。 + +## Rejected alternatives + +- **ID の照合をやめる** — UUID を貼っての検索と git の短縮ハッシュでの検索ができなくなる。 + どちらも Web のキーワード欄から実際に使われている。 +- **ID の完全一致だけにする** — UUID 丸ごとは引けるが、git の短縮ハッシュ(既定7文字)が引けなくなる。 +- **しきい値を 8(UUID の最初の区切りまで)にする** — git の短縮ハッシュの既定長は7文字(`git log --oneline` の表示)で、 + それをそのまま貼ると外れる。 +- **しきい値を 4〜6 にする** — 4文字の hex 語でも 1/65,536 の確率で当たり、数十万件の記録では数件が本文と無関係に混ざる。 + 7文字なら 1/2.7億で、実用上は当たらない。7文字未満の ID 断片で引きたい用途も無い。 +- **hex だけの語(`[0-9a-f]+`)のときだけ切る** — `8` や `cafe` のような語はまさに hex だけで、切りたいのはそれそのもの。 + ID は hex 以外の文字を含むことがある(プラグインの ID など)ので、字種で分けると説明が増えるだけで効果は変わらない。 +- **Lantana など本文列の無い型だけ ID を見ない** — 報告の実害は git のコミット(本文列を持つ型)の側で起きている。 + 型で分けると同じ語で型ごとに結果が変わる。 +- **しきい値を SQL と Go に別々に書く** — 片方だけを変えると、rep 種別によって結果が食い違い、エラーにならない(ADR-0113 の Consequences と同じ理由)。 + +## Consequences + +- 7文字未満の語は、ID にはもう当たらない。ID の断片で引いていた人には見え方が変わる(UUID は8文字目で区切りがあるので、 + 最初の区切りまで貼れば引ける)。 +- 対象列の無い呼び出しで短い語を渡すと `0 = 1`(何にも一致しない)になる。プレースホルダとバインド値の数は必ず揃える。 + 揃わないと、エラーにならず常に0件になる。 +- プラグインは SDK の `find_word` を使うので規則は自動で揃う。ただし、各プラグインのバイナリを作り直して配り直すまでは + 旧規則(長さを問わない前方一致)のまま動く。 +- テストの記録に素の UUID を使っていても、1文字の語で「16回に1回落ちる」ことはもう起きない(7文字の語では起きうる)。 + +## Evidence + +- 利用者報告: 気分値 `8` の検索で git のコミットが混ざる。 +- 確率: 語の長さを n とすると、hex の ID の先頭に偶然一致する確率は 16^-n。n=1 で 6.25%、n=4 で 0.0015%、n=7 で約 3.7×10^-9。 + +## Related tests + +- `src/server/gkill/api/find_word/match_words_test.go`(`TestMatchLoweredWords` の「id_6文字の語は前方一致しない」ほか、`TestIsIDPrefixMatchWord`) +- `src/server/gkill/dao/sqlite3impl/sqlite3impl_util_test.go`(`TestGenerateFindSQLCommon_ShortWordDoesNotMatchID`、`TestGenerateFindSQLCommon_IDMatchesByPrefixOnly`) diff --git a/documents/adr/0201-append-only-dao.md b/documents/adr/0201-append-only-dao.md new file mode 100644 index 000000000..455c1b90a --- /dev/null +++ b/documents/adr/0201-append-only-dao.md @@ -0,0 +1,54 @@ +# ADR-0201: Append-Only DAO — ID 列に主キー制約を置かず、更新も削除も INSERT で表現する + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-21 | +| Sources | `documents/reverse/design-philosophy.md`「3. Append-Only DAO」 / `bb364253`(指摘 H-07) / `.claude/skills/gkill-go-backend/SKILL.md`「型別 GetXxx(id, nil) は最新版を返す」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/repository.go` | + +## Context + +gkill は**複数端末から同一のDBファイルへ書く**(端末ごとの `.db` を持ち回り、同期ツールでまとめる)。この形で排他制御を前提にした `UPDATE` / `DELETE` を使うと、同期の衝突が「どちらかの編集が消える」形で現れる。 + +旧システム群は CRUD の U/D が未実装で、そもそも更新も削除もできなかった。gkill はこれを実現するのが目的の1つだった。 + +## Decision + +データの追加・更新・削除を**すべて `INSERT` で表現する**。ID 列に主キー制約を置かず、同一 ID のレコードが複数行共存する。 + +- 更新 = 同一 ID で新しい `UPDATE_TIME` の行を足す +- 削除 = `IS_DELETED = TRUE` の行を足す(論理削除) +- 有効データ = 同一 ID の中で `UPDATE_TIME` が最新の版 + +## Rejected alternatives + +- **素直に `UPDATE` / `DELETE` を使う** — 複数端末が同一DBを触るので排他制御が要る。持ち回りの同期では排他が張れず、衝突が「片方の編集が黙って消える」形になる。追記だけなら、同期がファイルをマージし損ねても**最悪でも古い版が残るだけ**で、書いたものは消えない。 + +- **端末ごとにDBを分け、更新は「所有端末だけができる」ことにする** — 記録は端末をまたいで編集したい(スマホで撮った写真にPCでタグを付ける、が日常操作)。所有権を持ち込むと、この操作が「できない」になる。 + +- **論理削除ではなく物理削除する** — 削除も同期の衝突対象になる。削除した端末とまだ削除していない端末が同期すると、行が復活する(=削除が効かない)。`IS_DELETED` の版を足す形なら、削除も「新しい版」として通常の最新版判定に乗る。 + +## Consequences + +**「最新版を取る」がすべての読み取りの前提になる。** これを外すと、古い版が現在版として見える/削除した記録が復活する、という壊れ方をする。しかも例外は出ない。 + +- 型別の単体取得 `GetXxx(id, nil)` は `onlyLatestData := query.OnlyLatestData`(`false` 固定にしない)と `slices.MaxFunc(UpdateTime)`(`&xxx[0]` を返さない)で最新版を選ぶ。格納順の先頭は多くの場合いちばん古い版なので、`kyous[0]` を返すと静かに間違える +- ディスク容量は版の数だけ増える。`optimize` サブコマンドがこれを畳む +- 「対象が実在しない付随データ」(削除された Kyou に付いたタグなど)が残りうる。物理/論理で別々の掃除ツールを用意してある + +削除しても行は残るので、**IDを再利用してはいけない**。かつて auto_tag はタグIDを(対象ID, タグ名)の UUIDv5 にして、この性質を逆手に「再実行で重複させず、**手動で削除したタグは二度と復活しない**」を実現していた(削除された行が同じIDを持つため)。2026-09-11 に後継の `add_tag` はランダムな UUID へ戻した——要件が「付いていなければ付ける」で、消したタグを付け直す必要があったため([ADR-1002](1002-add-tag-rules-are-find-queries.md))。 + +## Evidence + +実測なし — 構造からの判断(複数端末が持ち回る同一DBに対して排他制御が張れない)。 + +## Related tests + +- `src/server/gkill/dao/reps/get_kyou_latest_version_test.go` +- `src/server/gkill/dao/reps/get_typed_latest_version_test.go` +- `src/server/gkill/dao/reps/gkill_repositories_get_kyou_test.go` +- `src/server/gkill/dao/reps/cached_find_only_latest_test.go` +- `src/server/gkill/dao/reps/rows_err_check_test.go` diff --git a/documents/adr/0202-rebuild-cache-only-on-db-change.md b/documents/adr/0202-rebuild-cache-only-on-db-change.md new file mode 100644 index 000000000..db56f392c --- /dev/null +++ b/documents/adr/0202-rebuild-cache-only-on-db-change.md @@ -0,0 +1,49 @@ +# ADR-0202: キャッシュのフルリビルドは実DBが変わったときだけ + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-12 | +| Sources | `44b2be68` / `69e14f48` / `94bdb13b` / `.claude/skills/gkill-go-backend/SKILL.md`「キャッシュのフルリビルドは『実DBが変わったときだけ』」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/local_rep_cache_copy.go` | + +## Context + +cached rep の `UpdateCache` は `DELETE FROM` + 全行再INSERT である。変わっていない rep まで作り直すと、**共有の書き込みロックを握ったまま全種類の検索が止まる**。`UpdateCache` は既定1分周期で回るので、これは定常的に効く。 + +## Decision + +再構築の抑止を `dbFileChangeDetector`(mtime + サイズ)で行い、**基準を進めるのは再構築成功後の `CommitCacheRebuild` だけ**にする。 + +`--cache_reps_local=true` のときに挟まる `*_local_cached.go` も同じ約束を守る。**「コピーが要るか」の判定は必ず `os.Remove` より前に置く。** + +## Rejected alternatives + +- **毎回フルリビルドする(改修前)** — 共有ロックを握るので全検索が止まる。実データで phase1 が数分。 + +- **判定の基準を「再構築を試みた時点」で進める** — 失敗した回を取りこぼす。失敗したのに基準だけ進むと、その変更は**次に別の変更が来るまで永久に反映されない**。 + +- **ローカルコピー層で `os.Remove` してから `os.Stat` で判定する(実際にそうなっていた)** — 消してから見るので**常に「要コピー」**になる。毎回GB級のコピーをし直したうえ、`LastUpdateCacheChanged()` が常に true を返して**抑止が丸ごと無効化**される。実データで phase1 が 1秒未満 → 数分(2026-08-12 修正)。順序を1つ間違えるだけで機能全体が無効になる形なので、共通ヘルパ `local_rep_cache_copy.go` に寄せた。 + +- **ReKyou / MiReKyou も変更検知に載せる** — **載せてはいけない。** この2つはターゲット解決のため**アドレス確定後にもう一度更新される**仕様で、mtime判定を入れると2回目が飛んで**ターゲット未解決の中身が残る**。コピーの省略だけなら可。 + +- **内容ハッシュで判定する** — repは実データでGB級。毎周期ハッシュを取ると抑止の意味がない。mtime + サイズで実用上足りている(Takeout の ZIP のように mtime が動かないケースは別問題で、そちらは CRC32 を使う → ADR-0303)。 + +## Consequences + +`LastUpdateCacheChanged()` の値は「本当に再構築したか」を表す。ここが常に true を返す実装を作ると、上位の抑止が全部無効になる(実際にそうなっていた)。 + +判定の順序(`os.Stat` → `os.Remove`)は**コードを読んでも「なぜこの順序なのか」が分からない**種類の制約なので、`local_rep_cache_copy.go` にコメントを置いてある。 + +## Evidence + +- `--cache_reps_local=true` の本番構成で phase1 が **1秒未満 → 数分**(毎回GB級のコピー + 抑止の無効化)。2026-08-12 に修正して1秒未満へ戻した + +## Related tests + +- `src/server/gkill/dao/reps/db_file_change_detector_test.go` +- `src/server/gkill/dao/reps/local_rep_cache_granular_test.go` +- `src/server/gkill/dao/reps/idf_granular_cache_test.go` +- `src/server/gkill/dao/reps/re_kyou_granular_cache_test.go` diff --git a/documents/adr/0203-write-through-cache-not-reps-count.md b/documents/adr/0203-write-through-cache-not-reps-count.md new file mode 100644 index 000000000..43304476f --- /dev/null +++ b/documents/adr/0203-write-through-cache-not-reps-count.md @@ -0,0 +1,52 @@ +# ADR-0203: 書き込み後のキャッシュ反映は要素数ではなく構築時に控えた CachedReps で判定する + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-12 | +| Sources | `5afbd408` / `.claude/skills/gkill-go-backend/SKILL.md`「`len(XxxReps) == 1` でキャッシュrepを判定してはいけない」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/gkill_dao_manager.go` | + +## Context + +書き込み後にメモリキャッシュrepへ反映する処理が `len(repositories.TagReps) == 1 && *gkill_options.CacheTagReps` という**要素数による代用判定**で守られていた。 + +これは「キャッシュONなら `XxxReps` はキャッシュrep1個に差し替えられている」という観察に基づく。ところが `GkillDAOManager` は、キャッシュrepで `XxxReps` を1個に差し替えた**あとに**プラグインの型別アダプタを append する(→ ADR-0302)。`provides` を持つプラグインが1つ入るだけで長さが2になり、判定が常に false になる。 + +読み取りはキャッシュrepしか見ず下層repへフォールバックしないため、**付けたタグが次の `UpdateCache` まで最大1分間見えなくなっていた**。 + +さらに悪いことに、その1分の間に PWA が古い応答をキャッシュし直すと、最新版アドレス表の `UpdatedTime` は前進しないぶん検索直前の `get_updated_datas_by_time` から**二度と通知されず、古い一覧が恒久的に焼き付く**。「別のブラウザで付けたタグが、検索し直しても反映されない」の正体はこれで、PWA 側のキャッシュ削除機構そのものは壊れていなかった。 + +## Decision + +個数判定を全廃し、**構築時に控えた `GkillRepositories.CachedReps`** を見る `repositories.WriteThroughXxxCache(ctx, ...)` に集約する(54箇所)。 + +## Rejected alternatives + +- **アダプタの append を差し替えより前に移す** — 先に append すると型別アダプタが差し替えで消えるか、キャッシュrepと二重に登録されて**二重検索**になる。登録順は「`KCReps`→`Reps` コピーループより後」でなければならない別の理由がある(→ ADR-0302)。順序で辻褄を合わせると、両方の制約を同時に満たす順序が無くなる。 + +- **個数判定を `len(XxxReps) <= 2` のように緩める** — `provides` を持つプラグインの数だけ増えるので、次にプラグインが増えたときにまた壊れる。しかも壊れ方は同じく静か。 + +- **読み取り側で下層repへフォールバックする** — キャッシュの意味が無くなる(キャッシュに無い=下層を見る、では毎回下層を舐める)。 + +- **書き込み後に `UpdateCache` を即座に回す** — `UpdateCache` は `DELETE` + 全行再INSERT で共有ロックを握る(→ ADR-0202)。タグを1つ付けるたびに全検索が止まる。 + +## Consequences + +**`len(XxxReps) == 1` でキャッシュrepを判定してはいけない**、が規約として残った。再発は `usecase/write_through_cache_test.go` の `TestNoRepsCountCacheGuard` がソース走査で落とす。 + +反映を飛ばしたときの症状は二段構えで、**1段目(最大1分見えない)は目立たないが、2段目(PWAへの恒久的な焼き付き)は利用者が自力で回復できない**。すでに焼き付いた古い一覧は更新IDの再通知が来ないので個別削除では回収できず、ServiceWorker の `activate` で `gkill-post-kyou-cache` を丸ごと破棄する必要があった。 + +## Evidence + +実測なし — 構造からの判断(`provides` を持つプラグインが1つでも入れば必ず破れる)。 + +症状は実機で再現している(「別のブラウザで付けたタグが、検索し直しても反映されない」)。Goテスト4ケースと Vitest 6ケースは、いずれも修正前の実装に戻すと落ちることを確認済み。 + +## Related tests + +- `src/server/gkill/usecase/write_through_cache_test.go`(`TestNoRepsCountCacheGuard` を含む) +- `src/server/gkill/usecase/cached_rep_insert_alignment_test.go` +- `src/client/__tests__/unit/classes/delete-gkill-cache.test.ts` diff --git a/documents/adr/0204-keep-journal-mode-delete.md b/documents/adr/0204-keep-journal-mode-delete.md new file mode 100644 index 000000000..4947ff9fd --- /dev/null +++ b/documents/adr/0204-keep-journal-mode-delete.md @@ -0,0 +1,52 @@ +# ADR-0204: 実データDBの journal_mode は DELETE のまま変えない + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-04 | +| Sources | `ca5ef610` / `src/server/gkill/dao/sqlite3impl/` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/sqlite3impl/sqlite_connection_test.go` | + +## Context + +SQLite の性能改善を検討すると **WAL 化がほぼ必ず候補に挙がる**。実際 gkill でも `cache_size` / `temp_store` / `mmap_size` が未設定で、接続プールも実データDB側は全部既定のままだったので、まとめて見直す機会があった。 + +## Decision + +実データDBの `journal_mode` は **DELETE のまま変えない**。代わりに PRAGMA と接続プールだけ調整する。 + +- `cache_size` … 既定 -2000(2MB)。接続ごとの上限で実体ファイル数ぶん積み上がりうるので、控えめに 8MB +- `temp_store` … 既定 FILE。`ORDER BY` の一時ソートがディスクに落ちていたので MEMORY へ +- `mmap_size` … 256MB +- 接続プール … 既定の `MaxIdleConns` は2しかなく、超えた接続は使い終わると即閉じられて SQLite のページキャッシュが毎回捨てられていた。`MaxOpenConns` と同数を保持させる + +**キャッシュ側は従来どおり WAL のまま。** + +## Rejected alternatives + +- **実データDBを WAL にする** — **`-wal` / `-shm` のサイドカーができる。** gkill は rep を**端末ごとの `.db` ファイルとして持ち回る**作りで、バックアップも単純なファイルコピーで済ませたい(→ ADR-0201 の前提そのもの)。`.db` 単体をコピーすると未チェックポイントの内容が落ちるので、**利用者が気付かないうちにデータを失う**。速さと引き換えにしてよい性質ではない。 + +- **WAL にしたうえで、コピー前に必ずチェックポイントさせる** — 「持ち回り」は gkill の外(同期ツール・USBメモリ・手動コピー)で起きるので、gkill からは強制できない。 + +- **`mmap_size` を増やさない** — 大きいDBで効果が大きい。数十MBの `URLog.db` の全走査が実測 **100ms台 → 数ms**。実行順を入れ替えても同じなのでOSキャッシュの温まりではない。小さいDBでは差が出ないので害もない。 + +## Consequences + +**この方針が将来ひっくり返らないよう、PRAGMA の実値を検査する回帰テストを置いた**(とくに `journal_mode = delete`)。文書だけだと「速くなるから」で戻される。 + +キャッシュ側と実データ側で `journal_mode` が違う、という非対称が残る。キャッシュは持ち回らない派生物なので WAL でよい。 + +**この決定は `journal_mode` だけのもので、`synchronous` は当時扱っていなかった。** +耐久性は2つの組み合わせで決まり、DELETE を選んだ以上 `synchronous` は FULL でなければ +電源断・I/O断でDBそのものが壊れうる(実際に壊れた)。その続きは [ADR-0215](0215-data-db-synchronous-full.md)。 + +## Evidence + +- `mmap_size` 256MB: 数十MBの `URLog.db` の全走査が **100ms台 → 数ms**(実行順を入れ替えても同じ) +- `MaxIdleConns` 既定2: 超過分の接続が返却のたびに閉じられ、SQLite のページキャッシュが毎回捨てられていた + +## Related tests + +- `src/server/gkill/dao/sqlite3impl/sqlite_connection_test.go`(PRAGMA の実値を検査。とくに `journal_mode = delete`) diff --git a/documents/adr/0205-unixepoch-expression-index.md b/documents/adr/0205-unixepoch-expression-index.md new file mode 100644 index 000000000..373fda28f --- /dev/null +++ b/documents/adr/0205-unixepoch-expression-index.md @@ -0,0 +1,46 @@ +# ADR-0205: 時刻列は unixepoch の式インデックスで引く + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-04 | +| Sources | `e5d294d4` / `306f4288` / `43aed843` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/sqlite3impl/sqlite3impl_util.go` | + +## Context + +`WHERE` と `ORDER BY` が `datetime(列, 'localtime')` で**列を関数に通しており**、どんな索引を足しても `SEARCH` にならず毎回全走査+一時ソートになっていた。 + +## Decision + +比較と整列を `unixepoch(列)` に統一し、各テーブルに `CREATE INDEX ... (unixepoch(列) DESC)` を張る。比較の両辺に同じ変換が掛かるので順序関係は変わらない。 + +索引が効いていることを **`EXPLAIN QUERY PLAN` に `SEARCH` が出ること**として回帰テストで固定する。 + +## Rejected alternatives + +- **`datetime()` を外して素の文字列比較にする** — **誤り。** 実データの `RELATED_TIME` は**オフセットが混在している**(TAG は `+00:00` が数千行 / `+09:00` が数百行)。文字列順は時系列にならない。 + +- **`datetime(列, 'localtime')` のまま索引を工夫する** — `'localtime'` は**非決定的**(プロセスのタイムゾーンに依存する)なので、SQLite は式インデックスに使わせない。仕様上どうやっても効かない。 + +- **時刻を整数列として非正規化して持つ** — キャッシュ側では実際にそうしている(`_UNIX` 整数列)。実データDB側は持ち回る `.db` のスキーマを変えることになるので採らない。なおキャッシュ側にも、**先頭が時刻列の索引**を追加した(既存の `(ID, RELATED_TIME_UNIX, UPDATE_TIME_UNIX)` は ID が先頭で、範囲にも並び替えにも使えない)。 + +## Consequences + +**生成SQLと索引の式は完全に一致していないと、エラーにならず黙って全走査に戻る。** これがこの決定のいちばん危険なところで、だから `EXPLAIN QUERY PLAN` の検査をテストにしてある。 + +時刻列まわりのSQLを触るときは、`SEARCH` が消えていないかを必ず見ること。 + +## Evidence + +- 実測(TAG 数千行、1か月範囲): **数ms → 1ms未満**。`SCAN + TEMP B-TREE` から `SEARCH` のみへ +- オフセット混在の実データ: TAG の `RELATED_TIME` は `+00:00` と `+09:00` が混在(前者が大半) + +## Related tests + +- `src/server/gkill/dao/sqlite3impl/unixepoch_index_test.go` +- `src/server/gkill/dao/sqlite3impl/index_usage_test.go` +- `src/server/gkill/dao/sqlite3impl/latest_data_index_test.go` +- `src/server/gkill/dao/sqlite3impl/timeis_range_index_test.go` diff --git a/documents/adr/0206-no-nested-threads-go.md b/documents/adr/0206-no-nested-threads-go.md new file mode 100644 index 000000000..6f7148d78 --- /dev/null +++ b/documents/adr/0206-no-nested-threads-go.md @@ -0,0 +1,53 @@ +# ADR-0206: threads.Go の入れ子は禁止。集約リポジトリには逐次版を用意する + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-05 | +| Sources | `530b7ec4` / `7f0d1710` / `c91a3456` / `d577bba7` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/main/common/threads/threads.go` | + +## Context + +`threads.Go` は `runtime.NumCPU()` 個の**有界セマフォを同期取得**してから goroutine を起こす。スロットを保持したまま子のスロットを待つと、全スロットが「子を待つ親」で埋まった瞬間に**誰も進めなくなる**。 + +これが実際に起きた。cached 実装のキャッシュビルド中フォールバックが `threads.Go` のスロットを保持したまま、集約の並列 `FindKyous` をネストしていた。実機で**数百件の検索が数十秒間1件も完了しなかった**。 + +デッドロックなので待っても解けない。しかも `-race` では出ず、CPU も食わないので「サーバが黙った」ようにしか見えない。 + +## Decision + +`threads.Go` の入れ子を禁止する。集約リポジトリには**逐次版**(`FindKyousSequential` など)を用意し、既に `threads.Go` の中にいる呼び出し元はそちらを使う。 + +## Rejected alternatives + +- **セマフォの上限を増やす(`NumCPU()` × 2 など)** — ネストの深さは構造で決まるので、上限をいくら上げても「その深さぶん同時に走れば」また埋まる。確率を下げるだけで、しかも下げた結果**再現しにくくなる**ぶん悪い。 + +- **スロットを一時的に手放してから子を呼ぶ** — 手放しと取り直しの間に別の仕事が入るので、プールの意味(同時実行数の上限)が保証できなくなる。取り直しで待つ点も変わらない。 + +- **セマフォを取らずに素の goroutine で起こす** — プールを置いた理由(repのファンアウトで数百のgoroutineがディスクを叩き合うのを防ぐ)が消える。 + +- **デッドロックを検出してタイムアウトで抜ける** — 保険として `inline` フォールバック(閾値30秒)は入れてあるが、これは**主たる対策にしない**。30秒待ってから進むのでは利用者から見て壊れているのと変わらず、しかも「たまに遅い」に化けて原因が追いにくくなる。 + +## Consequences + +集約リポジトリの `Find` 系には並列版と逐次版が並ぶ。**キャッシュ実装は逐次版経由に固定する。** + +同種の罠がもう1つある: 共有 `RWMutex` の**再帰 RLock**。cached の複合メソッドが外側でロックを取ったまま内側の単体メソッドを呼ぶと、間に Writer が並んだ瞬間に恒久ハングする(`c91a3456`)。「cached 複合メソッドは外側ロックを取らない」「集約 ReKyou は cached `FindKyous` を呼ばない」も同じ理由で守る。 + +プラグイン rep は `Repositories` のファンアウトでスロットを取らない(`goForRep`)。プラグインのロック待ちで検索全体が止まらないようにするため。 + +## Evidence + +- 実機で数百件の検索が**数十秒間1件も完了しない**状態を再現・観測(`d577bba7` の調査。dlv の非対話ダンプでスタックを取り、全スロットが子待ちで埋まっていることを確認した) +- `-race` では検出されない(データ競合ではなく資源の循環待ちなので) + +## Related tests + +- `src/server/gkill/main/common/threads/threads_test.go` +- `src/server/gkill/dao/reps/mi_re_kyou_cached_nested_pool_test.go` +- `src/server/gkill/dao/reps/git_commit_log_cached_nested_pool_test.go` +- `src/server/gkill/dao/reps/re_kyou_cached_deadlock_test.go` +- `src/server/gkill/dao/reps/idf_generate_cache_nested_pool_test.go` diff --git a/documents/adr/0207-exclude-urlog-thumbnail-from-cache.md b/documents/adr/0207-exclude-urlog-thumbnail-from-cache.md new file mode 100644 index 000000000..8d889352f --- /dev/null +++ b/documents/adr/0207-exclude-urlog-thumbnail-from-cache.md @@ -0,0 +1,50 @@ +# ADR-0207: URLog のサムネイルはインメモリキャッシュに載せない + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-04 | +| Sources | `688bf0e0` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/ur_log_repository_cached_sqlite3_impl.go` | + +## Context + +URLog の `THUMBNAIL_IMAGE` は base64 で **1行あたり平均数百KB・最大10MB**あり、実データ数百行の合計が **数十MB** ある。これがキャッシュ表に入っていたため、`--cache_in_memory`(既定 true)でそのままメモリに常駐していた。 + +## Decision + +キャッシュ表から `THUMBNAIL_IMAGE` 列を外す。`UpdateCache` が下層repを読む段階でも除外する(除外しないと全件を `[]URLog` に載せる時点で Go のヒープに数十MBが乗る)。 + +サムネイルが要る経路は扱いを分ける。 + +- `GetURLog` / `GetURLogHistories`(URLogカード表示ごとに呼ばれる)… キャッシュから引いたうえで、**`REP_NAME` からその版を持つrepを特定してそこだけ読み直す** +- `FindURLog`(共有ページのみ。頻度が低い)… サムネイル要求時は下層repへ委譲する +- `FindKyous` / `GetKyou` / `GetKyouHistories` … 無変更(Kyou はメタデータのみでサムネイルを触らない) + +## Rejected alternatives + +- **集約(`u.urlogRep`)へ丸ごと委譲する** — 配下rep数ぶんのクエリが飛ぶ。実データ十数repで**カード1枚あたり十数ms**。持ち主repだけなら1ms前後。 + +- **丸ごと委譲する(もう1つの理由)** — cached の `AddURLogInfo` は**キャッシュにしか書かない**(本番では `handle_commit_tx` がディスクとキャッシュの両方に書いて辻褄を合わせている)。委譲すると**キャッシュにしか無い行が引けなくなる**。 + +- **`FAVICON_IMAGE` も一緒に外す** — 対象外にした。合計1MB未満・平均1KB未満しかなく、外す意味がないうえ経路が増える。 + +- **サムネイルを別テーブルへ切り出す** — 実データDB側のスキーマ変更になる(持ち回る `.db`)。キャッシュ表から外すだけで目的を達する。 + +## Consequences + +フラグ名を `ExcludeBinaryData` から **`ExcludeURLogThumbnailImage`** に変えた。意味をサムネイル限定にして、「バイナリ全般を外す」と読み違えて favicon まで外されるのを防ぐ。 + +「キャッシュから引いて、必要な列だけ持ち主repから読み直す」という形が1つ増えた。持ち主の特定に `REP_NAME` を使うので、`REP_NAME` の意味論(→ ADR-0101)に依存している。 + +## Evidence + +- 本番相当(数百行×数百KB)で実測: キャッシュDB **数十MB相当 → 1MB未満** +- 集約への丸投げ: 実データ十数repでカード1枚あたり十数ms / 持ち主だけなら1ms前後 +- `FAVICON_IMAGE` は合計1MB未満・平均1KB未満 + +## Related tests + +- `src/server/gkill/dao/reps/cache_find_bench_test.go` diff --git a/documents/adr/0208-git-repo-detect-by-os-stat.md b/documents/adr/0208-git-repo-detect-by-os-stat.md new file mode 100644 index 000000000..b53e4b675 --- /dev/null +++ b/documents/adr/0208-git-repo-detect-by-os-stat.md @@ -0,0 +1,55 @@ +# ADR-0208: gitリポジトリ判定は PlainOpen のエラー型ではなく os.Stat で行う + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-20 | +| Sources | `17797717` / `081a6e44` / `77182397` | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/git_commit_log_repository_local_dir_impl.go` | + +## Context + +`$HOME/Git/*` のような glob は zglob が**ファイルも返す**ので、Git フォルダに `bash.exe.stackdump` のような非gitのファイルが1つ混ざることがある(Git Bash のクラッシュダンプ。このリポジトリにも実在する)。 + +`gkill_dao_manager.go` は `errors.Is(err, reps.ErrNotGitRepository)` のときだけそのrepをスキップし、それ以外は `GetRepositories` を丸ごと失敗させる。失敗すると**そのユーザの全APIが `ERR000018` になって何もできなくなる**。 + +ところが `NewGitRep` は `git.PlainOpen` のエラーを `%w` で包み直すだけで、**その型が OS で違う**。 + +``` +Windows … ErrRepositoryNotExists(判別できる) +Linux … lstat /.git: not a directory(ENOTDIR の *fs.PathError) +``` + +つまり Linux では `errors.Is` が偽になり、スキップされずに `return nil, err` へ落ちる。**`081a6e44` で直したはずの不具合が Linux では直っていなかった。** CI(Ubuntu)はこの2件で **5日間赤のまま**で、Windows では再現しないので手元では気付けなかった。 + +## Decision + +gitリポジトリは必ずディレクトリなので、`PlainOpen` の**前に `os.Stat` でディレクトリかを確かめ**、ファイルなら `ErrNotGitRepository` を包んで返す。OSに依存しない判定にする。 + +## Rejected alternatives + +- **`PlainOpen` のエラーを一律 `ErrNotGitRepository` に丸める** — 権限エラーや壊れたリポジトリまでスキップに化けて、**gitのコミットログが1件も出ないことに気付けなくなる**。`TestNewGitRepSuccessForGitRepository` がその意図で置いてある。 + + > この却下が禁じているのは**黙る**ことであって、切り離すこと自体ではない。 + > 読めない rep を「利用者へ必ず返したうえで」切り離す形は [ADR-0216](0216-detach-a-broken-rep-but-never-silently.md) で採用した。 + +- **OSごとにエラー型を判定する分岐を書く** — go-git や標準ライブラリの実装詳細に依存する。次のバージョンで文言や型が変われば同じ壊れ方が再発し、しかも**そのOSでしか再現しない**ので気付くまでに日数がかかる。 + +- **glob 側でファイルを除外する** — zglob の挙動に依存するうえ、rep の種類ごとに同じ除外を書くことになる。判定はrepを開く側に1つあればよい。 + +## Consequences + +**「OSによってエラーの型が違う」は静かに壊れる。** ビルドも vet も通り、片方のOSでは正しく動く。Windows で開発して Linux 向けにも配布する gkill では、この形の分岐を新しく書かないこと。 + +配布物のうち linux_amd64 / linux_arm64 / linux_arm / android_arm / android_arm64 のサーバがこの不具合に当たっていた。 + +## Evidence + +- CI(Ubuntu)が `081a6e44`(2026-08-15)から **5日間赤のまま**。最後に緑だったのは `50941029` +- Windows では再現しない。WSL で修正前の失敗を再現し、修正後に Windows(30パッケージ)と Linux の両方で通ることを確認した + +## Related tests + +- `src/server/gkill/dao/gkill_dao_manager_git_rep_test.go`(`TestNewGitRepReturnsErrNotGitRepositoryForNonGitPath` / `TestGetRepositoriesSkipsNonGitEntriesInGitCommitLogGlob`) diff --git a/documents/adr/0209-write-through-normalizes-rep-name.md b/documents/adr/0209-write-through-normalizes-rep-name.md new file mode 100644 index 000000000..35ef3316f --- /dev/null +++ b/documents/adr/0209-write-through-normalizes-rep-name.md @@ -0,0 +1,93 @@ +# ADR-0209: キャッシュへ書き戻す rep 名はクライアントの値を信用せず書き込み側で正規化する + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-24 | +| Sources | `7e1f8023` / `.claude/skills/gkill-go-backend/SKILL.md`「`len(XxxReps) == 1` でキャッシュrepを判定してはいけない」節 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/gkill_repositories.go`(`writeRepNameOrEmpty`) | + +## Context + +gkill の Kyou は2層に書かれる。実体は leaf rep(`XxxRepositorySQLite3Impl`)へ、 +検索用の写しはキャッシュ rep(`XxxRepositoryCachedSQLite3Impl`)へ入る。 + +この2層で `RepName` の扱いが非対称になっている。 + +- leaf rep のテーブルに **REP_NAME 列は無い**。読むときに Go 側が + `kyou.RepName = repName` を注入するので、書き込み時に何が入っていようと結果は常に正しい +- キャッシュ rep は **REP_NAME 列を持ち**、`AddXxxInfo` に渡された `RepName` を + そのまま INSERT し、SELECT でそのまま返す + +`--cache_in_memory`(既定 true)では検索がキャッシュ rep しか見ないため、 +キャッシュへ書いた値がそのまま利用者の目に触れる。 + +一方 `RepName` の値は呼び出し側から来る。MCP の追加経路は空文字を送り +(クライアントは書き込み先 rep を知りようがない)、MCP の更新経路は +`/api/get_kmemo` で読んだ現在値をそのままエコーするので **取得元 rep** の名前を送る。 +端末ごとに rep を分けている環境では、取得元と書き込み先が食い違う。 + +この決定が無いと、追加した記録の `rep_name` が空のまま、あるいは別 rep の名前のまま +検索結果に出る。`filterKyousByRepName` は空を残すので記録自体は消えないが、 +`query.reps` での絞り込みが効かず、`group_by:"rep_name"` は集計にならない。 +更新の場合は「非空だが指定 rep に無い名前」になるので**更新直後だけ一覧から消える**。 +いずれも次の `UpdateCache`(既定1分)で直るため、再現しようとすると消えている。 + +## Decision + +`GkillRepositories.WriteThroughXxxCache` の 13 メソッドが、キャッシュ rep へ渡す直前に +`RepName` を書き込み先 rep の実名(`g.WriteXxxRep.GetRepName`)で上書きする。 +取得に失敗したときは空文字にする。`WriteThroughIDFKyouCache` だけは例外とする。 + +## Rejected alternatives + +- **呼び出し側(usecase の `Add*` / `Update*`)へ同じ5行を貼る** — `Update*` 側12ファイルには + 既にこの形があり、`Add*` 側だけが欠けていた。対称にコピーすれば直るが、 + 60行の重複コメントが増えるうえ **`api/kftl/` の11箇所と bookmarklet の1箇所は依然として空のまま残る**。 + write-through 呼び出しは非テストだけで54箇所あり、そのすべてが必ず通る1点で直すほうが漏れない +- **MCP 側が正しい rep 名を送る** — クライアントは書き込み先 rep を推測できない + (サーバの `USE_TO_WRITE` 設定で決まる)。推測を送らせると「実在しない rep 名が + キャッシュへ入り、記録が黙って消える」という重い方の壊れ方に化ける。 + `find_filter.go` の `filterKyousByRepName` に「実在しない rep 名を書き込み側に入れさせるな」 + という明示的な禁止コメントがあるのはこのため +- **`filterKyousByRepName` に例外を足して食い違いを吸収する** — 検索側で辻褄を合わせると、 + 今度は「本当に別 rep にある記録」まで拾ってしまう。壊れているのは書き込み側なので書き込み側で直す +- **`GetRepName` が失敗したらエラーにする** — キャッシュへの書き戻しは + 「失敗しても次の UpdateCache で直る」補助経路で、ここで追加そのものを失敗させる価値は無い。 + 空文字は `filterKyousByRepName` が残すので安全側に倒れる + +## Consequences + +- **`WriteThroughIDFKyouCache` だけは上書きしてはいけない。** `handle_upload_files.go` が + `request.TargetRepName` でリクエストごとに書き込み先 rep を選ぶため、 + `g.WriteIDFKyouRep` とは別の rep になりうる。呼び出し側が既に正しい値を入れている。 + doc コメントに理由を書き、走査テストの allowlist にも理由つきで載せてある +- `api/kftl/` の11箇所が `""` → 実 rep 名になる。正しい方向だが可視の挙動変化で、 + 今日は「rep 絞り込みで外した rep に KFTL 保存しても一覧に出る」、以後は「出ない」。 + 更新側は元からこの挙動なので整合する +- **壊れ方は静か。** 1型でも抜けると、その型だけが「追加直後の1分間だけ rep 絞り込みから漏れる」 + という時限付きの状態になり、他の12型のテストは緑のまま通る +- **キャッシュ OFF では再現しない。** leaf rep が読むときに自分の名前を注入するため、 + この回帰はキャッシュ ON でしか観測できない。テストを既定の OFF だけで走らせていると + 「rep_name は常時付与」というアサーションを持ちながら見逃す(実際に見逃していた) + +## Evidence + +readwrite MCP の点検(実測): + +- 8月の全記録で `group_by:"rep_name"` を撃つと、数十件のほぼすべてが `(unknown)` に集まり、 + rep 名が付いていたのは数件だけ。rep_name が入っていた唯一の Mi は、その点検中に update を通した1件だけ +- `gkill_get_kyous` の結果で kmemo / nlog / kc / lantana / urlog / timeis のすべてが `rep_name: ""` +- 同じ id を update 経由で読み直すと `rep_name: "Mi"` になる(Update 側には正規化があるため) + +修正の検証(実測): `TestHandleGetKyousMCP_IDAndRepNameAlwaysPresent` を +キャッシュ ON/OFF の両方で走らせると、修正前は `cacheInMemory=true` 側だけが +`data_type "kmemo" のrep_nameが空(常時付与のはず)` で落ち、修正後は両方通る。 + +## Related tests + +- `src/server/gkill/api/gkill_server_api/handle_get_kyous_mcp_test.go` +- `src/server/gkill/usecase/source_conventions_scan_test.go` +- `src/server/gkill/usecase/write_through_cache_test.go` diff --git a/documents/adr/0210-latest-data-address-uses-row-rep-name.md b/documents/adr/0210-latest-data-address-uses-row-rep-name.md new file mode 100644 index 000000000..791894bfa --- /dev/null +++ b/documents/adr/0210-latest-data-address-uses-row-rep-name.md @@ -0,0 +1,115 @@ +# ADR-0210: 最新版アドレス表の rep 名は行ごとの実 rep 名にする(集約名を焼かない) + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-24 | +| Sources | `5609f9c1` で顕在化した本番障害の調査 / [ADR-0209](0209-write-through-normalizes-rep-name.md) | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/*_repository_cached_sqlite3_impl.go`(`GetLatestDataRepositoryAddress`)・`src/server/gkill/dao/reps/gkill_repositories.go`(`GetKyou`) | + +## Context + +最新版アドレス表(`LATEST_DATA_REPOSITORY_ADDRESS`)は「この ID の最新版はどの rep にあるか」を持つ索引で、 +`GkillRepositories.GetKyou` はこれを使って問い合わせ先を全 rep から1 rep へ絞る。 +突き合わせの相手は `Reps.UnWrap()` が返す **leaf rep の `GetRepName()`** ―― つまり +`Photos_〈端末名〉_20240101` や `Kmemo_〈端末名〉_20240102` のような、ファイル由来の実名である。 + +ところが表へ書く側がこの前提を守っていなかった。 +キャッシュ rep は集約型(`KmemoRepositories` など)を包んでおり、 +`GetLatestDataRepositoryAddress` はその `GetRepName()` を +`? AS LATEST_DATA_REPOSITORY_NAME` で全行に焼いていた。集約型の `GetRepName` は +`"KmemoReps"` / `"IDFKyouReps"` のような**どの rep にも一致しない固定文字列**を返す。 + +結果、絞り込みの比較は永遠に外れ、全 rep が `continue` され、`GetKyou` は +**エラーも立てずに `(nil, nil)`** を返す。ReKyou 実装だけが `REP_NAME AS LATEST_DATA_REPOSITORY_NAME` +(行ごとの実名)を使っており、そこだけ正しく動いていた。 + +この欠陥は長く潜伏していた。`GkillRepositories.GetKyou` の本番呼び出し元は3箇所しかなく、 +そのうち `usecase/kyou.go` の1つは `GET /api/get_kyou` の `update_time` 指定時だけ通る細い経路で、 +壊れても「HTTP 200・`errors` なし・履歴0件」という気付けない形で返っていたからである。 + +2026-08-24、`5609f9c1`「Fix 存在しない対象IDにタグ/テキストを付けられる」がこの `GetKyou` を +`AddTag` / `AddText` の実在検査に使った。検査そのものは正しいが、土台が壊れていたため +**実在する記録へのタグ/テキスト追加が軒並み `ERR000092`(対象が見つからない)で失敗する** +という、利用者に見える障害になった。 + +「必ず失敗する」ではなく**条件つき**なのが厄介だった。API の書き込み経路 +(`usecase/*.go` の `Add*` / `Update*`)はアドレス表へ**直接**、しかも +`WriteXxxRep.GetRepName()` = leaf 名で1行書く。だから +**同じプロセスで追加した直後の記録にはタグを付けられる**。壊れるのは +UpdateCache の Phase 2 がその ID を索引した後 ―― つまりスキャンで発見された記録すべてと、 +再起動後の全記録である(既定 `--cache_in_memory=true` では表がインメモリなので、 +起動時 UpdateCache が毎回すべてを集約名で埋め直す)。 +この非対称のせいで、調査中に「別のアカウントでは成功する」という反例が出て一度診断が揺れた。 + +## Decision + +キャッシュ rep の `GetLatestDataRepositoryAddress` は、 +`LATEST_DATA_REPOSITORY_NAME` に**行の `REP_NAME` 列を射影する**。 +`GetRepName()` をバインドしてはいけない。12型(idf_kyou / kc / kmemo / lantana / mi / +nlog / notification / tag / text / time_is / ur_log、および既に正しかった re_kyou)で揃える。 + +併せて `GkillRepositories.GetKyou` に2つの安全網を置く。 + +1. アドレス表の rep 名が**空文字**のときは絞り込まない(ライトスルーは + `GetRepName` に失敗した行を空名で書く。ADR-0209 参照) +2. 絞り込みが**1 rep も選ばなかった**ときは、絞り込みを捨てて全 rep へ問い合わせ直し、 + `warn` を1行残す + +## Rejected alternatives + +- **`GetKyou` 側で集約名を許容する比較にする**(`"KmemoReps"` を来たら kmemo 系 leaf 全部に一致させる) + ―― 型ごとの対応表を `GetKyou` に持つことになり、型を足すたびに2箇所を直す羽目になる。 + 壊れているのは書き込み側なので書き込み側で直す(ADR-0209 と同じ判断) +- **安全網(全 rep へのフォールバック)だけを入れて本筋を直さない** ―― 名前が全行で食い違っている + 現状では毎回フォールバックが発火し、ID 1件の取得のために leaf rep 全走査が常態になる。 + 実測した利用者設定では directory rep のグロブが百行余りあり leaf は数百 rep になる(ADR-0101 の実測は + 十数 rep → 数百 rep・十数秒)。安全網は「戻ってきたことに気付くための網」であって常用路ではない +- **MiReKyou も同じ形へ揃える** ―― `miReKyouRepositoryCachedSQLite3Impl` は + `UnWrap()` が**自分自身**を返す。突き合わせの両辺が同じ `GetRepName()` なので現状で自己一貫しており、 + `REP_NAME` 列へ変えるとむしろ一致しなくなる。SQL も leaf 実装と共有ヘルパ + (`queryMiReKyouLatestDataRepositoryAddress`)で、leaf 側の `?` バインドは正しい +- **アドレス表を使うのをやめて常に全 rep を引く** ―― 索引を捨てることになる。上と同じ理由で不可 + +## Consequences + +- **`?` を1つ減らしたら `QueryContext` の引数も対で落とす。** 残すとバインドが1つずれ、 + 例外もエラーも出ずに常に0件になる(以前 `notification_repository_cached_sqlite3_impl.go` の + `GetNotification` で同型の事故があり、「通知の編集・削除が必ず失敗する」として現れた) +- **移行作業は不要。** 既定 `--cache_in_memory=true` ではアドレス表はインメモリ DB 上にあり、 + 再起動時の UpdateCache が leaf 名で埋め直す。`git_commit_log` の永続キャッシュが持つのは + 行データであってアドレス表ではなく、かつ委譲先の leaf が実名を書くので元から正しい +- **プラグイン Kyou は影響を受けない。** `plugin_repository_impl.go` の + `GetLatestDataRepositoryAddress` は空スライスを返すのでアドレス表に載らず、 + `GetKyou` は絞り込み無しの全 rep 走査に落ちる。障害中もプラグイン Kyou へのタグ付けだけは通っていた +- **キャッシュ OFF では再現しない。** leaf 実装の `? AS LATEST_DATA_REPOSITORY_NAME` は + 自分の実名をバインドしており正しい。ADR-0209 と同じく、既定 OFF のテストだけでは見逃す + +## Evidence + +本番で実測。 + +`dao/reps` の単体テスト(キャッシュ rep を挟んで `UpdateCache` → `GetKyou`): + +``` +LatestDataRepositoryName = "KmemoReps", want "Kmemo_TestDevice_20260824" +GetKyou() がキャッシュrep構成で nil を返した +``` + +検証用サーバ(空ホーム・別ポート・`--cache_reps_local=true`・`--pre_load_users`)で、 +「kmemo を1件足す → 再起動して起動時 UpdateCache に索引させる → `tx_id` 無しで +`/api/add_tag` と `/api/add_text`」を通した A/B: + +| | 修正前 | 修正後 | +|---|---|---| +| 実在する対象へのタグ追加 | `ERR000092`(HTTP 404) | 成功 | +| 実在する対象へのテキスト追加 | `ERR000092`(HTTP 404) | 成功 | +| 存在しない対象へのタグ追加 | `ERR000092` | `ERR000092`(`5609f9c1` の目的は維持) | + +## Related tests + +- `src/server/gkill/dao/reps/gkill_repositories_get_kyou_test.go`(`TestGkillRepositoriesGetKyou_FindsKyouThroughCachedRep`) +- `src/server/gkill/dao/reps/latest_data_address_rep_name_scan_test.go`(ソース走査。型を足したときの再発を落とす) +- `src/server/gkill/dao/reps/re_kyou_granular_cache_test.go`(`TestGkillRepositories_UpdateCacheBuildsReKyouOnFirstPass`。元から正しかった側の固定) diff --git a/documents/adr/0211-expand-rep-patterns-without-walking.md b/documents/adr/0211-expand-rep-patterns-without-walking.md new file mode 100644 index 000000000..761bd630d --- /dev/null +++ b/documents/adr/0211-expand-rep-patterns-without-walking.md @@ -0,0 +1,61 @@ +# ADR-0211: リポジトリ定義のパターン展開は対象ツリーを歩かない + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-29 | +| Sources | `.claude/skills/gkill-go-backend/SKILL.md`「Repository pattern」 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/rep_file_glob.go` | + +## Context + +`GetRepositories` は REPOSITORY テーブルの行ごとに `FILE` 列のパターンを実在パスへ展開する。展開には go-zglob を使っていた。 + +go-zglob の `Glob` は、マッチしたディレクトリで `filepath.SkipDir` を返さない。さらに枝刈り条件(`len(path) < len(dirmask)`)が root 直下の子に対しては絶対に成立しない。結果として `<静的ディレクトリ>/<接頭辞>*` のような、`**` を1つも含まないパターンでも**対象ツリー全体を無条件に再帰 walk する**。 + +一方 `*` は go-zglob 内部で正規表現 `[^/]*` に落ちるので `/` をまたげない。つまり **root 直下より深い階層に新しいマッチは原理的に存在しない**。歩いた結果は1件もマッチを増やさないまま捨てられていた。 + +これはキャッシュ事前生成の CLI だけの問題ではない。展開はリポジトリの構築時に走り、リポジトリはプロセス寿命で保持されて TTL を持たないが、無効化(ログアウト・`POST /api/reload_repositories`)のたびに作り直される。認証つきの59ルートは最初のリクエストでこの構築を待つ。 + +## Decision + +REPOSITORY の `FILE` パターンのうち「`**`・`{`・`!(` を含まない」かつ「`*` が最終セグメントにしか無い」ものは、親ディレクトリを1回列挙して展開する。それ以外は従来どおり go-zglob へ渡す。 + +環境変数が展開されずにパターンがファイルシステムのルート直下になった場合は、走査せず0件を返して警告する。 + +## Rejected alternatives + +- **go-zglob を fork して `SkipDir` を返すようにする** — 上流の意味論(`**` の扱い、ブレース展開、`(?i:)` の付与)を丸ごと抱え込むことになる。gkill が使っているのは全体のごく一部で、その一部は自前で書いたほうが短い。fork の追随コストに見合わない。 + +- **パターン記法を「最終セグメントの `*` だけ」に制限し、go-zglob をやめる** — `documents/reverse/dvnf-rep-type-spec.md` が `directory` 型の例として `**` を挙げており、設定画面から任意のパターンを入れられる。記法を狭めると、いま動いている設定が**エラーも出さずに0件**になる。フォールバックの経路は残さなければならない。 + +- **展開の結果をプロセス内でキャッシュする** — 構築そのものが「rep 定義を読み直す」ためのものなので、キャッシュすると設定変更やファイル追加が反映されなくなる。しかも1回あたりの費用が下がらないので、初回の待ちは変わらない。 + +- **展開を並列化する** — 総walk量は変わらないので、外付けストレージの帯域と OS のディレクトリキャッシュを食い合うだけ。無駄な走査を消すほうが桁で効く。 + +- **`filepath.Match` をそのまま使う** — go-zglob は `?` と `[` をメタ文字と見なさない(glob 判定が `"*{"` だけを見る)。`filepath.Match` はどちらもメタ文字として扱うので、`literal[a].db` のようなファイル名を持つ設定の意味が変わる。1セグメントぶんの照合は自前で書く。 + +## Consequences + +- 展開の意味論を2箇所(自前の1セグメント照合と go-zglob)で持つことになる。フォールバックの条件を間違えると、`**` を含む設定が**エラーも出さずに0件**になる。`repFilePatternNeedsWalk` の条件はテストで固定してある。 +- 大文字小文字の扱いは go-zglob に揃える(Windows / macOS では無視)。揃えないと、綴りの大小を間違えた設定が**それまで動いていたのに黙って0件**になる。手元の設定で大小の食い違いは1件も無かったが、救済そのものは残す。 +- disable 指定の照合(`zglob.Match`)は据え置く。判定対象は展開が返した実在パスなので、展開側だけ変えても集合は変わらない。 +- 環境変数が未設定のときの挙動が変わる。従来は `/Archive_*` のようなパターンでドライブ全体を歩いた末に0件を返していた。これを走査せずに0件+警告にする。 + +## Evidence + +**構造上の背理。** `*` は `[^/]*` に落ちて `/` をまたげないので、最終セグメントにしか `*` が無いパターンでは root 直下より深い階層に新しいマッチが存在しない。歩いた結果は必ず全部捨てられる。 + +計測でも、数万ディレクトリ規模の置き場では**1パターンあたり秒単位**かかっていた。返るのは数十件で、費用は「返す件数」ではなく「木の大きさ」に比例する。作業用の Git 置き場のように、浅いところに数十個しか無いのに深いところにファイルが多い木がいちばん悪い。数十行の設定を持つ利用者では、この合計が分単位になる。**同じ費用をサムネイル生成と互換動画生成が別々に払っていた。** + +置き換え後は、この区間が体感できない程度まで落ちた。 + +なお、手元の設定と配布サンプルを全数走査した限りでは、`**` / `{a,b}` / `!(...)` / `?` / `[...]` はいずれも使われておらず、`*` が2個以上あるパターンも `*` が最終セグメント以外にあるパターンも無かった。フォールバック経路は「使われていないが許されている」記法のために残してある。 + +## Related tests + +- `src/server/gkill/dao/rep_file_glob_test.go` +- `src/server/gkill/dao/gkill_dao_manager_git_rep_test.go` +- `src/server/gkill/dao/gkill_dao_manager_load_idf_rep_only_test.go` diff --git a/documents/adr/0212-derived-cache-scan-lists-directories.md b/documents/adr/0212-derived-cache-scan-lists-directories.md new file mode 100644 index 000000000..6dc7cdefd --- /dev/null +++ b/documents/adr/0212-derived-cache-scan-lists-directories.md @@ -0,0 +1,58 @@ +# ADR-0212: 派生キャッシュの一括生成は1件ずつ stat せずディレクトリを列挙する + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-29 | +| Sources | `.claude/skills/gkill-cli-ops/SKILL.md`「CLI サブコマンドと運用の約束」 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/idf_kyou_repository_sqlite3_impl.go` | + +## Context + +サムネイルと互換動画のキャッシュ名にはファイルサイズが入っている([ADR-0705](0705-per-user-derived-cache-dir.md) のパス構成)。同じパスのファイルが差し替わったときに自動で別エントリにするためで、この設計自体は正しい。 + +その帰結として、一括生成は「キャッシュがあるか」を判定する前に必ず元ファイルのサイズを知る必要があった。実装は素直に1件ずつ `os.Stat` していた。元ファイルは外付けストレージにあり、キャッシュはローカルにある。つまり判定1件につき2回の stat を、別々のデバイスへ投げていた。 + +対象は数十万件規模で、これがそのまま待ち時間になっていた。生成すべきものが1件も無い(全部キャッシュ済みの)回でも変わらない。 + +## Decision + +一括生成は、生成対象を親ディレクトリごとにまとめて `os.ReadDir` し、その結果からファイルサイズを得る。キャッシュ側もリポジトリごとに1回 `os.ReadDir` して、ファイル名の集合と突き合わせる。 + +## Rejected alternatives + +- **IDF の索引にファイルサイズ列を足す** — 索引は追加専用で、既存の行にサイズは入っていない。全リポジトリの再索引が要るうえ、ファイルが差し替わったときに索引と実体がずれる(差し替えを検出するためにサイズを使っているのに、そのサイズを索引から取ったら検出できない)。判定の根拠を実体から離してはいけない。 + +- **キャッシュのファイル名を接頭辞(パスのSHA1)だけで突き合わせ、サイズを見ない** — 元ファイルの stat が消せるので速いが、**差し替わったファイルのサムネイルが古いまま出続ける**。しかも一括生成でしか起きないので、画面で見ているぶんには正しく、原因に辿り着けない。近似で済ませてよい場所ではない。 + +- **サイドカーの台帳(相対パス→サイズ)を派生キャッシュの隣に置く** — 台帳と実体の同期という新しい壊れ方を増やす。台帳が古いと上と同じ「古いサムネイルが出続ける」になる。ディレクトリ列挙で同じ情報が正確に取れるのだから、持つ必要が無い。 + +- **stat を並列化するだけで済ませる** — 待ちは減るが総syscall数は変わらず、外付けストレージのキューを埋める。ディレクトリ数はファイル数より3桁少ないので、そもそも投げないほうが効く。 + +## Consequences + +- Windows では `os.ReadDir` が返す `DirEntry.Info()` が追加の syscall を伴わない(列挙時の `FILE_ID_BOTH_DIR_INFO` / `FILE_FULL_DIR_INFO` から `fileStat` を組み立てて返す)ので、サイズは列挙のついでに手に入る。**Linux では `Info()` が lstat へ落ちる**ため、この改善は Windows / macOS でだけ効く。Linux でも従来と同じ回数の syscall にしかならないので悪化はしない。 +- 索引に載っているファイル名と実ファイル名の大小が食い違っていると、`os.Stat`(Windows では大小無視)では引けていたものが、列挙結果のマップでは引けなくなる。引けないと**そのファイルのサムネイルだけがエラーも警告も出ないまま作られない**。Windows / macOS では小文字化した鍵での引き直しを入れてある。 +- シンボリックリンクは列挙の情報がリンク自身を指すので、実体を `os.Stat` で見に行く必要がある。省くとリンクのサイズでキャッシュ名を作ってしまい、毎回作り直しになる。 +- 索引にあって実体の無い行(IDF の索引は追加専用なので必ず出る)は、列挙結果に現れないことで自然に飛ばされる。従来は1件ずつ stat して失敗を見ていた。 + +## Evidence + +判定1件あたりの費用が、判定の材料をどこから取るかで3桁変わる。 + +| 操作 | 1件あたり | +|---|---| +| 外付けストレージ上のファイルを1件ずつ `os.Stat` | ミリ秒台 | +| ローカルのキャッシュを1件ずつ `os.Stat` | 1ミリ秒弱 | +| 親ディレクトリを `os.ReadDir` して1件ぶんを引く | **マイクロ秒台** | + +同じ内容の判定を1万件ぶん行うと、前者は数十秒、後者は数十ミリ秒だった。ファイルは1つのディレクトリに固まっている(リポジトリの大半は生成対象の親ディレクトリが1つだけ)ので、列挙の回数はファイル数ではなくリポジトリ数のオーダーに落ちる。 + +生成すべきものが1件も無い状態でのサムネイル一括生成は、置き換えで**1桁速くなった**。残っている費用は、リポジトリの構築と、リポジトリごとの索引の読み出しに移っている。 + +## Related tests + +- `src/server/gkill/dao/reps/idf_thumb_batch_test.go` +- `src/server/gkill/dao/reps/derived_cache_path_test.go` diff --git a/documents/adr/0213-transcode-only-what-the-browser-cannot-play.md b/documents/adr/0213-transcode-only-what-the-browser-cannot-play.md new file mode 100644 index 000000000..2b4705220 --- /dev/null +++ b/documents/adr/0213-transcode-only-what-the-browser-cannot-play.md @@ -0,0 +1,61 @@ +# ADR-0213: 互換動画へ変換するのは、原本のまま再生できると言い切れないものだけ + +| | | +|---|---| +| Status | Accepted | +| Date | 2026-08-29 | +| Sources | `.claude/skills/gkill-cli-ops/SKILL.md`「CLI サブコマンドと運用の約束」 | +| Supersedes | なし | +| Superseded-by | なし | +| Anchors | `src/server/gkill/dao/reps/idf_video_file_server.go` | + +## Context + +動画は、ブラウザで再生できる形(H.264 + AAC、高さ720pまで)へ変換したものをキャッシュして配信する。変換するかどうかを決める判定は最初から置かれていたが、**一度も有効になったことがなかった**。判定関数は誕生時(2026-02)から1行目が「常に変換する」で、本体はコメントアウトされたままだった。その後の整理でコメントアウトの残骸だけが削除され、無効化の理由は記録として残らなかった。 + +結果として、すでにブラウザが再生できる H.264 の mp4 まで全件が再エンコードされていた。互換動画キャッシュはローカルストレージを大きく占有していた。 + +コメントアウトされていた旧実装は、復活させても使えない。ffprobe の JSON はストリームごとに `codec_name` が `codec_type` より**前**に出るのに、`"codec_type":"video"` を見つけてから*後方*の `codec_name` を探していた。映像を必ず読み飛ばし、音声のコーデックを返す。判定軸も映像コーデック名だけで、コンテナ・画素形式・プロファイル・音声コーデックを見ていなかった。 + +そしてクライアントには**再生失敗の受け皿が無い**。動画は `/files/...` を素の `