From edca5bf78bcaf25095e1a3438825571721dad3d0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 31 Dec 2025 09:59:56 +0000 Subject: [PATCH 01/17] chore(release): 0.95.0-rc.1 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [0.95.0-rc.1](https://github.com/inference-gateway/cli/compare/v0.94.0...v0.95.0-rc.1) (2025-12-31) ### ๐Ÿš€ Features * Add SSH remote terminal support to web interface ([41614cf](https://github.com/inference-gateway/cli/commit/41614cfccf513205efa6bf45406a9367c144a0cd)) ### ๐Ÿ› Bug Fixes * Update ADK to v0.17.0 and fix API compatibility issues ([7450b5b](https://github.com/inference-gateway/cli/commit/7450b5b50923e98253760aa380d83df1c62c3336)) ### ๐Ÿงน Maintenance * **deps:** bump github.com/creack/pty from 1.1.18 to 1.1.24 ([#354](https://github.com/inference-gateway/cli/issues/354)) ([a1c1daf](https://github.com/inference-gateway/cli/commit/a1c1daf50417da51a411f3a31dcbae537d3c3639)) * **deps:** Bump github.com/gorilla/websocket from 1.5.0 to 1.5.3 ([#353](https://github.com/inference-gateway/cli/issues/353)) ([6953bf1](https://github.com/inference-gateway/cli/commit/6953bf101327f060603a49a5f7966a7609faa498)) * Cleanup comments ([68e9075](https://github.com/inference-gateway/cli/commit/68e90754cb88de40dc38e514f769aece121ce084)) * Cleanup IDE diagnostic warnings ([ae815b2](https://github.com/inference-gateway/cli/commit/ae815b25308d49b35b3ab84edc80b4638cb1eb21)) --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 52c81f55..611fb134 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,23 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.95.0-rc.1](https://github.com/inference-gateway/cli/compare/v0.94.0...v0.95.0-rc.1) (2025-12-31) + +### ๐Ÿš€ Features + +* Add SSH remote terminal support to web interface ([41614cf](https://github.com/inference-gateway/cli/commit/41614cfccf513205efa6bf45406a9367c144a0cd)) + +### ๐Ÿ› Bug Fixes + +* Update ADK to v0.17.0 and fix API compatibility issues ([7450b5b](https://github.com/inference-gateway/cli/commit/7450b5b50923e98253760aa380d83df1c62c3336)) + +### ๐Ÿงน Maintenance + +* **deps:** bump github.com/creack/pty from 1.1.18 to 1.1.24 ([#354](https://github.com/inference-gateway/cli/issues/354)) ([a1c1daf](https://github.com/inference-gateway/cli/commit/a1c1daf50417da51a411f3a31dcbae537d3c3639)) +* **deps:** Bump github.com/gorilla/websocket from 1.5.0 to 1.5.3 ([#353](https://github.com/inference-gateway/cli/issues/353)) ([6953bf1](https://github.com/inference-gateway/cli/commit/6953bf101327f060603a49a5f7966a7609faa498)) +* Cleanup comments ([68e9075](https://github.com/inference-gateway/cli/commit/68e90754cb88de40dc38e514f769aece121ce084)) +* Cleanup IDE diagnostic warnings ([ae815b2](https://github.com/inference-gateway/cli/commit/ae815b25308d49b35b3ab84edc80b4638cb1eb21)) + ## [0.94.0](https://github.com/inference-gateway/cli/compare/v0.93.0...v0.94.0) (2025-12-23) ### ๐Ÿš€ Features From 2936b040cad9c5d211b10f1506deceae965d3945 Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 15:12:23 +0200 Subject: [PATCH 02/17] chore: Test the CLI Signed-off-by: Eden Reich --- examples/web-terminal/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/web-terminal/docker-compose.yml b/examples/web-terminal/docker-compose.yml index 302a4522..372ae964 100644 --- a/examples/web-terminal/docker-compose.yml +++ b/examples/web-terminal/docker-compose.yml @@ -20,7 +20,7 @@ services: - ./.ssh-keys:/keys web-terminal: - image: ghcr.io/inference-gateway/cli:local + image: ghcr.io/inference-gateway/cli:0.95.0-rc.1 command: - chat - --web From d28000c9d994441406446b8e517c4c6190cdaabb Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 15:16:28 +0200 Subject: [PATCH 03/17] chore(deps): Bump docker compose cli version Signed-off-by: Eden Reich --- examples/web-terminal/docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/web-terminal/docker-compose.yml b/examples/web-terminal/docker-compose.yml index 372ae964..4ff516ad 100644 --- a/examples/web-terminal/docker-compose.yml +++ b/examples/web-terminal/docker-compose.yml @@ -47,8 +47,6 @@ services: inference-gateway: image: ghcr.io/inference-gateway/inference-gateway:latest - ports: - - "8080:8080" environment: ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY} CLOUDFLARE_API_KEY: ${CLOUDFLARE_API_KEY} From 09c861065f3677435dfce0055c7ea1b1304c7914 Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 15:17:45 +0200 Subject: [PATCH 04/17] chore(deps): Bump claude-code version Signed-off-by: Eden Reich --- .flox/env/manifest.lock | 635 ++++++++++++++++++++-------------------- .flox/env/manifest.toml | 2 +- 2 files changed, 319 insertions(+), 318 deletions(-) diff --git a/.flox/env/manifest.lock b/.flox/env/manifest.lock index 5caba2e4..37d6d1b9 100644 --- a/.flox/env/manifest.lock +++ b/.flox/env/manifest.lock @@ -5,7 +5,7 @@ "install": { "claude-code": { "pkg-path": "claude-code", - "version": "^2.0.74" + "version": "^2.0.76" }, "docker": { "pkg-path": "docker", @@ -70,27 +70,27 @@ { "attr_path": "claude-code", "broken": false, - "derivation": "/nix/store/gyyzzp5m2j5z17jxdnp57ny1hynfdwy1-claude-code-2.0.74.drv", + "derivation": "/nix/store/mhfj4qzf10fv2jv9njf0b4jpp7inx6k2-claude-code-2.0.76.drv", "description": "Agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster", "install_id": "claude-code", "license": "Unfree", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "name": "claude-code-2.0.74", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "name": "claude-code-2.0.76", "pname": "claude-code", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:22.514509Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:38.420390Z", "stabilities": [ "unstable" ], "unfree": true, - "version": "2.0.74", + "version": "2.0.76", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/6mj4j3n9ccqpfzqsyc4agjfjcf20a4ss-claude-code-2.0.74" + "out": "/nix/store/x9y8cms1gm1sk9vjcqgf40yk9y13qa77-claude-code-2.0.76" }, "system": "aarch64-darwin", "group": "toplevel", @@ -99,27 +99,27 @@ { "attr_path": "claude-code", "broken": false, - "derivation": "/nix/store/9a58lp0i8hx3i8rlhdw8x97fh6if95ln-claude-code-2.0.74.drv", + "derivation": "/nix/store/mrdvhrl2yfsd6f6cqsnrv9xcck81hxc9-claude-code-2.0.76.drv", "description": "Agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster", "install_id": "claude-code", "license": "Unfree", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "name": "claude-code-2.0.74", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "name": "claude-code-2.0.76", "pname": "claude-code", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:23.370209Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:00.849905Z", "stabilities": [ "unstable" ], "unfree": true, - "version": "2.0.74", + "version": "2.0.76", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/l53ljyp8c4rbql771zl67197bpjdavm9-claude-code-2.0.74" + "out": "/nix/store/1g9prcgxkbi9aw76ym1ygwmv7bldifz4-claude-code-2.0.76" }, "system": "aarch64-linux", "group": "toplevel", @@ -128,27 +128,27 @@ { "attr_path": "claude-code", "broken": false, - "derivation": "/nix/store/d2jhhgwqmqjq49a6p4b43ldqq6z3cwcn-claude-code-2.0.74.drv", + "derivation": "/nix/store/h9lpg0hdb28z4byx51n5vycv5f4rq7xy-claude-code-2.0.76.drv", "description": "Agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster", "install_id": "claude-code", "license": "Unfree", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "name": "claude-code-2.0.74", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "name": "claude-code-2.0.76", "pname": "claude-code", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:21.750017Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:34:53.660213Z", "stabilities": [ "unstable" ], "unfree": true, - "version": "2.0.74", + "version": "2.0.76", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/h2n2v1mramg9bw49fv5sl44a5zab9xis-claude-code-2.0.74" + "out": "/nix/store/0vqxdvk72pimgpzqlp95dgla3idld3ks-claude-code-2.0.76" }, "system": "x86_64-darwin", "group": "toplevel", @@ -157,27 +157,27 @@ { "attr_path": "claude-code", "broken": false, - "derivation": "/nix/store/97yri9rcr7ac341vf3n4bfgjx1s1c47k-claude-code-2.0.74.drv", + "derivation": "/nix/store/1wk6c1wjmc2nx6n3ii7sbscx4qpca955-claude-code-2.0.76.drv", "description": "Agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster", "install_id": "claude-code", "license": "Unfree", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "name": "claude-code-2.0.74", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "name": "claude-code-2.0.76", "pname": "claude-code", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:14.006272Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:18.427137Z", "stabilities": [ "unstable" ], "unfree": true, - "version": "2.0.74", + "version": "2.0.76", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/nb9by8i3klzxfljcjp46j3k9rs78in3z-claude-code-2.0.74" + "out": "/nix/store/vmmvfrvjnhyip979rfbr3h21sickgh3a-claude-code-2.0.76" }, "system": "x86_64-linux", "group": "toplevel", @@ -186,27 +186,27 @@ { "attr_path": "docker", "broken": false, - "derivation": "/nix/store/7x176hcqpi84zlz8kw1m4snxllxapd0m-docker-29.1.2.drv", + "derivation": "/nix/store/5c2cga917gzia6xn92dxz8dgm461k0sf-docker-29.1.3.drv", "description": "Open source project to pack, ship and run any application as a lightweight container", "install_id": "docker", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "name": "docker-29.1.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "name": "docker-29.1.3", "pname": "docker", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:22.775284Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:38.680905Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "29.1.2", + "version": "29.1.3", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/38qw6ldsflj4jzvvfm2q7f4i7x1m79n7-docker-29.1.2" + "out": "/nix/store/7d5bpjx5h22nd23j8y0yzr68znkl889i-docker-29.1.3" }, "system": "aarch64-darwin", "group": "toplevel", @@ -215,27 +215,27 @@ { "attr_path": "docker", "broken": false, - "derivation": "/nix/store/wkx6caajwqhf3kqa3krxhhjhaly5qdii-docker-29.1.2.drv", + "derivation": "/nix/store/4ngbxvvps9wby82km759awq15r5yzrfc-docker-29.1.3.drv", "description": "Open source project to pack, ship and run any application as a lightweight container", "install_id": "docker", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "name": "docker-29.1.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "name": "docker-29.1.3", "pname": "docker", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:23.758715Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:01.235525Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "29.1.2", + "version": "29.1.3", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/qxgaqaqhnfb7772dgkmcp4xs75a78f0s-docker-29.1.2" + "out": "/nix/store/3rbfn7264c1779h42fy3mlvchiqdvnhw-docker-29.1.3" }, "system": "aarch64-linux", "group": "toplevel", @@ -244,27 +244,27 @@ { "attr_path": "docker", "broken": false, - "derivation": "/nix/store/27h214i520jd714li6p1f17m1hivn1qd-docker-29.1.2.drv", + "derivation": "/nix/store/qc00zs0nrr6biidq2y7hvfscabc7s2w6-docker-29.1.3.drv", "description": "Open source project to pack, ship and run any application as a lightweight container", "install_id": "docker", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "name": "docker-29.1.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "name": "docker-29.1.3", "pname": "docker", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:22.013478Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:34:53.928267Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "29.1.2", + "version": "29.1.3", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/1ybyvg7fkr64brb6hh33wchw1bwghi93-docker-29.1.2" + "out": "/nix/store/pd1pycln6qcdb4ppiwkcaal39ms4psg7-docker-29.1.3" }, "system": "x86_64-darwin", "group": "toplevel", @@ -273,27 +273,27 @@ { "attr_path": "docker", "broken": false, - "derivation": "/nix/store/yzvczhja3z7khhn9wlljk4wdzxpawzhs-docker-29.1.2.drv", + "derivation": "/nix/store/3acxmqgaic43bzblmr363idpbg6w1f2n-docker-29.1.3.drv", "description": "Open source project to pack, ship and run any application as a lightweight container", "install_id": "docker", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "name": "docker-29.1.2", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "name": "docker-29.1.3", "pname": "docker", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:14.441023Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:18.860247Z", "stabilities": [ "unstable" ], "unfree": false, - "version": "29.1.2", + "version": "29.1.3", "outputs_to_install": [ "out" ], "outputs": { - "out": "/nix/store/lmapifc86ql4xysybykc37b4wg02f9i5-docker-29.1.2" + "out": "/nix/store/a8gb487kzlvhpikn6c6kc2qhns75mxr7-docker-29.1.3" }, "system": "x86_64-linux", "group": "toplevel", @@ -302,17 +302,17 @@ { "attr_path": "docker-compose", "broken": false, - "derivation": "/nix/store/igx5z67aj5hl3lq8v3ypacc2gfm4jk18-docker-compose-5.0.0.drv", + "derivation": "/nix/store/ci46y3186k193zh8ry4dgd2jiwnxm76a-docker-compose-5.0.0.drv", "description": "Docker CLI plugin to define and run multi-container applications with Docker", "install_id": "docker-compose", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "docker-compose-5.0.0", "pname": "docker-compose", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:22.776172Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:38.681772Z", "stabilities": [ "unstable" ], @@ -322,7 +322,7 @@ "out" ], "outputs": { - "out": "/nix/store/ldj39v5m4l1bfr92j6xpj295j8d9539g-docker-compose-5.0.0" + "out": "/nix/store/npjkwmj05423jpqgsj41j4qwq67l8rnf-docker-compose-5.0.0" }, "system": "aarch64-darwin", "group": "toplevel", @@ -331,17 +331,17 @@ { "attr_path": "docker-compose", "broken": false, - "derivation": "/nix/store/7b8mg7x68rcdfki6gwh7dry5p69gbf0y-docker-compose-5.0.0.drv", + "derivation": "/nix/store/5nh1iqf9rwcmwb14bbzmsyacddkzvs7r-docker-compose-5.0.0.drv", "description": "Docker CLI plugin to define and run multi-container applications with Docker", "install_id": "docker-compose", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "docker-compose-5.0.0", "pname": "docker-compose", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:23.759736Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:01.236599Z", "stabilities": [ "unstable" ], @@ -351,7 +351,7 @@ "out" ], "outputs": { - "out": "/nix/store/pkm8ap6x893b0k5cbjjzrjm3v0r3rx53-docker-compose-5.0.0" + "out": "/nix/store/i6a35a655w6h4w7gfz90q2hvwvprf0qh-docker-compose-5.0.0" }, "system": "aarch64-linux", "group": "toplevel", @@ -360,17 +360,17 @@ { "attr_path": "docker-compose", "broken": false, - "derivation": "/nix/store/6i342sp0yzqjy28niyhxb7wi0l135zvm-docker-compose-5.0.0.drv", + "derivation": "/nix/store/xhi2ihvdfic6drm8zwfrx14f9hkn9mgh-docker-compose-5.0.0.drv", "description": "Docker CLI plugin to define and run multi-container applications with Docker", "install_id": "docker-compose", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "docker-compose-5.0.0", "pname": "docker-compose", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:22.014353Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:34:53.929147Z", "stabilities": [ "unstable" ], @@ -380,7 +380,7 @@ "out" ], "outputs": { - "out": "/nix/store/s2vdri2n6qjx6v55khhhnfkc19a1475m-docker-compose-5.0.0" + "out": "/nix/store/pc3ddvff38q77cymsvc60l1nh374c737-docker-compose-5.0.0" }, "system": "x86_64-darwin", "group": "toplevel", @@ -389,17 +389,17 @@ { "attr_path": "docker-compose", "broken": false, - "derivation": "/nix/store/wjbk2402x98bmhak6zvn275zvvcy8qlk-docker-compose-5.0.0.drv", + "derivation": "/nix/store/2dvv911bfli2xq96r876r6mvi229l10b-docker-compose-5.0.0.drv", "description": "Docker CLI plugin to define and run multi-container applications with Docker", "install_id": "docker-compose", "license": "Apache-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "docker-compose-5.0.0", "pname": "docker-compose", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:14.442110Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:18.861323Z", "stabilities": [ "unstable" ], @@ -409,7 +409,7 @@ "out" ], "outputs": { - "out": "/nix/store/wl4806ch41rlswd6mpivbxw7rzxn7llh-docker-compose-5.0.0" + "out": "/nix/store/ph1kdlkisvv6bbnmkslp5i6611aqgm35-docker-compose-5.0.0" }, "system": "x86_64-linux", "group": "toplevel", @@ -418,17 +418,17 @@ { "attr_path": "gh", "broken": false, - "derivation": "/nix/store/wcd8a5qbdvxy111jb0bazg3007yfp2ap-gh-2.83.2.drv", + "derivation": "/nix/store/pq71px0q7ffiw9py1yv06vsdg5vna28k-gh-2.83.2.drv", "description": "GitHub CLI tool", "install_id": "gh", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "gh-2.83.2", "pname": "gh", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:23.260035Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:39.145636Z", "stabilities": [ "unstable" ], @@ -447,17 +447,17 @@ { "attr_path": "gh", "broken": false, - "derivation": "/nix/store/aqndxfs2wzlkgqh52pnjmnm685yrqj6f-gh-2.83.2.drv", + "derivation": "/nix/store/ixcdwldr265f6w3f1mz4vhrili4illgr-gh-2.83.2.drv", "description": "GitHub CLI tool", "install_id": "gh", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "gh-2.83.2", "pname": "gh", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:24.551634Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:01.996756Z", "stabilities": [ "unstable" ], @@ -476,17 +476,17 @@ { "attr_path": "gh", "broken": false, - "derivation": "/nix/store/ixnnis12vsrjfrpiimnihkh3f1djgjcn-gh-2.83.2.drv", + "derivation": "/nix/store/390l3ygqwmn5xh7aq08nsyspz0821z9h-gh-2.83.2.drv", "description": "GitHub CLI tool", "install_id": "gh", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "gh-2.83.2", "pname": "gh", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:22.487793Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:34:54.413838Z", "stabilities": [ "unstable" ], @@ -505,17 +505,17 @@ { "attr_path": "gh", "broken": false, - "derivation": "/nix/store/lh0pmph4z6klrjinfxr594xrlm99kf0r-gh-2.83.2.drv", + "derivation": "/nix/store/agqv8nm0xfbydqcbdxgnx9zg5nkw66hz-gh-2.83.2.drv", "description": "GitHub CLI tool", "install_id": "gh", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "gh-2.83.2", "pname": "gh", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:15.278194Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:19.746078Z", "stabilities": [ "unstable" ], @@ -534,17 +534,17 @@ { "attr_path": "git", "broken": false, - "derivation": "/nix/store/i8h1nzcl046dsdbzpy3zxwjnxvq5lxlr-git-2.51.2.drv", + "derivation": "/nix/store/slg4pl4az46dkgs0nrikw07a54g4nld5-git-2.51.2.drv", "description": "Distributed version control system", "install_id": "git", "license": "GPL-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "git-2.51.2", "pname": "git", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:23.294547Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:39.175805Z", "stabilities": [ "unstable" ], @@ -564,17 +564,17 @@ { "attr_path": "git", "broken": false, - "derivation": "/nix/store/ljga7ydqa78ia9dkx1wnhlr1vm7v2vcl-git-2.51.2.drv", + "derivation": "/nix/store/zv738s4b3ydr2s86yc6k12ihid02ndi1-git-2.51.2.drv", "description": "Distributed version control system", "install_id": "git", "license": "GPL-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "git-2.51.2", "pname": "git", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:24.596157Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:02.041757Z", "stabilities": [ "unstable" ], @@ -595,17 +595,17 @@ { "attr_path": "git", "broken": false, - "derivation": "/nix/store/hbgr5fc5ayq1z5a464qz28i22xbqbxyx-git-2.51.2.drv", + "derivation": "/nix/store/hr9vhpi6km3knm1ym2kf0z9bm7sghj74-git-2.51.2.drv", "description": "Distributed version control system", "install_id": "git", "license": "GPL-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "git-2.51.2", "pname": "git", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:22.518809Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:34:54.445260Z", "stabilities": [ "unstable" ], @@ -625,17 +625,17 @@ { "attr_path": "git", "broken": false, - "derivation": "/nix/store/ji1x98dbd96wm635bm6vzj9bff96rgwj-git-2.51.2.drv", + "derivation": "/nix/store/sbz8kk6zk7ajnf6lavmyazr07wgjmm2d-git-2.51.2.drv", "description": "Distributed version control system", "install_id": "git", "license": "GPL-2.0", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "git-2.51.2", "pname": "git", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:15.326356Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:19.796142Z", "stabilities": [ "unstable" ], @@ -656,17 +656,17 @@ { "attr_path": "go", "broken": false, - "derivation": "/nix/store/ggsf85dd2jp04vdv8rivxvr77grja1qd-go-1.25.4.drv", + "derivation": "/nix/store/zaq4xq9hw1b7a4azgghhh07cpc1ynmin-go-1.25.4.drv", "description": "Go Programming language", "install_id": "go", "license": "BSD-3-Clause", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "go-1.25.4", "pname": "go", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:23.408504Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:39.290078Z", "stabilities": [ "unstable" ], @@ -685,17 +685,17 @@ { "attr_path": "go", "broken": false, - "derivation": "/nix/store/2fn7f1v6wfxl683jv7clxgp69ziml3h9-go-1.25.4.drv", + "derivation": "/nix/store/hf3knc631mw1pq84qv1hk5jvs467k1v4-go-1.25.4.drv", "description": "Go Programming language", "install_id": "go", "license": "BSD-3-Clause", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "go-1.25.4", "pname": "go", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:25.160107Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:02.886715Z", "stabilities": [ "unstable" ], @@ -714,17 +714,17 @@ { "attr_path": "go", "broken": false, - "derivation": "/nix/store/f7ycjjcy9j1v2g72py90mm2822bcv316-go-1.25.4.drv", + "derivation": "/nix/store/4bmjpvr4w7cw86fqwi1fcm3dq8z2d5pp-go-1.25.4.drv", "description": "Go Programming language", "install_id": "go", "license": "BSD-3-Clause", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "go-1.25.4", "pname": "go", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:22.663458Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:34:54.593400Z", "stabilities": [ "unstable" ], @@ -743,17 +743,17 @@ { "attr_path": "go", "broken": false, - "derivation": "/nix/store/g2d4l3m5bf4308jrc3m7bfz4dcpifyla-go-1.25.4.drv", + "derivation": "/nix/store/zgcfmmah54wp3d2ln1wh9f8ykh4pp8xc-go-1.25.4.drv", "description": "Go Programming language", "install_id": "go", "license": "BSD-3-Clause", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "go-1.25.4", "pname": "go", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:15.936835Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:20.429117Z", "stabilities": [ "unstable" ], @@ -772,17 +772,17 @@ { "attr_path": "go-task", "broken": false, - "derivation": "/nix/store/pfws48ydzd6m7asd04nj7asz7sm9vzvh-go-task-3.45.5.drv", + "derivation": "/nix/store/6j5568v5g6drvyf7g6l63h79bq1536sq-go-task-3.45.5.drv", "description": "Task runner / simpler Make alternative written in Go", "install_id": "go-task", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "go-task-3.45.5", "pname": "go-task", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:23.427640Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:39.309147Z", "stabilities": [ "unstable" ], @@ -801,17 +801,17 @@ { "attr_path": "go-task", "broken": false, - "derivation": "/nix/store/iywp0ipcjmzb9w15k1sp1gi8lnmz60hl-go-task-3.45.5.drv", + "derivation": "/nix/store/rjw95fz6aaczx1yc3g4b8afcqha3vpk6-go-task-3.45.5.drv", "description": "Task runner / simpler Make alternative written in Go", "install_id": "go-task", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "go-task-3.45.5", "pname": "go-task", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:25.189459Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:02.914687Z", "stabilities": [ "unstable" ], @@ -830,17 +830,17 @@ { "attr_path": "go-task", "broken": false, - "derivation": "/nix/store/wnh8gm4ngx4g3zi7bnscmh9c8w2l532c-go-task-3.45.5.drv", + "derivation": "/nix/store/2a4rphy0l4dpnb47jrlfr01hs7xgqgiq-go-task-3.45.5.drv", "description": "Task runner / simpler Make alternative written in Go", "install_id": "go-task", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "go-task-3.45.5", "pname": "go-task", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:22.682990Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:34:54.613190Z", "stabilities": [ "unstable" ], @@ -859,17 +859,17 @@ { "attr_path": "go-task", "broken": false, - "derivation": "/nix/store/m05d5pm3d1is0gk37n07gp18a91yd92n-go-task-3.45.5.drv", + "derivation": "/nix/store/2hmcc9is241r7lxp3z56i4mrggq2fsfg-go-task-3.45.5.drv", "description": "Task runner / simpler Make alternative written in Go", "install_id": "go-task", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "go-task-3.45.5", "pname": "go-task", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:15.965786Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:20.458321Z", "stabilities": [ "unstable" ], @@ -888,17 +888,17 @@ { "attr_path": "golangci-lint", "broken": false, - "derivation": "/nix/store/w9kiv31x5pnmmdvx9hsgs6lj84frblkj-golangci-lint-2.7.2.drv", + "derivation": "/nix/store/h6hmls6bhy0an6dc8jnnywdp56hyymcw-golangci-lint-2.7.2.drv", "description": "Fast linters Runner for Go", "install_id": "golangci-lint", "license": "GPL-3.0-or-later", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "golangci-lint-2.7.2", "pname": "golangci-lint", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:23.455796Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:39.350318Z", "stabilities": [ "unstable" ], @@ -917,17 +917,17 @@ { "attr_path": "golangci-lint", "broken": false, - "derivation": "/nix/store/cwh52ybsc2j1rs6931dd12d3q43865ky-golangci-lint-2.7.2.drv", + "derivation": "/nix/store/j62j0p76bsd3qxblg777ck3vhffpwijk-golangci-lint-2.7.2.drv", "description": "Fast linters Runner for Go", "install_id": "golangci-lint", "license": "GPL-3.0-or-later", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "golangci-lint-2.7.2", "pname": "golangci-lint", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:25.246578Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:02.972469Z", "stabilities": [ "unstable" ], @@ -946,17 +946,17 @@ { "attr_path": "golangci-lint", "broken": false, - "derivation": "/nix/store/7glav1ywlkv4ikkydscx4zal1njkj7cn-golangci-lint-2.7.2.drv", + "derivation": "/nix/store/w3ilgwgv52rh1q2xiqg0j68ask5pv4yy-golangci-lint-2.7.2.drv", "description": "Fast linters Runner for Go", "install_id": "golangci-lint", "license": "GPL-3.0-or-later", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "golangci-lint-2.7.2", "pname": "golangci-lint", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:22.711807Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:34:54.642695Z", "stabilities": [ "unstable" ], @@ -975,17 +975,17 @@ { "attr_path": "golangci-lint", "broken": false, - "derivation": "/nix/store/j810k8af6sw5ns2qppd27i1yqdi2x6a9-golangci-lint-2.7.2.drv", + "derivation": "/nix/store/5dicahp4k4657qqpdy6rg9kx9pnxdw7j-golangci-lint-2.7.2.drv", "description": "Fast linters Runner for Go", "install_id": "golangci-lint", "license": "GPL-3.0-or-later", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "golangci-lint-2.7.2", "pname": "golangci-lint", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:16.024666Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:20.519278Z", "stabilities": [ "unstable" ], @@ -1004,17 +1004,17 @@ { "attr_path": "markdownlint-cli", "broken": false, - "derivation": "/nix/store/5jrhyan2742i1471iypls8b0hi9nb0wd-markdownlint-cli-0.47.0.drv", + "derivation": "/nix/store/73fszw0gcb8gyhn0hirynfqssh5q54aw-markdownlint-cli-0.47.0.drv", "description": "Command line interface for MarkdownLint", "install_id": "markdownlint-cli", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "markdownlint-cli-0.47.0", "pname": "markdownlint-cli", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:42.122788Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:02:57.771999Z", "stabilities": [ "unstable" ], @@ -1033,17 +1033,17 @@ { "attr_path": "markdownlint-cli", "broken": false, - "derivation": "/nix/store/56xvwni8pia58xy5r1v2i4zhp9qfngsv-markdownlint-cli-0.47.0.drv", + "derivation": "/nix/store/0r4r41hg9z1458ydx8npr01hmz0cil4g-markdownlint-cli-0.47.0.drv", "description": "Command line interface for MarkdownLint", "install_id": "markdownlint-cli", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "markdownlint-cli-0.47.0", "pname": "markdownlint-cli", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:04:56.374686Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:33.692952Z", "stabilities": [ "unstable" ], @@ -1062,17 +1062,17 @@ { "attr_path": "markdownlint-cli", "broken": false, - "derivation": "/nix/store/26l8yg4xshh9izrlg0paiqrkwm2m0ygy-markdownlint-cli-0.47.0.drv", + "derivation": "/nix/store/hiiq9sx87y049q4c7ax0sjqfc4wbkmdk-markdownlint-cli-0.47.0.drv", "description": "Command line interface for MarkdownLint", "install_id": "markdownlint-cli", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "markdownlint-cli-0.47.0", "pname": "markdownlint-cli", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:41.028697Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:35:15.211008Z", "stabilities": [ "unstable" ], @@ -1091,17 +1091,17 @@ { "attr_path": "markdownlint-cli", "broken": false, - "derivation": "/nix/store/k7y4q75kkkyr7d90cn5995zvpv6xr4qh-markdownlint-cli-0.47.0.drv", + "derivation": "/nix/store/81ipx26skxfsf1h8q29my3ssk8578cbb-markdownlint-cli-0.47.0.drv", "description": "Command line interface for MarkdownLint", "install_id": "markdownlint-cli", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "markdownlint-cli-0.47.0", "pname": "markdownlint-cli", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:49.143555Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:53.341105Z", "stabilities": [ "unstable" ], @@ -1120,17 +1120,17 @@ { "attr_path": "nodejs_24", "broken": false, - "derivation": "/nix/store/g9vr8czfgjdjh63k2gl917wkhj5l0ckh-nodejs-24.12.0.drv", + "derivation": "/nix/store/pwss5jv68rh8lm0ck9dmjnwgxhzig8za-nodejs-24.12.0.drv", "description": "Event-driven I/O framework for the V8 JavaScript engine", "install_id": "nodejs", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "nodejs-24.12.0", "pname": "nodejs_24", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:55:44.997688Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:03:00.481685Z", "stabilities": [ "unstable" ], @@ -1151,17 +1151,17 @@ { "attr_path": "nodejs_24", "broken": false, - "derivation": "/nix/store/qn4xn5j7szjn3c2cwh60fy8rbjjxl9x3-nodejs-24.12.0.drv", + "derivation": "/nix/store/7v2c9x8l1kc7nkwbh0ssrv2jh23lh6wn-nodejs-24.12.0.drv", "description": "Event-driven I/O framework for the V8 JavaScript engine", "install_id": "nodejs", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "nodejs-24.12.0", "pname": "nodejs_24", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:05:00.960844Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:18:38.337753Z", "stabilities": [ "unstable" ], @@ -1182,17 +1182,17 @@ { "attr_path": "nodejs_24", "broken": false, - "derivation": "/nix/store/4qca6wg30cpw370vjghp3qca5vp62mmf-nodejs-24.12.0.drv", + "derivation": "/nix/store/kg6jg49pfaamcdn9fps8qa9fn7c8kazf-nodejs-24.12.0.drv", "description": "Event-driven I/O framework for the V8 JavaScript engine", "install_id": "nodejs", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "nodejs-24.12.0", "pname": "nodejs_24", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:43.737019Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:35:18.119782Z", "stabilities": [ "unstable" ], @@ -1213,17 +1213,17 @@ { "attr_path": "nodejs_24", "broken": false, - "derivation": "/nix/store/wbcxi5kclddbrlfxk9lafzq3y72yiq3z-nodejs-24.12.0.drv", + "derivation": "/nix/store/8i411df8xvgnr6ywybybdpk4q7g9b0yk-nodejs-24.12.0.drv", "description": "Event-driven I/O framework for the V8 JavaScript engine", "install_id": "nodejs", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "nodejs-24.12.0", "pname": "nodejs_24", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:23:54.151665Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:50:58.239991Z", "stabilities": [ "unstable" ], @@ -1244,17 +1244,17 @@ { "attr_path": "pre-commit", "broken": false, - "derivation": "/nix/store/nc5925yqybsr931w8r8n6rc6cmjy2a42-pre-commit-4.5.1.drv", + "derivation": "/nix/store/braikg8xlq4q44rg7f28l6kw1v6n64rr-pre-commit-4.5.1.drv", "description": "Framework for managing and maintaining multi-language pre-commit hooks", "install_id": "pre-commit", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "pre-commit-4.5.1", "pname": "pre-commit", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:56:00.570682Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:03:15.319953Z", "stabilities": [ "unstable" ], @@ -1274,17 +1274,17 @@ { "attr_path": "pre-commit", "broken": false, - "derivation": "/nix/store/3mjpx2jhdr8rqfcgm8fy86rb5khd2948-pre-commit-4.5.1.drv", + "derivation": "/nix/store/izx8smpbdhvs7820blm4694r1vvx7mgz-pre-commit-4.5.1.drv", "description": "Framework for managing and maintaining multi-language pre-commit hooks", "install_id": "pre-commit", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "pre-commit-4.5.1", "pname": "pre-commit", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:05:24.119765Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:19:01.149297Z", "stabilities": [ "unstable" ], @@ -1304,17 +1304,17 @@ { "attr_path": "pre-commit", "broken": false, - "derivation": "/nix/store/jrxqckn5wvpdfis4saxq7a4bickhb359-pre-commit-4.5.1.drv", + "derivation": "/nix/store/a3lzhys5b1d2yd82bn4fdz6id1n0av2x-pre-commit-4.5.1.drv", "description": "Framework for managing and maintaining multi-language pre-commit hooks", "install_id": "pre-commit", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "pre-commit-4.5.1", "pname": "pre-commit", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:14:58.343249Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:35:34.047241Z", "stabilities": [ "unstable" ], @@ -1334,17 +1334,17 @@ { "attr_path": "pre-commit", "broken": false, - "derivation": "/nix/store/ikyygn4p1vb1wssi0xdc25djwpnqp9qm-pre-commit-4.5.1.drv", + "derivation": "/nix/store/gih7nyf59lf01gmdyrmqnjvg1mh8hnj8-pre-commit-4.5.1.drv", "description": "Framework for managing and maintaining multi-language pre-commit hooks", "install_id": "pre-commit", "license": "MIT", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "pre-commit-4.5.1", "pname": "pre-commit", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:24:17.311623Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:51:20.575927Z", "stabilities": [ "unstable" ], @@ -1364,17 +1364,17 @@ { "attr_path": "ripgrep", "broken": false, - "derivation": "/nix/store/vkifhd68s1djr7isam3h3afc139lk3rq-ripgrep-15.1.0.drv", + "derivation": "/nix/store/956pccmd4255xhvxskgwb8f1h6x6p163-ripgrep-15.1.0.drv", "description": "Utility that combines the usability of The Silver Searcher with the raw speed of grep", "install_id": "ripgrep", "license": "[ Unlicense, MIT ]", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "ripgrep-15.1.0", "pname": "ripgrep", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T02:56:47.388155Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:03:59.183288Z", "stabilities": [ "unstable" ], @@ -1393,17 +1393,17 @@ { "attr_path": "ripgrep", "broken": false, - "derivation": "/nix/store/jlwp62vcrqzswyn6ng8iajl8mbfya6h7-ripgrep-15.1.0.drv", + "derivation": "/nix/store/6vb16q3qvk7nyi9q9pgyb25qsqzhmz3d-ripgrep-15.1.0.drv", "description": "Utility that combines the usability of The Silver Searcher with the raw speed of grep", "install_id": "ripgrep", "license": "[ Unlicense, MIT ]", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "ripgrep-15.1.0", "pname": "ripgrep", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:06:24.500444Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:20:03.617684Z", "stabilities": [ "unstable" ], @@ -1422,17 +1422,17 @@ { "attr_path": "ripgrep", "broken": false, - "derivation": "/nix/store/w7cv010yn6g5n66yskvvyip46az383pw-ripgrep-15.1.0.drv", + "derivation": "/nix/store/mlwpjfmbk5xc0xydkip5qhpcmah6mqpa-ripgrep-15.1.0.drv", "description": "Utility that combines the usability of The Silver Searcher with the raw speed of grep", "install_id": "ripgrep", "license": "[ Unlicense, MIT ]", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "ripgrep-15.1.0", "pname": "ripgrep", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:15:42.196608Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:36:22.097469Z", "stabilities": [ "unstable" ], @@ -1451,23 +1451,24 @@ { "attr_path": "ripgrep", "broken": false, - "derivation": "/nix/store/imlwp0rk9zd0wyciwx79cgyd7j9p2n50-ripgrep-15.1.0.drv", + "derivation": "/nix/store/3hghmkqrjfsq5v96m603m7k5vq836q1g-ripgrep-15.1.0.drv", "description": "Utility that combines the usability of The Silver Searcher with the raw speed of grep", "install_id": "ripgrep", "license": "[ Unlicense, MIT ]", - "locked_url": "https://github.com/flox/nixpkgs?rev=a6531044f6d0bef691ea18d4d4ce44d0daa6e816", + "locked_url": "https://github.com/flox/nixpkgs?rev=c0b0e0fddf73fd517c3471e546c0df87a42d53f4", "name": "ripgrep-15.1.0", "pname": "ripgrep", - "rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816", - "rev_count": 914755, - "rev_date": "2025-12-21T09:35:49Z", - "scrape_date": "2025-12-23T03:25:19.892752Z", + "rev": "c0b0e0fddf73fd517c3471e546c0df87a42d53f4", + "rev_count": 917670, + "rev_date": "2025-12-28T06:08:05Z", + "scrape_date": "2025-12-29T03:52:19.602003Z", "stabilities": [ "unstable" ], "unfree": false, "version": "15.1.0", "outputs_to_install": [ + "out", "out" ], "outputs": { diff --git a/.flox/env/manifest.toml b/.flox/env/manifest.toml index f160c4ac..aabc84e0 100644 --- a/.flox/env/manifest.toml +++ b/.flox/env/manifest.toml @@ -29,7 +29,7 @@ ripgrep.version = "^15.1.0" markdownlint-cli.pkg-path = "markdownlint-cli" markdownlint-cli.version = "^0.47.0" claude-code.pkg-path = "claude-code" -claude-code.version = "^2.0.74" +claude-code.version = "^2.0.76" docker.pkg-path = "docker" docker.version = "^29.1.2" docker-compose.pkg-path = "docker-compose" From 70c0df46312136754eb0c21a6ef7e43953445edb Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 15:54:45 +0200 Subject: [PATCH 05/17] refactor: Simplify the sqlite deps Revert back to modernc package which doesn't require cgo, the whole installation process of the binary should be self contained so it's easier to install on remove - the tradeoff is 3mb more, not a deal breaker. Signed-off-by: Eden Reich --- .github/workflows/artifacts.yml | 4 +- .github/workflows/ci.yml | 17 +---- CLAUDE.md | 7 +- Taskfile.yml | 72 ++++++------------- go.mod | 8 ++- go.sum | 36 +++++++++- .../storage/migrations/migration_test.go | 4 +- internal/infra/storage/sqlite.go | 15 ++-- 8 files changed, 79 insertions(+), 84 deletions(-) diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml index 8b24adf5..8e64b331 100644 --- a/.github/workflows/artifacts.yml +++ b/.github/workflows/artifacts.yml @@ -56,7 +56,7 @@ jobs: echo "commit=$COMMIT" >> $GITHUB_OUTPUT echo "date=$DATE" >> $GITHUB_OUTPUT - - name: Build binary (Linux portable - no CGO/SQLite for maximum compatibility) + - name: Build binary (Linux portable - pure Go, no CGO dependencies) if: matrix.goos == 'linux' run: | docker run --rm \ @@ -66,7 +66,7 @@ jobs: golang:1.25-alpine3.23 \ sh -c "go build -ldflags '-w -s -X github.com/inference-gateway/cli/cmd.version=${{ steps.version.outputs.version }} -X github.com/inference-gateway/cli/cmd.commit=${{ steps.version.outputs.commit }} -X github.com/inference-gateway/cli/cmd.date=${{ steps.version.outputs.date }}' -o infer-${{ matrix.goos }}-${{ matrix.goarch }} ." - - name: Build binary (macOS native with CGO for clipboard support) + - name: Build binary (macOS with CGO for clipboard image support) if: matrix.goos == 'darwin' env: CGO_ENABLED: ${{ matrix.cgo }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 846ba5bd..7b45b7e3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -97,17 +97,9 @@ jobs: go-version-file: 'go.mod' cache: true - - name: Install build dependencies - run: | - sudo apt-get update - sudo apt-get install -y gcc libsqlite3-dev - - name: Build project - env: - CGO_ENABLED: 1 run: | go build \ - -tags libsqlite3 \ -ldflags "\ -w -s \ -X github.com/inference-gateway/cli/cmd.version=${{ github.ref_name }} \ @@ -129,12 +121,5 @@ jobs: go-version-file: 'go.mod' cache: true - - name: Install build dependencies - run: | - sudo apt-get update - sudo apt-get install -y gcc libsqlite3-dev - - name: Run tests - env: - CGO_ENABLED: 1 - run: go test -tags libsqlite3 ./... + run: go test ./... diff --git a/CLAUDE.md b/CLAUDE.md index 9dabe980..46366f07 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,7 +13,7 @@ The project uses Clean Architecture with domain-driven design patterns. ### Development Commands ```bash -# Build the binary +# Build the binary (pure Go, no CGO required) task build # Run all tests @@ -33,6 +33,9 @@ task check # Complete development workflow (format, build, test) task dev + +# Verify dependencies +task verify:deps ``` ### Module Management @@ -715,7 +718,7 @@ Key third-party libraries: - **Lipgloss**: Styling for terminal output - **go-redis**: Redis client for storage backend - **lib/pq**: PostgreSQL driver -- **modernc.org/sqlite**: CGO-free SQLite driver +- **modernc.org/sqlite**: Pure Go SQLite driver (no CGO required) - **metoro-io/mcp-golang**: MCP (Model Context Protocol) client library ## Development Environment diff --git a/Taskfile.yml b/Taskfile.yml index 1a4accba..85033627 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -19,13 +19,7 @@ tasks: build: desc: Build the CLI binary cmds: - - | - if ! command -v gcc >/dev/null 2>&1 && ! command -v clang >/dev/null 2>&1; then - echo "ERROR: C compiler not found. Required for SQLite support." - echo "Install: build-essential (Linux) or Xcode CLI Tools (macOS)" - exit 1 - fi - - CGO_ENABLED=1 go build -tags libsqlite3 -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" -o {{.BINARY_NAME}} {{.MAIN_PACKAGE}} + - go build -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" -o {{.BINARY_NAME}} {{.MAIN_PACKAGE}} sources: - "**/*.go" - go.mod @@ -36,7 +30,7 @@ tasks: install: desc: Install the CLI from source cmds: - - CGO_ENABLED=1 go build -tags libsqlite3 -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" -o $(go env GOPATH)/bin/{{.BINARY_NAME}} {{.MAIN_PACKAGE}} + - go build -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" -o $(go env GOPATH)/bin/{{.BINARY_NAME}} {{.MAIN_PACKAGE}} clean: desc: Clean build artifacts @@ -47,17 +41,17 @@ tasks: test: desc: Run all tests cmds: - - CGO_ENABLED=1 go test -tags libsqlite3 ./... + - go test ./... test:verbose: desc: Run tests with verbose output cmds: - - CGO_ENABLED=1 go test -tags libsqlite3 -v ./... + - go test -v ./... test:coverage: desc: Run tests with coverage report cmds: - - CGO_ENABLED=1 go test -tags libsqlite3 -cover ./... + - go test -cover ./... lint: desc: Run linter (requires golangci-lint) @@ -85,35 +79,18 @@ tasks: cmds: - go mod download - verify:cgo: - desc: Verify CGO and SQLite dependencies + verify:deps: + desc: Verify Go dependencies cmds: - | - echo "Checking C compiler..." - if command -v gcc >/dev/null 2>&1; then - echo "โœ“ GCC found: $(gcc --version | head -n1)" - elif command -v clang >/dev/null 2>&1; then - echo "โœ“ Clang found: $(clang --version | head -n1)" - else - echo "โœ— No C compiler found" - echo "Install: build-essential (Linux) or Xcode CLI Tools (macOS)" - exit 1 - fi - - echo "Checking SQLite library..." - if pkg-config --exists sqlite3 2>/dev/null; then - echo "โœ“ SQLite found: $(pkg-config --modversion sqlite3)" - else - echo "โš  SQLite not detected via pkg-config (may still work if installed)" - fi - - echo "Checking CGO..." - CGO_STATUS=$(go env CGO_ENABLED) - if [ "$CGO_STATUS" = "1" ]; then - echo "โœ“ CGO enabled" - else - echo "โš  CGO disabled (will be enabled for build tasks)" - fi + echo "Checking Go version..." + go version + echo "" + echo "Checking dependencies..." + go mod verify + echo "โœ“ All dependencies verified" + echo "" + echo "Note: This CLI uses pure Go dependencies (no CGO required)" run: desc: Run the CLI locally @@ -151,18 +128,15 @@ tasks: - test release:build: - desc: Build release binary for current platform only (multi-platform builds use GitHub Actions with native runners) + desc: Build release binary for current platform only cmds: - mkdir -p dist - | - echo "Building for native platform only..." + echo "Building for native platform..." GOOS=$(go env GOOS) GOARCH=$(go env GOARCH) - CGO_ENABLED=1 go build -tags libsqlite3 -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" -o dist/{{.BINARY_NAME}}-${GOOS}-${GOARCH} {{.MAIN_PACKAGE}} + go build -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" -o dist/{{.BINARY_NAME}}-${GOOS}-${GOARCH} {{.MAIN_PACKAGE}} echo "โœ“ Built dist/{{.BINARY_NAME}}-${GOOS}-${GOARCH}" - echo "" - echo "Note: Cross-platform builds with dynamic SQLite linking require native runners." - echo "Use GitHub Actions for multi-platform releases." - cd dist && sha256sum {{.BINARY_NAME}}-* > checksums.txt - | if command -v cosign >/dev/null 2>&1; then @@ -173,23 +147,23 @@ tasks: fi release:build:darwin: - desc: Build macOS binary with CGO enabled (for clipboard image support) + desc: Build macOS binary vars: GOARCH: sh: go env GOARCH cmds: - mkdir -p dist - - CGO_ENABLED=1 GOOS=darwin GOARCH={{.GOARCH}} go build -tags libsqlite3 -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" -o dist/{{.BINARY_NAME}}-darwin-{{.GOARCH}} {{.MAIN_PACKAGE}} + - GOOS=darwin GOARCH={{.GOARCH}} go build -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" -o dist/{{.BINARY_NAME}}-darwin-{{.GOARCH}} {{.MAIN_PACKAGE}} release:build:linux: - desc: Build portable Linux binary using Docker (no CGO/SQLite for maximum compatibility) + desc: Build portable Linux binary using Docker vars: GOARCH: sh: go env GOARCH cmds: - mkdir -p dist - | - echo "Building portable Linux binary using Docker (no SQLite dependencies)..." + echo "Building portable Linux binary using Docker..." docker run --rm \ -v "{{.PWD}}":/build \ -w /build \ @@ -198,7 +172,7 @@ tasks: go build \ -ldflags "-w -s -X github.com/inference-gateway/cli/cmd.version={{.VERSION}} -X github.com/inference-gateway/cli/cmd.commit={{.COMMIT}} -X github.com/inference-gateway/cli/cmd.date={{.DATE}}" \ -o dist/{{.BINARY_NAME}}-linux-{{.GOARCH}} .' - echo "โœ“ Built portable dist/{{.BINARY_NAME}}-linux-{{.GOARCH}} (JSONL/Redis/PostgreSQL support, no SQLite)" + echo "โœ“ Built portable dist/{{.BINARY_NAME}}-linux-{{.GOARCH}} (pure Go, all storage backends supported)" container:build: desc: Build container image locally for testing diff --git a/go.mod b/go.mod index 23828b1e..07954ad9 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,6 @@ require ( github.com/inference-gateway/sdk v1.14.1 github.com/ledongthuc/pdf v0.0.0-20250511090121-5959a4027728 github.com/lib/pq v1.10.9 - github.com/mattn/go-sqlite3 v1.14.32 github.com/metoro-io/mcp-golang v0.16.0 github.com/muesli/reflow v0.3.0 github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 @@ -30,6 +29,7 @@ require ( golang.org/x/crypto v0.46.0 golang.org/x/image v0.34.0 gopkg.in/yaml.v3 v3.0.1 + modernc.org/sqlite v1.42.2 ) require ( @@ -50,6 +50,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dlclark/regexp2 v1.11.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-resty/resty/v2 v2.16.5 // indirect @@ -70,10 +71,12 @@ require ( github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/termenv v0.16.0 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect github.com/oapi-codegen/runtime v1.1.2 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/sagikazarmark/locafero v0.11.0 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect @@ -100,4 +103,7 @@ require ( golang.org/x/term v0.38.0 // indirect golang.org/x/text v0.32.0 // indirect golang.org/x/tools v0.39.0 // indirect + modernc.org/libc v1.66.10 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.11.0 // indirect ) diff --git a/go.sum b/go.sum index 90278f8b..3592cb76 100644 --- a/go.sum +++ b/go.sum @@ -61,6 +61,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI= github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -90,6 +92,8 @@ github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PU github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= @@ -133,8 +137,6 @@ github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+Ei github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.32 h1:JD12Ag3oLy1zQA+BNn74xRgaBbdhbNIDYvQUEuuErjs= -github.com/mattn/go-sqlite3 v1.14.32/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/maxbrunsfeld/counterfeiter/v6 v6.11.3 h1:Eaq36EIyJNp7b3qDhjV7jmDVq/yPeW2v4pTqzGbOGB4= github.com/maxbrunsfeld/counterfeiter/v6 v6.11.3/go.mod h1:6KKUoQBZBW6PDXJtNfqeEjPXMj/ITTk+cWK9t9uS5+E= github.com/metoro-io/mcp-golang v0.16.0 h1:7NrP8Hca4IDLipPitZaTClzmN8uQcQWX8IsziXU813Y= @@ -154,6 +156,8 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= github.com/muesli/termenv v0.16.0 h1:S5AlUN9dENB57rsbnkPyfdGuWIlkmzJjbFf0Tf5FWUc= github.com/muesli/termenv v0.16.0/go.mod h1:ZRfOIKPFDYQoDFF4Olj7/QJbW60Ol/kL1pU3VfY/Cnk= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oapi-codegen/runtime v1.1.2 h1:P2+CubHq8fO4Q6fV1tqDBZHCwpVpvPg7oKiYzQgXIyI= @@ -169,6 +173,8 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= @@ -278,3 +284,29 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +modernc.org/cc/v4 v4.26.5 h1:xM3bX7Mve6G8K8b+T11ReenJOT+BmVqQj0FY5T4+5Y4= +modernc.org/cc/v4 v4.26.5/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.28.1 h1:wPKYn5EC/mYTqBO373jKjvX2n+3+aK7+sICCv4Fjy1A= +modernc.org/ccgo/v4 v4.28.1/go.mod h1:uD+4RnfrVgE6ec9NGguUNdhqzNIeeomeXf6CL0GTE5Q= +modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= +modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= +modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= +modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= +modernc.org/libc v1.66.10 h1:yZkb3YeLx4oynyR+iUsXsybsX4Ubx7MQlSYEw4yj59A= +modernc.org/libc v1.66.10/go.mod h1:8vGSEwvoUoltr4dlywvHqjtAqHBaw0j1jI7iFBTAr2I= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= +modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw= +modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= +modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.42.2 h1:7hkZUNJvJFN2PgfUdjni9Kbvd4ef4mNLOu0B9FGxM74= +modernc.org/sqlite v1.42.2/go.mod h1:+VkC6v3pLOAE0A0uVucQEcbVW0I5nHCeDaBf+DpsQT8= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/internal/infra/storage/migrations/migration_test.go b/internal/infra/storage/migrations/migration_test.go index 6c411f7c..ec5865b3 100644 --- a/internal/infra/storage/migrations/migration_test.go +++ b/internal/infra/storage/migrations/migration_test.go @@ -7,7 +7,7 @@ import ( "path/filepath" "testing" - _ "github.com/mattn/go-sqlite3" + _ "modernc.org/sqlite" ) func setupTestDB(t *testing.T) (*sql.DB, func()) { @@ -19,7 +19,7 @@ func setupTestDB(t *testing.T) (*sql.DB, func()) { } dbPath := filepath.Join(tmpDir, "test.db") - db, err := sql.Open("sqlite3", dbPath) + db, err := sql.Open("sqlite", dbPath) if err != nil { _ = os.RemoveAll(tmpDir) t.Fatalf("Failed to open database: %v", err) diff --git a/internal/infra/storage/sqlite.go b/internal/infra/storage/sqlite.go index 67f6ee3b..90e8c002 100644 --- a/internal/infra/storage/sqlite.go +++ b/internal/infra/storage/sqlite.go @@ -11,7 +11,7 @@ import ( domain "github.com/inference-gateway/cli/internal/domain" migrations "github.com/inference-gateway/cli/internal/infra/storage/migrations" - _ "github.com/mattn/go-sqlite3" + _ "modernc.org/sqlite" ) // SQLiteStorage implements ConversationStorage using SQLite @@ -36,7 +36,7 @@ func NewSQLiteStorage(config SQLiteConfig) (*SQLiteStorage, error) { return nil, fmt.Errorf("failed to create directory %s: %w", dir, err) } - db, err := sql.Open("sqlite3", config.Path+"?_journal_mode=WAL&_synchronous=NORMAL&_cache_size=1000&_timeout=30000&_busy_timeout=30000") + db, err := sql.Open("sqlite", config.Path+"?_journal_mode=WAL&_synchronous=NORMAL&_cache_size=1000&_timeout=30000&_busy_timeout=30000") if err != nil { return nil, fmt.Errorf("failed to open SQLite database: %w", err) } @@ -77,16 +77,11 @@ func (s *SQLiteStorage) runMigrations() error { return nil } -// verifySQLiteAvailable checks if SQLite is available on the system +// verifySQLiteAvailable checks if SQLite is available (using pure Go implementation) func verifySQLiteAvailable() error { - db, err := sql.Open("sqlite3", ":memory:") + db, err := sql.Open("sqlite", ":memory:") if err != nil { - return fmt.Errorf("SQLite driver not available: %w\n\n"+ - "System SQLite library is required. Install:\n"+ - " Ubuntu/Debian: sudo apt-get install libsqlite3-0\n"+ - " RHEL/CentOS: sudo yum install sqlite\n"+ - " macOS: brew install sqlite3 (or use system SQLite)\n"+ - " Windows: Download from https://www.sqlite.org/download.html", err) + return fmt.Errorf("SQLite driver not available (pure Go implementation): %w", err) } defer func() { _ = db.Close() }() From 97d5050d3294f23455ca4aa1ccb9fe864a482d96 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 1 Jan 2026 13:55:40 +0000 Subject: [PATCH 06/17] chore(release): 0.95.0-rc.2 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [0.95.0-rc.2](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.1...v0.95.0-rc.2) (2026-01-01) ### โ™ป๏ธ Code Refactoring * Simplify the sqlite deps ([70c0df4](https://github.com/inference-gateway/cli/commit/70c0df46312136754eb0c21a6ef7e43953445edb)) ### ๐Ÿงน Maintenance * **deps:** Bump claude-code version ([09c8610](https://github.com/inference-gateway/cli/commit/09c861065f3677435dfce0055c7ea1b1304c7914)) * **deps:** Bump docker compose cli version ([d28000c](https://github.com/inference-gateway/cli/commit/d28000c9d994441406446b8e517c4c6190cdaabb)) * Test the CLI ([2936b04](https://github.com/inference-gateway/cli/commit/2936b040cad9c5d211b10f1506deceae965d3945)) --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 611fb134..e2071d0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.95.0-rc.2](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.1...v0.95.0-rc.2) (2026-01-01) + +### โ™ป๏ธ Code Refactoring + +* Simplify the sqlite deps ([70c0df4](https://github.com/inference-gateway/cli/commit/70c0df46312136754eb0c21a6ef7e43953445edb)) + +### ๐Ÿงน Maintenance + +* **deps:** Bump claude-code version ([09c8610](https://github.com/inference-gateway/cli/commit/09c861065f3677435dfce0055c7ea1b1304c7914)) +* **deps:** Bump docker compose cli version ([d28000c](https://github.com/inference-gateway/cli/commit/d28000c9d994441406446b8e517c4c6190cdaabb)) +* Test the CLI ([2936b04](https://github.com/inference-gateway/cli/commit/2936b040cad9c5d211b10f1506deceae965d3945)) + ## [0.95.0-rc.1](https://github.com/inference-gateway/cli/compare/v0.94.0...v0.95.0-rc.1) (2025-12-31) ### ๐Ÿš€ Features From e2be346c91526f56abaa0c6a0bf777ee80ff3de4 Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 16:14:32 +0200 Subject: [PATCH 07/17] chore(deps): Bump CLI version Signed-off-by: Eden Reich --- examples/web-terminal/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/web-terminal/docker-compose.yml b/examples/web-terminal/docker-compose.yml index 4ff516ad..7059d57f 100644 --- a/examples/web-terminal/docker-compose.yml +++ b/examples/web-terminal/docker-compose.yml @@ -20,7 +20,7 @@ services: - ./.ssh-keys:/keys web-terminal: - image: ghcr.io/inference-gateway/cli:0.95.0-rc.1 + image: ghcr.io/inference-gateway/cli:0.95.0-rc.2 command: - chat - --web @@ -66,7 +66,7 @@ services: - sh - -c - | - apt-get update && apt-get install -y openssh-server sudo curl musl libsqlite3-0 + apt-get update && apt-get install -y openssh-server sudo curl musl mkdir -p /run/sshd useradd -m -s /bin/bash developer echo 'developer ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers From 4ba60193e94a1a32a240fb908e8f9a87a1a3f14d Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 16:47:09 +0200 Subject: [PATCH 08/17] fix: Connect to remote gateway instance when installing on remote instance Signed-off-by: Eden Reich --- examples/web-terminal/docker-compose.yml | 7 ++-- internal/web/pty_manager.go | 10 +++--- internal/web/remote_installer.go | 44 +++++++++++++----------- 3 files changed, 34 insertions(+), 27 deletions(-) diff --git a/examples/web-terminal/docker-compose.yml b/examples/web-terminal/docker-compose.yml index 7059d57f..d5625d75 100644 --- a/examples/web-terminal/docker-compose.yml +++ b/examples/web-terminal/docker-compose.yml @@ -20,7 +20,7 @@ services: - ./.ssh-keys:/keys web-terminal: - image: ghcr.io/inference-gateway/cli:0.95.0-rc.2 + image: ghcr.io/inference-gateway/cli:0.95.0-rc.3 command: - chat - --web @@ -30,6 +30,7 @@ services: INFER_WEB_HOST: 0.0.0.0 INFER_WEB_PORT: 3000 INFER_GATEWAY_URL: http://inference-gateway:8080 + INFER_WEB_SSH_INSTALL_VERSION: 0.95.0-rc.3 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./.ssh-keys:/home/infer/.ssh:ro @@ -66,7 +67,7 @@ services: - sh - -c - | - apt-get update && apt-get install -y openssh-server sudo curl musl + apt-get update && apt-get install -y openssh-server sudo curl mkdir -p /run/sshd useradd -m -s /bin/bash developer echo 'developer ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers @@ -86,6 +87,8 @@ services: depends_on: ssh-keygen: condition: service_completed_successfully + inference-gateway: + condition: service_started networks: - infer-network restart: unless-stopped diff --git a/internal/web/pty_manager.go b/internal/web/pty_manager.go index 69abc9c3..10b4f50b 100644 --- a/internal/web/pty_manager.go +++ b/internal/web/pty_manager.go @@ -32,7 +32,7 @@ type Session = SessionHandler // CreateSessionHandler creates either a local PTY session or remote SSH session func CreateSessionHandler(webCfg *config.WebConfig, serverCfg *config.SSHServerConfig, cfg *config.Config, v *viper.Viper) (SessionHandler, error) { if serverCfg != nil { - return createRemoteSSHSession(webCfg, serverCfg) + return createRemoteSSHSession(webCfg, serverCfg, cfg.Gateway.URL) } logger.Info("Creating local PTY session") @@ -40,7 +40,7 @@ func CreateSessionHandler(webCfg *config.WebConfig, serverCfg *config.SSHServerC } // createRemoteSSHSession creates a remote SSH session with optional auto-install -func createRemoteSSHSession(webCfg *config.WebConfig, serverCfg *config.SSHServerConfig) (SessionHandler, error) { +func createRemoteSSHSession(webCfg *config.WebConfig, serverCfg *config.SSHServerConfig, gatewayURL string) (SessionHandler, error) { logger.Info("Creating remote SSH session", "server", serverCfg.Name) client, err := NewSSHClient(&webCfg.SSH, serverCfg) @@ -52,7 +52,7 @@ func createRemoteSSHSession(webCfg *config.WebConfig, serverCfg *config.SSHServe return nil, fmt.Errorf("failed to connect to SSH server: %w", err) } - if err := ensureRemoteBinary(client, webCfg, serverCfg); err != nil { + if err := ensureRemoteBinary(client, webCfg, serverCfg, gatewayURL); err != nil { if closeErr := client.Close(); closeErr != nil { logger.Warn("Failed to close SSH client after install error", "error", closeErr) } @@ -71,7 +71,7 @@ func createRemoteSSHSession(webCfg *config.WebConfig, serverCfg *config.SSHServe } // ensureRemoteBinary installs infer binary on remote server if auto-install is enabled -func ensureRemoteBinary(client *SSHClient, webCfg *config.WebConfig, serverCfg *config.SSHServerConfig) error { +func ensureRemoteBinary(client *SSHClient, webCfg *config.WebConfig, serverCfg *config.SSHServerConfig, gatewayURL string) error { autoInstall := webCfg.SSH.AutoInstall if serverCfg.AutoInstall != nil { autoInstall = *serverCfg.AutoInstall @@ -81,7 +81,7 @@ func ensureRemoteBinary(client *SSHClient, webCfg *config.WebConfig, serverCfg * return nil } - installer := NewRemoteInstaller(client, &webCfg.SSH, serverCfg) + installer := NewRemoteInstaller(client, &webCfg.SSH, serverCfg, gatewayURL) if err := installer.EnsureBinary(); err != nil { return fmt.Errorf("failed to ensure infer binary: %w", err) } diff --git a/internal/web/remote_installer.go b/internal/web/remote_installer.go index b1bd0c43..9c173c19 100644 --- a/internal/web/remote_installer.go +++ b/internal/web/remote_installer.go @@ -14,23 +14,24 @@ import ( // RemoteInstaller handles auto-installation of infer binary on remote servers type RemoteInstaller struct { - sshClient *SSHClient - cfg *config.WebSSHConfig - server *config.SSHServerConfig + sshClient *SSHClient + cfg *config.WebSSHConfig + server *config.SSHServerConfig + gatewayURL string } // NewRemoteInstaller creates a new remote installer -func NewRemoteInstaller(client *SSHClient, cfg *config.WebSSHConfig, server *config.SSHServerConfig) *RemoteInstaller { +func NewRemoteInstaller(client *SSHClient, cfg *config.WebSSHConfig, server *config.SSHServerConfig, gatewayURL string) *RemoteInstaller { return &RemoteInstaller{ - sshClient: client, - cfg: cfg, - server: server, + sshClient: client, + cfg: cfg, + server: server, + gatewayURL: gatewayURL, } } // EnsureBinary checks if infer exists on remote server, installs if missing func (i *RemoteInstaller) EnsureBinary() error { - // Check if auto-install is enabled autoInstall := i.cfg.AutoInstall if i.server.AutoInstall != nil { autoInstall = *i.server.AutoInstall @@ -43,7 +44,6 @@ func (i *RemoteInstaller) EnsureBinary() error { logger.Info("Checking if infer binary exists on remote server", "server", i.server.Name) - // Check if binary exists exists, err := i.checkBinaryExists() if err != nil { return fmt.Errorf("failed to check if binary exists: %w", err) @@ -56,7 +56,6 @@ func (i *RemoteInstaller) EnsureBinary() error { logger.Info("Infer binary not found, installing...", "server", i.server.Name) - // Install binary if err := i.installBinary(); err != nil { return fmt.Errorf("failed to install binary: %w", err) } @@ -78,24 +77,20 @@ func (i *RemoteInstaller) checkBinaryExists() (bool, error) { } defer func() { _ = session.Close() }() - // Try to run: command -v cmd := fmt.Sprintf("command -v %s", commandPath) output, err := session.CombinedOutput(cmd) if err != nil { - // Command failed, binary doesn't exist logger.Info("Binary not found", "command", commandPath, "output", string(output)) return false, nil } - // Binary exists logger.Info("Binary found", "path", strings.TrimSpace(string(output))) return true, nil } // installBinary downloads and installs infer binary on remote server using the official install script func (i *RemoteInstaller) installBinary() error { - // Get version to install version := i.cfg.InstallVersion var err error if version == "latest" || version == "" { @@ -107,13 +102,11 @@ func (i *RemoteInstaller) installBinary() error { logger.Info("Installing version using install script", "version", version, "server", i.server.Name) - // Determine install directory installDir := "$HOME/bin" if i.server.InstallPath != "" { installDir = strings.TrimSuffix(i.server.InstallPath, "/infer") } - // Use the official install script which handles OS/arch detection and downloads the right binary installScript := fmt.Sprintf(` set -e mkdir -p %s @@ -128,7 +121,6 @@ fi logger.Info("Running installation script", "server", i.server.Name) - // Execute installation script session, err := i.sshClient.NewSession() if err != nil { return fmt.Errorf("failed to create SSH session: %w", err) @@ -142,7 +134,6 @@ fi logger.Info("Installation output", "output", string(output)) - // Verify installation session2, err := i.sshClient.NewSession() if err != nil { return fmt.Errorf("failed to create SSH session for verification: %w", err) @@ -157,6 +148,21 @@ fi logger.Info("Installation verified", "version_output", string(verifyOutput)) + session3, err := i.sshClient.NewSession() + if err != nil { + return fmt.Errorf("failed to create SSH session for initialization: %w", err) + } + defer func() { _ = session3.Close() }() + + initCmd := fmt.Sprintf("INFER_GATEWAY_URL=%s INFER_GATEWAY_MODE=remote %s/infer init", + i.gatewayURL, installDir) + initOutput, err := session3.CombinedOutput(initCmd) + if err != nil { + logger.Warn("Failed to initialize infer config, may need manual setup", "error", err, "output", string(initOutput)) + } else { + logger.Info("Infer configuration initialized", "output", string(initOutput)) + } + return nil } @@ -175,7 +181,6 @@ func (i *RemoteInstaller) getLatestVersion() (string, error) { return "", fmt.Errorf("failed to create request: %w", err) } - // Set User-Agent to avoid GitHub API rate limiting req.Header.Set("User-Agent", "inference-gateway-cli") resp, err := client.Do(req) @@ -197,7 +202,6 @@ func (i *RemoteInstaller) getLatestVersion() (string, error) { return "", fmt.Errorf("failed to parse release info: %w", err) } - // Remove 'v' prefix if present version := strings.TrimPrefix(release.TagName, "v") logger.Info("Latest version detected", "version", version) From af6352ffb176ed0c9c869df3c58a2f18593f5506 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 1 Jan 2026 14:48:05 +0000 Subject: [PATCH 09/17] chore(release): 0.95.0-rc.3 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [0.95.0-rc.3](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.2...v0.95.0-rc.3) (2026-01-01) ### ๐Ÿ› Bug Fixes * Connect to remote gateway instance when installing on remote instance ([4ba6019](https://github.com/inference-gateway/cli/commit/4ba60193e94a1a32a240fb908e8f9a87a1a3f14d)) ### ๐Ÿงน Maintenance * **deps:** Bump CLI version ([e2be346](https://github.com/inference-gateway/cli/commit/e2be346c91526f56abaa0c6a0bf777ee80ff3de4)) --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2071d0d..aaad9fc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.95.0-rc.3](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.2...v0.95.0-rc.3) (2026-01-01) + +### ๐Ÿ› Bug Fixes + +* Connect to remote gateway instance when installing on remote instance ([4ba6019](https://github.com/inference-gateway/cli/commit/4ba60193e94a1a32a240fb908e8f9a87a1a3f14d)) + +### ๐Ÿงน Maintenance + +* **deps:** Bump CLI version ([e2be346](https://github.com/inference-gateway/cli/commit/e2be346c91526f56abaa0c6a0bf777ee80ff3de4)) + ## [0.95.0-rc.2](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.1...v0.95.0-rc.2) (2026-01-01) ### โ™ป๏ธ Code Refactoring From c382662ca77d183e1f8c1c131a5eb0215cece2d8 Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 17:43:52 +0200 Subject: [PATCH 10/17] fix: Use remote instance Signed-off-by: Eden Reich --- internal/web/pty_manager.go | 2 +- internal/web/remote_installer.go | 3 +-- internal/web/ssh_session.go | 35 +++++++++++++++++--------------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/internal/web/pty_manager.go b/internal/web/pty_manager.go index 10b4f50b..8e5144f2 100644 --- a/internal/web/pty_manager.go +++ b/internal/web/pty_manager.go @@ -59,7 +59,7 @@ func createRemoteSSHSession(webCfg *config.WebConfig, serverCfg *config.SSHServe return nil, err } - session, err := NewSSHSession(client, serverCfg) + session, err := NewSSHSession(client, serverCfg, gatewayURL) if err != nil { if closeErr := client.Close(); closeErr != nil { logger.Warn("Failed to close SSH client after session error", "error", closeErr) diff --git a/internal/web/remote_installer.go b/internal/web/remote_installer.go index 9c173c19..307f5145 100644 --- a/internal/web/remote_installer.go +++ b/internal/web/remote_installer.go @@ -154,8 +154,7 @@ fi } defer func() { _ = session3.Close() }() - initCmd := fmt.Sprintf("INFER_GATEWAY_URL=%s INFER_GATEWAY_MODE=remote %s/infer init", - i.gatewayURL, installDir) + initCmd := fmt.Sprintf("%s/infer init --userspace", installDir) initOutput, err := session3.CombinedOutput(initCmd) if err != nil { logger.Warn("Failed to initialize infer config, may need manual setup", "error", err, "output", string(initOutput)) diff --git a/internal/web/ssh_session.go b/internal/web/ssh_session.go index af10af40..257042b7 100644 --- a/internal/web/ssh_session.go +++ b/internal/web/ssh_session.go @@ -17,20 +17,21 @@ import ( // SSHSession wraps an SSH session with PTY for remote terminal access type SSHSession struct { - sshClient *SSHClient - server *config.SSHServerConfig - session *ssh.Session - stdin io.WriteCloser - stdout io.Reader - stderr io.Reader - mu sync.Mutex - running bool - ctx context.Context - cancel context.CancelFunc + sshClient *SSHClient + server *config.SSHServerConfig + gatewayURL string + session *ssh.Session + stdin io.WriteCloser + stdout io.Reader + stderr io.Reader + mu sync.Mutex + running bool + ctx context.Context + cancel context.CancelFunc } // NewSSHSession creates a new SSH session with PTY -func NewSSHSession(client *SSHClient, server *config.SSHServerConfig) (*SSHSession, error) { +func NewSSHSession(client *SSHClient, server *config.SSHServerConfig, gatewayURL string) (*SSHSession, error) { if client == nil { return nil, fmt.Errorf("SSH client is required") } @@ -41,10 +42,11 @@ func NewSSHSession(client *SSHClient, server *config.SSHServerConfig) (*SSHSessi ctx, cancel := context.WithCancel(context.Background()) return &SSHSession{ - sshClient: client, - server: server, - ctx: ctx, - cancel: cancel, + sshClient: client, + server: server, + gatewayURL: gatewayURL, + ctx: ctx, + cancel: cancel, }, nil } @@ -109,7 +111,8 @@ func (s *SSHSession) Start(cols, rows int) error { } cmdArgs := append([]string{"chat"}, s.server.CommandArgs...) - cmd := fmt.Sprintf("%s %s", commandPath, strings.Join(cmdArgs, " ")) + cmd := fmt.Sprintf("INFER_GATEWAY_URL=%s INFER_GATEWAY_MODE=remote %s %s", + s.gatewayURL, commandPath, strings.Join(cmdArgs, " ")) logger.Info("Starting remote command", "command", cmd, From 8041c6899f27b75ed0ef15198e4b183f0b578212 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 1 Jan 2026 15:44:50 +0000 Subject: [PATCH 11/17] chore(release): 0.95.0-rc.4 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [0.95.0-rc.4](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.3...v0.95.0-rc.4) (2026-01-01) ### ๐Ÿ› Bug Fixes * Use remote instance ([c382662](https://github.com/inference-gateway/cli/commit/c382662ca77d183e1f8c1c131a5eb0215cece2d8)) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aaad9fc9..4b938471 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.95.0-rc.4](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.3...v0.95.0-rc.4) (2026-01-01) + +### ๐Ÿ› Bug Fixes + +* Use remote instance ([c382662](https://github.com/inference-gateway/cli/commit/c382662ca77d183e1f8c1c131a5eb0215cece2d8)) + ## [0.95.0-rc.3](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.2...v0.95.0-rc.3) (2026-01-01) ### ๐Ÿ› Bug Fixes From 8788cd1fc50292128577ba4e4dda09cf79d11ab7 Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 17:46:33 +0200 Subject: [PATCH 12/17] chore: Bump cli version Signed-off-by: Eden Reich --- examples/web-terminal/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/web-terminal/docker-compose.yml b/examples/web-terminal/docker-compose.yml index d5625d75..5eaf8abd 100644 --- a/examples/web-terminal/docker-compose.yml +++ b/examples/web-terminal/docker-compose.yml @@ -20,7 +20,7 @@ services: - ./.ssh-keys:/keys web-terminal: - image: ghcr.io/inference-gateway/cli:0.95.0-rc.3 + image: ghcr.io/inference-gateway/cli:0.95.0-rc.4 command: - chat - --web @@ -30,7 +30,7 @@ services: INFER_WEB_HOST: 0.0.0.0 INFER_WEB_PORT: 3000 INFER_GATEWAY_URL: http://inference-gateway:8080 - INFER_WEB_SSH_INSTALL_VERSION: 0.95.0-rc.3 + INFER_WEB_SSH_INSTALL_VERSION: 0.95.0-rc.4 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./.ssh-keys:/home/infer/.ssh:ro From 6f4751cba152f045b657f7060281edb601eb2604 Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 18:55:27 +0200 Subject: [PATCH 13/17] feat: Add remote system administration support --- .infer/config.yaml | 13 +++++++++++++ config/config.go | 9 +++++++++ internal/web/remote_installer.go | 22 ++++++++++++++++++++++ 3 files changed, 44 insertions(+) diff --git a/.infer/config.yaml b/.infer/config.yaml index 3f39fa63..d24ab414 100644 --- a/.infer/config.yaml +++ b/.infer/config.yaml @@ -249,6 +249,12 @@ agent: - If accepted, YOU will execute this plan. Make it specific and actionable! - Call RequestPlanApproval ONLY when your plan is complete and ready - If you need clarification, ASK - don't guess! + system_prompt_remote: |- + Remote system administration agent. You are operating on a remote machine via SSH. + + FOCUS: System operations, service management, monitoring, diagnostics, and infrastructure tasks. + + CONTEXT: This is a shared system environment, not a project workspace. Users may be managing servers, containers, services, or general infrastructure. system_reminders: enabled: true interval: 4 @@ -625,3 +631,10 @@ web: port: 3000 host: localhost session_inactivity_mins: 5 + ssh: + enabled: false + use_ssh_config: true + known_hosts_path: ~/.ssh/known_hosts + auto_install: true + install_version: latest + servers: [] diff --git a/config/config.go b/config/config.go index db7be42d..512978b9 100644 --- a/config/config.go +++ b/config/config.go @@ -311,6 +311,7 @@ type AgentConfig struct { Model string `yaml:"model" mapstructure:"model"` SystemPrompt string `yaml:"system_prompt" mapstructure:"system_prompt"` SystemPromptPlan string `yaml:"system_prompt_plan" mapstructure:"system_prompt_plan"` + SystemPromptRemote string `yaml:"system_prompt_remote" mapstructure:"system_prompt_remote"` SystemReminders SystemRemindersConfig `yaml:"system_reminders" mapstructure:"system_reminders"` VerboseTools bool `yaml:"verbose_tools" mapstructure:"verbose_tools"` MaxTurns int `yaml:"max_turns" mapstructure:"max_turns"` @@ -806,6 +807,11 @@ EXAMPLE: Now I'll create a pull request Github(...) `, + SystemPromptRemote: `Remote system administration agent. You are operating on a remote machine via SSH. + +FOCUS: System operations, service management, monitoring, diagnostics, and infrastructure tasks. + +CONTEXT: This is a shared system environment, not a project workspace. Users may be managing servers, containers, services, or general infrastructure.`, SystemReminders: SystemRemindersConfig{ Enabled: true, Interval: 4, @@ -1071,6 +1077,9 @@ func (c *Config) GetTimeout() int { } func (c *Config) GetSystemPrompt() string { + if os.Getenv("INFER_REMOTE_MANAGED") == "true" && c.Agent.SystemPromptRemote != "" { + return c.Agent.SystemPromptRemote + } return c.Agent.SystemPrompt } diff --git a/internal/web/remote_installer.go b/internal/web/remote_installer.go index 307f5145..1e5919ef 100644 --- a/internal/web/remote_installer.go +++ b/internal/web/remote_installer.go @@ -162,6 +162,28 @@ fi logger.Info("Infer configuration initialized", "output", string(initOutput)) } + session4, err := i.sshClient.NewSession() + if err != nil { + return fmt.Errorf("failed to create SSH session for env setup: %w", err) + } + defer func() { _ = session4.Close() }() + + envSetupCmd := fmt.Sprintf(` +if ! grep -q "INFER_REMOTE_MANAGED" ~/.bashrc 2>/dev/null; then + echo "" >> ~/.bashrc + echo "# Infer CLI - Remote managed instance" >> ~/.bashrc + echo "export INFER_REMOTE_MANAGED=true" >> ~/.bashrc + echo "export INFER_GATEWAY_URL=%s" >> ~/.bashrc + echo "export INFER_GATEWAY_MODE=remote" >> ~/.bashrc +fi`, i.gatewayURL) + + envOutput, err := session4.CombinedOutput(envSetupCmd) + if err != nil { + logger.Warn("Failed to setup environment variables in profile", "error", err, "output", string(envOutput)) + } else { + logger.Info("Environment variables configured in user profile") + } + return nil } From 568ed5db21532f99b7df774316e0b7b25782a915 Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 18:58:49 +0200 Subject: [PATCH 14/17] chore: Add label to the tab to indicate what server is the session connected to Signed-off-by: Eden Reich --- internal/web/static/app.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/web/static/app.js b/internal/web/static/app.js index 94be0f68..e5b80b1b 100644 --- a/internal/web/static/app.js +++ b/internal/web/static/app.js @@ -108,10 +108,13 @@ class TerminalTab { } createUI() { + const server = this.manager.servers.find(s => s.id === this.serverID); + const serverName = server ? server.name : 'Local'; + this.tabElement = document.createElement('div'); this.tabElement.className = 'tab'; this.tabElement.innerHTML = ` - Terminal ${this.id} + Terminal ${this.id} (${serverName}) ร— `; From a4b4946e88f80103c3de7288e1c018387d3c137f Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Thu, 1 Jan 2026 16:59:57 +0000 Subject: [PATCH 15/17] chore(release): 0.95.0-rc.5 [skip ci] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [0.95.0-rc.5](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.4...v0.95.0-rc.5) (2026-01-01) ### ๐Ÿš€ Features * Add remote system administration support ([6f4751c](https://github.com/inference-gateway/cli/commit/6f4751cba152f045b657f7060281edb601eb2604)) ### ๐Ÿงน Maintenance * Add label to the tab to indicate what server is the session connected to ([568ed5d](https://github.com/inference-gateway/cli/commit/568ed5db21532f99b7df774316e0b7b25782a915)) * Bump cli version ([8788cd1](https://github.com/inference-gateway/cli/commit/8788cd1fc50292128577ba4e4dda09cf79d11ab7)) --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b938471..bc5db5dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.95.0-rc.5](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.4...v0.95.0-rc.5) (2026-01-01) + +### ๐Ÿš€ Features + +* Add remote system administration support ([6f4751c](https://github.com/inference-gateway/cli/commit/6f4751cba152f045b657f7060281edb601eb2604)) + +### ๐Ÿงน Maintenance + +* Add label to the tab to indicate what server is the session connected to ([568ed5d](https://github.com/inference-gateway/cli/commit/568ed5db21532f99b7df774316e0b7b25782a915)) +* Bump cli version ([8788cd1](https://github.com/inference-gateway/cli/commit/8788cd1fc50292128577ba4e4dda09cf79d11ab7)) + ## [0.95.0-rc.4](https://github.com/inference-gateway/cli/compare/v0.95.0-rc.3...v0.95.0-rc.4) (2026-01-01) ### ๐Ÿ› Bug Fixes From 4cc3bcc51f3f3ed1c30158601f14bfc3497b1958 Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 19:38:05 +0200 Subject: [PATCH 16/17] chore: Bump cli version Signed-off-by: Eden Reich --- examples/web-terminal/docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/web-terminal/docker-compose.yml b/examples/web-terminal/docker-compose.yml index 5eaf8abd..095595f1 100644 --- a/examples/web-terminal/docker-compose.yml +++ b/examples/web-terminal/docker-compose.yml @@ -20,7 +20,7 @@ services: - ./.ssh-keys:/keys web-terminal: - image: ghcr.io/inference-gateway/cli:0.95.0-rc.4 + image: ghcr.io/inference-gateway/cli:0.95.0-rc.5 command: - chat - --web @@ -30,7 +30,7 @@ services: INFER_WEB_HOST: 0.0.0.0 INFER_WEB_PORT: 3000 INFER_GATEWAY_URL: http://inference-gateway:8080 - INFER_WEB_SSH_INSTALL_VERSION: 0.95.0-rc.4 + INFER_WEB_SSH_INSTALL_VERSION: 0.95.0-rc.5 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./.ssh-keys:/home/infer/.ssh:ro From b169af6e4f9d42f0e29bc674705f32f57464d53a Mon Sep 17 00:00:00 2001 From: Eden Reich Date: Thu, 1 Jan 2026 20:36:36 +0200 Subject: [PATCH 17/17] refactor(example): Add another remote instance from type alpine Also remove default local session and add instructions how to use the web interface. Signed-off-by: Eden Reich --- examples/web-terminal/README.md | 44 ++++++++++---- examples/web-terminal/config.yaml | 22 +++++-- examples/web-terminal/docker-compose.yml | 43 +++++++++++++- internal/web/static/app.js | 23 ++++--- internal/web/templates/index.html | 76 +++++++++++++++++++++++- 5 files changed, 181 insertions(+), 27 deletions(-) diff --git a/examples/web-terminal/README.md b/examples/web-terminal/README.md index 773582d5..8cb53cf1 100644 --- a/examples/web-terminal/README.md +++ b/examples/web-terminal/README.md @@ -23,10 +23,11 @@ docker compose up -d Open -You'll see a dropdown with two options: +You'll see a dropdown with three options: - **Local** - Runs `infer chat` locally in the container -- **Remote Ubuntu Server** - Connects via SSH to demonstrate auto-install +- **Remote Ubuntu Server** - Ubuntu 24.04 server with SSH (demonstrates auto-install) +- **Remote Alpine Server** - Alpine 3.23.0 server with SSH (demonstrates lightweight distribution) ## What's Running @@ -36,6 +37,7 @@ When you run `docker compose up`, it starts: 2. **web-terminal** - Web UI server on port 3000 3. **inference-gateway** - Gateway for local mode 4. **remote-ubuntu** - Ubuntu 24.04 server with SSH (for demo) +5. **remote-alpine** - Alpine 3.23.0 server with SSH (for demo) All services are connected on the `infer-network` Docker network. @@ -50,15 +52,17 @@ All services are connected on the `infer-network` Docker network. ### Remote SSH Mode -1. Select "Remote Ubuntu Server" from the dropdown +1. Select "Remote Ubuntu Server" or "Remote Alpine Server" from the dropdown 2. Click "+ New Tab" -3. Web terminal connects to remote-ubuntu via SSH +3. Web terminal connects to the selected remote server via SSH 4. Authenticates using automatically generated SSH keys 5. **Auto-installer runs** (first connection only): - Detects `infer` is not installed - Identifies OS and architecture (linux/arm64 or linux/amd64) - Downloads **portable binary** from GitHub releases (CGO-free, no SQLite dependencies) - Installs to `/home/developer/bin/infer` + - Runs `infer init --userspace` to initialize configuration + - Configures environment variables to connect to the shared gateway - Starts `infer chat` on the remote server 6. Terminal shows remote session output @@ -79,18 +83,33 @@ web: install_version: "latest" servers: - - name: "Local" - id: "local" - description: "Run infer chat locally in this container" - - name: "Remote Ubuntu Server" id: "remote-ubuntu" remote_host: "remote-ubuntu" remote_user: "developer" remote_port: 22 command_path: "/home/developer/bin/infer" + install_path: "/home/developer/bin/infer" auto_install: true description: "Ubuntu 24.04 server (demonstrates auto-install via SSH)" + tags: + - remote + - demo + - ubuntu + + - name: "Remote Alpine Server" + id: "remote-alpine" + remote_host: "remote-alpine" + remote_user: "developer" + remote_port: 22 + command_path: "/home/developer/bin/infer" + install_path: "/home/developer/bin/infer" + auto_install: true + description: "Alpine 3.23.0 server (demonstrates lightweight Linux distribution)" + tags: + - remote + - demo + - alpine ``` ### Adding Your Own Remote Servers @@ -189,7 +208,7 @@ Check logs: ```bash docker compose logs web-terminal -docker compose logs remote-ubuntu +docker compose logs remote-ubuntu # or remote-alpine ``` Common issues: @@ -204,10 +223,10 @@ Verify: ```bash # Check remote server logs -docker compose logs remote-ubuntu +docker compose logs remote-ubuntu # or remote-alpine # Test manual SSH connection -docker exec -it infer-web-terminal ssh developer@remote-ubuntu +docker exec -it infer-web-terminal ssh developer@remote-ubuntu # or developer@remote-alpine ``` Common issues: @@ -241,7 +260,8 @@ Common issues: ## Next Steps -- Try both Local and Remote modes in the dropdown +- Try all three modes in the dropdown (Local, Ubuntu, Alpine) - Watch the auto-install process on first remote connection +- Compare behavior across different Linux distributions (Ubuntu vs Alpine) - Add your own remote servers to `config.yaml` - Explore multi-server tab management in the UI diff --git a/examples/web-terminal/config.yaml b/examples/web-terminal/config.yaml index 60fd38ff..a9f76381 100644 --- a/examples/web-terminal/config.yaml +++ b/examples/web-terminal/config.yaml @@ -4,7 +4,6 @@ web: port: 3000 session_inactivity_mins: 30 - # Global SSH settings ssh: enabled: true use_ssh_config: true @@ -12,8 +11,6 @@ web: auto_install: true install_version: "latest" - # List of available servers (shown in dropdown) - # Note: "Local" is always available by default, no need to define it here servers: - name: "Remote Ubuntu Server" id: "remote-ubuntu" @@ -24,4 +21,21 @@ web: install_path: "/home/developer/bin/infer" auto_install: true description: "Ubuntu 24.04 server (demonstrates auto-install via SSH)" - tags: ["remote", "demo", "ubuntu"] + tags: + - remote + - demo + - ubuntu + + - name: "Remote Alpine Server" + id: "remote-alpine" + remote_host: "remote-alpine" + remote_user: "developer" + remote_port: 22 + command_path: "/home/developer/bin/infer" + install_path: "/home/developer/bin/infer" + auto_install: true + description: "Alpine 3.23.0 server (demonstrates lightweight Linux distribution)" + tags: + - remote + - demo + - alpine diff --git a/examples/web-terminal/docker-compose.yml b/examples/web-terminal/docker-compose.yml index 095595f1..d91585b3 100644 --- a/examples/web-terminal/docker-compose.yml +++ b/examples/web-terminal/docker-compose.yml @@ -20,7 +20,7 @@ services: - ./.ssh-keys:/keys web-terminal: - image: ghcr.io/inference-gateway/cli:0.95.0-rc.5 + image: ghcr.io/inference-gateway/cli:latest command: - chat - --web @@ -30,7 +30,6 @@ services: INFER_WEB_HOST: 0.0.0.0 INFER_WEB_PORT: 3000 INFER_GATEWAY_URL: http://inference-gateway:8080 - INFER_WEB_SSH_INSTALL_VERSION: 0.95.0-rc.5 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./.ssh-keys:/home/infer/.ssh:ro @@ -93,6 +92,46 @@ services: - infer-network restart: unless-stopped + remote-alpine: + image: alpine:3.23.0 + command: + - sh + - -c + - | + apk add --no-cache openssh-server sudo curl bash + ssh-keygen -A + + sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config + sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config + sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin no/' /etc/ssh/sshd_config + + adduser -D -s /bin/bash developer + passwd -u developer + echo 'developer ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + mkdir -p /home/developer/.ssh + + if [ -f /ssh-keys/id_rsa.pub ]; then + cat /ssh-keys/id_rsa.pub > /home/developer/.ssh/authorized_keys + chown -R developer:developer /home/developer/.ssh + chmod 700 /home/developer/.ssh + chmod 600 /home/developer/.ssh/authorized_keys + echo "โœ“ SSH public key installed for developer user" + else + echo "โœ— No SSH public key found in /ssh-keys/" + fi + + /usr/sbin/sshd -D -e + volumes: + - ./.ssh-keys:/ssh-keys:ro + depends_on: + ssh-keygen: + condition: service_completed_successfully + inference-gateway: + condition: service_started + networks: + - infer-network + restart: unless-stopped + networks: infer-network: driver: bridge diff --git a/internal/web/static/app.js b/internal/web/static/app.js index e5b80b1b..70e988ab 100644 --- a/internal/web/static/app.js +++ b/internal/web/static/app.js @@ -7,6 +7,7 @@ class TerminalManager { this.terminalArea = document.getElementById('terminal-area'); this.newTabBtn = document.getElementById('new-tab-btn'); this.serverSelector = document.getElementById('server-selector'); + this.welcomeMessage = document.getElementById('welcome-message'); this.servers = []; this.currentServerID = 'local'; @@ -23,7 +24,6 @@ class TerminalManager { const data = await response.json(); this.servers = data.servers; - // Populate dropdown this.serverSelector.innerHTML = ''; this.servers.forEach(server => { const option = document.createElement('option'); @@ -35,16 +35,10 @@ class TerminalManager { this.serverSelector.appendChild(option); }); - // Set default selection this.serverSelector.value = 'local'; this.currentServerID = 'local'; - - // Create first tab after servers are loaded - this.createTab(); } catch (error) { console.error('Failed to load servers:', error); - // Fallback: create tab anyway with local mode - this.createTab(); } } @@ -54,6 +48,19 @@ class TerminalManager { const tab = new TerminalTab(tabId, this, serverID); this.tabs.set(tabId, tab); this.switchTab(tabId); + this.hideWelcomeMessage(); + } + + hideWelcomeMessage() { + if (this.welcomeMessage) { + this.welcomeMessage.classList.add('hidden'); + } + } + + showWelcomeMessage() { + if (this.welcomeMessage && this.tabs.size === 0) { + this.welcomeMessage.classList.remove('hidden'); + } } switchTab(tabId) { @@ -84,7 +91,7 @@ class TerminalManager { this.switchTab(remainingTabs[remainingTabs.length - 1]); } else { this.activeTabId = null; - this.createTab(); + this.showWelcomeMessage(); } } } diff --git a/internal/web/templates/index.html b/internal/web/templates/index.html index d81f0121..0a4bec39 100644 --- a/internal/web/templates/index.html +++ b/internal/web/templates/index.html @@ -132,6 +132,64 @@ .terminal-tab.active { display: block; } + #welcome-message { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + text-align: center; + max-width: 600px; + padding: 40px; + background: #16161e; + border: 1px solid #414868; + border-radius: 8px; + } + #welcome-message.hidden { + display: none; + } + #welcome-message h1 { + color: #7aa2f7; + font-size: 28px; + margin-bottom: 20px; + font-weight: 600; + } + #welcome-message p { + color: #a9b1d6; + font-size: 15px; + line-height: 1.6; + margin-bottom: 16px; + } + #welcome-message .instructions { + background: #1a1b26; + border: 1px solid #414868; + border-radius: 6px; + padding: 20px; + margin-top: 24px; + text-align: left; + } + #welcome-message .instructions h2 { + color: #bb9af7; + font-size: 16px; + margin-bottom: 12px; + font-weight: 500; + } + #welcome-message .instructions ol { + margin-left: 20px; + color: #a9b1d6; + font-size: 14px; + line-height: 1.8; + } + #welcome-message .instructions li { + margin-bottom: 8px; + } + #welcome-message .instructions code { + background: #24283b; + padding: 2px 6px; + border-radius: 3px; + color: #7dcfff; + font-family: 'Menlo', 'Monaco', 'Courier New', monospace; + font-size: 13px; + } @@ -144,7 +202,23 @@ -
+
+
+

Welcome to Infer Web Terminal

+

A browser-based terminal interface for interactive AI chat sessions.

+

Connect to local or remote servers and start chatting with AI models through the infer chat command.

+ +
+

Getting Started

+
    +
  1. Select a server from the Server dropdown above
  2. +
  3. Click the + button to create a new terminal tab
  4. +
  5. Start chatting with the AI in your terminal
  6. +
  7. Create multiple tabs to work with different servers simultaneously
  8. +
+
+
+