@robota-sdk/agent-cli 3.0.0-beta.1 → 3.0.0-beta.2
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/node/bin.cjs +42 -13
- package/dist/node/bin.js +1 -1
- package/dist/node/{chunk-C56WFH5S.js → chunk-OH7DJXHF.js} +42 -13
- package/dist/node/index.cjs +42 -13
- package/dist/node/index.js +1 -1
- package/package.json +3 -3
package/dist/node/bin.cjs
CHANGED
|
@@ -625,7 +625,7 @@ function InputArea({ onSubmit, isDisabled, registry }) {
|
|
|
625
625
|
var import_react4 = __toESM(require("react"), 1);
|
|
626
626
|
var import_ink7 = require("ink");
|
|
627
627
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
628
|
-
var OPTIONS = ["Allow", "Deny"];
|
|
628
|
+
var OPTIONS = ["Allow", "Allow always (this session)", "Deny"];
|
|
629
629
|
function formatArgs2(args) {
|
|
630
630
|
const entries = Object.entries(args);
|
|
631
631
|
if (entries.length === 0) return "(no arguments)";
|
|
@@ -641,10 +641,12 @@ function PermissionPrompt({ request }) {
|
|
|
641
641
|
setSelected(0);
|
|
642
642
|
}
|
|
643
643
|
const doResolve = import_react4.default.useCallback(
|
|
644
|
-
(
|
|
644
|
+
(index) => {
|
|
645
645
|
if (resolvedRef.current) return;
|
|
646
646
|
resolvedRef.current = true;
|
|
647
|
-
request.resolve(
|
|
647
|
+
if (index === 0) request.resolve(true);
|
|
648
|
+
else if (index === 1) request.resolve("allow-session");
|
|
649
|
+
else request.resolve(false);
|
|
648
650
|
},
|
|
649
651
|
[request]
|
|
650
652
|
);
|
|
@@ -655,11 +657,13 @@ function PermissionPrompt({ request }) {
|
|
|
655
657
|
} else if (key.downArrow || key.rightArrow) {
|
|
656
658
|
setSelected((prev) => prev < OPTIONS.length - 1 ? prev + 1 : prev);
|
|
657
659
|
} else if (key.return) {
|
|
658
|
-
doResolve(selected
|
|
659
|
-
} else if (input === "y" || input === "
|
|
660
|
-
doResolve(
|
|
661
|
-
} else if (input === "
|
|
662
|
-
doResolve(
|
|
660
|
+
doResolve(selected);
|
|
661
|
+
} else if (input === "y" || input === "1") {
|
|
662
|
+
doResolve(0);
|
|
663
|
+
} else if (input === "a" || input === "2") {
|
|
664
|
+
doResolve(1);
|
|
665
|
+
} else if (input === "n" || input === "d" || input === "3") {
|
|
666
|
+
doResolve(2);
|
|
663
667
|
}
|
|
664
668
|
});
|
|
665
669
|
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_ink7.Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [
|
|
@@ -719,11 +723,11 @@ function useSession(props) {
|
|
|
719
723
|
setPermissionRequest({
|
|
720
724
|
toolName: next.toolName,
|
|
721
725
|
toolArgs: next.toolArgs,
|
|
722
|
-
resolve: (
|
|
726
|
+
resolve: (result) => {
|
|
723
727
|
permissionQueueRef.current.shift();
|
|
724
728
|
processingRef.current = false;
|
|
725
729
|
setPermissionRequest(null);
|
|
726
|
-
next.resolve(
|
|
730
|
+
next.resolve(result);
|
|
727
731
|
setTimeout(() => processNextPermission(), 0);
|
|
728
732
|
}
|
|
729
733
|
});
|
|
@@ -813,6 +817,26 @@ async function executeSlashCommand(cmd, parts, session, addMessage, setMessages,
|
|
|
813
817
|
Messages: ${session.getMessageCount()}`
|
|
814
818
|
});
|
|
815
819
|
return true;
|
|
820
|
+
case "permissions": {
|
|
821
|
+
const mode = session.getPermissionMode();
|
|
822
|
+
const sessionAllowed = session.getSessionAllowedTools();
|
|
823
|
+
const lines = [`Permission mode: ${mode}`];
|
|
824
|
+
if (sessionAllowed.length > 0) {
|
|
825
|
+
lines.push(`Session-approved tools: ${sessionAllowed.join(", ")}`);
|
|
826
|
+
} else {
|
|
827
|
+
lines.push("No session-approved tools.");
|
|
828
|
+
}
|
|
829
|
+
addMessage({ role: "system", content: lines.join("\n") });
|
|
830
|
+
return true;
|
|
831
|
+
}
|
|
832
|
+
case "context": {
|
|
833
|
+
const ctx = session.getContextState();
|
|
834
|
+
addMessage({
|
|
835
|
+
role: "system",
|
|
836
|
+
content: `Context: ${ctx.usedTokens.toLocaleString()} / ${ctx.maxTokens.toLocaleString()} tokens (${Math.round(ctx.usedPercentage)}%)`
|
|
837
|
+
});
|
|
838
|
+
return true;
|
|
839
|
+
}
|
|
816
840
|
case "exit":
|
|
817
841
|
exit();
|
|
818
842
|
return true;
|
|
@@ -860,8 +884,12 @@ async function runSessionPrompt(prompt, session, addMessage, clearStreamingText,
|
|
|
860
884
|
setContextPercentage(session.getContextState().usedPercentage);
|
|
861
885
|
} catch (err) {
|
|
862
886
|
clearStreamingText();
|
|
863
|
-
|
|
864
|
-
|
|
887
|
+
if (err instanceof DOMException && err.name === "AbortError") {
|
|
888
|
+
addMessage({ role: "system", content: "Cancelled." });
|
|
889
|
+
} else {
|
|
890
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
891
|
+
addMessage({ role: "system", content: `Error: ${errMsg}` });
|
|
892
|
+
}
|
|
865
893
|
} finally {
|
|
866
894
|
setIsThinking(false);
|
|
867
895
|
}
|
|
@@ -945,8 +973,9 @@ function App(props) {
|
|
|
945
973
|
(0, import_ink8.useInput)(
|
|
946
974
|
(_input, key) => {
|
|
947
975
|
if (key.ctrl && _input === "c") exit();
|
|
976
|
+
if (key.escape && isThinking) session.abort();
|
|
948
977
|
},
|
|
949
|
-
{ isActive: !permissionRequest
|
|
978
|
+
{ isActive: !permissionRequest }
|
|
950
979
|
);
|
|
951
980
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_ink8.Box, { flexDirection: "column", children: [
|
|
952
981
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_ink8.Box, { flexDirection: "column", paddingX: 1, marginBottom: 1, children: [
|
package/dist/node/bin.js
CHANGED
|
@@ -607,7 +607,7 @@ function InputArea({ onSubmit, isDisabled, registry }) {
|
|
|
607
607
|
import React4 from "react";
|
|
608
608
|
import { Box as Box5, Text as Text7, useInput as useInput3 } from "ink";
|
|
609
609
|
import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
610
|
-
var OPTIONS = ["Allow", "Deny"];
|
|
610
|
+
var OPTIONS = ["Allow", "Allow always (this session)", "Deny"];
|
|
611
611
|
function formatArgs2(args) {
|
|
612
612
|
const entries = Object.entries(args);
|
|
613
613
|
if (entries.length === 0) return "(no arguments)";
|
|
@@ -623,10 +623,12 @@ function PermissionPrompt({ request }) {
|
|
|
623
623
|
setSelected(0);
|
|
624
624
|
}
|
|
625
625
|
const doResolve = React4.useCallback(
|
|
626
|
-
(
|
|
626
|
+
(index) => {
|
|
627
627
|
if (resolvedRef.current) return;
|
|
628
628
|
resolvedRef.current = true;
|
|
629
|
-
request.resolve(
|
|
629
|
+
if (index === 0) request.resolve(true);
|
|
630
|
+
else if (index === 1) request.resolve("allow-session");
|
|
631
|
+
else request.resolve(false);
|
|
630
632
|
},
|
|
631
633
|
[request]
|
|
632
634
|
);
|
|
@@ -637,11 +639,13 @@ function PermissionPrompt({ request }) {
|
|
|
637
639
|
} else if (key.downArrow || key.rightArrow) {
|
|
638
640
|
setSelected((prev) => prev < OPTIONS.length - 1 ? prev + 1 : prev);
|
|
639
641
|
} else if (key.return) {
|
|
640
|
-
doResolve(selected
|
|
641
|
-
} else if (input === "y" || input === "
|
|
642
|
-
doResolve(
|
|
643
|
-
} else if (input === "
|
|
644
|
-
doResolve(
|
|
642
|
+
doResolve(selected);
|
|
643
|
+
} else if (input === "y" || input === "1") {
|
|
644
|
+
doResolve(0);
|
|
645
|
+
} else if (input === "a" || input === "2") {
|
|
646
|
+
doResolve(1);
|
|
647
|
+
} else if (input === "n" || input === "d" || input === "3") {
|
|
648
|
+
doResolve(2);
|
|
645
649
|
}
|
|
646
650
|
});
|
|
647
651
|
return /* @__PURE__ */ jsxs5(Box5, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [
|
|
@@ -701,11 +705,11 @@ function useSession(props) {
|
|
|
701
705
|
setPermissionRequest({
|
|
702
706
|
toolName: next.toolName,
|
|
703
707
|
toolArgs: next.toolArgs,
|
|
704
|
-
resolve: (
|
|
708
|
+
resolve: (result) => {
|
|
705
709
|
permissionQueueRef.current.shift();
|
|
706
710
|
processingRef.current = false;
|
|
707
711
|
setPermissionRequest(null);
|
|
708
|
-
next.resolve(
|
|
712
|
+
next.resolve(result);
|
|
709
713
|
setTimeout(() => processNextPermission(), 0);
|
|
710
714
|
}
|
|
711
715
|
});
|
|
@@ -795,6 +799,26 @@ async function executeSlashCommand(cmd, parts, session, addMessage, setMessages,
|
|
|
795
799
|
Messages: ${session.getMessageCount()}`
|
|
796
800
|
});
|
|
797
801
|
return true;
|
|
802
|
+
case "permissions": {
|
|
803
|
+
const mode = session.getPermissionMode();
|
|
804
|
+
const sessionAllowed = session.getSessionAllowedTools();
|
|
805
|
+
const lines = [`Permission mode: ${mode}`];
|
|
806
|
+
if (sessionAllowed.length > 0) {
|
|
807
|
+
lines.push(`Session-approved tools: ${sessionAllowed.join(", ")}`);
|
|
808
|
+
} else {
|
|
809
|
+
lines.push("No session-approved tools.");
|
|
810
|
+
}
|
|
811
|
+
addMessage({ role: "system", content: lines.join("\n") });
|
|
812
|
+
return true;
|
|
813
|
+
}
|
|
814
|
+
case "context": {
|
|
815
|
+
const ctx = session.getContextState();
|
|
816
|
+
addMessage({
|
|
817
|
+
role: "system",
|
|
818
|
+
content: `Context: ${ctx.usedTokens.toLocaleString()} / ${ctx.maxTokens.toLocaleString()} tokens (${Math.round(ctx.usedPercentage)}%)`
|
|
819
|
+
});
|
|
820
|
+
return true;
|
|
821
|
+
}
|
|
798
822
|
case "exit":
|
|
799
823
|
exit();
|
|
800
824
|
return true;
|
|
@@ -842,8 +866,12 @@ async function runSessionPrompt(prompt, session, addMessage, clearStreamingText,
|
|
|
842
866
|
setContextPercentage(session.getContextState().usedPercentage);
|
|
843
867
|
} catch (err) {
|
|
844
868
|
clearStreamingText();
|
|
845
|
-
|
|
846
|
-
|
|
869
|
+
if (err instanceof DOMException && err.name === "AbortError") {
|
|
870
|
+
addMessage({ role: "system", content: "Cancelled." });
|
|
871
|
+
} else {
|
|
872
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
873
|
+
addMessage({ role: "system", content: `Error: ${errMsg}` });
|
|
874
|
+
}
|
|
847
875
|
} finally {
|
|
848
876
|
setIsThinking(false);
|
|
849
877
|
}
|
|
@@ -927,8 +955,9 @@ function App(props) {
|
|
|
927
955
|
useInput4(
|
|
928
956
|
(_input, key) => {
|
|
929
957
|
if (key.ctrl && _input === "c") exit();
|
|
958
|
+
if (key.escape && isThinking) session.abort();
|
|
930
959
|
},
|
|
931
|
-
{ isActive: !permissionRequest
|
|
960
|
+
{ isActive: !permissionRequest }
|
|
932
961
|
);
|
|
933
962
|
return /* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", children: [
|
|
934
963
|
/* @__PURE__ */ jsxs6(Box6, { flexDirection: "column", paddingX: 1, marginBottom: 1, children: [
|
package/dist/node/index.cjs
CHANGED
|
@@ -641,7 +641,7 @@ function InputArea({ onSubmit, isDisabled, registry }) {
|
|
|
641
641
|
var import_react4 = __toESM(require("react"), 1);
|
|
642
642
|
var import_ink7 = require("ink");
|
|
643
643
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
644
|
-
var OPTIONS = ["Allow", "Deny"];
|
|
644
|
+
var OPTIONS = ["Allow", "Allow always (this session)", "Deny"];
|
|
645
645
|
function formatArgs2(args) {
|
|
646
646
|
const entries = Object.entries(args);
|
|
647
647
|
if (entries.length === 0) return "(no arguments)";
|
|
@@ -657,10 +657,12 @@ function PermissionPrompt({ request }) {
|
|
|
657
657
|
setSelected(0);
|
|
658
658
|
}
|
|
659
659
|
const doResolve = import_react4.default.useCallback(
|
|
660
|
-
(
|
|
660
|
+
(index) => {
|
|
661
661
|
if (resolvedRef.current) return;
|
|
662
662
|
resolvedRef.current = true;
|
|
663
|
-
request.resolve(
|
|
663
|
+
if (index === 0) request.resolve(true);
|
|
664
|
+
else if (index === 1) request.resolve("allow-session");
|
|
665
|
+
else request.resolve(false);
|
|
664
666
|
},
|
|
665
667
|
[request]
|
|
666
668
|
);
|
|
@@ -671,11 +673,13 @@ function PermissionPrompt({ request }) {
|
|
|
671
673
|
} else if (key.downArrow || key.rightArrow) {
|
|
672
674
|
setSelected((prev) => prev < OPTIONS.length - 1 ? prev + 1 : prev);
|
|
673
675
|
} else if (key.return) {
|
|
674
|
-
doResolve(selected
|
|
675
|
-
} else if (input === "y" || input === "
|
|
676
|
-
doResolve(
|
|
677
|
-
} else if (input === "
|
|
678
|
-
doResolve(
|
|
676
|
+
doResolve(selected);
|
|
677
|
+
} else if (input === "y" || input === "1") {
|
|
678
|
+
doResolve(0);
|
|
679
|
+
} else if (input === "a" || input === "2") {
|
|
680
|
+
doResolve(1);
|
|
681
|
+
} else if (input === "n" || input === "d" || input === "3") {
|
|
682
|
+
doResolve(2);
|
|
679
683
|
}
|
|
680
684
|
});
|
|
681
685
|
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_ink7.Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [
|
|
@@ -735,11 +739,11 @@ function useSession(props) {
|
|
|
735
739
|
setPermissionRequest({
|
|
736
740
|
toolName: next.toolName,
|
|
737
741
|
toolArgs: next.toolArgs,
|
|
738
|
-
resolve: (
|
|
742
|
+
resolve: (result) => {
|
|
739
743
|
permissionQueueRef.current.shift();
|
|
740
744
|
processingRef.current = false;
|
|
741
745
|
setPermissionRequest(null);
|
|
742
|
-
next.resolve(
|
|
746
|
+
next.resolve(result);
|
|
743
747
|
setTimeout(() => processNextPermission(), 0);
|
|
744
748
|
}
|
|
745
749
|
});
|
|
@@ -829,6 +833,26 @@ async function executeSlashCommand(cmd, parts, session, addMessage, setMessages,
|
|
|
829
833
|
Messages: ${session.getMessageCount()}`
|
|
830
834
|
});
|
|
831
835
|
return true;
|
|
836
|
+
case "permissions": {
|
|
837
|
+
const mode = session.getPermissionMode();
|
|
838
|
+
const sessionAllowed = session.getSessionAllowedTools();
|
|
839
|
+
const lines = [`Permission mode: ${mode}`];
|
|
840
|
+
if (sessionAllowed.length > 0) {
|
|
841
|
+
lines.push(`Session-approved tools: ${sessionAllowed.join(", ")}`);
|
|
842
|
+
} else {
|
|
843
|
+
lines.push("No session-approved tools.");
|
|
844
|
+
}
|
|
845
|
+
addMessage({ role: "system", content: lines.join("\n") });
|
|
846
|
+
return true;
|
|
847
|
+
}
|
|
848
|
+
case "context": {
|
|
849
|
+
const ctx = session.getContextState();
|
|
850
|
+
addMessage({
|
|
851
|
+
role: "system",
|
|
852
|
+
content: `Context: ${ctx.usedTokens.toLocaleString()} / ${ctx.maxTokens.toLocaleString()} tokens (${Math.round(ctx.usedPercentage)}%)`
|
|
853
|
+
});
|
|
854
|
+
return true;
|
|
855
|
+
}
|
|
832
856
|
case "exit":
|
|
833
857
|
exit();
|
|
834
858
|
return true;
|
|
@@ -876,8 +900,12 @@ async function runSessionPrompt(prompt, session, addMessage, clearStreamingText,
|
|
|
876
900
|
setContextPercentage(session.getContextState().usedPercentage);
|
|
877
901
|
} catch (err) {
|
|
878
902
|
clearStreamingText();
|
|
879
|
-
|
|
880
|
-
|
|
903
|
+
if (err instanceof DOMException && err.name === "AbortError") {
|
|
904
|
+
addMessage({ role: "system", content: "Cancelled." });
|
|
905
|
+
} else {
|
|
906
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
907
|
+
addMessage({ role: "system", content: `Error: ${errMsg}` });
|
|
908
|
+
}
|
|
881
909
|
} finally {
|
|
882
910
|
setIsThinking(false);
|
|
883
911
|
}
|
|
@@ -961,8 +989,9 @@ function App(props) {
|
|
|
961
989
|
(0, import_ink8.useInput)(
|
|
962
990
|
(_input, key) => {
|
|
963
991
|
if (key.ctrl && _input === "c") exit();
|
|
992
|
+
if (key.escape && isThinking) session.abort();
|
|
964
993
|
},
|
|
965
|
-
{ isActive: !permissionRequest
|
|
994
|
+
{ isActive: !permissionRequest }
|
|
966
995
|
);
|
|
967
996
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_ink8.Box, { flexDirection: "column", children: [
|
|
968
997
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_ink8.Box, { flexDirection: "column", paddingX: 1, marginBottom: 1, children: [
|
package/dist/node/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robota-sdk/agent-cli",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.2",
|
|
4
4
|
"description": "AI coding assistant CLI built on Robota SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"marked-terminal": "^7.3.0",
|
|
36
36
|
"react": "19.2.4",
|
|
37
37
|
"string-width": "^8.2.0",
|
|
38
|
-
"@robota-sdk/agent-core": "3.0.0-beta.
|
|
39
|
-
"@robota-sdk/agent-sdk": "3.0.0-beta.
|
|
38
|
+
"@robota-sdk/agent-core": "3.0.0-beta.2",
|
|
39
|
+
"@robota-sdk/agent-sdk": "3.0.0-beta.2"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/marked": "^6.0.0",
|