@aria-cli/tools 1.0.12 → 1.0.14
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/dist/index.js +378 -70
- package/dist/network-runtime/index.js +8 -12
- package/dist-cjs/index.js +400 -435
- package/dist-cjs/network-runtime/index.js +8 -172
- package/package.json +8 -6
- package/dist/.tsbuildinfo +0 -1
- package/dist/ask-user-interaction.js +0 -22
- package/dist/cache/web-cache.js +0 -66
- package/dist/definitions/arion.js +0 -104
- package/dist/definitions/browser/browser.js +0 -418
- package/dist/definitions/browser/index.js +0 -4
- package/dist/definitions/browser/pw-downloads.js +0 -114
- package/dist/definitions/browser/pw-interactions.js +0 -199
- package/dist/definitions/browser/pw-responses.js +0 -76
- package/dist/definitions/browser/pw-session.js +0 -310
- package/dist/definitions/browser/pw-shared.js +0 -66
- package/dist/definitions/browser/pw-snapshot.js +0 -301
- package/dist/definitions/browser/pw-state.js +0 -62
- package/dist/definitions/browser/types.js +0 -4
- package/dist/definitions/code-intelligence.js +0 -470
- package/dist/definitions/core.js +0 -109
- package/dist/definitions/delegation.js +0 -512
- package/dist/definitions/deploy.js +0 -65
- package/dist/definitions/filesystem.js +0 -196
- package/dist/definitions/frg.js +0 -63
- package/dist/definitions/index.js +0 -20
- package/dist/definitions/memory.js +0 -123
- package/dist/definitions/messaging.js +0 -625
- package/dist/definitions/meta.js +0 -349
- package/dist/definitions/network.js +0 -159
- package/dist/definitions/outlook.js +0 -277
- package/dist/definitions/patch/apply-patch.js +0 -184
- package/dist/definitions/patch/fuzzy-match.js +0 -166
- package/dist/definitions/patch/index.js +0 -1
- package/dist/definitions/patch/patch-parser.js +0 -207
- package/dist/definitions/patch/sandbox-paths.js +0 -105
- package/dist/definitions/process/index.js +0 -4
- package/dist/definitions/process/process-registry.js +0 -213
- package/dist/definitions/process/process.js +0 -386
- package/dist/definitions/process/pty-keys.js +0 -254
- package/dist/definitions/process/session-slug.js +0 -142
- package/dist/definitions/quip.js +0 -195
- package/dist/definitions/search.js +0 -60
- package/dist/definitions/session-history.js +0 -69
- package/dist/definitions/shell.js +0 -181
- package/dist/definitions/slack.js +0 -180
- package/dist/definitions/web.js +0 -109
- package/dist/executors/apply-patch.js +0 -901
- package/dist/executors/arion.js +0 -119
- package/dist/executors/code-intelligence.js +0 -882
- package/dist/executors/deploy.js +0 -848
- package/dist/executors/filesystem.js +0 -1122
- package/dist/executors/frg-freshness.js +0 -576
- package/dist/executors/frg.js +0 -298
- package/dist/executors/index.js +0 -46
- package/dist/executors/learning-meta.js +0 -1146
- package/dist/executors/lsp-client.js +0 -296
- package/dist/executors/memory.js +0 -750
- package/dist/executors/meta.js +0 -220
- package/dist/executors/process-registry.js +0 -465
- package/dist/executors/pty-session-store.js +0 -30
- package/dist/executors/pty.js +0 -271
- package/dist/executors/restart.js +0 -119
- package/dist/executors/search-freshness.js +0 -195
- package/dist/executors/search-types.js +0 -52
- package/dist/executors/search.js +0 -66
- package/dist/executors/self-diagnose.js +0 -398
- package/dist/executors/session-history.js +0 -283
- package/dist/executors/shell-safety.js +0 -473
- package/dist/executors/shell.js +0 -954
- package/dist/executors/utils.js +0 -33
- package/dist/executors/web.js +0 -542
- package/dist/extraction/content-extraction.js +0 -235
- package/dist/extraction/index.js +0 -4
- package/dist/headless-control-contract.js +0 -967
- package/dist/local-control-http-auth.js +0 -2
- package/dist/mcp/client.js +0 -181
- package/dist/mcp/connection.js +0 -480
- package/dist/mcp/index.js +0 -10
- package/dist/mcp/jsonrpc.js +0 -144
- package/dist/mcp/types.js +0 -7
- package/dist/network-control-adapter.js +0 -72
- package/dist/network-runtime/address-types.js +0 -165
- package/dist/network-runtime/db-owner-fencing.js +0 -69
- package/dist/network-runtime/delivery-receipts.js +0 -267
- package/dist/network-runtime/direct-endpoint-authority.js +0 -25
- package/dist/network-runtime/local-control-contract.js +0 -627
- package/dist/network-runtime/node-store-contract.js +0 -34
- package/dist/network-runtime/pair-route-contract.js +0 -77
- package/dist/network-runtime/peer-capabilities.js +0 -28
- package/dist/network-runtime/peer-principal-ref.js +0 -12
- package/dist/network-runtime/peer-state-machine.js +0 -121
- package/dist/network-runtime/protocol-schemas.js +0 -205
- package/dist/network-runtime/runtime-bootstrap-contract.js +0 -60
- package/dist/outlook/desktop-session.js +0 -279
- package/dist/policy.js +0 -149
- package/dist/providers/brave.js +0 -62
- package/dist/providers/duckduckgo.js +0 -176
- package/dist/providers/exa.js +0 -63
- package/dist/providers/firecrawl.js +0 -55
- package/dist/providers/index.js +0 -7
- package/dist/providers/jina.js +0 -49
- package/dist/providers/router.js +0 -96
- package/dist/providers/search-provider.js +0 -32
- package/dist/providers/tavily.js +0 -54
- package/dist/quip/desktop-session.js +0 -317
- package/dist/registry/index.js +0 -1
- package/dist/registry/registry.js +0 -756
- package/dist/runtime-socket-local-control-client.js +0 -330
- package/dist/security/dns-normalization.js +0 -19
- package/dist/security/dns-pinning.js +0 -123
- package/dist/security/external-content.js +0 -91
- package/dist/security/ssrf.js +0 -181
- package/dist/slack/desktop-session.js +0 -324
- package/dist/tool-factory.js +0 -47
- package/dist/types.js +0 -7
- package/dist/utils/retry.js +0 -132
- package/dist/utils/safe-parse-json.js +0 -160
- package/dist/utils/url.js +0 -19
- package/dist-cjs/.tsbuildinfo +0 -1
- package/dist-cjs/ask-user-interaction.js +0 -27
- package/dist-cjs/cache/web-cache.js +0 -70
- package/dist-cjs/definitions/arion.js +0 -107
- package/dist-cjs/definitions/browser/browser.js +0 -421
- package/dist-cjs/definitions/browser/index.js +0 -8
- package/dist-cjs/definitions/browser/pw-downloads.js +0 -117
- package/dist-cjs/definitions/browser/pw-interactions.js +0 -213
- package/dist-cjs/definitions/browser/pw-responses.js +0 -84
- package/dist-cjs/definitions/browser/pw-session.js +0 -326
- package/dist-cjs/definitions/browser/pw-shared.js +0 -72
- package/dist-cjs/definitions/browser/pw-snapshot.js +0 -307
- package/dist-cjs/definitions/browser/pw-state.js +0 -70
- package/dist-cjs/definitions/browser/types.js +0 -5
- package/dist-cjs/definitions/code-intelligence.js +0 -473
- package/dist-cjs/definitions/core.js +0 -133
- package/dist-cjs/definitions/delegation.js +0 -515
- package/dist-cjs/definitions/deploy.js +0 -68
- package/dist-cjs/definitions/filesystem.js +0 -199
- package/dist-cjs/definitions/frg.js +0 -66
- package/dist-cjs/definitions/index.js +0 -43
- package/dist-cjs/definitions/memory.js +0 -126
- package/dist-cjs/definitions/messaging.js +0 -631
- package/dist-cjs/definitions/meta.js +0 -352
- package/dist-cjs/definitions/network.js +0 -162
- package/dist-cjs/definitions/outlook.js +0 -280
- package/dist-cjs/definitions/patch/apply-patch.js +0 -191
- package/dist-cjs/definitions/patch/fuzzy-match.js +0 -172
- package/dist-cjs/definitions/patch/index.js +0 -5
- package/dist-cjs/definitions/patch/patch-parser.js +0 -215
- package/dist-cjs/definitions/patch/sandbox-paths.js +0 -113
- package/dist-cjs/definitions/process/index.js +0 -8
- package/dist-cjs/definitions/process/process-registry.js +0 -231
- package/dist-cjs/definitions/process/process.js +0 -389
- package/dist-cjs/definitions/process/pty-keys.js +0 -259
- package/dist-cjs/definitions/process/session-slug.js +0 -145
- package/dist-cjs/definitions/quip.js +0 -198
- package/dist-cjs/definitions/search.js +0 -63
- package/dist-cjs/definitions/session-history.js +0 -72
- package/dist-cjs/definitions/shell.js +0 -184
- package/dist-cjs/definitions/slack.js +0 -183
- package/dist-cjs/definitions/web.js +0 -112
- package/dist-cjs/executors/apply-patch.js +0 -938
- package/dist-cjs/executors/arion.js +0 -125
- package/dist-cjs/executors/code-intelligence.js +0 -925
- package/dist-cjs/executors/deploy.js +0 -869
- package/dist-cjs/executors/filesystem.js +0 -1167
- package/dist-cjs/executors/frg-freshness.js +0 -627
- package/dist-cjs/executors/frg.js +0 -334
- package/dist-cjs/executors/index.js +0 -143
- package/dist-cjs/executors/learning-meta.js +0 -1165
- package/dist-cjs/executors/lsp-client.js +0 -310
- package/dist-cjs/executors/memory.js +0 -796
- package/dist-cjs/executors/meta.js +0 -226
- package/dist-cjs/executors/process-registry.js +0 -469
- package/dist-cjs/executors/pty-session-store.js +0 -34
- package/dist-cjs/executors/pty.js +0 -312
- package/dist-cjs/executors/restart.js +0 -155
- package/dist-cjs/executors/search-freshness.js +0 -234
- package/dist-cjs/executors/search-types.js +0 -56
- package/dist-cjs/executors/search.js +0 -102
- package/dist-cjs/executors/self-diagnose.js +0 -434
- package/dist-cjs/executors/session-history.js +0 -320
- package/dist-cjs/executors/shell-safety.js +0 -478
- package/dist-cjs/executors/shell.js +0 -1001
- package/dist-cjs/executors/utils.js +0 -73
- package/dist-cjs/executors/web.js +0 -547
- package/dist-cjs/extraction/content-extraction.js +0 -243
- package/dist-cjs/extraction/index.js +0 -8
- package/dist-cjs/headless-control-contract.js +0 -972
- package/dist-cjs/local-control-http-auth.js +0 -5
- package/dist-cjs/mcp/client.js +0 -185
- package/dist-cjs/mcp/connection.js +0 -484
- package/dist-cjs/mcp/index.js +0 -30
- package/dist-cjs/mcp/jsonrpc.js +0 -148
- package/dist-cjs/mcp/types.js +0 -8
- package/dist-cjs/network-control-adapter.js +0 -77
- package/dist-cjs/network-runtime/address-types.js +0 -168
- package/dist-cjs/network-runtime/db-owner-fencing.js +0 -76
- package/dist-cjs/network-runtime/delivery-receipts.js +0 -276
- package/dist-cjs/network-runtime/direct-endpoint-authority.js +0 -29
- package/dist-cjs/network-runtime/local-control-contract.js +0 -633
- package/dist-cjs/network-runtime/node-store-contract.js +0 -38
- package/dist-cjs/network-runtime/pair-route-contract.js +0 -80
- package/dist-cjs/network-runtime/peer-capabilities.js +0 -37
- package/dist-cjs/network-runtime/peer-principal-ref.js +0 -15
- package/dist-cjs/network-runtime/peer-state-machine.js +0 -129
- package/dist-cjs/network-runtime/protocol-schemas.js +0 -212
- package/dist-cjs/network-runtime/runtime-bootstrap-contract.js +0 -63
- package/dist-cjs/outlook/desktop-session.js +0 -318
- package/dist-cjs/policy.js +0 -155
- package/dist-cjs/providers/brave.js +0 -66
- package/dist-cjs/providers/duckduckgo.js +0 -180
- package/dist-cjs/providers/exa.js +0 -67
- package/dist-cjs/providers/firecrawl.js +0 -59
- package/dist-cjs/providers/index.js +0 -17
- package/dist-cjs/providers/jina.js +0 -53
- package/dist-cjs/providers/router.js +0 -100
- package/dist-cjs/providers/search-provider.js +0 -36
- package/dist-cjs/providers/tavily.js +0 -58
- package/dist-cjs/quip/desktop-session.js +0 -353
- package/dist-cjs/registry/index.js +0 -6
- package/dist-cjs/registry/registry.js +0 -761
- package/dist-cjs/runtime-socket-local-control-client.js +0 -367
- package/dist-cjs/security/dns-normalization.js +0 -22
- package/dist-cjs/security/dns-pinning.js +0 -160
- package/dist-cjs/security/external-content.js +0 -95
- package/dist-cjs/security/ssrf.js +0 -221
- package/dist-cjs/slack/desktop-session.js +0 -366
- package/dist-cjs/tool-factory.js +0 -50
- package/dist-cjs/types.js +0 -8
- package/dist-cjs/utils/retry.js +0 -169
- package/dist-cjs/utils/safe-parse-json.js +0 -164
- package/dist-cjs/utils/url.js +0 -23
package/dist-cjs/utils/retry.js
DELETED
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.fetchWithRetry = fetchWithRetry;
|
|
37
|
-
exports.fetchWithSsrf = fetchWithSsrf;
|
|
38
|
-
function createAbortError() {
|
|
39
|
-
const err = new Error("AbortError");
|
|
40
|
-
err.name = "AbortError";
|
|
41
|
-
return err;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* AbortSignal-aware sleep that rejects immediately if the signal fires during the delay.
|
|
45
|
-
*/
|
|
46
|
-
function abortAwareSleep(ms, signal) {
|
|
47
|
-
if (signal?.aborted) {
|
|
48
|
-
return Promise.reject(createAbortError());
|
|
49
|
-
}
|
|
50
|
-
return new Promise((resolve, reject) => {
|
|
51
|
-
let settled = false;
|
|
52
|
-
let abortHandler;
|
|
53
|
-
const timer = setTimeout(() => {
|
|
54
|
-
if (settled)
|
|
55
|
-
return;
|
|
56
|
-
settled = true;
|
|
57
|
-
if (signal && abortHandler) {
|
|
58
|
-
signal.removeEventListener("abort", abortHandler);
|
|
59
|
-
}
|
|
60
|
-
resolve();
|
|
61
|
-
}, ms);
|
|
62
|
-
if (signal) {
|
|
63
|
-
abortHandler = () => {
|
|
64
|
-
if (settled)
|
|
65
|
-
return;
|
|
66
|
-
settled = true;
|
|
67
|
-
signal.removeEventListener("abort", abortHandler);
|
|
68
|
-
clearTimeout(timer);
|
|
69
|
-
reject(createAbortError());
|
|
70
|
-
};
|
|
71
|
-
signal.addEventListener("abort", abortHandler, { once: true });
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
function isAbortError(err) {
|
|
76
|
-
if (!(err instanceof Error))
|
|
77
|
-
return false;
|
|
78
|
-
const domErr = err;
|
|
79
|
-
return domErr.name === "AbortError" || err.message === "AbortError";
|
|
80
|
-
}
|
|
81
|
-
function getErrorCode(err) {
|
|
82
|
-
if (typeof err === "object" &&
|
|
83
|
-
err !== null &&
|
|
84
|
-
"code" in err &&
|
|
85
|
-
typeof err.code === "string") {
|
|
86
|
-
return err.code;
|
|
87
|
-
}
|
|
88
|
-
if (err instanceof Error && err.cause) {
|
|
89
|
-
const cause = err.cause;
|
|
90
|
-
if (typeof cause.code === "string") {
|
|
91
|
-
return cause.code;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return undefined;
|
|
95
|
-
}
|
|
96
|
-
async function fetchWithRetry(url, init, options) {
|
|
97
|
-
const maxAttempts = options?.maxAttempts ?? 3;
|
|
98
|
-
const baseDelayMs = options?.baseDelayMs ?? 1000;
|
|
99
|
-
const maxDelayMs = options?.maxDelayMs ?? 30000;
|
|
100
|
-
const retryableStatuses = options?.retryableStatuses ?? [429, 500, 502, 503, 504];
|
|
101
|
-
const retryableCodes = options?.retryableCodes ?? [
|
|
102
|
-
"ECONNRESET",
|
|
103
|
-
"ETIMEDOUT",
|
|
104
|
-
"EPIPE",
|
|
105
|
-
"ENETUNREACH",
|
|
106
|
-
"EHOSTUNREACH",
|
|
107
|
-
"ECONNREFUSED",
|
|
108
|
-
"EAI_AGAIN",
|
|
109
|
-
"UND_ERR_CONNECT_TIMEOUT",
|
|
110
|
-
"UND_ERR_SOCKET",
|
|
111
|
-
];
|
|
112
|
-
const doFetch = options?.fetchFn ?? fetch;
|
|
113
|
-
const signal = init.signal ?? null;
|
|
114
|
-
if (signal?.aborted) {
|
|
115
|
-
throw createAbortError();
|
|
116
|
-
}
|
|
117
|
-
let lastError;
|
|
118
|
-
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
119
|
-
try {
|
|
120
|
-
const response = await doFetch(url, init);
|
|
121
|
-
// Check for Cloudflare 403 challenge
|
|
122
|
-
if (response.status === 403 && response.headers.get("cf-mitigated") === "challenge") {
|
|
123
|
-
if (attempt < maxAttempts - 1) {
|
|
124
|
-
// Retry with simplified UA
|
|
125
|
-
const delay = Math.min(baseDelayMs * 2 ** attempt + Math.random() * 500, maxDelayMs);
|
|
126
|
-
await abortAwareSleep(delay, signal);
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
// Last attempt - throw
|
|
130
|
-
throw new Error(`Cloudflare challenge after ${maxAttempts} attempts: ${response.status}`);
|
|
131
|
-
}
|
|
132
|
-
// Check for retryable status codes
|
|
133
|
-
if (!response.ok && retryableStatuses.includes(response.status)) {
|
|
134
|
-
if (attempt < maxAttempts - 1) {
|
|
135
|
-
const delay = Math.min(baseDelayMs * 2 ** attempt + Math.random() * 500, maxDelayMs);
|
|
136
|
-
await abortAwareSleep(delay, signal);
|
|
137
|
-
continue;
|
|
138
|
-
}
|
|
139
|
-
// Last attempt - throw
|
|
140
|
-
throw new Error(`Request failed after ${maxAttempts} attempts: ${response.status}`);
|
|
141
|
-
}
|
|
142
|
-
return response;
|
|
143
|
-
}
|
|
144
|
-
catch (err) {
|
|
145
|
-
// Re-throw AbortError immediately — do not retry aborted requests
|
|
146
|
-
if (isAbortError(err)) {
|
|
147
|
-
throw err;
|
|
148
|
-
}
|
|
149
|
-
const code = getErrorCode(err);
|
|
150
|
-
if (code && retryableCodes.includes(code) && attempt < maxAttempts - 1) {
|
|
151
|
-
const delay = Math.min(baseDelayMs * 2 ** attempt + Math.random() * 500, maxDelayMs);
|
|
152
|
-
await abortAwareSleep(delay, signal);
|
|
153
|
-
continue;
|
|
154
|
-
}
|
|
155
|
-
lastError = err;
|
|
156
|
-
throw err;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
throw lastError ?? new Error("fetchWithRetry: unreachable");
|
|
160
|
-
}
|
|
161
|
-
async function fetchWithSsrf(url, init, retryOptions) {
|
|
162
|
-
const { fetchWithDnsPinning } = await Promise.resolve().then(() => __importStar(require("../security/dns-pinning.js")));
|
|
163
|
-
return fetchWithRetry(url, init, {
|
|
164
|
-
...retryOptions,
|
|
165
|
-
fetchFn: async (attemptUrl, attemptInit) => {
|
|
166
|
-
return fetchWithDnsPinning(attemptUrl, attemptInit);
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
}
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Safe JSON extraction and parsing utilities for LLM output.
|
|
4
|
-
*
|
|
5
|
-
* Handles code fences, preamble text, bare JSON, and validates against Zod schemas.
|
|
6
|
-
* NEVER throws -- always returns a typed Result.
|
|
7
|
-
*/
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.extractJson = extractJson;
|
|
10
|
-
exports.safeParseJson = safeParseJson;
|
|
11
|
-
const MAX_SCAN_CHARS = 12_000;
|
|
12
|
-
const MAX_JSON_CANDIDATES = 16;
|
|
13
|
-
function isJsonRootStart(char) {
|
|
14
|
-
return char === "{" || char === "[";
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Find the end index of a balanced JSON root (object/array) starting at `start`.
|
|
18
|
-
* Returns -1 when no balanced root can be found.
|
|
19
|
-
*/
|
|
20
|
-
function findBalancedJsonEnd(input, start) {
|
|
21
|
-
if (start < 0 || start >= input.length)
|
|
22
|
-
return -1;
|
|
23
|
-
const first = input[start];
|
|
24
|
-
if (!isJsonRootStart(first))
|
|
25
|
-
return -1;
|
|
26
|
-
const stack = [];
|
|
27
|
-
let inString = false;
|
|
28
|
-
let escaped = false;
|
|
29
|
-
for (let i = start; i < input.length; i++) {
|
|
30
|
-
const char = input[i];
|
|
31
|
-
if (!char)
|
|
32
|
-
continue;
|
|
33
|
-
if (inString) {
|
|
34
|
-
if (escaped) {
|
|
35
|
-
escaped = false;
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
if (char === "\\") {
|
|
39
|
-
escaped = true;
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
if (char === '"') {
|
|
43
|
-
inString = false;
|
|
44
|
-
}
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
47
|
-
if (char === '"') {
|
|
48
|
-
inString = true;
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
if (char === "{" || char === "[") {
|
|
52
|
-
stack.push(char);
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
if (char === "}" || char === "]") {
|
|
56
|
-
const opener = stack.pop();
|
|
57
|
-
if (!opener)
|
|
58
|
-
return -1;
|
|
59
|
-
if ((opener === "{" && char !== "}") || (opener === "[" && char !== "]")) {
|
|
60
|
-
return -1;
|
|
61
|
-
}
|
|
62
|
-
if (stack.length === 0) {
|
|
63
|
-
return i;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return -1;
|
|
68
|
-
}
|
|
69
|
-
function collectJsonCandidates(raw) {
|
|
70
|
-
const trimmed = raw.trim();
|
|
71
|
-
if (!trimmed)
|
|
72
|
-
return [];
|
|
73
|
-
const seen = new Set();
|
|
74
|
-
const candidates = [];
|
|
75
|
-
const add = (candidate) => {
|
|
76
|
-
if (candidates.length >= MAX_JSON_CANDIDATES)
|
|
77
|
-
return;
|
|
78
|
-
const value = candidate.trim();
|
|
79
|
-
if (!value || !isJsonRootStart(value[0] ?? ""))
|
|
80
|
-
return;
|
|
81
|
-
if (seen.has(value))
|
|
82
|
-
return;
|
|
83
|
-
seen.add(value);
|
|
84
|
-
candidates.push(value);
|
|
85
|
-
};
|
|
86
|
-
const collectFromText = (text) => {
|
|
87
|
-
const bounded = text.slice(0, MAX_SCAN_CHARS);
|
|
88
|
-
for (let i = 0; i < bounded.length && candidates.length < MAX_JSON_CANDIDATES; i++) {
|
|
89
|
-
const char = bounded[i];
|
|
90
|
-
if (!char || !isJsonRootStart(char))
|
|
91
|
-
continue;
|
|
92
|
-
const end = findBalancedJsonEnd(bounded, i);
|
|
93
|
-
if (end === -1)
|
|
94
|
-
continue;
|
|
95
|
-
add(bounded.slice(i, end + 1));
|
|
96
|
-
i = end;
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
// 1) Prefer explicit code-fence blocks first.
|
|
100
|
-
const fenceRegex = /```(?:json|JSON)?\s*\n?([\s\S]*?)```/g;
|
|
101
|
-
for (const match of trimmed.matchAll(fenceRegex)) {
|
|
102
|
-
const fenced = match[1]?.trim();
|
|
103
|
-
if (!fenced)
|
|
104
|
-
continue;
|
|
105
|
-
if (isJsonRootStart(fenced[0] ?? "")) {
|
|
106
|
-
add(fenced);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
collectFromText(fenced);
|
|
110
|
-
}
|
|
111
|
-
if (candidates.length >= MAX_JSON_CANDIDATES)
|
|
112
|
-
break;
|
|
113
|
-
}
|
|
114
|
-
// 2) Full-text scan (handles preamble + trailing text + multiple snippets).
|
|
115
|
-
if (candidates.length < MAX_JSON_CANDIDATES) {
|
|
116
|
-
if (isJsonRootStart(trimmed[0] ?? "")) {
|
|
117
|
-
add(trimmed);
|
|
118
|
-
}
|
|
119
|
-
collectFromText(trimmed);
|
|
120
|
-
}
|
|
121
|
-
return candidates;
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Extract JSON substring from LLM output.
|
|
125
|
-
* Returns the first candidate found by robust balanced scanning.
|
|
126
|
-
*/
|
|
127
|
-
function extractJson(raw) {
|
|
128
|
-
return collectJsonCandidates(raw)[0] ?? null;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Safely extract and parse JSON from LLM output with Zod validation.
|
|
132
|
-
* Handles code fences, preamble text, bare JSON.
|
|
133
|
-
* NEVER throws -- always returns a typed Result.
|
|
134
|
-
*/
|
|
135
|
-
function safeParseJson(raw, schema) {
|
|
136
|
-
const candidates = collectJsonCandidates(raw);
|
|
137
|
-
if (candidates.length === 0) {
|
|
138
|
-
return { ok: false, reason: "no_json", raw };
|
|
139
|
-
}
|
|
140
|
-
let parseErrorRaw = null;
|
|
141
|
-
let schemaMismatchRaw = null;
|
|
142
|
-
for (const jsonStr of candidates) {
|
|
143
|
-
let parsed;
|
|
144
|
-
try {
|
|
145
|
-
parsed = JSON.parse(jsonStr);
|
|
146
|
-
}
|
|
147
|
-
catch {
|
|
148
|
-
parseErrorRaw = jsonStr;
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
const validated = schema.safeParse(parsed);
|
|
152
|
-
if (validated.success) {
|
|
153
|
-
return { ok: true, data: validated.data };
|
|
154
|
-
}
|
|
155
|
-
schemaMismatchRaw = jsonStr;
|
|
156
|
-
}
|
|
157
|
-
if (schemaMismatchRaw) {
|
|
158
|
-
return { ok: false, reason: "schema_mismatch", raw: schemaMismatchRaw };
|
|
159
|
-
}
|
|
160
|
-
if (parseErrorRaw) {
|
|
161
|
-
return { ok: false, reason: "parse_error", raw: parseErrorRaw };
|
|
162
|
-
}
|
|
163
|
-
return { ok: false, reason: "no_json", raw };
|
|
164
|
-
}
|
package/dist-cjs/utils/url.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normalizeGitHubUrl = normalizeGitHubUrl;
|
|
4
|
-
exports.getUserAgent = getUserAgent;
|
|
5
|
-
/**
|
|
6
|
-
* Convert GitHub blob URLs to raw.githubusercontent.com URLs.
|
|
7
|
-
* GitHub blob URLs return HTML wrappers; raw URLs return actual file content.
|
|
8
|
-
*/
|
|
9
|
-
function normalizeGitHubUrl(url) {
|
|
10
|
-
const match = url.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/blob\/(.+)$/);
|
|
11
|
-
if (match) {
|
|
12
|
-
return `https://raw.githubusercontent.com/${match[1]}/${match[2]}/${match[3]}`;
|
|
13
|
-
}
|
|
14
|
-
return url;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Get configurable User-Agent string.
|
|
18
|
-
* Reads from ARIA_USER_AGENT env var, falls back to default.
|
|
19
|
-
*/
|
|
20
|
-
function getUserAgent() {
|
|
21
|
-
const DEFAULT_UA = `Mozilla/5.0 (compatible; ARIA/1.0.0; +https://github.com/aria)`;
|
|
22
|
-
return process.env.ARIA_USER_AGENT ?? DEFAULT_UA;
|
|
23
|
-
}
|