@agent-native/core 0.171.3 → 0.172.0
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/agent/actions/set-tool-approval-policy.d.ts +8 -0
- package/dist/agent/actions/set-tool-approval-policy.js +26 -0
- package/dist/agent/harness/migrations.js +8 -0
- package/dist/agent/harness/runner.js +114 -33
- package/dist/agent/harness/store.d.ts +9 -0
- package/dist/agent/harness/store.js +87 -23
- package/dist/agent/production-agent.d.ts +3 -0
- package/dist/agent/production-agent.js +23 -1
- package/dist/agent/run-manager.js +40 -9
- package/dist/agent/tool-approval-migrations.d.ts +21 -0
- package/dist/agent/tool-approval-migrations.js +32 -0
- package/dist/agent/tool-approval-store.d.ts +11 -0
- package/dist/agent/tool-approval-store.js +76 -1
- package/dist/cli/code-agent-executor.js +20 -3
- package/dist/client/AgentPanel.d.ts +4 -1
- package/dist/client/AgentPanel.js +11 -3
- package/dist/client/AssistantChat.d.ts +5 -5
- package/dist/client/AssistantChat.js +24 -11
- package/dist/client/chat/tool-call-display.d.ts +5 -5
- package/dist/client/chat/tool-call-display.js +27 -11
- package/dist/client/resources/McpIntegrationDialog.js +5 -5
- package/dist/client/resources/mcp-integration-catalog.js +1 -1
- package/dist/coding-tools/index.d.ts +31 -0
- package/dist/coding-tools/index.js +139 -3
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/localization/core-messages/ar-SA.js +3 -0
- package/dist/localization/core-messages/de-DE.js +3 -0
- package/dist/localization/core-messages/en-US.d.ts +3 -0
- package/dist/localization/core-messages/en-US.js +3 -0
- package/dist/localization/core-messages/es-ES.js +3 -0
- package/dist/localization/core-messages/fr-FR.js +3 -0
- package/dist/localization/core-messages/hi-IN.js +3 -0
- package/dist/localization/core-messages/ja-JP.js +3 -0
- package/dist/localization/core-messages/ko-KR.js +3 -0
- package/dist/localization/core-messages/pt-BR.js +3 -0
- package/dist/localization/core-messages/zh-CN.js +3 -0
- package/dist/localization/core-messages/zh-TW.js +3 -0
- package/dist/localization/core-messages.d.ts +3 -0
- package/dist/localization/default-messages.d.ts +1 -0
- package/dist/localization/default-messages.js +7 -6
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +7 -7
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/action-discovery.js +5 -0
- package/dist/server/agent-chat/prompt-resources.d.ts +9 -0
- package/dist/server/agent-chat/prompt-resources.js +12 -2
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/release-schema.js +4 -1
- package/dist/triggers/dispatcher.d.ts +24 -0
- package/dist/triggers/dispatcher.js +76 -18
- package/dist/vite/action-types-plugin.js +4 -0
- package/package.json +2 -1
|
@@ -3,6 +3,10 @@ import fs from "node:fs";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
const DEFAULT_COMMAND_TIMEOUT_MS = 120_000;
|
|
5
5
|
const DEFAULT_MAX_OUTPUT_CHARS = 50_000;
|
|
6
|
+
/** How long `close` may lag `exit` before we settle on the exit code anyway. */
|
|
7
|
+
const CLOSE_GRACE_MS = 500;
|
|
8
|
+
/** How long a signalled process group has to exit before it is SIGKILLed. */
|
|
9
|
+
const SIGKILL_GRACE_MS = 1_000;
|
|
6
10
|
const DEFAULT_MAX_FILE_READ_CHARS = 120_000;
|
|
7
11
|
/**
|
|
8
12
|
* Output retention window for bash: keep first HEAD_CHARS + last TAIL_CHARS,
|
|
@@ -305,17 +309,45 @@ export function createCodingToolRegistry(options = {}) {
|
|
|
305
309
|
};
|
|
306
310
|
}
|
|
307
311
|
export async function runCodingCommand(command, cwd, timeoutMs, options = {}) {
|
|
312
|
+
// `detached` puts the child in its own process group so `abort` can signal
|
|
313
|
+
// everything it spawned. Without it a timeout signals only the `sh -c`
|
|
314
|
+
// wrapper, which a backgrounding command has usually already outlived.
|
|
308
315
|
const child = spawn(command, {
|
|
309
316
|
cwd,
|
|
310
317
|
shell: true,
|
|
311
318
|
stdio: ["pipe", "pipe", "pipe"],
|
|
319
|
+
detached: true,
|
|
312
320
|
env: { ...process.env, FORCE_COLOR: "0" },
|
|
313
321
|
});
|
|
314
322
|
let stdout = "";
|
|
315
323
|
let stderr = "";
|
|
316
324
|
let timedOut = false;
|
|
325
|
+
let outputStillOpen = false;
|
|
317
326
|
const startMs = Date.now();
|
|
318
|
-
const
|
|
327
|
+
const killGroup = (signal) => {
|
|
328
|
+
try {
|
|
329
|
+
if (child.pid !== undefined)
|
|
330
|
+
process.kill(-child.pid, signal);
|
|
331
|
+
else
|
|
332
|
+
child.kill(signal);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
// The group is already gone, or we never got a pid. Fall back to the
|
|
336
|
+
// direct child; if that also throws the process is already reaped.
|
|
337
|
+
try {
|
|
338
|
+
child.kill(signal);
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
/* already exited */
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
};
|
|
345
|
+
let sigkillTimer;
|
|
346
|
+
const abort = () => {
|
|
347
|
+
killGroup("SIGTERM");
|
|
348
|
+
sigkillTimer ??= setTimeout(() => killGroup("SIGKILL"), SIGKILL_GRACE_MS);
|
|
349
|
+
sigkillTimer.unref?.();
|
|
350
|
+
};
|
|
319
351
|
const timer = setTimeout(() => {
|
|
320
352
|
timedOut = true;
|
|
321
353
|
abort();
|
|
@@ -341,9 +373,39 @@ export async function runCodingCommand(command, cwd, timeoutMs, options = {}) {
|
|
|
341
373
|
options.signal.addEventListener("abort", abort, { once: true });
|
|
342
374
|
}
|
|
343
375
|
try {
|
|
376
|
+
// `close` fires only once every inherited pipe is closed, so a command that
|
|
377
|
+
// leaves a grandchild running (`npm run dev &`) never reaches it. Treat
|
|
378
|
+
// `exit` as authoritative and allow `close` a short grace to deliver
|
|
379
|
+
// buffered output, then settle on what we have.
|
|
344
380
|
const code = await new Promise((resolve, reject) => {
|
|
345
|
-
|
|
346
|
-
|
|
381
|
+
let settled = false;
|
|
382
|
+
let graceTimer;
|
|
383
|
+
const settle = (value) => {
|
|
384
|
+
if (settled)
|
|
385
|
+
return;
|
|
386
|
+
settled = true;
|
|
387
|
+
if (graceTimer)
|
|
388
|
+
clearTimeout(graceTimer);
|
|
389
|
+
resolve(value);
|
|
390
|
+
};
|
|
391
|
+
child.once("error", (err) => {
|
|
392
|
+
if (settled)
|
|
393
|
+
return;
|
|
394
|
+
settled = true;
|
|
395
|
+
if (graceTimer)
|
|
396
|
+
clearTimeout(graceTimer);
|
|
397
|
+
reject(err);
|
|
398
|
+
});
|
|
399
|
+
child.once("close", (closeCode) => settle(closeCode));
|
|
400
|
+
child.once("exit", (exitCode) => {
|
|
401
|
+
if (settled)
|
|
402
|
+
return;
|
|
403
|
+
graceTimer = setTimeout(() => {
|
|
404
|
+
outputStillOpen = true;
|
|
405
|
+
settle(exitCode);
|
|
406
|
+
}, CLOSE_GRACE_MS);
|
|
407
|
+
graceTimer.unref?.();
|
|
408
|
+
});
|
|
347
409
|
});
|
|
348
410
|
return {
|
|
349
411
|
code,
|
|
@@ -351,10 +413,16 @@ export async function runCodingCommand(command, cwd, timeoutMs, options = {}) {
|
|
|
351
413
|
stderr,
|
|
352
414
|
timedOut,
|
|
353
415
|
durationMs: Date.now() - startMs,
|
|
416
|
+
...(outputStillOpen ? { outputStillOpen: true } : {}),
|
|
354
417
|
};
|
|
355
418
|
}
|
|
356
419
|
finally {
|
|
357
420
|
clearTimeout(timer);
|
|
421
|
+
// Deliberately NOT clearing `sigkillTimer`. It exists only when abort ran,
|
|
422
|
+
// and the exit-grace path can settle before the 1s escalation fires — a
|
|
423
|
+
// descendant that ignored SIGTERM would then outlive the call untouched.
|
|
424
|
+
// Letting it run costs nothing: it is unref'd, and `killGroup` on an
|
|
425
|
+
// already-dead group is a caught no-op.
|
|
358
426
|
options.signal?.removeEventListener("abort", abort);
|
|
359
427
|
}
|
|
360
428
|
}
|
|
@@ -399,6 +467,9 @@ export function formatCodingCommandResult(result, maxChars = DEFAULT_MAX_OUTPUT_
|
|
|
399
467
|
? ""
|
|
400
468
|
: `exitCode: ${result.code}`,
|
|
401
469
|
result.timedOut ? "timedOut: true" : "",
|
|
470
|
+
result.outputStillOpen
|
|
471
|
+
? "note: the command exited but a process it started is still running and holding the output stream, so the output below may be incomplete"
|
|
472
|
+
: "",
|
|
402
473
|
result.stdout ? `stdout:\n${result.stdout}` : "",
|
|
403
474
|
result.stderr ? `stderr:\n${result.stderr}` : "",
|
|
404
475
|
].filter(Boolean);
|
|
@@ -422,6 +493,71 @@ export function truncateBashOutput(value, headChars = BASH_OUTPUT_HEAD_CHARS, ta
|
|
|
422
493
|
const omitted = value.length - max;
|
|
423
494
|
return `${value.slice(0, headChars)}\n\n...[${omitted} chars omitted]\n\n${value.slice(value.length - tailChars)}`;
|
|
424
495
|
}
|
|
496
|
+
/**
|
|
497
|
+
* Strip shell quoting so a policy regex sees the word the shell will actually
|
|
498
|
+
* run. Bash removes quotes before the command word exists, so `git 'checkout'`
|
|
499
|
+
* and `gi''t checkout` both execute `git checkout` while matching no rule
|
|
500
|
+
* written against the literal text — every denylist entry is otherwise one pair
|
|
501
|
+
* of quotes away from being bypassed.
|
|
502
|
+
*
|
|
503
|
+
* `unanalyzable` reports constructs whose executed text this pass cannot
|
|
504
|
+
* recover, so no rule matched against the canonical form can be trusted:
|
|
505
|
+
* `$'…'` ANSI-C escapes (`$'\x67it'` → `git`) and command substitution
|
|
506
|
+
* (`$(printf git) $(printf checkout) main` runs the forbidden operation while
|
|
507
|
+
* the string contains neither token). Callers must escalate rather than clear a
|
|
508
|
+
* command when this is set. Substitution inside single quotes is literal, so it
|
|
509
|
+
* does not set the flag.
|
|
510
|
+
*
|
|
511
|
+
* ponytail: plain parameter expansion (`$VAR`, `${VAR}`) can also build a token
|
|
512
|
+
* at runtime and is NOT flagged — doing so would make ordinary `cd $TMPDIR`
|
|
513
|
+
* commands require approval. Closing that needs a real shell parser, which is
|
|
514
|
+
* the upgrade path if this boundary ever has to hold against a determined
|
|
515
|
+
* attacker rather than a misbehaving model.
|
|
516
|
+
*/
|
|
517
|
+
export function canonicalizeShellCommand(command) {
|
|
518
|
+
let canonical = "";
|
|
519
|
+
let unanalyzable = false;
|
|
520
|
+
let quote = null;
|
|
521
|
+
for (let i = 0; i < command.length; i += 1) {
|
|
522
|
+
const ch = command[i];
|
|
523
|
+
if (quote === "'") {
|
|
524
|
+
if (ch === "'")
|
|
525
|
+
quote = null;
|
|
526
|
+
else
|
|
527
|
+
canonical += ch;
|
|
528
|
+
continue;
|
|
529
|
+
}
|
|
530
|
+
if (ch === "\\") {
|
|
531
|
+
const next = command[i + 1];
|
|
532
|
+
if (next === undefined)
|
|
533
|
+
continue;
|
|
534
|
+
// Backslash-newline is a line continuation: both characters vanish.
|
|
535
|
+
if (next !== "\n")
|
|
536
|
+
canonical += next;
|
|
537
|
+
i += 1;
|
|
538
|
+
continue;
|
|
539
|
+
}
|
|
540
|
+
// Substitution expands inside double quotes as well as unquoted.
|
|
541
|
+
if (ch === "`" || (ch === "$" && command[i + 1] === "(")) {
|
|
542
|
+
unanalyzable = true;
|
|
543
|
+
}
|
|
544
|
+
if (quote === '"') {
|
|
545
|
+
if (ch === '"')
|
|
546
|
+
quote = null;
|
|
547
|
+
else
|
|
548
|
+
canonical += ch;
|
|
549
|
+
continue;
|
|
550
|
+
}
|
|
551
|
+
if (ch === "$" && command[i + 1] === "'")
|
|
552
|
+
unanalyzable = true;
|
|
553
|
+
if (ch === "'" || ch === '"') {
|
|
554
|
+
quote = ch;
|
|
555
|
+
continue;
|
|
556
|
+
}
|
|
557
|
+
canonical += ch;
|
|
558
|
+
}
|
|
559
|
+
return { canonical, unanalyzable };
|
|
560
|
+
}
|
|
425
561
|
export function isReadOnlyShellCommand(command) {
|
|
426
562
|
const normalized = command.trim().toLowerCase();
|
|
427
563
|
if (!normalized)
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* Body: { json: any, fieldName?: string, type?: "map"|"array", requestSource?: string }
|
|
14
14
|
*/
|
|
15
15
|
export declare const postCollabJson: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
16
|
-
ok?: undefined;
|
|
17
16
|
error: string;
|
|
17
|
+
ok?: undefined;
|
|
18
18
|
} | {
|
|
19
19
|
error?: undefined;
|
|
20
20
|
ok: boolean;
|
|
@@ -17,11 +17,11 @@ declare const _default: import("../../action.js").ActionDefinition<{
|
|
|
17
17
|
id?: undefined;
|
|
18
18
|
provider?: undefined;
|
|
19
19
|
} | {
|
|
20
|
-
error?: undefined;
|
|
21
20
|
configured?: undefined;
|
|
22
21
|
connectPath?: undefined;
|
|
23
22
|
url: string;
|
|
24
23
|
id: string;
|
|
25
24
|
provider: string;
|
|
25
|
+
error?: undefined;
|
|
26
26
|
}>;
|
|
27
27
|
export default _default;
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "السماح دائمًا",
|
|
3
3
|
"approval.alwaysAllowHint": "الموافقة على هذا الأمر المحدد والسماح به دائمًا",
|
|
4
|
+
"approval.alwaysAllowAction": "السماح بهذا الإجراء دائمًا",
|
|
5
|
+
"approval.alwaysAllowActionHint": "الموافقة والسماح بهذا الإجراء دائمًا",
|
|
4
6
|
"approval.approve": "موافقة",
|
|
5
7
|
"approval.approved": "تمت الموافقة. جارٍ إعادة تشغيل {{tool}}...",
|
|
6
8
|
"approval.denied": "تم الرفض. لم يتم تشغيل {{tool}}.",
|
|
7
9
|
"approval.deny": "رفض",
|
|
10
|
+
"approval.moreOptions": "المزيد من خيارات الموافقة",
|
|
8
11
|
"approval.question": "هل توافق على تشغيل {{tool}}؟",
|
|
9
12
|
"auth.expiredDescription": "ربما انتهت صلاحية جلستك. سجّل الخروج ثم ادخل مجددًا لإعادة الاتصال.",
|
|
10
13
|
"auth.expiredTitle": "انتهت صلاحية الجلسة",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "Immer erlauben",
|
|
3
3
|
"approval.alwaysAllowHint": "Diesen exakten Befehl genehmigen und immer erlauben",
|
|
4
|
+
"approval.alwaysAllowAction": "Diese Aktion immer erlauben",
|
|
5
|
+
"approval.alwaysAllowActionHint": "Genehmigen und diese Aktion immer erlauben",
|
|
4
6
|
"approval.approve": "Genehmigen",
|
|
5
7
|
"approval.approved": "Genehmigt. {{tool}} wird erneut ausgeführt...",
|
|
6
8
|
"approval.denied": "Abgelehnt. {{tool}} wurde nicht ausgeführt.",
|
|
7
9
|
"approval.deny": "Ablehnen",
|
|
10
|
+
"approval.moreOptions": "Weitere Genehmigungsoptionen",
|
|
8
11
|
"approval.question": "Ausführung von {{tool}} genehmigen?",
|
|
9
12
|
"auth.expiredDescription": "Deine Sitzung ist möglicherweise abgelaufen. Melde dich ab und wieder an, um die Verbindung wiederherzustellen.",
|
|
10
13
|
"auth.expiredTitle": "Sitzung abgelaufen",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
declare const messages: {
|
|
2
2
|
readonly "approval.alwaysAllow": "Always allow";
|
|
3
3
|
readonly "approval.alwaysAllowHint": "Approve and always allow this exact command";
|
|
4
|
+
readonly "approval.alwaysAllowAction": "Always allow this action";
|
|
5
|
+
readonly "approval.alwaysAllowActionHint": "Approve and always allow this action";
|
|
4
6
|
readonly "approval.approve": "Approve";
|
|
5
7
|
readonly "approval.approved": "Approved. Re-running {{tool}}...";
|
|
6
8
|
readonly "approval.denied": "Denied. {{tool}} did not run.";
|
|
7
9
|
readonly "approval.deny": "Deny";
|
|
10
|
+
readonly "approval.moreOptions": "More approval options";
|
|
8
11
|
readonly "approval.question": "Approve to run {{tool}}?";
|
|
9
12
|
readonly "auth.expiredDescription": "Your session may have expired. Log out and log back in to reconnect.";
|
|
10
13
|
readonly "auth.expiredTitle": "Session expired";
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "Always allow",
|
|
3
3
|
"approval.alwaysAllowHint": "Approve and always allow this exact command",
|
|
4
|
+
"approval.alwaysAllowAction": "Always allow this action",
|
|
5
|
+
"approval.alwaysAllowActionHint": "Approve and always allow this action",
|
|
4
6
|
"approval.approve": "Approve",
|
|
5
7
|
"approval.approved": "Approved. Re-running {{tool}}...",
|
|
6
8
|
"approval.denied": "Denied. {{tool}} did not run.",
|
|
7
9
|
"approval.deny": "Deny",
|
|
10
|
+
"approval.moreOptions": "More approval options",
|
|
8
11
|
"approval.question": "Approve to run {{tool}}?",
|
|
9
12
|
"auth.expiredDescription": "Your session may have expired. Log out and log back in to reconnect.",
|
|
10
13
|
"auth.expiredTitle": "Session expired",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "Permitir siempre",
|
|
3
3
|
"approval.alwaysAllowHint": "Aprobar y permitir siempre este comando exacto",
|
|
4
|
+
"approval.alwaysAllowAction": "Permitir siempre esta acción",
|
|
5
|
+
"approval.alwaysAllowActionHint": "Aprobar y permitir siempre esta acción",
|
|
4
6
|
"approval.approve": "Aprobar",
|
|
5
7
|
"approval.approved": "Aprobado. Ejecutando {{tool}} de nuevo...",
|
|
6
8
|
"approval.denied": "Denegado. {{tool}} no se ejecutó.",
|
|
7
9
|
"approval.deny": "Denegar",
|
|
10
|
+
"approval.moreOptions": "Más opciones de aprobación",
|
|
8
11
|
"approval.question": "¿Aprobar la ejecución de {{tool}}?",
|
|
9
12
|
"auth.expiredDescription": "Es posible que tu sesión haya caducado. Cierra sesión y vuelve a iniciarla para reconectarte.",
|
|
10
13
|
"auth.expiredTitle": "Sesión caducada",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "Toujours autoriser",
|
|
3
3
|
"approval.alwaysAllowHint": "Approuver et toujours autoriser cette commande exacte",
|
|
4
|
+
"approval.alwaysAllowAction": "Toujours autoriser cette action",
|
|
5
|
+
"approval.alwaysAllowActionHint": "Approuver et toujours autoriser cette action",
|
|
4
6
|
"approval.approve": "Approuver",
|
|
5
7
|
"approval.approved": "Approuvé. Nouvelle exécution de {{tool}}...",
|
|
6
8
|
"approval.denied": "Refusé. {{tool}} n’a pas été exécuté.",
|
|
7
9
|
"approval.deny": "Refuser",
|
|
10
|
+
"approval.moreOptions": "Plus d’options d’approbation",
|
|
8
11
|
"approval.question": "Approuver l’exécution de {{tool}} ?",
|
|
9
12
|
"auth.expiredDescription": "Votre session a peut-être expiré. Déconnectez-vous, puis reconnectez-vous pour rétablir la connexion.",
|
|
10
13
|
"auth.expiredTitle": "Session expirée",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "हमेशा अनुमति दें",
|
|
3
3
|
"approval.alwaysAllowHint": "इस सटीक कमांड को स्वीकृत करें और हमेशा अनुमति दें",
|
|
4
|
+
"approval.alwaysAllowAction": "इस कार्रवाई को हमेशा अनुमति दें",
|
|
5
|
+
"approval.alwaysAllowActionHint": "स्वीकृत करें और इस कार्रवाई को हमेशा अनुमति दें",
|
|
4
6
|
"approval.approve": "स्वीकृत करें",
|
|
5
7
|
"approval.approved": "स्वीकृत। {{tool}} को फिर से चलाया जा रहा है...",
|
|
6
8
|
"approval.denied": "अस्वीकृत। {{tool}} नहीं चला।",
|
|
7
9
|
"approval.deny": "अस्वीकार करें",
|
|
10
|
+
"approval.moreOptions": "अनुमति के और विकल्प",
|
|
8
11
|
"approval.question": "क्या {{tool}} को चलाने की अनुमति दें?",
|
|
9
12
|
"auth.expiredDescription": "आपका सत्र समाप्त हो गया हो सकता है। दोबारा कनेक्ट करने के लिए लॉग आउट करके फिर लॉग इन करें।",
|
|
10
13
|
"auth.expiredTitle": "सत्र समाप्त हो गया",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "常に許可",
|
|
3
3
|
"approval.alwaysAllowHint": "この完全に同じコマンドを承認し、今後も常に許可します",
|
|
4
|
+
"approval.alwaysAllowAction": "このアクションを常に許可",
|
|
5
|
+
"approval.alwaysAllowActionHint": "承認してこのアクションを常に許可します",
|
|
4
6
|
"approval.approve": "承認",
|
|
5
7
|
"approval.approved": "承認しました。{{tool}} を再実行しています...",
|
|
6
8
|
"approval.denied": "拒否しました。{{tool}} は実行されませんでした。",
|
|
7
9
|
"approval.deny": "拒否",
|
|
10
|
+
"approval.moreOptions": "その他の承認オプション",
|
|
8
11
|
"approval.question": "{{tool}} の実行を承認しますか?",
|
|
9
12
|
"auth.expiredDescription": "セッションの有効期限が切れた可能性があります。再接続するには、ログアウトしてからもう一度ログインしてください。",
|
|
10
13
|
"auth.expiredTitle": "セッションの有効期限が切れました",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "항상 허용",
|
|
3
3
|
"approval.alwaysAllowHint": "이 명령과 정확히 일치하는 명령을 승인하고 항상 허용합니다",
|
|
4
|
+
"approval.alwaysAllowAction": "이 작업 항상 허용",
|
|
5
|
+
"approval.alwaysAllowActionHint": "승인하고 이 작업을 항상 허용합니다",
|
|
4
6
|
"approval.approve": "승인",
|
|
5
7
|
"approval.approved": "승인했습니다. {{tool}}을(를) 다시 실행하는 중...",
|
|
6
8
|
"approval.denied": "거부했습니다. {{tool}}이(가) 실행되지 않았습니다.",
|
|
7
9
|
"approval.deny": "거부",
|
|
10
|
+
"approval.moreOptions": "추가 승인 옵션",
|
|
8
11
|
"approval.question": "{{tool}} 실행을 승인하시겠습니까?",
|
|
9
12
|
"auth.expiredDescription": "세션이 만료되었을 수 있습니다. 다시 연결하려면 로그아웃한 후 다시 로그인하세요.",
|
|
10
13
|
"auth.expiredTitle": "세션이 만료되었습니다",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "Sempre permitir",
|
|
3
3
|
"approval.alwaysAllowHint": "Aprovar e sempre permitir este comando exato",
|
|
4
|
+
"approval.alwaysAllowAction": "Sempre permitir esta ação",
|
|
5
|
+
"approval.alwaysAllowActionHint": "Aprovar e sempre permitir esta ação",
|
|
4
6
|
"approval.approve": "Aprovar",
|
|
5
7
|
"approval.approved": "Aprovado. Executando {{tool}} novamente...",
|
|
6
8
|
"approval.denied": "Negado. {{tool}} não foi executado.",
|
|
7
9
|
"approval.deny": "Negar",
|
|
10
|
+
"approval.moreOptions": "Mais opções de aprovação",
|
|
8
11
|
"approval.question": "Aprovar a execução de {{tool}}?",
|
|
9
12
|
"auth.expiredDescription": "Sua sessão pode ter expirado. Saia e entre novamente para restabelecer a conexão.",
|
|
10
13
|
"auth.expiredTitle": "Sessão expirada",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "始终允许",
|
|
3
3
|
"approval.alwaysAllowHint": "批准并始终允许此完全相同的命令",
|
|
4
|
+
"approval.alwaysAllowAction": "始终允许此操作",
|
|
5
|
+
"approval.alwaysAllowActionHint": "批准并始终允许此操作",
|
|
4
6
|
"approval.approve": "批准",
|
|
5
7
|
"approval.approved": "已批准。正在重新运行 {{tool}}...",
|
|
6
8
|
"approval.denied": "已拒绝。{{tool}} 未运行。",
|
|
7
9
|
"approval.deny": "拒绝",
|
|
10
|
+
"approval.moreOptions": "更多批准选项",
|
|
8
11
|
"approval.question": "批准运行 {{tool}}?",
|
|
9
12
|
"auth.expiredDescription": "您的会话可能已过期。请退出登录后重新登录以恢复连接。",
|
|
10
13
|
"auth.expiredTitle": "会话已过期",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
const messages = {
|
|
2
2
|
"approval.alwaysAllow": "一律允許",
|
|
3
3
|
"approval.alwaysAllowHint": "核准並一律允許這個完全相同的命令",
|
|
4
|
+
"approval.alwaysAllowAction": "一律允許此動作",
|
|
5
|
+
"approval.alwaysAllowActionHint": "核准並一律允許此動作",
|
|
4
6
|
"approval.approve": "核准",
|
|
5
7
|
"approval.approved": "已核准。正在重新執行 {{tool}}...",
|
|
6
8
|
"approval.denied": "已拒絕。{{tool}} 未執行。",
|
|
7
9
|
"approval.deny": "拒絕",
|
|
10
|
+
"approval.moreOptions": "更多核准選項",
|
|
8
11
|
"approval.question": "要核准執行 {{tool}} 嗎?",
|
|
9
12
|
"auth.expiredDescription": "您的工作階段可能已過期。請登出後重新登入以恢復連線。",
|
|
10
13
|
"auth.expiredTitle": "工作階段已過期",
|
|
@@ -3,10 +3,13 @@ export type CoreLocaleMessages = Record<string, unknown>;
|
|
|
3
3
|
export declare const englishAgentChatMessages: {
|
|
4
4
|
readonly "approval.alwaysAllow": "Always allow";
|
|
5
5
|
readonly "approval.alwaysAllowHint": "Approve and always allow this exact command";
|
|
6
|
+
readonly "approval.alwaysAllowAction": "Always allow this action";
|
|
7
|
+
readonly "approval.alwaysAllowActionHint": "Approve and always allow this action";
|
|
6
8
|
readonly "approval.approve": "Approve";
|
|
7
9
|
readonly "approval.approved": "Approved. Re-running {{tool}}...";
|
|
8
10
|
readonly "approval.denied": "Denied. {{tool}} did not run.";
|
|
9
11
|
readonly "approval.deny": "Deny";
|
|
12
|
+
readonly "approval.moreOptions": "More approval options";
|
|
10
13
|
readonly "approval.question": "Approve to run {{tool}}?";
|
|
11
14
|
readonly "auth.expiredDescription": "Your session may have expired. Log out and log back in to reconnect.";
|
|
12
15
|
readonly "auth.expiredTitle": "Session expired";
|
|
@@ -1015,11 +1015,12 @@ const messages = {
|
|
|
1015
1015
|
customDescription: "Paste a Streamable HTTP or SSE endpoint and optional headers.",
|
|
1016
1016
|
oauthNotice: "This provider usually requires an OAuth setup. Follow the provider docs, or add an Authorization header if your endpoint supports token-based access.",
|
|
1017
1017
|
providerSetupRequired: "Provider setup required",
|
|
1018
|
-
providerSetupDescription: "Complete the required setup in {{name}} first. Then return here to
|
|
1019
|
-
providerSetupFormDescription: "
|
|
1020
|
-
continueToConnect: "
|
|
1021
|
-
setupTitle: "
|
|
1018
|
+
providerSetupDescription: "Complete the required setup in {{name}} first. Then return here to connect your account.",
|
|
1019
|
+
providerSetupFormDescription: "Complete provider setup before connecting your account.",
|
|
1020
|
+
continueToConnect: "Connect my account",
|
|
1021
|
+
setupTitle: "Connect {{name}}",
|
|
1022
1022
|
personal: "Personal",
|
|
1023
|
+
personalConnection: "Personal connection",
|
|
1023
1024
|
organization: "Organization",
|
|
1024
1025
|
scopeQuestion: "Who should be able to use this connection?",
|
|
1025
1026
|
scopeChoiceTitle: "Who should use this?",
|
|
@@ -1044,7 +1045,7 @@ const messages = {
|
|
|
1044
1045
|
descriptionPlaceholder: "Description (optional)",
|
|
1045
1046
|
headersPlaceholder: "Authorization: Bearer <token>",
|
|
1046
1047
|
openSetupDocs: "Open setup docs",
|
|
1047
|
-
viewSetup: "
|
|
1048
|
+
viewSetup: "Open setup guide",
|
|
1048
1049
|
test: "Test",
|
|
1049
1050
|
toolsAvailable_one: "{{count}} tool available",
|
|
1050
1051
|
toolsAvailable_other: "{{count}} tools available",
|
|
@@ -1122,7 +1123,7 @@ const messages = {
|
|
|
1122
1123
|
atlassian: {
|
|
1123
1124
|
description: "Read and write Jira issues and Confluence content.",
|
|
1124
1125
|
useCase: "Project management, issue tracking, documentation, team collaboration",
|
|
1125
|
-
setupNote: "Atlassian
|
|
1126
|
+
setupNote: "Ask your Atlassian admin to allow the Clips app domain and enable Rovo/MCP with Read, Write, and Search permissions for your Jira site.",
|
|
1126
1127
|
},
|
|
1127
1128
|
cloudflare: {
|
|
1128
1129
|
description: "Search and operate Cloudflare services through its integration.",
|
|
@@ -76,7 +76,6 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
|
|
|
76
76
|
}>>;
|
|
77
77
|
}, z.core.$strip>>, {
|
|
78
78
|
id?: undefined;
|
|
79
|
-
provider?: undefined;
|
|
80
79
|
deleted?: undefined;
|
|
81
80
|
providers: {
|
|
82
81
|
id: string;
|
|
@@ -88,34 +87,35 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
|
|
|
88
87
|
updatedAt: number;
|
|
89
88
|
}[];
|
|
90
89
|
count: number;
|
|
90
|
+
provider?: undefined;
|
|
91
91
|
found?: undefined;
|
|
92
92
|
registered?: undefined;
|
|
93
93
|
label?: undefined;
|
|
94
94
|
message?: undefined;
|
|
95
95
|
} | {
|
|
96
|
-
count?: undefined;
|
|
97
96
|
id?: undefined;
|
|
98
97
|
deleted?: undefined;
|
|
99
98
|
providers?: undefined;
|
|
99
|
+
count?: undefined;
|
|
100
100
|
found: boolean;
|
|
101
101
|
provider: import("../custom-registry.js").CustomProviderConfig;
|
|
102
102
|
registered?: undefined;
|
|
103
103
|
label?: undefined;
|
|
104
104
|
message?: undefined;
|
|
105
105
|
} | {
|
|
106
|
-
count?: undefined;
|
|
107
|
-
provider?: undefined;
|
|
108
106
|
deleted?: undefined;
|
|
109
107
|
providers?: undefined;
|
|
108
|
+
count?: undefined;
|
|
109
|
+
provider?: undefined;
|
|
110
110
|
found: boolean;
|
|
111
111
|
id: string;
|
|
112
112
|
registered?: undefined;
|
|
113
113
|
label?: undefined;
|
|
114
114
|
message?: undefined;
|
|
115
115
|
} | {
|
|
116
|
+
providers?: undefined;
|
|
116
117
|
count?: undefined;
|
|
117
118
|
provider?: undefined;
|
|
118
|
-
providers?: undefined;
|
|
119
119
|
found?: undefined;
|
|
120
120
|
deleted: boolean;
|
|
121
121
|
id: string;
|
|
@@ -123,10 +123,10 @@ export declare function createCustomProviderRegistrationAction<TSchema extends Z
|
|
|
123
123
|
label?: undefined;
|
|
124
124
|
message?: undefined;
|
|
125
125
|
} | {
|
|
126
|
-
count?: undefined;
|
|
127
|
-
provider?: undefined;
|
|
128
126
|
deleted?: undefined;
|
|
129
127
|
providers?: undefined;
|
|
128
|
+
count?: undefined;
|
|
129
|
+
provider?: undefined;
|
|
130
130
|
found?: undefined;
|
|
131
131
|
registered: boolean;
|
|
132
132
|
id: string;
|
|
@@ -312,9 +312,8 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
|
|
|
312
312
|
scope?: "org" | "user" | undefined;
|
|
313
313
|
}, {
|
|
314
314
|
id?: undefined;
|
|
315
|
-
message?: undefined;
|
|
316
|
-
deleted?: undefined;
|
|
317
315
|
provider?: undefined;
|
|
316
|
+
deleted?: undefined;
|
|
318
317
|
providers: {
|
|
319
318
|
id: string;
|
|
320
319
|
label: string;
|
|
@@ -328,41 +327,42 @@ export declare function createProviderApiActions(runtime: Pick<ProviderApiRuntim
|
|
|
328
327
|
found?: undefined;
|
|
329
328
|
registered?: undefined;
|
|
330
329
|
label?: undefined;
|
|
330
|
+
message?: undefined;
|
|
331
331
|
} | {
|
|
332
332
|
id?: undefined;
|
|
333
|
-
message?: undefined;
|
|
334
333
|
deleted?: undefined;
|
|
335
|
-
count?: undefined;
|
|
336
334
|
providers?: undefined;
|
|
335
|
+
count?: undefined;
|
|
337
336
|
found: boolean;
|
|
338
337
|
provider: import("../custom-registry.js").CustomProviderConfig;
|
|
339
338
|
registered?: undefined;
|
|
340
339
|
label?: undefined;
|
|
341
|
-
} | {
|
|
342
340
|
message?: undefined;
|
|
343
|
-
|
|
344
|
-
count?: undefined;
|
|
341
|
+
} | {
|
|
345
342
|
provider?: undefined;
|
|
343
|
+
deleted?: undefined;
|
|
346
344
|
providers?: undefined;
|
|
345
|
+
count?: undefined;
|
|
347
346
|
found: boolean;
|
|
348
347
|
id: string;
|
|
349
348
|
registered?: undefined;
|
|
350
349
|
label?: undefined;
|
|
351
|
-
} | {
|
|
352
350
|
message?: undefined;
|
|
353
|
-
|
|
351
|
+
} | {
|
|
354
352
|
provider?: undefined;
|
|
355
353
|
providers?: undefined;
|
|
354
|
+
count?: undefined;
|
|
356
355
|
found?: undefined;
|
|
357
356
|
deleted: boolean;
|
|
358
357
|
id: string;
|
|
359
358
|
registered?: undefined;
|
|
360
359
|
label?: undefined;
|
|
360
|
+
message?: undefined;
|
|
361
361
|
} | {
|
|
362
|
-
deleted?: undefined;
|
|
363
|
-
count?: undefined;
|
|
364
362
|
provider?: undefined;
|
|
363
|
+
deleted?: undefined;
|
|
365
364
|
providers?: undefined;
|
|
365
|
+
count?: undefined;
|
|
366
366
|
found?: undefined;
|
|
367
367
|
registered: boolean;
|
|
368
368
|
id: string;
|
|
@@ -48,8 +48,8 @@ export declare function handleUpdateResource(event: any): Promise<import("./stor
|
|
|
48
48
|
}>;
|
|
49
49
|
/** DELETE /_agent-native/resources/:id — delete a resource */
|
|
50
50
|
export declare function handleDeleteResource(event: any): Promise<{
|
|
51
|
-
ok?: undefined;
|
|
52
51
|
error: string;
|
|
52
|
+
ok?: undefined;
|
|
53
53
|
} | {
|
|
54
54
|
error?: undefined;
|
|
55
55
|
ok: boolean;
|