@tetsuo-ai/agenc 0.19.10 → 0.19.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # AgenC Core
2
+
3
+ An open source AI coding agent for your terminal. It works with any model
4
+ provider: 25 are built in, including OpenAI, Anthropic, xAI Grok, Gemini,
5
+ DeepSeek, Venice and local models through Ollama or LM Studio.
6
+
7
+ With DeepSeek V4.1 Flash it scored 76.2% on Terminal-Bench 2.1 for $34.
8
+ [Results](https://get.agenc.ag/terminal-bench/)
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ npm install -g @tetsuo-ai/agenc
14
+ agenc onboard
15
+ ```
16
+
17
+ This package needs Node.js 26.5 or a later 26.x. Without Node, use the
18
+ standalone installer, which brings its own runtime:
19
+
20
+ ```bash
21
+ curl -fsSL https://get.agenc.ag/install.sh | sh
22
+ ```
23
+
24
+ ## Use
25
+
26
+ ```bash
27
+ agenc # terminal UI in your project
28
+ agenc -p "run the tests and fix what fails" # headless, for scripts and CI
29
+ agenc --provider ollama --model qwen3-coder:30b # a local model
30
+ ```
31
+
32
+ ## Links
33
+
34
+ - Website: https://get.agenc.ag
35
+ - Source and docs: https://github.com/tetsuo-ai/agenc-core
36
+ - Model providers: https://get.agenc.ag/providers/
37
+ - Verify your download: https://get.agenc.ag/verify/
38
+
39
+ MIT licensed.
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "manifestVersion": 2,
3
- "runtimeVersion": "0.19.10",
3
+ "runtimeVersion": "0.19.12",
4
4
  "releaseRepository": "tetsuo-ai/agenc-releases",
5
- "releaseTag": "agenc-v0.19.10",
5
+ "releaseTag": "agenc-v0.19.12",
6
6
  "build": {
7
- "sourceCommit": "88b05a41822138e3358320f9117c48a7f2832b77",
8
- "sourceRef": "refs/tags/agenc-v0.19.10",
9
- "sourceDateEpoch": 1792229662,
10
- "lockfileSha256": "bf38c09e0923cbd0e1972858f0f173579cc576ca453c3c2dd584bf5b1d5f66fd",
11
- "nodeVersion": "v26.5.0",
7
+ "sourceCommit": "42df64e9a09919b3ecc42abdb9840e890820685c",
8
+ "sourceRef": "refs/tags/agenc-v0.19.12",
9
+ "sourceDateEpoch": 1792637814,
10
+ "lockfileSha256": "0ebc555f420921581b611183f74ab624dda050c0780e2069ebdf5c17de19dc86",
11
+ "nodeVersion": "v26.12.1",
12
12
  "nodeMajor": 26,
13
13
  "nodeModuleAbi": "147",
14
14
  "nodeApiVersion": "10",
@@ -16,32 +16,32 @@
16
16
  "artifactProfile": "release",
17
17
  "releaseCandidate": {
18
18
  "workflow": "release-runtime.yml",
19
- "runId": 39023835805,
19
+ "runId": 39720129123,
20
20
  "runAttempt": 1,
21
- "runUrl": "https://github.com/tetsuo-ai/agenc-core/actions/runs/39023835805",
21
+ "runUrl": "https://github.com/tetsuo-ai/agenc-core/actions/runs/39720129123",
22
22
  "phase": "candidate",
23
23
  "sourceRef": "refs/heads/main",
24
- "evidenceSha256": "c08da3fa2a217e7d5ee2fb05dde7aaf9a77cf0c07375a58ea4cf9c732cb4d3b6"
24
+ "evidenceSha256": "20a3ac5cf0debe8fab04b7bbc029d1572641ae5a26d4b4908153440ac7cac618"
25
25
  }
26
26
  },
27
27
  "artifacts": [
28
28
  {
29
29
  "platform": "darwin",
30
30
  "arch": "arm64",
31
- "runtimeVersion": "0.19.10",
31
+ "runtimeVersion": "0.19.12",
32
32
  "nodeMajor": 26,
33
33
  "nodeModuleAbi": "147",
34
34
  "nodeApiVersion": "10",
35
- "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-darwin-arm64-node26-abi147.tar.gz",
36
- "sha256": "ef1741e96d268037eb3d42bdc7b81ce8206cfe5ab3e3a2efb5b3a43960f26b64",
37
- "bytes": 111805320,
38
- "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-darwin-arm64-node26-abi147.tar.gz.sigstore.json",
39
- "attestationSha256": "3fc72e8272a5259b656ae0d551f994beb4b5d28a69fd5b0b1c3211fff9843078",
40
- "attestationBytes": 11509,
41
- "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-darwin-arm64-node26-abi147.tar.gz.build.sigstore.json",
42
- "buildProvenanceSha256": "8b2d4f0e7671f5d1f0a7eedd598eec61a59079694129e292d46ac898dbb43082",
43
- "buildProvenanceBytes": 11081,
44
- "metadataSha256": "e3ac0a2b89888cd178d31569bff1eb1a2c6a147e9f02860c03aa30f56b0bc5e3",
35
+ "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-darwin-arm64-node26-abi147.tar.gz",
36
+ "sha256": "ea0b47602779d09f6634edf9259032f4600dc0b4b75925c1565e76895a9d1ca7",
37
+ "bytes": 113215221,
38
+ "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-darwin-arm64-node26-abi147.tar.gz.sigstore.json",
39
+ "attestationSha256": "cbad38d3281cb25f611ae0b4cccc2ec0e7bc2804a76fc098dbd168438c2b48f6",
40
+ "attestationBytes": 11415,
41
+ "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-darwin-arm64-node26-abi147.tar.gz.build.sigstore.json",
42
+ "buildProvenanceSha256": "2c1a240a02dce704ed94bf4310745b98b31516b9edebf92ef7951ad1e49fbdff",
43
+ "buildProvenanceBytes": 11277,
44
+ "metadataSha256": "022cc82dbae850555a326133728e03df240a5a28bfdd898ca9d2095e25f48a44",
45
45
  "nativeToolchain": {
46
46
  "schemaVersion": 1,
47
47
  "builder": "github-hosted:macos-15:macos15:20260907.0337.1:ARM64",
@@ -62,22 +62,22 @@
62
62
  "SDKROOT": "/Applications/Xcode_16.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.5.sdk",
63
63
  "npm_config_build_from_source": "true"
64
64
  },
65
- "nodeDistributionFile": "node-v26.5.0-darwin-arm64.tar.gz",
66
- "nodeDistributionSha256": "ee920559aaa2391569cff4d737e3b83963430e3a14dedd91bfe0ff53171b5af9",
67
- "nodeHeadersFile": "node-v26.5.0-headers.tar.gz",
68
- "nodeHeadersSha256": "b02b9c5922e7fd7bae30d9e97c293059175aa9d267b81d2866d52696445b5cbd",
65
+ "nodeDistributionFile": "node-v26.12.1-darwin-arm64.tar.gz",
66
+ "nodeDistributionSha256": "1901d539912c02afa10d1cc126943a8855a7eedebe830119463470db5e6c59e8",
67
+ "nodeHeadersFile": "node-v26.12.1-headers.tar.gz",
68
+ "nodeHeadersSha256": "a983cdcea96e85d137b9b807cc776bb5564fc9e3e1c9185d59bbfaa781efd08f",
69
69
  "npmDistributionFile": "npm-11.17.0.tgz",
70
70
  "npmDistributionSha256": "b290bbb35b9e72c3ef84edbe041f28c4479c4d9ee79f555817b8caafe7ce4bba",
71
71
  "xcode": "Xcode 16.4\nBuild version 16F6",
72
72
  "sdk": "15.5"
73
73
  },
74
- "dependencyTreeSha256": "c27a09909394076603e78151a9d334d12718e54fbe4cd0a9312028c397ca21ee",
74
+ "dependencyTreeSha256": "c2755eea2e7c4802dd816d62a4eee44b5eccd2806dd710f35f5a72568067cf24",
75
75
  "dependencyPackages": 463,
76
76
  "archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
77
77
  "archiveValidation": {
78
78
  "policy": "agenc-runtime-archive-v1",
79
- "entries": 30127,
80
- "uncompressedBytes": 438185472
79
+ "entries": 30270,
80
+ "uncompressedBytes": 442923008
81
81
  },
82
82
  "minimumMacosVersion": "13.5",
83
83
  "bins": {
@@ -88,20 +88,20 @@
88
88
  {
89
89
  "platform": "darwin",
90
90
  "arch": "x64",
91
- "runtimeVersion": "0.19.10",
91
+ "runtimeVersion": "0.19.12",
92
92
  "nodeMajor": 26,
93
93
  "nodeModuleAbi": "147",
94
94
  "nodeApiVersion": "10",
95
- "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-darwin-x64-node26-abi147.tar.gz",
96
- "sha256": "c40a3831cd9f7eaf2609d994d8f790fb9ffd4bc185d46e2ee0cdb2b4b34f7231",
97
- "bytes": 113535176,
98
- "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-darwin-x64-node26-abi147.tar.gz.sigstore.json",
99
- "attestationSha256": "59fd026bbb84fb04a21572918295fc839a4c8f093475f4dcf7c58e08913ffed4",
100
- "attestationBytes": 11591,
101
- "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-darwin-x64-node26-abi147.tar.gz.build.sigstore.json",
102
- "buildProvenanceSha256": "5002bb582fd8c2cd4bcac1789b1e00103be0ae8335f80c5fd44670afe2f0710a",
103
- "buildProvenanceBytes": 11214,
104
- "metadataSha256": "6289b2244074089ca96b512837b700e12bfd63da6967fbedc6d0b480e2b1b183",
95
+ "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-darwin-x64-node26-abi147.tar.gz",
96
+ "sha256": "ab6068d8242f480096c988e46235ece9def9a0c2c1467a0dce5ef214bf0b7500",
97
+ "bytes": 115118383,
98
+ "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-darwin-x64-node26-abi147.tar.gz.sigstore.json",
99
+ "attestationSha256": "ac43fddcca2fbc9b91e6326f2e1b055b535f3ce444cf883baf50cd680b5b056f",
100
+ "attestationBytes": 11501,
101
+ "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-darwin-x64-node26-abi147.tar.gz.build.sigstore.json",
102
+ "buildProvenanceSha256": "db0caaf3bc1683b31063e8b27f60c06a099dede2f681f0eb8a1a0cde708a49f3",
103
+ "buildProvenanceBytes": 11308,
104
+ "metadataSha256": "74cc73cea972256747e207a8e4825bb88723b5e1ea97685b88cedc0385fb4008",
105
105
  "nativeToolchain": {
106
106
  "schemaVersion": 1,
107
107
  "builder": "github-hosted:macos-15-intel:macos15:20260824.0482.1:X64",
@@ -122,22 +122,22 @@
122
122
  "SDKROOT": "/Applications/Xcode_16.4.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.5.sdk",
123
123
  "npm_config_build_from_source": "true"
124
124
  },
125
- "nodeDistributionFile": "node-v26.5.0-darwin-x64.tar.gz",
126
- "nodeDistributionSha256": "98293394c945a24e64e00b4177bf075ec963ea70b34d1d2e24bd4a71716d334f",
127
- "nodeHeadersFile": "node-v26.5.0-headers.tar.gz",
128
- "nodeHeadersSha256": "b02b9c5922e7fd7bae30d9e97c293059175aa9d267b81d2866d52696445b5cbd",
125
+ "nodeDistributionFile": "node-v26.12.1-darwin-x64.tar.gz",
126
+ "nodeDistributionSha256": "b85c2ea4420ad0bc4abf2dc6cf1f55130ed681f1cabf60cf3f526e4c9e2712ff",
127
+ "nodeHeadersFile": "node-v26.12.1-headers.tar.gz",
128
+ "nodeHeadersSha256": "a983cdcea96e85d137b9b807cc776bb5564fc9e3e1c9185d59bbfaa781efd08f",
129
129
  "npmDistributionFile": "npm-11.17.0.tgz",
130
130
  "npmDistributionSha256": "b290bbb35b9e72c3ef84edbe041f28c4479c4d9ee79f555817b8caafe7ce4bba",
131
131
  "xcode": "Xcode 16.4\nBuild version 16F6",
132
132
  "sdk": "15.5"
133
133
  },
134
- "dependencyTreeSha256": "5e367b296021784e3f48e11c4aab610dc9c05ac0a8ca03d6b72c2d399920895a",
134
+ "dependencyTreeSha256": "17ea33a073a6c65e86f7baaa67793dfab31dd17b44fa182b1eeee5122f421a3b",
135
135
  "dependencyPackages": 463,
136
136
  "archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
137
137
  "archiveValidation": {
138
138
  "policy": "agenc-runtime-archive-v1",
139
- "entries": 30127,
140
- "uncompressedBytes": 442164224
139
+ "entries": 30270,
140
+ "uncompressedBytes": 447886336
141
141
  },
142
142
  "minimumMacosVersion": "13.5",
143
143
  "bins": {
@@ -148,20 +148,20 @@
148
148
  {
149
149
  "platform": "linux",
150
150
  "arch": "arm64",
151
- "runtimeVersion": "0.19.10",
151
+ "runtimeVersion": "0.19.12",
152
152
  "nodeMajor": 26,
153
153
  "nodeModuleAbi": "147",
154
154
  "nodeApiVersion": "10",
155
- "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-linux-arm64-node26-abi147.tar.gz",
156
- "sha256": "e36ca421374e12a81f716b7b3e058e97b69cc7ea0dd35e598263b98b1f770c0b",
157
- "bytes": 125995773,
158
- "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-linux-arm64-node26-abi147.tar.gz.sigstore.json",
159
- "attestationSha256": "e46e22fa6bf7abe818e09eb9cc02f82d32f62bf98dc4dd0ac36d4bd106af2960",
160
- "attestationBytes": 11556,
161
- "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-linux-arm64-node26-abi147.tar.gz.build.sigstore.json",
162
- "buildProvenanceSha256": "4ff47cfc0eca5d9175218e76085dbbb86fac64f0bc7fd93a11059a2ac3138de0",
163
- "buildProvenanceBytes": 11038,
164
- "metadataSha256": "908870b9c14cbff33a5f700e95f5a7079a8305d01011806516d49338faf7d202",
155
+ "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-linux-arm64-node26-abi147.tar.gz",
156
+ "sha256": "f61fbcd4a1770f2d0606421c66f7a6f29ae437ed401d7e37c68fa2a5c905179d",
157
+ "bytes": 127461177,
158
+ "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-linux-arm64-node26-abi147.tar.gz.sigstore.json",
159
+ "attestationSha256": "9bada21ff95659af7ba58c15ba17edd94b1c3528d179d0b57bcdd857336ee5d2",
160
+ "attestationBytes": 11458,
161
+ "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-linux-arm64-node26-abi147.tar.gz.build.sigstore.json",
162
+ "buildProvenanceSha256": "fd7994d40e7c8a8d79ee765725d49999e7cbc1e5683b221b4a46d716afe6d787",
163
+ "buildProvenanceBytes": 11171,
164
+ "metadataSha256": "34e0cb5e3888e4c45fc0a51193263a1da9c2e28d4e9dd2372e7171cac0e78479",
165
165
  "nativeToolchain": {
166
166
  "schemaVersion": 1,
167
167
  "builder": "rockylinux@sha256:9794037624aaa6212aeada1d28861ef5e0a935adaf93e4ef79837119f2a2d04c+rpm-content-sha256:5829a1e40236ef0f7bc62ed3c6511bd3602a929e964cbb02cb3e0634df5a1c82",
@@ -177,10 +177,10 @@
177
177
  "npm_config_build_from_source": "true",
178
178
  "npm_config_python": "/usr/bin/python3.12"
179
179
  },
180
- "nodeDistributionFile": "node-v26.5.0-linux-arm64.tar.gz",
181
- "nodeDistributionSha256": "308e5fe89a82461ba5a6cf15ff5221b2cdbd7ae87600aa72bb3c3fbdc66412d1",
182
- "nodeHeadersFile": "node-v26.5.0-headers.tar.gz",
183
- "nodeHeadersSha256": "b02b9c5922e7fd7bae30d9e97c293059175aa9d267b81d2866d52696445b5cbd",
180
+ "nodeDistributionFile": "node-v26.12.1-linux-arm64.tar.gz",
181
+ "nodeDistributionSha256": "a6c01af459dd8972ab3fb08ee5da81244d26ba8c4944a62d5bbba8c597ae154f",
182
+ "nodeHeadersFile": "node-v26.12.1-headers.tar.gz",
183
+ "nodeHeadersSha256": "a983cdcea96e85d137b9b807cc776bb5564fc9e3e1c9185d59bbfaa781efd08f",
184
184
  "npmDistributionFile": "npm-11.17.0.tgz",
185
185
  "npmDistributionSha256": "b290bbb35b9e72c3ef84edbe041f28c4479c4d9ee79f555817b8caafe7ce4bba",
186
186
  "rpmContentInventorySchemaVersion": 1,
@@ -203,13 +203,13 @@
203
203
  "tar-1.30-11.el8_10"
204
204
  ]
205
205
  },
206
- "dependencyTreeSha256": "2ed17ef1cd80395ee2fe62f685b32e9a0df512506093ddd3580061831e9ee291",
206
+ "dependencyTreeSha256": "8d0016963f7170c34df3cfbbd380620c0bc6abb73574990ee6b5c1a05333aab3",
207
207
  "dependencyPackages": 465,
208
208
  "archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
209
209
  "archiveValidation": {
210
210
  "policy": "agenc-runtime-archive-v1",
211
- "entries": 30154,
212
- "uncompressedBytes": 462029312
211
+ "entries": 30297,
212
+ "uncompressedBytes": 466749952
213
213
  },
214
214
  "libcFamily": "glibc",
215
215
  "minimumGlibcVersion": "2.28",
@@ -224,20 +224,20 @@
224
224
  {
225
225
  "platform": "linux",
226
226
  "arch": "x64",
227
- "runtimeVersion": "0.19.10",
227
+ "runtimeVersion": "0.19.12",
228
228
  "nodeMajor": 26,
229
229
  "nodeModuleAbi": "147",
230
230
  "nodeApiVersion": "10",
231
- "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-linux-x64-node26-abi147.tar.gz",
232
- "sha256": "8afa9fc03c76ba61296558f963052faa93c7d7101c76ab928d79b1428a090b0d",
233
- "bytes": 125732653,
234
- "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-linux-x64-node26-abi147.tar.gz.sigstore.json",
235
- "attestationSha256": "8424ddf94047ac9d8d4d7fce57b7be5f171968fe8bc1b28657d44f429e2bc4b2",
236
- "attestationBytes": 11638,
237
- "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-linux-x64-node26-abi147.tar.gz.build.sigstore.json",
238
- "buildProvenanceSha256": "8072a464abbbbce1893b6e6778214c62eeb4ca34ba5b48de0196c96c46f29c75",
239
- "buildProvenanceBytes": 11214,
240
- "metadataSha256": "cefbb8a428f2adfdeadb92565eb2dc7ba1dbdb525b5971a1e30cd94f690800f0",
231
+ "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-linux-x64-node26-abi147.tar.gz",
232
+ "sha256": "2ef68ab3152aaf01f72c6efb8969ee7e248123acddd68aefce09cc4822604092",
233
+ "bytes": 127368918,
234
+ "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-linux-x64-node26-abi147.tar.gz.sigstore.json",
235
+ "attestationSha256": "329fd61cee27791e30d1586b9e2b4b331776b900ca06986c587662c68b803343",
236
+ "attestationBytes": 11450,
237
+ "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-linux-x64-node26-abi147.tar.gz.build.sigstore.json",
238
+ "buildProvenanceSha256": "868b1991d9a14ae40ce5e1ae6d5272967be7c08c0f966477d698e779ef90ac9f",
239
+ "buildProvenanceBytes": 11167,
240
+ "metadataSha256": "b7170a7813f0b8b6123c1b6f84209e57c92a59ac588a3b34862c838b39464565",
241
241
  "nativeToolchain": {
242
242
  "schemaVersion": 1,
243
243
  "builder": "rockylinux@sha256:9794037624aaa6212aeada1d28861ef5e0a935adaf93e4ef79837119f2a2d04c+rpm-content-sha256:dd68b6a5168f632115be67586491fc7813f984ba80b56db539cc03b3c4bbd05f",
@@ -253,10 +253,10 @@
253
253
  "npm_config_build_from_source": "true",
254
254
  "npm_config_python": "/usr/bin/python3.12"
255
255
  },
256
- "nodeDistributionFile": "node-v26.5.0-linux-x64.tar.gz",
257
- "nodeDistributionSha256": "22b5f47ad6ae78837e4c2b846019965ce1a06ba143de176102294a1bf44fc677",
258
- "nodeHeadersFile": "node-v26.5.0-headers.tar.gz",
259
- "nodeHeadersSha256": "b02b9c5922e7fd7bae30d9e97c293059175aa9d267b81d2866d52696445b5cbd",
256
+ "nodeDistributionFile": "node-v26.12.1-linux-x64.tar.gz",
257
+ "nodeDistributionSha256": "0fd1eb7770598f52a21995edf6ed35fc690400fa437c2386af329519e9143132",
258
+ "nodeHeadersFile": "node-v26.12.1-headers.tar.gz",
259
+ "nodeHeadersSha256": "a983cdcea96e85d137b9b807cc776bb5564fc9e3e1c9185d59bbfaa781efd08f",
260
260
  "npmDistributionFile": "npm-11.17.0.tgz",
261
261
  "npmDistributionSha256": "b290bbb35b9e72c3ef84edbe041f28c4479c4d9ee79f555817b8caafe7ce4bba",
262
262
  "rpmContentInventorySchemaVersion": 1,
@@ -279,13 +279,13 @@
279
279
  "tar-1.30-11.el8_10"
280
280
  ]
281
281
  },
282
- "dependencyTreeSha256": "df847481454f681f977fad1bb9ec6c351451f80bc5bc1f80d9eb0badabb9b647",
282
+ "dependencyTreeSha256": "4cd76bad3c6d0bcda119a26f5f31d542b6e5dd7b3a8312b1d283b5b20127d342",
283
283
  "dependencyPackages": 465,
284
284
  "archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
285
285
  "archiveValidation": {
286
286
  "policy": "agenc-runtime-archive-v1",
287
- "entries": 30154,
288
- "uncompressedBytes": 463416320
287
+ "entries": 30297,
288
+ "uncompressedBytes": 468423680
289
289
  },
290
290
  "libcFamily": "glibc",
291
291
  "minimumGlibcVersion": "2.28",
@@ -300,26 +300,26 @@
300
300
  {
301
301
  "platform": "win",
302
302
  "arch": "x64",
303
- "runtimeVersion": "0.19.10",
303
+ "runtimeVersion": "0.19.12",
304
304
  "nodeMajor": 26,
305
305
  "nodeModuleAbi": "147",
306
306
  "nodeApiVersion": "10",
307
- "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-win-x64-node26-abi147.tar.gz",
308
- "sha256": "d9d648e3e9b1c9abc1aec7446bf452c80e0974d4b15ee059399fc44ea74e6d96",
309
- "bytes": 107847505,
310
- "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-win-x64-node26-abi147.tar.gz.sigstore.json",
311
- "attestationSha256": "b98f8b4d26ff0b908606cf33736794682f44aa0f29068c48e2bc6110373a4bad",
312
- "attestationBytes": 11536,
313
- "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.10/agenc-runtime-0.19.10-win-x64-node26-abi147.tar.gz.build.sigstore.json",
314
- "buildProvenanceSha256": "b47dd7662351a60739fe18e3141cbd27b1bae2c10dcf17a4f5d3df67323fc385",
315
- "buildProvenanceBytes": 11254,
316
- "metadataSha256": "a7013b35874b271e1498b13e4cc35426aca95cb9d28e9e14394cd83b67766536",
307
+ "url": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-win-x64-node26-abi147.tar.gz",
308
+ "sha256": "9aa95e3af93864ede6d246d7bba936e0e96e17ae94be252b2c205a5b6edd7a53",
309
+ "bytes": 109318050,
310
+ "attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-win-x64-node26-abi147.tar.gz.sigstore.json",
311
+ "attestationSha256": "05c58d790a95b1092ac23fabf130b01e8439a4554e6e5ca8b491116cd0114057",
312
+ "attestationBytes": 11450,
313
+ "buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.12/agenc-runtime-0.19.12-win-x64-node26-abi147.tar.gz.build.sigstore.json",
314
+ "buildProvenanceSha256": "3fb1f375f2036d3ca210e5e8bcc9d0246be05e8d0cd9a45c7a70b50a2480926e",
315
+ "buildProvenanceBytes": 11121,
316
+ "metadataSha256": "55623d264d62d4df3469f8a7902f189a315c6f2a9ae91cf5f3bb2c4aedbd02ab",
317
317
  "nativeToolchain": {
318
318
  "schemaVersion": 1,
319
- "builder": "github-hosted:windows-2025-vs2026:win25-vs2026:20261007.264.1:X64",
319
+ "builder": "github-hosted:windows-2025-vs2026:win25-vs2026:20261018.275.1:X64",
320
320
  "runnerLabel": "windows-2025-vs2026",
321
321
  "runnerImage": "win25-vs2026",
322
- "runnerImageVersion": "20261007.264.1",
322
+ "runnerImageVersion": "20261018.275.1",
323
323
  "runnerArch": "X64",
324
324
  "cc": "Microsoft (R) C/C++ Optimizing Compiler Version 19.51.36260 for x64",
325
325
  "cxx": "Microsoft (R) C/C++ Optimizing Compiler Version 19.51.36260 for x64",
@@ -334,20 +334,20 @@
334
334
  "_LINK_": "/DEBUG:NONE /INCREMENTAL:NO /Brepro",
335
335
  "npm_config_build_from_source": "true"
336
336
  },
337
- "nodeDistributionFile": "node-v26.5.0-win-x64.zip",
338
- "nodeDistributionSha256": "d3b2277dbcccfdf24ef6302928f64f484cff1d77a6d3caa3a28f4d20ce9158f6",
339
- "nodeHeadersFile": "node-v26.5.0-headers.tar.gz",
340
- "nodeHeadersSha256": "b02b9c5922e7fd7bae30d9e97c293059175aa9d267b81d2866d52696445b5cbd",
337
+ "nodeDistributionFile": "node-v26.12.1-win-x64.zip",
338
+ "nodeDistributionSha256": "b3efd5c70cba3308ed46e7e699a9b8aac075bbc6b027fcb39c84c31acc25e2b4",
339
+ "nodeHeadersFile": "node-v26.12.1-headers.tar.gz",
340
+ "nodeHeadersSha256": "a983cdcea96e85d137b9b807cc776bb5564fc9e3e1c9185d59bbfaa781efd08f",
341
341
  "nodeImportLibraryFile": "node.lib",
342
- "nodeImportLibrarySha256": "56f06350037085fce04930befd98327afc86ee46f52af6f6f8a68a03630e8380",
343
- "nodeImportLibraryBytes": 3026982,
342
+ "nodeImportLibrarySha256": "caad0090dc3add94c06abd01e395e8ec0f1586c10071bda1f99480445d695f6f",
343
+ "nodeImportLibraryBytes": 3029908,
344
344
  "nodeCommonGypiFile": "include/node/common.gypi",
345
- "nodeCommonGypiSourceSha256": "48c0c45ddfcf0de738fd7d9fc23c02768f2816686e099027af6373bd062e53b7",
346
- "nodeCommonGypiReleaseSha256": "ddeb29bbdbcd29a167aa4799794c4a5c56222184f06361d8a2c0bfc310d9b266",
345
+ "nodeCommonGypiSourceSha256": "d8048c8c74dbc930646a6fadb55789e383179d137cc9fbc6c886afdf60b13454",
346
+ "nodeCommonGypiReleaseSha256": "360fde1115657a7a65078a8e7f393a2d5c2bebbe7cd131cd3b753c2f99ecfff6",
347
347
  "nodeCommonGypiTransformation": "disable-debug-information-and-full-paths",
348
348
  "npmDistributionFile": "npm-11.17.0.tgz",
349
349
  "npmDistributionSha256": "b290bbb35b9e72c3ef84edbe041f28c4479c4d9ee79f555817b8caafe7ce4bba",
350
- "visualStudioVersion": "18.10.12224.181",
350
+ "visualStudioVersion": "18.11.12306.390",
351
351
  "visualStudioInstallPath": "C:\\Program Files\\Microsoft Visual Studio\\18\\Enterprise",
352
352
  "msvcToolsVersion": "14.51.36231",
353
353
  "windowsSdkVersion": "10.0.26100.0",
@@ -355,13 +355,13 @@
355
355
  "msvcCompilerSha256": "b0a1818ebae6da7f18230a84e76ce839212584ac4c2ab55b97a0d5268085da57",
356
356
  "msvcLinkerSha256": "a8c42e25c91ca2453e1110540ac08f0fc12d7539454a11b9af8baeecb469837d"
357
357
  },
358
- "dependencyTreeSha256": "019999a18f8e06dd2aba3b8a20d3a649125b6c3a454209ed923b2daa75e0a0d1",
358
+ "dependencyTreeSha256": "c3f9a27be141625f26e72f34c7ea4b5d6623cc933a9a30534340cb3035993062",
359
359
  "dependencyPackages": 462,
360
360
  "archiveFormat": "tar+gzip; portable; utf8-byte-order; normalized-mtime",
361
361
  "archiveValidation": {
362
362
  "policy": "agenc-runtime-archive-v1",
363
- "entries": 30169,
364
- "uncompressedBytes": 400759296
363
+ "entries": 30312,
364
+ "uncompressedBytes": 405485568
365
365
  },
366
366
  "bins": {
367
367
  "agenc": "node_modules/@tetsuo-ai/runtime/bin/agenc",
@@ -1 +1 @@
1
- var STARTUP_VALUE_OPTIONS=Object.freeze(["--resume","-r","--provider","--model","--profile","--config","--add-dir","--permission-mode","--output-format","--input-format","--image","--task-token-budget","--budget","--task-max-calls","--deadline","--deadline-reserve"]);var CLI_VALUE_OPTIONS=Object.freeze([...STARTUP_VALUE_OPTIONS,"--debug-file"]);function isCliValueOptionToken(arg){return CLI_VALUE_OPTIONS.includes(arg)}function tokenizeCliOptionRegion(argv,options={}){const additionalValueOptions=new Set(options.additionalValueOptions??[]);for(let index=0;index<argv.length;index+=1){const arg=argv[index];if(arg==="--"){return{optionArgs:argv.slice(0,index),promptArgs:argv.slice(index+1),endedBy:"delimiter"}}if(arg==="-"||!arg.startsWith("-")){return{optionArgs:argv.slice(0,index),promptArgs:argv.slice(index),endedBy:"positional"}}if(!arg.includes("=")&&(isCliValueOptionToken(arg)||additionalValueOptions.has(arg))){const next=argv[index+1];if(typeof next==="string"&&next!=="--"&&!next.startsWith("-")){index+=1}}}return{optionArgs:argv.slice(),promptArgs:[],endedBy:"end"}}var DANGEROUS_BYPASS_FLAG="--dangerously-bypass-approvals-and-sandbox";var AUTONOMOUS_FLAG="--autonomous";var BYPASS_APPROVALS_FLAG="--bypass-approvals";var RETIRED_STARTUP_FLAG_REPLACEMENTS=Object.freeze({"--yolo":DANGEROUS_BYPASS_FLAG,"--allow-dangerously-skip-permissions":DANGEROUS_BYPASS_FLAG,"--proactive":AUTONOMOUS_FLAG});function findRetiredStartupFlag(optionArgs){for(const arg of optionArgs){for(const[flag,replacement]of Object.entries(RETIRED_STARTUP_FLAG_REPLACEMENTS)){if(arg===flag||arg.startsWith(`${flag}=`)){return{flag,replacement}}}}return void 0}function retiredStartupFlagError(use){return`unknown option '${use.flag}'. Use '${use.replacement}' instead.`}var DeadlineFlagError=class extends Error{constructor(message){super(message);this.name="DeadlineFlagError"}};var RELATIVE_DEADLINE=/^\+(\d+(?:\.\d+)?)s?$/u;var ISO_DEADLINE=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})$/u;function parseDeadlineFlag(value,nowMs){const trimmed=value.trim();const relative=RELATIVE_DEADLINE.exec(trimmed);let at;if(relative!==null){at=nowMs+Math.round(Number(relative[1])*1e3)}else if(ISO_DEADLINE.test(trimmed)){at=Date.parse(trimmed)}else{throw new DeadlineFlagError(`agenc --deadline expects +<seconds> or an ISO 8601 instant with a time zone (got '${value}')`)}if(!Number.isSafeInteger(at)||at<=nowMs){throw new DeadlineFlagError(`agenc --deadline '${value}' is not in the future`)}return at}function parseDeadlineReserveFlag(value){const seconds=Number(value.trim().replace(/s$/u,""));if(!Number.isFinite(seconds)||seconds<=0){throw new DeadlineFlagError(`agenc --deadline-reserve expects a positive number of seconds (got '${value}')`)}return Math.round(seconds*1e3)}function extractFlagValue(argv,flag){const{optionArgs}=tokenizeCliOptionRegion(argv,{additionalValueOptions:[flag]});const prefix=`${flag}=`;for(let i=0;i<optionArgs.length;i+=1){const arg=optionArgs[i];if(arg===flag){const next=optionArgs[i+1];if(typeof next!=="string"||next.startsWith("-"))return null;return next}if(arg.startsWith(prefix)){return arg.slice(prefix.length)}}return null}function extractFlagValues(argv,flag){const{optionArgs}=tokenizeCliOptionRegion(argv,{additionalValueOptions:[flag]});const out=[];const prefix=`${flag}=`;for(let i=0;i<optionArgs.length;i+=1){const arg=optionArgs[i];if(arg===flag){const next=optionArgs[i+1];if(typeof next==="string"&&!next.startsWith("-")){out.push(next);i+=1}continue}if(arg.startsWith(prefix)){out.push(arg.slice(prefix.length))}}return out}var ROUTING_BOOLEAN_FLAGS=Object.freeze(["--no-tui"]);var STARTUP_BOOLEAN_FLAGS=Object.freeze(["--help","-h","--version","--bare","--light","--full-durability","--continue","-c","-p","--print","--debug","-d","--debug-to-stderr","-d2e",AUTONOMOUS_FLAG,BYPASS_APPROVALS_FLAG,DANGEROUS_BYPASS_FLAG]);var STARTUP_VALUE_FLAGS=CLI_VALUE_OPTIONS;function shouldStripValueFlag(arg){return STARTUP_VALUE_FLAGS.some(flag=>arg===flag||arg.startsWith(`${flag}=`))}var RESUME_FLAGS=Object.freeze(["--resume","-r"]);function isResumeFlagToken(arg){return RESUME_FLAGS.some(flag=>arg===flag||arg.startsWith(`${flag}=`))}var STARTUP_SELECTION_VALUE_FLAGS=Object.freeze(["--provider","--model","--profile","--config","--add-dir","--image"]);var STARTUP_SELECTION_FLAG_USAGE=Object.freeze({"--provider":"agenc --provider requires a value (usage: agenc --provider <name>)","--model":"agenc --model requires a value (usage: agenc --model <id|provider:id>)","--profile":"agenc --profile requires a value (usage: agenc --profile <name>)","--config":"agenc --config requires a value (usage: agenc --config <path>)","--add-dir":"agenc --add-dir requires a value (usage: agenc --add-dir <path>)","--image":"agenc --image requires a value (usage: agenc --image <path|url>)"});var HEADLESS_FORMAT_VALUE_FLAGS=Object.freeze(["--output-format","--input-format","--deadline","--deadline-reserve"]);var HEADLESS_FORMAT_FLAG_USAGE=Object.freeze({"--output-format":"agenc --output-format requires a value (usage: agenc -p --output-format <text|json|stream-json>)","--input-format":"agenc --input-format requires a value (usage: agenc -p --input-format <stream-json>)","--deadline":"agenc --deadline requires a value (usage: agenc -p --deadline <+seconds|ISO-8601>)","--deadline-reserve":"agenc --deadline-reserve requires a value (usage: agenc -p --deadline <\u2026> --deadline-reserve <seconds>)"});function runDeadlineFlagError(optionArgs,headless){const deadline=extractFlagValue(optionArgs,"--deadline");const reserve=extractFlagValue(optionArgs,"--deadline-reserve");if(deadline===null&&reserve===null)return null;if(!headless){return"agenc --deadline applies to print mode (-p), piped stdin, --no-tui, and headless continue/resume"}if(deadline===null)return"agenc --deadline-reserve requires --deadline";try{parseDeadlineFlag(deadline,Date.now());if(reserve!==null)parseDeadlineReserveFlag(reserve)}catch(error){if(error instanceof DeadlineFlagError)return error.message;throw error}return null}function findMissingValueSelectionFlag(userArgv){for(let i=0;i<userArgv.length;i+=1){const arg=userArgv[i];for(const flag of STARTUP_SELECTION_VALUE_FLAGS){if(arg===`${flag}=`)return flag;if(arg===flag){const next=userArgv[i+1];if(typeof next!=="string"||next.startsWith("-"))return flag}}}return null}function findMissingHeadlessFormatValueFlag(userArgv){for(let i=0;i<userArgv.length;i+=1){const arg=userArgv[i];for(const flag of HEADLESS_FORMAT_VALUE_FLAGS){if(arg===`${flag}=`)return flag;if(arg===flag){const next=userArgv[i+1];if(typeof next!=="string"||next.startsWith("-"))return flag}}}return null}function shouldStripBooleanFlag(arg){return arg.startsWith("--debug=")||ROUTING_BOOLEAN_FLAGS.includes(arg)||STARTUP_BOOLEAN_FLAGS.includes(arg)}function stripRoutingFlags(argv){const{optionArgs,promptArgs}=tokenizeCliOptionRegion(argv);const out=[];for(let i=0;i<optionArgs.length;i+=1){const arg=optionArgs[i];if(shouldStripBooleanFlag(arg))continue;if(shouldStripValueFlag(arg)){if(arg.includes("="))continue;const next=optionArgs[i+1];if(typeof next==="string"&&!next.startsWith("-"))i+=1;continue}out.push(arg)}return[...out,...promptArgs]}function classifyCLI(opts){const userArgv=opts.argv.slice(2);const{optionArgs}=tokenizeCliOptionRegion(userArgv);const hasNoTuiFlag=optionArgs.includes("--no-tui");const hasPrintFlag=optionArgs.includes("-p")||optionArgs.includes("--print");const hasContinueFlag=optionArgs.includes("--continue")||optionArgs.includes("-c");const resumeId=extractFlagValue(optionArgs,"--resume")??extractFlagValue(optionArgs,"-r");const hasResumeFlag=optionArgs.some(isResumeFlagToken);const prompt=stripRoutingFlags(userArgv).join(" ").trim();const startupImages=extractFlagValues(optionArgs,"--image");const retiredStartupFlag=findRetiredStartupFlag(optionArgs);if(retiredStartupFlag!==void 0){return{kind:"errorAndExit",message:`agenc: ${retiredStartupFlagError(retiredStartupFlag)}`,exitCode:2}}for(let optionIndex=0;optionIndex<optionArgs.length;optionIndex+=1){const option=optionArgs[optionIndex];if(shouldStripBooleanFlag(option))continue;if(shouldStripValueFlag(option)){if(!option.includes("=")){const value=optionArgs[optionIndex+1];if(value!==void 0&&!value.startsWith("-"))optionIndex+=1}continue}return{kind:"errorAndExit",message:`agenc: unknown option '${option}'. Use '--' before literal prompt text that starts with '-'.`,exitCode:2}}if(hasResumeFlag&&(resumeId===null||resumeId.length===0)){return{kind:"errorAndExit",message:`agenc --resume requires a session id (usage: agenc --resume <session-id>)`,exitCode:2}}const missingSelectionFlag=findMissingValueSelectionFlag(optionArgs);if(missingSelectionFlag!==null){return{kind:"errorAndExit",message:STARTUP_SELECTION_FLAG_USAGE[missingSelectionFlag],exitCode:2}}const missingHeadlessFormatFlag=findMissingHeadlessFormatValueFlag(optionArgs);if(missingHeadlessFormatFlag!==null){return{kind:"errorAndExit",message:HEADLESS_FORMAT_FLAG_USAGE[missingHeadlessFormatFlag],exitCode:2}}const headless=hasPrintFlag||hasNoTuiFlag||!opts.isTTY;const deadlineError=runDeadlineFlagError(optionArgs,headless);if(deadlineError!==null){return{kind:"errorAndExit",message:deadlineError,exitCode:2}}if(resumeId!==null&&resumeId.length>0){if(headless){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{},continueSession:{kind:"resume",sessionId:resumeId}}}return{kind:"resumeTUI",args:{resumeId}}}if(hasContinueFlag){if(headless){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{},continueSession:{kind:"latest"}}}return{kind:"continueTUI",args:{}}}if(hasPrintFlag){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{}}}if(!opts.isTTY){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{}}}if(hasNoTuiFlag){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{}}}if(opts.isStdoutTTY){const args={...prompt.length>0?{initialPrompt:prompt}:{},...startupImages.length>0?{startupImages}:{}};return{kind:"bootTUI",args}}return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{}}}function startupShortCircuitFlag(argv){const{optionArgs}=tokenizeCliOptionRegion(argv);if(optionArgs.includes("--help")||optionArgs.includes("-h"))return"help";if(optionArgs.includes("--version"))return"version";return null}function preflightStartupArguments(argv,terminal){if(startupShortCircuitFlag(argv)!==null)return null;const plan=classifyCLI({argv:["node","agenc",...argv],...terminal});return plan.kind==="errorAndExit"?plan:null}export{preflightStartupArguments,startupShortCircuitFlag};
1
+ var STARTUP_VALUE_OPTIONS=Object.freeze(["--resume","-r","--provider","--model","--profile","--config","--add-dir","--permission-mode","--output-format","--input-format","--image","--task-token-budget","--budget","--task-max-calls","--deadline","--deadline-reserve"]);var CLI_VALUE_OPTIONS=Object.freeze([...STARTUP_VALUE_OPTIONS,"--debug-file"]);function isCliValueOptionToken(arg){return CLI_VALUE_OPTIONS.includes(arg)}function tokenizeCliOptionRegion(argv,options={}){const additionalValueOptions=new Set(options.additionalValueOptions??[]);for(let index=0;index<argv.length;index+=1){const arg=argv[index];if(arg==="--"){return{optionArgs:argv.slice(0,index),promptArgs:argv.slice(index+1),endedBy:"delimiter"}}if(arg==="-"||!arg.startsWith("-")){return{optionArgs:argv.slice(0,index),promptArgs:argv.slice(index),endedBy:"positional"}}if(!arg.includes("=")&&(isCliValueOptionToken(arg)||additionalValueOptions.has(arg))){const next=argv[index+1];if(typeof next==="string"&&next!=="--"&&!next.startsWith("-")){index+=1}}}return{optionArgs:argv.slice(),promptArgs:[],endedBy:"end"}}var DANGEROUS_BYPASS_FLAG="--dangerously-bypass-approvals-and-sandbox";var AUTONOMOUS_FLAG="--autonomous";var BYPASS_APPROVALS_FLAG="--bypass-approvals";var LIGHT_FLAG="--light";var STANDARD_FLAG="--standard";var RETIRED_STARTUP_FLAG_REPLACEMENTS=Object.freeze({"--yolo":DANGEROUS_BYPASS_FLAG,"--allow-dangerously-skip-permissions":DANGEROUS_BYPASS_FLAG,"--proactive":AUTONOMOUS_FLAG});function findRetiredStartupFlag(optionArgs){for(const arg of optionArgs){for(const[flag,replacement]of Object.entries(RETIRED_STARTUP_FLAG_REPLACEMENTS)){if(arg===flag||arg.startsWith(`${flag}=`)){return{flag,replacement}}}}return void 0}function retiredStartupFlagError(use){return`unknown option '${use.flag}'. Use '${use.replacement}' instead.`}var DeadlineFlagError=class extends Error{constructor(message){super(message);this.name="DeadlineFlagError"}};var RELATIVE_DEADLINE=/^\+(\d+(?:\.\d+)?)s?$/u;var ISO_DEADLINE=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})$/u;function parseDeadlineFlag(value,nowMs){const trimmed=value.trim();const relative=RELATIVE_DEADLINE.exec(trimmed);let at;if(relative!==null){at=nowMs+Math.round(Number(relative[1])*1e3)}else if(ISO_DEADLINE.test(trimmed)){at=Date.parse(trimmed)}else{throw new DeadlineFlagError(`agenc --deadline expects +<seconds> or an ISO 8601 instant with a time zone (got '${value}')`)}if(!Number.isSafeInteger(at)||at<=nowMs){throw new DeadlineFlagError(`agenc --deadline '${value}' is not in the future`)}return at}function parseDeadlineReserveFlag(value){const seconds=Number(value.trim().replace(/s$/u,""));if(!Number.isFinite(seconds)||seconds<=0){throw new DeadlineFlagError(`agenc --deadline-reserve expects a positive number of seconds (got '${value}')`)}return Math.round(seconds*1e3)}function extractFlagValue(argv,flag){const{optionArgs}=tokenizeCliOptionRegion(argv,{additionalValueOptions:[flag]});const prefix=`${flag}=`;for(let i=0;i<optionArgs.length;i+=1){const arg=optionArgs[i];if(arg===flag){const next=optionArgs[i+1];if(typeof next!=="string"||next.startsWith("-"))return null;return next}if(arg.startsWith(prefix)){return arg.slice(prefix.length)}}return null}function extractFlagValues(argv,flag){const{optionArgs}=tokenizeCliOptionRegion(argv,{additionalValueOptions:[flag]});const out=[];const prefix=`${flag}=`;for(let i=0;i<optionArgs.length;i+=1){const arg=optionArgs[i];if(arg===flag){const next=optionArgs[i+1];if(typeof next==="string"&&!next.startsWith("-")){out.push(next);i+=1}continue}if(arg.startsWith(prefix)){out.push(arg.slice(prefix.length))}}return out}var ROUTING_BOOLEAN_FLAGS=Object.freeze(["--no-tui"]);var STARTUP_BOOLEAN_FLAGS=Object.freeze(["--help","-h","--version","--bare",LIGHT_FLAG,STANDARD_FLAG,"--full-durability","--continue","-c","-p","--print","--debug","-d","--debug-to-stderr","-d2e",AUTONOMOUS_FLAG,BYPASS_APPROVALS_FLAG,DANGEROUS_BYPASS_FLAG]);var STARTUP_VALUE_FLAGS=CLI_VALUE_OPTIONS;function shouldStripValueFlag(arg){return STARTUP_VALUE_FLAGS.some(flag=>arg===flag||arg.startsWith(`${flag}=`))}var RESUME_FLAGS=Object.freeze(["--resume","-r"]);function isResumeFlagToken(arg){return RESUME_FLAGS.some(flag=>arg===flag||arg.startsWith(`${flag}=`))}var STARTUP_SELECTION_VALUE_FLAGS=Object.freeze(["--provider","--model","--profile","--config","--add-dir","--image"]);var STARTUP_SELECTION_FLAG_USAGE=Object.freeze({"--provider":"agenc --provider requires a value (usage: agenc --provider <name>)","--model":"agenc --model requires a value (usage: agenc --model <id|provider:id>)","--profile":"agenc --profile requires a value (usage: agenc --profile <name>)","--config":"agenc --config requires a value (usage: agenc --config <path>)","--add-dir":"agenc --add-dir requires a value (usage: agenc --add-dir <path>)","--image":"agenc --image requires a value (usage: agenc --image <path|url>)"});var HEADLESS_FORMAT_VALUE_FLAGS=Object.freeze(["--output-format","--input-format","--deadline","--deadline-reserve"]);var HEADLESS_FORMAT_FLAG_USAGE=Object.freeze({"--output-format":"agenc --output-format requires a value (usage: agenc -p --output-format <text|json|stream-json>)","--input-format":"agenc --input-format requires a value (usage: agenc -p --input-format <stream-json>)","--deadline":"agenc --deadline requires a value (usage: agenc -p --deadline <+seconds|ISO-8601>)","--deadline-reserve":"agenc --deadline-reserve requires a value (usage: agenc -p --deadline <\u2026> --deadline-reserve <seconds>)"});function runDeadlineFlagError(optionArgs,headless){const deadline=extractFlagValue(optionArgs,"--deadline");const reserve=extractFlagValue(optionArgs,"--deadline-reserve");if(deadline===null&&reserve===null)return null;if(!headless){return"agenc --deadline applies to print mode (-p), piped stdin, --no-tui, and headless continue/resume"}if(deadline===null)return"agenc --deadline-reserve requires --deadline";try{parseDeadlineFlag(deadline,Date.now());if(reserve!==null)parseDeadlineReserveFlag(reserve)}catch(error){if(error instanceof DeadlineFlagError)return error.message;throw error}return null}function findMissingValueSelectionFlag(userArgv){for(let i=0;i<userArgv.length;i+=1){const arg=userArgv[i];for(const flag of STARTUP_SELECTION_VALUE_FLAGS){if(arg===`${flag}=`)return flag;if(arg===flag){const next=userArgv[i+1];if(typeof next!=="string"||next.startsWith("-"))return flag}}}return null}function findMissingHeadlessFormatValueFlag(userArgv){for(let i=0;i<userArgv.length;i+=1){const arg=userArgv[i];for(const flag of HEADLESS_FORMAT_VALUE_FLAGS){if(arg===`${flag}=`)return flag;if(arg===flag){const next=userArgv[i+1];if(typeof next!=="string"||next.startsWith("-"))return flag}}}return null}function shouldStripBooleanFlag(arg){return arg.startsWith("--debug=")||ROUTING_BOOLEAN_FLAGS.includes(arg)||STARTUP_BOOLEAN_FLAGS.includes(arg)}function stripRoutingFlags(argv){const{optionArgs,promptArgs}=tokenizeCliOptionRegion(argv);const out=[];for(let i=0;i<optionArgs.length;i+=1){const arg=optionArgs[i];if(shouldStripBooleanFlag(arg))continue;if(shouldStripValueFlag(arg)){if(arg.includes("="))continue;const next=optionArgs[i+1];if(typeof next==="string"&&!next.startsWith("-"))i+=1;continue}out.push(arg)}return[...out,...promptArgs]}function classifyCLI(opts){const userArgv=opts.argv.slice(2);const{optionArgs}=tokenizeCliOptionRegion(userArgv);const hasNoTuiFlag=optionArgs.includes("--no-tui");const hasPrintFlag=optionArgs.includes("-p")||optionArgs.includes("--print");const hasContinueFlag=optionArgs.includes("--continue")||optionArgs.includes("-c");const resumeId=extractFlagValue(optionArgs,"--resume")??extractFlagValue(optionArgs,"-r");const hasResumeFlag=optionArgs.some(isResumeFlagToken);const prompt=stripRoutingFlags(userArgv).join(" ").trim();const startupImages=extractFlagValues(optionArgs,"--image");const retiredStartupFlag=findRetiredStartupFlag(optionArgs);if(retiredStartupFlag!==void 0){return{kind:"errorAndExit",message:`agenc: ${retiredStartupFlagError(retiredStartupFlag)}`,exitCode:2}}for(let optionIndex=0;optionIndex<optionArgs.length;optionIndex+=1){const option=optionArgs[optionIndex];if(shouldStripBooleanFlag(option))continue;if(shouldStripValueFlag(option)){if(!option.includes("=")){const value=optionArgs[optionIndex+1];if(value!==void 0&&!value.startsWith("-"))optionIndex+=1}continue}return{kind:"errorAndExit",message:`agenc: unknown option '${option}'. Use '--' before literal prompt text that starts with '-'.`,exitCode:2}}if(hasResumeFlag&&(resumeId===null||resumeId.length===0)){return{kind:"errorAndExit",message:`agenc --resume requires a session id (usage: agenc --resume <session-id>)`,exitCode:2}}const missingSelectionFlag=findMissingValueSelectionFlag(optionArgs);if(missingSelectionFlag!==null){return{kind:"errorAndExit",message:STARTUP_SELECTION_FLAG_USAGE[missingSelectionFlag],exitCode:2}}const missingHeadlessFormatFlag=findMissingHeadlessFormatValueFlag(optionArgs);if(missingHeadlessFormatFlag!==null){return{kind:"errorAndExit",message:HEADLESS_FORMAT_FLAG_USAGE[missingHeadlessFormatFlag],exitCode:2}}const headless=hasPrintFlag||hasNoTuiFlag||!opts.isTTY;const deadlineError=runDeadlineFlagError(optionArgs,headless);if(deadlineError!==null){return{kind:"errorAndExit",message:deadlineError,exitCode:2}}if(resumeId!==null&&resumeId.length>0){if(headless){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{},continueSession:{kind:"resume",sessionId:resumeId}}}return{kind:"resumeTUI",args:{resumeId}}}if(hasContinueFlag){if(headless){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{},continueSession:{kind:"latest"}}}return{kind:"continueTUI",args:{}}}if(hasPrintFlag){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{}}}if(!opts.isTTY){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{}}}if(hasNoTuiFlag){return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{}}}if(opts.isStdoutTTY){const args={...prompt.length>0?{initialPrompt:prompt}:{},...startupImages.length>0?{startupImages}:{}};return{kind:"bootTUI",args}}return{kind:"oneShotCLI",userMessage:prompt,...startupImages.length>0?{startupImages}:{}}}function startupShortCircuitFlag(argv){const{optionArgs}=tokenizeCliOptionRegion(argv);if(optionArgs.includes("--help")||optionArgs.includes("-h"))return"help";if(optionArgs.includes("--version"))return"version";return null}function preflightStartupArguments(argv,terminal){if(startupShortCircuitFlag(argv)!==null)return null;const plan=classifyCLI({argv:["node","agenc",...argv],...terminal});return plan.kind==="errorAndExit"?plan:null}export{preflightStartupArguments,startupShortCircuitFlag};
@@ -34,6 +34,7 @@ import {
34
34
  writeSync,
35
35
  } from "node:fs";
36
36
  import { homedir } from "node:os";
37
+ import https from "node:https";
37
38
  import { basename, dirname, isAbsolute, join, relative, resolve, win32 } from "node:path";
38
39
  import { performance } from "node:perf_hooks";
39
40
  import { Readable } from "node:stream";
@@ -75,7 +76,13 @@ const MANIFEST_PATH = resolve(
75
76
  "generated",
76
77
  "agenc-runtime-manifest-v2.json",
77
78
  );
78
- const DEFAULT_RUNTIME_FETCH_TIMEOUT_MS = 120_000;
79
+ const DEFAULT_RUNTIME_FETCH_STALL_TIMEOUT_MS = 30_000;
80
+ const MIN_RUNTIME_FETCH_TIMEOUT_MS = 10 * 60_000;
81
+ // Allow a healthy, slow connection to finish. Signed sizes are capped at
82
+ // 256 MiB; even at 32 KiB/s the overall budget remains finite (under 2.4 h).
83
+ const MIN_RUNTIME_FETCH_BYTES_PER_SECOND = 32 * 1024;
84
+ const RUNTIME_FETCH_SETUP_ALLOWANCE_MS = 120_000;
85
+ const DEFAULT_RUNTIME_FETCH_PROGRESS_INTERVAL_MS = 5_000;
79
86
  const DEFAULT_RUNTIME_EXTRACTION_TIMEOUT_MS = 120_000;
80
87
  const WINDOWS_SYSTEM_ROOT = String.raw`\\?\GLOBALROOT\SystemRoot`;
81
88
  const WINDOWS_INVALID_FILE_ID = 0xffff_ffff_ffff_ffffn;
@@ -834,50 +841,79 @@ function sha256File(file, expectedIdentity) {
834
841
 
835
842
  const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
836
843
 
837
- function createFetchDeadline(timeoutMs) {
838
- if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0 || timeoutMs > 600_000) {
839
- throw new TypeError("agenc: runtime fetch timeout must be an integer from 1 to 600000 ms");
844
+ function createFetchDeadline(timeoutMs, stallTimeoutMs, expectedBytes) {
845
+ if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0 || timeoutMs > 24 * 60 * 60_000) {
846
+ throw new TypeError("agenc: runtime fetch timeout must be an integer from 1 to 86400000 ms");
840
847
  }
848
+ if (!Number.isSafeInteger(stallTimeoutMs) || stallTimeoutMs <= 0 || stallTimeoutMs > 600_000) {
849
+ throw new TypeError("agenc: runtime fetch stall timeout must be an integer from 1 to 600000 ms");
850
+ }
851
+ const started = performance.now();
841
852
  return {
842
853
  controller: new AbortController(),
843
- deadline: performance.now() + timeoutMs,
854
+ deadline: started + timeoutMs,
855
+ lastProgress: started,
856
+ started,
844
857
  timeoutMs,
858
+ stallTimeoutMs,
859
+ received: 0,
860
+ expectedBytes,
845
861
  };
846
862
  }
847
863
 
848
864
  function fetchTimeoutError(context, label) {
849
- const error = new Error(
850
- `agenc: ${label} timed out after ${context.timeoutMs} ms total`,
851
- );
865
+ const stalled = context.lastProgress + context.stallTimeoutMs < context.deadline;
866
+ const error = new Error(stalled
867
+ ? `agenc: ${label} stalled for ${context.stallTimeoutMs} ms ` +
868
+ `(received ${context.received}/${context.expectedBytes} bytes); retry to restart the download`
869
+ : `agenc: ${label} timed out after ${context.timeoutMs} ms total; retry to restart the download`);
852
870
  error.code = "AGENC_RUNTIME_FETCH_TIMEOUT";
853
871
  return error;
854
872
  }
855
873
 
856
874
  async function awaitWithinFetchDeadline(value, context, label) {
857
- const remaining = context.deadline - performance.now();
858
- if (remaining <= 0) {
875
+ // The operation may already have started (notably pipeline()). Observe its
876
+ // rejection even if our deadline has expired before entering this function.
877
+ // Otherwise postinstall catches the policy error and then crashes on the
878
+ // abandoned pipeline's AbortError.
879
+ const pending = Promise.resolve(value);
880
+ void pending.catch(() => {});
881
+ if (Math.min(context.deadline, context.lastProgress + context.stallTimeoutMs) <= performance.now()) {
859
882
  const error = fetchTimeoutError(context, label);
860
883
  context.controller.abort(error);
861
884
  throw error;
862
885
  }
863
886
  let timer;
864
887
  const expired = new Promise((_, reject) => {
865
- timer = setTimeout(() => {
888
+ const check = () => {
889
+ const remaining = Math.min(
890
+ context.deadline,
891
+ context.lastProgress + context.stallTimeoutMs,
892
+ ) - performance.now();
893
+ if (remaining > 0) {
894
+ timer = setTimeout(check, Math.max(1, Math.ceil(remaining)));
895
+ return;
896
+ }
866
897
  const error = fetchTimeoutError(context, label);
867
- // Settle the deadline promise with the policy error before aborting the
868
- // transport/pipeline, whose AbortError would otherwise obscure it.
898
+ // Settle with the policy error before aborting the transport/pipeline,
899
+ // whose AbortError would otherwise obscure it.
869
900
  reject(error);
870
901
  context.controller.abort(error);
871
- }, Math.max(1, Math.ceil(remaining)));
902
+ };
903
+ check();
872
904
  });
873
905
  try {
874
- return await Promise.race([Promise.resolve(value), expired]);
906
+ return await Promise.race([pending, expired]);
875
907
  } finally {
876
908
  clearTimeout(timer);
877
909
  }
878
910
  }
879
911
 
880
912
  async function cancelResponseBody(response, context, label) {
913
+ if (typeof response?.body?.destroy === "function") {
914
+ response.body.destroy();
915
+ return;
916
+ }
881
917
  if (typeof response?.body?.cancel !== "function") return;
882
918
  try {
883
919
  const cancellation = response.body.cancel();
@@ -893,6 +929,28 @@ async function cancelResponseBody(response, context, label) {
893
929
  }
894
930
  }
895
931
 
932
+ // The bundled fetch in Node 26 negotiates HTTP/2 with small receive windows.
933
+ // On high-latency routes that throttles large artifacts even while curl and
934
+ // HTTPS/1.1 saturate the link. Use the built-in HTTPS stream without adding an
935
+ // installer dependency; the same redirect/encoding/size policy below applies.
936
+ function fetchRuntimeHttps(url, { headers, signal }) {
937
+ return new Promise((resolveResponse, reject) => {
938
+ const request = https.get(url, { headers, signal }, (response) => {
939
+ const status = response.statusCode ?? 0;
940
+ resolveResponse({
941
+ ok: status >= 200 && status < 300,
942
+ status,
943
+ statusText: response.statusMessage ?? "",
944
+ url: String(url),
945
+ redirected: false,
946
+ headers: { get: (name) => response.headers[name.toLowerCase()] ?? null },
947
+ body: response,
948
+ });
949
+ });
950
+ request.on("error", reject);
951
+ });
952
+ }
953
+
896
954
  async function fetchHttps(url, fetchImpl, label, context) {
897
955
  let current;
898
956
  try {
@@ -913,6 +971,9 @@ async function fetchHttps(url, fetchImpl, label, context) {
913
971
  context,
914
972
  `${label} response headers`,
915
973
  );
974
+ // Receiving headers is activity too: a slow TLS/header phase must not
975
+ // consume the following body's entire inactivity window.
976
+ context.lastProgress = performance.now();
916
977
  if (!REDIRECT_STATUSES.has(response.status)) {
917
978
  let finalProtocolIsHttps = true;
918
979
  try {
@@ -948,7 +1009,7 @@ async function fetchHttps(url, fetchImpl, label, context) {
948
1009
  throw new Error(`agenc: too many redirects while fetching ${label}`);
949
1010
  }
950
1011
 
951
- async function* requireExactByteCount(source, expectedBytes, context) {
1012
+ async function* requireExactByteCount(source, expectedBytes, context, reportProgress) {
952
1013
  let received = 0;
953
1014
  const iterator = source[Symbol.asyncIterator]();
954
1015
  let complete = false;
@@ -973,6 +1034,11 @@ async function* requireExactByteCount(source, expectedBytes, context) {
973
1034
  `(expected ${expectedBytes}, received at least ${received})`,
974
1035
  );
975
1036
  }
1037
+ if (context !== undefined && chunk.length > 0) {
1038
+ context.received = received;
1039
+ context.lastProgress = performance.now();
1040
+ reportProgress?.(received);
1041
+ }
976
1042
  yield chunk;
977
1043
  }
978
1044
  } finally {
@@ -1098,9 +1164,16 @@ async function download(
1098
1164
  dest,
1099
1165
  expectedBytes,
1100
1166
  trustMode,
1101
- fetchImpl = globalThis.fetch,
1167
+ fetchImpl = fetchRuntimeHttps,
1102
1168
  {
1103
- fetchTimeoutMs = DEFAULT_RUNTIME_FETCH_TIMEOUT_MS,
1169
+ fetchTimeoutMs = Math.max(
1170
+ MIN_RUNTIME_FETCH_TIMEOUT_MS,
1171
+ RUNTIME_FETCH_SETUP_ALLOWANCE_MS +
1172
+ Math.ceil(expectedBytes / MIN_RUNTIME_FETCH_BYTES_PER_SECOND) * 1000,
1173
+ ),
1174
+ fetchStallTimeoutMs = DEFAULT_RUNTIME_FETCH_STALL_TIMEOUT_MS,
1175
+ progressIntervalMs = DEFAULT_RUNTIME_FETCH_PROGRESS_INTERVAL_MS,
1176
+ log,
1104
1177
  localArtifactHook,
1105
1178
  durabilityHook,
1106
1179
  } = {},
@@ -1123,7 +1196,21 @@ async function download(
1123
1196
  if (parsed.protocol === "file:") {
1124
1197
  throw new Error("agenc: remote runtime manifests must not access local files");
1125
1198
  }
1126
- const context = createFetchDeadline(fetchTimeoutMs);
1199
+ if (!Number.isSafeInteger(progressIntervalMs) || progressIntervalMs <= 0) {
1200
+ throw new TypeError("agenc: runtime fetch progress interval must be a positive integer");
1201
+ }
1202
+ const context = createFetchDeadline(fetchTimeoutMs, fetchStallTimeoutMs, expectedBytes);
1203
+ let lastReport = context.started;
1204
+ const reportProgress = (received) => {
1205
+ const now = performance.now();
1206
+ if (received !== expectedBytes && now - lastReport < progressIntervalMs) return;
1207
+ lastReport = now;
1208
+ const mib = 1024 * 1024;
1209
+ const seconds = Math.max((now - context.started) / 1000, 0.001);
1210
+ log?.(`agenc: runtime download ${Math.floor(received * 100 / expectedBytes)}% ` +
1211
+ `(${(received / mib).toFixed(1)}/${(expectedBytes / mib).toFixed(1)} MiB, ` +
1212
+ `${(received / mib / seconds).toFixed(2)} MiB/s)`);
1213
+ };
1127
1214
  let res;
1128
1215
  try {
1129
1216
  res = await fetchHttps(url, fetchImpl, "runtime artifact", context);
@@ -1160,7 +1247,7 @@ async function download(
1160
1247
  await awaitWithinFetchDeadline(
1161
1248
  pipeline(
1162
1249
  readable,
1163
- (source) => requireExactByteCount(source, expectedBytes, context),
1250
+ (source) => requireExactByteCount(source, expectedBytes, context, reportProgress),
1164
1251
  createWriteStream(dest, { flags: "wx", mode: 0o600 }),
1165
1252
  { signal: context.controller.signal },
1166
1253
  ),
@@ -1337,8 +1424,10 @@ export async function ensureRuntimeLaunch({
1337
1424
  userHome = homedir(),
1338
1425
  manifest = readManifest(),
1339
1426
  slug = platformSlug(),
1340
- fetchImpl = globalThis.fetch,
1341
- runtimeFetchTimeoutMs = DEFAULT_RUNTIME_FETCH_TIMEOUT_MS,
1427
+ fetchImpl = fetchRuntimeHttps,
1428
+ runtimeFetchTimeoutMs,
1429
+ runtimeFetchStallTimeoutMs = DEFAULT_RUNTIME_FETCH_STALL_TIMEOUT_MS,
1430
+ runtimeFetchProgressIntervalMs = DEFAULT_RUNTIME_FETCH_PROGRESS_INTERVAL_MS,
1342
1431
  manifestTrust = "official",
1343
1432
  runtimeCompatibility,
1344
1433
  localArtifactHook,
@@ -1441,6 +1530,9 @@ export async function ensureRuntimeLaunch({
1441
1530
  const tmp = join(downloadDir, "runtime.tar.gz");
1442
1531
  await download(artifact.url, tmp, artifact.bytes, manifestTrust, fetchImpl, {
1443
1532
  fetchTimeoutMs: runtimeFetchTimeoutMs,
1533
+ fetchStallTimeoutMs: runtimeFetchStallTimeoutMs,
1534
+ progressIntervalMs: runtimeFetchProgressIntervalMs,
1535
+ log,
1444
1536
  localArtifactHook,
1445
1537
  durabilityHook,
1446
1538
  });
package/package.json CHANGED
@@ -1,7 +1,22 @@
1
1
  {
2
2
  "name": "@tetsuo-ai/agenc",
3
- "version": "0.19.10",
4
- "description": "Public AgenC CLI launcher package",
3
+ "version": "0.19.12",
4
+ "description": "Open source AI coding agent for your terminal. Works with any model provider, including local models.",
5
+ "keywords": [
6
+ "ai",
7
+ "coding-agent",
8
+ "ai-coding-assistant",
9
+ "agent",
10
+ "cli",
11
+ "terminal",
12
+ "llm",
13
+ "deepseek",
14
+ "ollama",
15
+ "openai",
16
+ "anthropic",
17
+ "grok",
18
+ "gemini"
19
+ ],
5
20
  "license": "MIT",
6
21
  "type": "module",
7
22
  "repository": {
@@ -9,7 +24,7 @@
9
24
  "url": "git+https://github.com/tetsuo-ai/agenc-core.git",
10
25
  "directory": "packages/agenc"
11
26
  },
12
- "homepage": "https://github.com/tetsuo-ai/agenc-core#readme",
27
+ "homepage": "https://get.agenc.ag",
13
28
  "bugs": {
14
29
  "url": "https://github.com/tetsuo-ai/agenc-core/issues"
15
30
  },