@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 +39 -0
- package/generated/agenc-runtime-manifest-v2.json +107 -107
- package/generated/startup-preflight.mjs +1 -1
- package/lib/runtime-manager.mjs +114 -22
- package/package.json +18 -3
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.
|
|
3
|
+
"runtimeVersion": "0.19.12",
|
|
4
4
|
"releaseRepository": "tetsuo-ai/agenc-releases",
|
|
5
|
-
"releaseTag": "agenc-v0.19.
|
|
5
|
+
"releaseTag": "agenc-v0.19.12",
|
|
6
6
|
"build": {
|
|
7
|
-
"sourceCommit": "
|
|
8
|
-
"sourceRef": "refs/tags/agenc-v0.19.
|
|
9
|
-
"sourceDateEpoch":
|
|
10
|
-
"lockfileSha256": "
|
|
11
|
-
"nodeVersion": "v26.
|
|
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":
|
|
19
|
+
"runId": 39720129123,
|
|
20
20
|
"runAttempt": 1,
|
|
21
|
-
"runUrl": "https://github.com/tetsuo-ai/agenc-core/actions/runs/
|
|
21
|
+
"runUrl": "https://github.com/tetsuo-ai/agenc-core/actions/runs/39720129123",
|
|
22
22
|
"phase": "candidate",
|
|
23
23
|
"sourceRef": "refs/heads/main",
|
|
24
|
-
"evidenceSha256": "
|
|
24
|
+
"evidenceSha256": "20a3ac5cf0debe8fab04b7bbc029d1572641ae5a26d4b4908153440ac7cac618"
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"artifacts": [
|
|
28
28
|
{
|
|
29
29
|
"platform": "darwin",
|
|
30
30
|
"arch": "arm64",
|
|
31
|
-
"runtimeVersion": "0.19.
|
|
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.
|
|
36
|
-
"sha256": "
|
|
37
|
-
"bytes":
|
|
38
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
39
|
-
"attestationSha256": "
|
|
40
|
-
"attestationBytes":
|
|
41
|
-
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
42
|
-
"buildProvenanceSha256": "
|
|
43
|
-
"buildProvenanceBytes":
|
|
44
|
-
"metadataSha256": "
|
|
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.
|
|
66
|
-
"nodeDistributionSha256": "
|
|
67
|
-
"nodeHeadersFile": "node-v26.
|
|
68
|
-
"nodeHeadersSha256": "
|
|
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": "
|
|
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":
|
|
80
|
-
"uncompressedBytes":
|
|
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.
|
|
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.
|
|
96
|
-
"sha256": "
|
|
97
|
-
"bytes":
|
|
98
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
99
|
-
"attestationSha256": "
|
|
100
|
-
"attestationBytes":
|
|
101
|
-
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
102
|
-
"buildProvenanceSha256": "
|
|
103
|
-
"buildProvenanceBytes":
|
|
104
|
-
"metadataSha256": "
|
|
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.
|
|
126
|
-
"nodeDistributionSha256": "
|
|
127
|
-
"nodeHeadersFile": "node-v26.
|
|
128
|
-
"nodeHeadersSha256": "
|
|
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": "
|
|
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":
|
|
140
|
-
"uncompressedBytes":
|
|
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.
|
|
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.
|
|
156
|
-
"sha256": "
|
|
157
|
-
"bytes":
|
|
158
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
159
|
-
"attestationSha256": "
|
|
160
|
-
"attestationBytes":
|
|
161
|
-
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
162
|
-
"buildProvenanceSha256": "
|
|
163
|
-
"buildProvenanceBytes":
|
|
164
|
-
"metadataSha256": "
|
|
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.
|
|
181
|
-
"nodeDistributionSha256": "
|
|
182
|
-
"nodeHeadersFile": "node-v26.
|
|
183
|
-
"nodeHeadersSha256": "
|
|
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": "
|
|
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":
|
|
212
|
-
"uncompressedBytes":
|
|
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.
|
|
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.
|
|
232
|
-
"sha256": "
|
|
233
|
-
"bytes":
|
|
234
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
235
|
-
"attestationSha256": "
|
|
236
|
-
"attestationBytes":
|
|
237
|
-
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
238
|
-
"buildProvenanceSha256": "
|
|
239
|
-
"buildProvenanceBytes":
|
|
240
|
-
"metadataSha256": "
|
|
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.
|
|
257
|
-
"nodeDistributionSha256": "
|
|
258
|
-
"nodeHeadersFile": "node-v26.
|
|
259
|
-
"nodeHeadersSha256": "
|
|
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": "
|
|
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":
|
|
288
|
-
"uncompressedBytes":
|
|
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.
|
|
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.
|
|
308
|
-
"sha256": "
|
|
309
|
-
"bytes":
|
|
310
|
-
"attestationUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
311
|
-
"attestationSha256": "
|
|
312
|
-
"attestationBytes":
|
|
313
|
-
"buildProvenanceUrl": "https://github.com/tetsuo-ai/agenc-releases/releases/download/agenc-v0.19.
|
|
314
|
-
"buildProvenanceSha256": "
|
|
315
|
-
"buildProvenanceBytes":
|
|
316
|
-
"metadataSha256": "
|
|
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:
|
|
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": "
|
|
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.
|
|
338
|
-
"nodeDistributionSha256": "
|
|
339
|
-
"nodeHeadersFile": "node-v26.
|
|
340
|
-
"nodeHeadersSha256": "
|
|
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": "
|
|
343
|
-
"nodeImportLibraryBytes":
|
|
342
|
+
"nodeImportLibrarySha256": "caad0090dc3add94c06abd01e395e8ec0f1586c10071bda1f99480445d695f6f",
|
|
343
|
+
"nodeImportLibraryBytes": 3029908,
|
|
344
344
|
"nodeCommonGypiFile": "include/node/common.gypi",
|
|
345
|
-
"nodeCommonGypiSourceSha256": "
|
|
346
|
-
"nodeCommonGypiReleaseSha256": "
|
|
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.
|
|
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": "
|
|
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":
|
|
364
|
-
"uncompressedBytes":
|
|
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};
|
package/lib/runtime-manager.mjs
CHANGED
|
@@ -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
|
|
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 >
|
|
839
|
-
throw new TypeError("agenc: runtime fetch timeout must be an integer from 1 to
|
|
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:
|
|
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
|
|
850
|
-
|
|
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
|
-
|
|
858
|
-
if
|
|
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
|
-
|
|
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
|
|
868
|
-
//
|
|
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
|
-
}
|
|
902
|
+
};
|
|
903
|
+
check();
|
|
872
904
|
});
|
|
873
905
|
try {
|
|
874
|
-
return await Promise.race([
|
|
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 =
|
|
1167
|
+
fetchImpl = fetchRuntimeHttps,
|
|
1102
1168
|
{
|
|
1103
|
-
fetchTimeoutMs =
|
|
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
|
-
|
|
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 =
|
|
1341
|
-
runtimeFetchTimeoutMs
|
|
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.
|
|
4
|
-
"description": "
|
|
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://
|
|
27
|
+
"homepage": "https://get.agenc.ag",
|
|
13
28
|
"bugs": {
|
|
14
29
|
"url": "https://github.com/tetsuo-ai/agenc-core/issues"
|
|
15
30
|
},
|