pentesting 0.70.7 → 0.70.8
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/main.js +85 -82
- package/package.json +1 -1
package/dist/main.js
CHANGED
|
@@ -759,7 +759,7 @@ var INPUT_PROMPT_PATTERNS = [
|
|
|
759
759
|
|
|
760
760
|
// src/shared/constants/agent.ts
|
|
761
761
|
var APP_NAME = "Pentest AI";
|
|
762
|
-
var APP_VERSION = "0.70.
|
|
762
|
+
var APP_VERSION = "0.70.8";
|
|
763
763
|
var APP_DESCRIPTION = "Autonomous Penetration Testing AI Agent";
|
|
764
764
|
var LLM_ROLES = {
|
|
765
765
|
SYSTEM: "system",
|
|
@@ -16766,7 +16766,7 @@ var MessageRow = memo4(({ msg }) => {
|
|
|
16766
16766
|
] }, msg.id);
|
|
16767
16767
|
});
|
|
16768
16768
|
|
|
16769
|
-
// src/platform/tui/components/messages/
|
|
16769
|
+
// src/platform/tui/components/messages/BrandingHeader.tsx
|
|
16770
16770
|
import { memo as memo6 } from "react";
|
|
16771
16771
|
import { Box as Box7, Text as Text7 } from "ink";
|
|
16772
16772
|
|
|
@@ -16779,9 +16779,9 @@ var ShimmerBanner = memo5(({ banner }) => {
|
|
|
16779
16779
|
return /* @__PURE__ */ jsx7(Box6, { flexDirection: "column", children: lines.map((line, row) => /* @__PURE__ */ jsx7(Text6, { color: HEX.primary, children: line }, row)) });
|
|
16780
16780
|
});
|
|
16781
16781
|
|
|
16782
|
-
// src/platform/tui/components/messages/
|
|
16783
|
-
import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
16784
|
-
var
|
|
16782
|
+
// src/platform/tui/components/messages/BrandingHeader.tsx
|
|
16783
|
+
import { Fragment as Fragment4, jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
16784
|
+
var BrandingHeader = memo6(({ modelName, autoApproveMode, version, showGuide = false }) => {
|
|
16785
16785
|
const autoLabel = autoApproveMode ? "ON" : "OFF";
|
|
16786
16786
|
const autoColor = autoApproveMode ? THEME.primary : THEME.gray;
|
|
16787
16787
|
return /* @__PURE__ */ jsxs6(Box7, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [
|
|
@@ -16799,47 +16799,50 @@ var EmptyState = memo6(({ modelName, autoApproveMode, version }) => {
|
|
|
16799
16799
|
/* @__PURE__ */ jsx8(Text7, { color: autoColor, children: autoLabel })
|
|
16800
16800
|
] })
|
|
16801
16801
|
] }),
|
|
16802
|
-
/* @__PURE__ */
|
|
16803
|
-
/* @__PURE__ */ jsxs6(Box7, { flexDirection: "column", paddingLeft: 2, children: [
|
|
16804
|
-
/* @__PURE__ */ jsx8(Text7, { color: THEME.gray, children: "Get started:" }),
|
|
16805
|
-
/* @__PURE__ */ jsxs6(Text7, { color: THEME.gray, children: [
|
|
16806
|
-
" ",
|
|
16807
|
-
/* @__PURE__ */ jsxs6(Text7, { color: THEME.white, children: [
|
|
16808
|
-
"/target ",
|
|
16809
|
-
"<ip>"
|
|
16810
|
-
] }),
|
|
16811
|
-
" \u2014 Set target IP or domain"
|
|
16812
|
-
] }),
|
|
16813
|
-
/* @__PURE__ */ jsxs6(Text7, { color: THEME.gray, children: [
|
|
16814
|
-
" ",
|
|
16815
|
-
/* @__PURE__ */ jsx8(Text7, { color: THEME.white, children: "/start" }),
|
|
16816
|
-
" \u2014 Begin autonomous pentest"
|
|
16817
|
-
] }),
|
|
16818
|
-
/* @__PURE__ */ jsxs6(Text7, { color: THEME.gray, children: [
|
|
16819
|
-
" ",
|
|
16820
|
-
/* @__PURE__ */ jsx8(Text7, { color: THEME.white, children: "/help" }),
|
|
16821
|
-
" \u2014 Show all commands"
|
|
16822
|
-
] }),
|
|
16802
|
+
showGuide && /* @__PURE__ */ jsxs6(Fragment4, { children: [
|
|
16823
16803
|
/* @__PURE__ */ jsx8(Text7, { children: " " }),
|
|
16824
|
-
/* @__PURE__ */
|
|
16804
|
+
/* @__PURE__ */ jsxs6(Box7, { flexDirection: "column", paddingLeft: 2, children: [
|
|
16805
|
+
/* @__PURE__ */ jsx8(Text7, { color: THEME.gray, children: "Get started:" }),
|
|
16806
|
+
/* @__PURE__ */ jsxs6(Text7, { color: THEME.gray, children: [
|
|
16807
|
+
" ",
|
|
16808
|
+
/* @__PURE__ */ jsxs6(Text7, { color: THEME.white, children: [
|
|
16809
|
+
"/target ",
|
|
16810
|
+
"<ip>"
|
|
16811
|
+
] }),
|
|
16812
|
+
" \u2014 Set target IP or domain"
|
|
16813
|
+
] }),
|
|
16814
|
+
/* @__PURE__ */ jsxs6(Text7, { color: THEME.gray, children: [
|
|
16815
|
+
" ",
|
|
16816
|
+
/* @__PURE__ */ jsx8(Text7, { color: THEME.white, children: "/start" }),
|
|
16817
|
+
" \u2014 Begin autonomous pentest"
|
|
16818
|
+
] }),
|
|
16819
|
+
/* @__PURE__ */ jsxs6(Text7, { color: THEME.gray, children: [
|
|
16820
|
+
" ",
|
|
16821
|
+
/* @__PURE__ */ jsx8(Text7, { color: THEME.white, children: "/help" }),
|
|
16822
|
+
" \u2014 Show all commands"
|
|
16823
|
+
] }),
|
|
16824
|
+
/* @__PURE__ */ jsx8(Text7, { children: " " }),
|
|
16825
|
+
/* @__PURE__ */ jsx8(Text7, { color: THEME.dimGray, children: "Or just type a task and press Enter." })
|
|
16826
|
+
] })
|
|
16825
16827
|
] })
|
|
16826
16828
|
] });
|
|
16827
16829
|
});
|
|
16828
16830
|
|
|
16829
16831
|
// src/platform/tui/components/MessageList.tsx
|
|
16830
|
-
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
16832
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
16831
16833
|
var MessageList = memo7(({ messages, modelName, autoApproveMode, version }) => {
|
|
16832
|
-
|
|
16833
|
-
|
|
16834
|
-
|
|
16834
|
+
return /* @__PURE__ */ jsxs7(Box8, { flexDirection: "column", children: [
|
|
16835
|
+
/* @__PURE__ */ jsx9(
|
|
16836
|
+
BrandingHeader,
|
|
16835
16837
|
{
|
|
16836
16838
|
modelName,
|
|
16837
16839
|
autoApproveMode,
|
|
16838
|
-
version
|
|
16840
|
+
version,
|
|
16841
|
+
showGuide: messages.length === 0
|
|
16839
16842
|
}
|
|
16840
|
-
)
|
|
16841
|
-
|
|
16842
|
-
|
|
16843
|
+
),
|
|
16844
|
+
messages.length > 0 && /* @__PURE__ */ jsx9(Static, { items: messages, children: (msg) => /* @__PURE__ */ jsx9(MessageRow, { msg }, msg.id) })
|
|
16845
|
+
] });
|
|
16843
16846
|
});
|
|
16844
16847
|
|
|
16845
16848
|
// src/platform/tui/components/StatusDisplay.tsx
|
|
@@ -16901,27 +16904,27 @@ var StarSpinner = memo8(({ color }) => {
|
|
|
16901
16904
|
});
|
|
16902
16905
|
|
|
16903
16906
|
// src/platform/tui/components/status/RetryView.tsx
|
|
16904
|
-
import { jsx as jsx11, jsxs as
|
|
16907
|
+
import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
16905
16908
|
var RetryView = ({ retryState }) => {
|
|
16906
16909
|
const truncateError = (err) => {
|
|
16907
16910
|
return err.length > DISPLAY_LIMITS.RETRY_ERROR_PREVIEW ? err.substring(0, DISPLAY_LIMITS.RETRY_ERROR_TRUNCATED) + "..." : err;
|
|
16908
16911
|
};
|
|
16909
|
-
return /* @__PURE__ */
|
|
16910
|
-
/* @__PURE__ */
|
|
16912
|
+
return /* @__PURE__ */ jsxs8(Box9, { flexDirection: "column", height: 2, children: [
|
|
16913
|
+
/* @__PURE__ */ jsxs8(Box9, { children: [
|
|
16911
16914
|
/* @__PURE__ */ jsx11(Text9, { color: THEME.yellow, wrap: "truncate", children: /* @__PURE__ */ jsx11(StarSpinner, { color: THEME.yellow }) }),
|
|
16912
|
-
/* @__PURE__ */
|
|
16915
|
+
/* @__PURE__ */ jsxs8(Text9, { color: THEME.yellow, bold: true, wrap: "truncate", children: [
|
|
16913
16916
|
" \u29F3 Retry #",
|
|
16914
16917
|
retryState.attempt,
|
|
16915
16918
|
"/",
|
|
16916
16919
|
retryState.maxRetries
|
|
16917
16920
|
] }),
|
|
16918
|
-
/* @__PURE__ */
|
|
16921
|
+
/* @__PURE__ */ jsxs8(Text9, { color: THEME.gray, wrap: "truncate", children: [
|
|
16919
16922
|
" \u2014 ",
|
|
16920
16923
|
retryState.countdown,
|
|
16921
16924
|
"s"
|
|
16922
16925
|
] })
|
|
16923
16926
|
] }),
|
|
16924
|
-
/* @__PURE__ */ jsx11(Box9, { children: /* @__PURE__ */
|
|
16927
|
+
/* @__PURE__ */ jsx11(Box9, { children: /* @__PURE__ */ jsxs8(Text9, { color: THEME.gray, wrap: "truncate", children: [
|
|
16925
16928
|
" ",
|
|
16926
16929
|
truncateError(retryState.error)
|
|
16927
16930
|
] }) })
|
|
@@ -16955,7 +16958,7 @@ var ShimmerText = memo9(({ children, bold, phase = 0 }) => {
|
|
|
16955
16958
|
});
|
|
16956
16959
|
|
|
16957
16960
|
// src/platform/tui/components/status/ProcessingView.tsx
|
|
16958
|
-
import { jsx as jsx13, jsxs as
|
|
16961
|
+
import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
16959
16962
|
var ProcessingView = ({
|
|
16960
16963
|
statusMain,
|
|
16961
16964
|
detailText,
|
|
@@ -16974,18 +16977,18 @@ var ProcessingView = ({
|
|
|
16974
16977
|
const parenIdx = statusMain.indexOf("(");
|
|
16975
16978
|
const shimmerPart = parenIdx > -1 ? statusMain.slice(0, parenIdx).trimEnd() : statusMain;
|
|
16976
16979
|
const staticSuffix = parenIdx > -1 ? " " + statusMain.slice(parenIdx) : "";
|
|
16977
|
-
return /* @__PURE__ */
|
|
16978
|
-
/* @__PURE__ */
|
|
16980
|
+
return /* @__PURE__ */ jsxs9(Box10, { flexDirection: "column", height: 2, children: [
|
|
16981
|
+
/* @__PURE__ */ jsxs9(Box10, { children: [
|
|
16979
16982
|
/* @__PURE__ */ jsx13(Text11, { color, wrap: "truncate", children: /* @__PURE__ */ jsx13(StarSpinner, { color }) }),
|
|
16980
16983
|
/* @__PURE__ */ jsx13(Text11, { children: " " }),
|
|
16981
16984
|
/* @__PURE__ */ jsx13(ShimmerText, { bold: true, phase: 0, children: shimmerPart }),
|
|
16982
16985
|
staticSuffix ? /* @__PURE__ */ jsx13(Text11, { color: THEME.dimGray, wrap: "truncate", children: staticSuffix }) : null,
|
|
16983
|
-
/* @__PURE__ */
|
|
16986
|
+
/* @__PURE__ */ jsxs9(Text11, { color: THEME.dimGray, wrap: "truncate", children: [
|
|
16984
16987
|
" ",
|
|
16985
16988
|
meta
|
|
16986
16989
|
] })
|
|
16987
16990
|
] }),
|
|
16988
|
-
/* @__PURE__ */ jsx13(Box10, { children: detailText ? /* @__PURE__ */
|
|
16991
|
+
/* @__PURE__ */ jsx13(Box10, { children: detailText ? /* @__PURE__ */ jsxs9(Text11, { color: THEME.dimGray, wrap: "truncate", children: [
|
|
16989
16992
|
" ",
|
|
16990
16993
|
detailText
|
|
16991
16994
|
] }) : /* @__PURE__ */ jsx13(Text11, { children: " " }) })
|
|
@@ -16993,7 +16996,7 @@ var ProcessingView = ({
|
|
|
16993
16996
|
};
|
|
16994
16997
|
|
|
16995
16998
|
// src/platform/tui/components/StatusDisplay.tsx
|
|
16996
|
-
import { jsx as jsx14, jsxs as
|
|
16999
|
+
import { jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
16997
17000
|
var StatusDisplay = memo10(({
|
|
16998
17001
|
retryState,
|
|
16999
17002
|
isProcessing,
|
|
@@ -17007,7 +17010,7 @@ var StatusDisplay = memo10(({
|
|
|
17007
17010
|
return /* @__PURE__ */ jsx14(RetryView, { retryState });
|
|
17008
17011
|
}
|
|
17009
17012
|
if (isProcessing && isWaitingForInput) {
|
|
17010
|
-
return /* @__PURE__ */
|
|
17013
|
+
return /* @__PURE__ */ jsxs10(Box11, { flexDirection: "column", height: 2, children: [
|
|
17011
17014
|
/* @__PURE__ */ jsx14(Text12, { children: " " }),
|
|
17012
17015
|
/* @__PURE__ */ jsx14(Text12, { children: " " })
|
|
17013
17016
|
] });
|
|
@@ -17028,7 +17031,7 @@ var StatusDisplay = memo10(({
|
|
|
17028
17031
|
}
|
|
17029
17032
|
);
|
|
17030
17033
|
}
|
|
17031
|
-
return /* @__PURE__ */
|
|
17034
|
+
return /* @__PURE__ */ jsxs10(Box11, { flexDirection: "column", height: 2, children: [
|
|
17032
17035
|
/* @__PURE__ */ jsx14(Text12, { children: " " }),
|
|
17033
17036
|
/* @__PURE__ */ jsx14(Text12, { children: " " })
|
|
17034
17037
|
] });
|
|
@@ -17040,7 +17043,7 @@ import { Box as Box15, Text as Text16, useInput as useInput2 } from "ink";
|
|
|
17040
17043
|
|
|
17041
17044
|
// src/platform/tui/components/input/AutocompletePreview.tsx
|
|
17042
17045
|
import { Box as Box12, Text as Text13 } from "ink";
|
|
17043
|
-
import { jsx as jsx15, jsxs as
|
|
17046
|
+
import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
17044
17047
|
var AutocompletePreview = ({
|
|
17045
17048
|
suggestions,
|
|
17046
17049
|
clampedIdx
|
|
@@ -17048,14 +17051,14 @@ var AutocompletePreview = ({
|
|
|
17048
17051
|
return /* @__PURE__ */ jsx15(Box12, { flexDirection: "column", paddingX: 1, children: suggestions.map((cmd, i) => {
|
|
17049
17052
|
const isSelected = i === clampedIdx;
|
|
17050
17053
|
const argsText = cmd.args ? ` ${cmd.args}` : "";
|
|
17051
|
-
return /* @__PURE__ */
|
|
17054
|
+
return /* @__PURE__ */ jsxs11(Box12, { children: [
|
|
17052
17055
|
/* @__PURE__ */ jsx15(Text13, { color: isSelected ? THEME.primary : THEME.dimGray, children: isSelected ? " \u276F " : " " }),
|
|
17053
|
-
/* @__PURE__ */
|
|
17056
|
+
/* @__PURE__ */ jsxs11(Text13, { color: isSelected ? THEME.white : THEME.gray, bold: isSelected, children: [
|
|
17054
17057
|
"/",
|
|
17055
17058
|
cmd.name
|
|
17056
17059
|
] }),
|
|
17057
17060
|
/* @__PURE__ */ jsx15(Text13, { dimColor: true, color: THEME.gray, children: argsText }),
|
|
17058
|
-
/* @__PURE__ */
|
|
17061
|
+
/* @__PURE__ */ jsxs11(Text13, { dimColor: true, color: THEME.dimGray, children: [
|
|
17059
17062
|
" \u2014 ",
|
|
17060
17063
|
cmd.description
|
|
17061
17064
|
] }),
|
|
@@ -17067,7 +17070,7 @@ var AutocompletePreview = ({
|
|
|
17067
17070
|
// src/platform/tui/components/input/SecretInputArea.tsx
|
|
17068
17071
|
import { Box as Box13, Text as Text14, useStdout } from "ink";
|
|
17069
17072
|
import TextInput from "ink-text-input";
|
|
17070
|
-
import { jsx as jsx16, jsxs as
|
|
17073
|
+
import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
17071
17074
|
var OUTER_PADDING = 2;
|
|
17072
17075
|
var SecretInputArea = ({
|
|
17073
17076
|
inputRequest,
|
|
@@ -17078,9 +17081,9 @@ var SecretInputArea = ({
|
|
|
17078
17081
|
const { stdout } = useStdout();
|
|
17079
17082
|
const borderWidth = Math.max(10, (stdout?.columns ?? 80) - OUTER_PADDING);
|
|
17080
17083
|
const borderLine = "\u2501".repeat(borderWidth);
|
|
17081
|
-
return /* @__PURE__ */
|
|
17084
|
+
return /* @__PURE__ */ jsxs12(Box13, { flexDirection: "column", children: [
|
|
17082
17085
|
/* @__PURE__ */ jsx16(Box13, { children: /* @__PURE__ */ jsx16(Text14, { color: THEME.yellow, children: borderLine }) }),
|
|
17083
|
-
/* @__PURE__ */
|
|
17086
|
+
/* @__PURE__ */ jsxs12(Box13, { paddingX: 1, children: [
|
|
17084
17087
|
/* @__PURE__ */ jsx16(Text14, { color: THEME.yellow, bold: true, children: "\u25B8 " }),
|
|
17085
17088
|
/* @__PURE__ */ jsx16(
|
|
17086
17089
|
TextInput,
|
|
@@ -17100,7 +17103,7 @@ var SecretInputArea = ({
|
|
|
17100
17103
|
// src/platform/tui/components/input/NormalInputArea.tsx
|
|
17101
17104
|
import { Box as Box14, Text as Text15, useStdout as useStdout2 } from "ink";
|
|
17102
17105
|
import TextInput2 from "ink-text-input";
|
|
17103
|
-
import { jsx as jsx17, jsxs as
|
|
17106
|
+
import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
17104
17107
|
var OUTER_PADDING2 = 2;
|
|
17105
17108
|
var NormalInputArea = ({
|
|
17106
17109
|
inputKey,
|
|
@@ -17112,9 +17115,9 @@ var NormalInputArea = ({
|
|
|
17112
17115
|
const { stdout } = useStdout2();
|
|
17113
17116
|
const borderWidth = Math.max(10, (stdout?.columns ?? 80) - OUTER_PADDING2);
|
|
17114
17117
|
const borderLine = "\u2500".repeat(borderWidth);
|
|
17115
|
-
return /* @__PURE__ */
|
|
17118
|
+
return /* @__PURE__ */ jsxs13(Box14, { flexDirection: "column", children: [
|
|
17116
17119
|
/* @__PURE__ */ jsx17(Box14, { children: /* @__PURE__ */ jsx17(Text15, { dimColor: true, color: THEME.dimGray, children: borderLine }) }),
|
|
17117
|
-
/* @__PURE__ */
|
|
17120
|
+
/* @__PURE__ */ jsxs13(Box14, { paddingX: 1, children: [
|
|
17118
17121
|
/* @__PURE__ */ jsx17(Text15, { color: THEME.primary, children: "\u276F " }),
|
|
17119
17122
|
/* @__PURE__ */ jsx17(
|
|
17120
17123
|
TextInput2,
|
|
@@ -17132,7 +17135,7 @@ var NormalInputArea = ({
|
|
|
17132
17135
|
};
|
|
17133
17136
|
|
|
17134
17137
|
// src/platform/tui/components/ChatInput.tsx
|
|
17135
|
-
import { jsx as jsx18, jsxs as
|
|
17138
|
+
import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
17136
17139
|
var MAX_SUGGESTIONS = 6;
|
|
17137
17140
|
var ChatInput = memo11(({
|
|
17138
17141
|
value,
|
|
@@ -17231,7 +17234,7 @@ var ChatInput = memo11(({
|
|
|
17231
17234
|
completeCommand(selectedIdxRef.current);
|
|
17232
17235
|
}
|
|
17233
17236
|
}, [completeCommand]));
|
|
17234
|
-
return /* @__PURE__ */
|
|
17237
|
+
return /* @__PURE__ */ jsxs14(Box15, { flexDirection: "column", children: [
|
|
17235
17238
|
showPreview && /* @__PURE__ */ jsx18(
|
|
17236
17239
|
AutocompletePreview,
|
|
17237
17240
|
{
|
|
@@ -17270,7 +17273,7 @@ var ChatInput = memo11(({
|
|
|
17270
17273
|
// src/platform/tui/components/footer.tsx
|
|
17271
17274
|
import { memo as memo12 } from "react";
|
|
17272
17275
|
import { Box as Box16, Text as Text17 } from "ink";
|
|
17273
|
-
import { jsx as jsx19, jsxs as
|
|
17276
|
+
import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
17274
17277
|
var CTX_WARN_THRESHOLD = 0.8;
|
|
17275
17278
|
var MAX_CONTEXT_TOKENS = LLM_LIMITS.streamMaxTokens;
|
|
17276
17279
|
var formatElapsed = (totalSeconds) => {
|
|
@@ -17286,7 +17289,7 @@ var formatElapsed = (totalSeconds) => {
|
|
|
17286
17289
|
var Footer = memo12(({ phase, targets, findings, todo, elapsedTime, isProcessing, totalTokens, turnCount }) => {
|
|
17287
17290
|
const ctxPct = totalTokens > 0 ? Math.round(totalTokens / MAX_CONTEXT_TOKENS * 100) : 0;
|
|
17288
17291
|
const ctxColor = ctxPct >= CTX_WARN_THRESHOLD * 100 ? THEME.yellow : THEME.dimGray;
|
|
17289
|
-
return /* @__PURE__ */
|
|
17292
|
+
return /* @__PURE__ */ jsxs15(
|
|
17290
17293
|
Box16,
|
|
17291
17294
|
{
|
|
17292
17295
|
width: "100%",
|
|
@@ -17294,39 +17297,39 @@ var Footer = memo12(({ phase, targets, findings, todo, elapsedTime, isProcessing
|
|
|
17294
17297
|
justifyContent: "space-between",
|
|
17295
17298
|
overflow: "hidden",
|
|
17296
17299
|
children: [
|
|
17297
|
-
/* @__PURE__ */
|
|
17298
|
-
/* @__PURE__ */
|
|
17300
|
+
/* @__PURE__ */ jsxs15(Box16, { gap: 2, children: [
|
|
17301
|
+
/* @__PURE__ */ jsxs15(Text17, { color: THEME.gray, children: [
|
|
17299
17302
|
"Phase: ",
|
|
17300
17303
|
/* @__PURE__ */ jsx19(Text17, { color: THEME.white, children: phase })
|
|
17301
17304
|
] }),
|
|
17302
|
-
/* @__PURE__ */
|
|
17305
|
+
/* @__PURE__ */ jsxs15(Text17, { color: THEME.gray, children: [
|
|
17303
17306
|
"Targets: ",
|
|
17304
17307
|
/* @__PURE__ */ jsx19(Text17, { color: THEME.white, children: targets })
|
|
17305
17308
|
] }),
|
|
17306
|
-
/* @__PURE__ */
|
|
17309
|
+
/* @__PURE__ */ jsxs15(Text17, { color: THEME.gray, children: [
|
|
17307
17310
|
"Findings: ",
|
|
17308
17311
|
/* @__PURE__ */ jsx19(Text17, { color: THEME.white, children: findings })
|
|
17309
17312
|
] }),
|
|
17310
|
-
/* @__PURE__ */
|
|
17313
|
+
/* @__PURE__ */ jsxs15(Text17, { color: THEME.gray, children: [
|
|
17311
17314
|
"Tasks: ",
|
|
17312
17315
|
/* @__PURE__ */ jsx19(Text17, { color: THEME.white, children: todo })
|
|
17313
17316
|
] })
|
|
17314
17317
|
] }),
|
|
17315
|
-
/* @__PURE__ */
|
|
17316
|
-
isProcessing ? /* @__PURE__ */
|
|
17318
|
+
/* @__PURE__ */ jsxs15(Box16, { gap: 2, children: [
|
|
17319
|
+
isProcessing ? /* @__PURE__ */ jsxs15(Box16, { gap: 1, children: [
|
|
17317
17320
|
/* @__PURE__ */ jsx19(Text17, { dimColor: true, color: THEME.dimGray, children: "[ESC] abort" }),
|
|
17318
17321
|
/* @__PURE__ */ jsx19(Text17, { dimColor: true, color: THEME.dimGray, children: "[^C\xD72] exit" })
|
|
17319
17322
|
] }) : /* @__PURE__ */ jsx19(Text17, { dimColor: true, color: THEME.dimGray, children: "[/help] commands" }),
|
|
17320
|
-
turnCount > 0 && /* @__PURE__ */
|
|
17323
|
+
turnCount > 0 && /* @__PURE__ */ jsxs15(Text17, { dimColor: true, color: THEME.dimGray, children: [
|
|
17321
17324
|
"turn:",
|
|
17322
17325
|
turnCount
|
|
17323
17326
|
] }),
|
|
17324
|
-
totalTokens > 0 && /* @__PURE__ */
|
|
17327
|
+
totalTokens > 0 && /* @__PURE__ */ jsxs15(Text17, { dimColor: true, color: ctxColor, children: [
|
|
17325
17328
|
"ctx:",
|
|
17326
17329
|
ctxPct,
|
|
17327
17330
|
"%"
|
|
17328
17331
|
] }),
|
|
17329
|
-
totalTokens > 0 && /* @__PURE__ */
|
|
17332
|
+
totalTokens > 0 && /* @__PURE__ */ jsxs15(Text17, { dimColor: true, color: THEME.dimGray, children: [
|
|
17330
17333
|
"\u2191",
|
|
17331
17334
|
formatTokens(totalTokens)
|
|
17332
17335
|
] }),
|
|
@@ -17342,7 +17345,7 @@ var footer_default = Footer;
|
|
|
17342
17345
|
// src/platform/tui/components/Modal.tsx
|
|
17343
17346
|
import { useMemo as useMemo2, memo as memo13, useCallback as useCallback8, useRef as useRef7 } from "react";
|
|
17344
17347
|
import { Box as Box17, Text as Text18, useStdout as useStdout3, useInput as useInput3 } from "ink";
|
|
17345
|
-
import { jsx as jsx20, jsxs as
|
|
17348
|
+
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
17346
17349
|
var MODAL_TITLES = {
|
|
17347
17350
|
findings: "\u25C8 FINDINGS \u25C8",
|
|
17348
17351
|
graph: "\u25C8 ATTACK GRAPH \u25C8",
|
|
@@ -17386,7 +17389,7 @@ var Modal = memo13(({
|
|
|
17386
17389
|
const endLine = Math.min(scrollOffset + maxHeight, totalLines);
|
|
17387
17390
|
const scrollbarHeight = Math.max(1, Math.floor(maxHeight * (maxHeight / Math.max(totalLines, 1))));
|
|
17388
17391
|
const scrollbarPosition = totalLines > maxHeight ? Math.floor(scrollOffset / (totalLines - maxHeight) * (maxHeight - scrollbarHeight)) : 0;
|
|
17389
|
-
return /* @__PURE__ */
|
|
17392
|
+
return /* @__PURE__ */ jsxs16(
|
|
17390
17393
|
Box17,
|
|
17391
17394
|
{
|
|
17392
17395
|
flexDirection: "column",
|
|
@@ -17408,7 +17411,7 @@ var Modal = memo13(({
|
|
|
17408
17411
|
flexGrow: 1,
|
|
17409
17412
|
children: visibleLines.map((line, i) => {
|
|
17410
17413
|
const showScrollbar = totalLines > maxHeight && i >= scrollbarPosition && i < scrollbarPosition + scrollbarHeight;
|
|
17411
|
-
return /* @__PURE__ */
|
|
17414
|
+
return /* @__PURE__ */ jsxs16(Box17, { children: [
|
|
17412
17415
|
/* @__PURE__ */ jsx20(Text18, { color: THEME.white, wrap: "truncate", children: line }),
|
|
17413
17416
|
/* @__PURE__ */ jsx20(Box17, { flexGrow: 1 }),
|
|
17414
17417
|
totalLines > maxHeight && /* @__PURE__ */ jsx20(Text18, { color: showScrollbar ? THEME.cyan : THEME.dimGray, children: showScrollbar ? "\u2588" : "\u2502" })
|
|
@@ -17416,9 +17419,9 @@ var Modal = memo13(({
|
|
|
17416
17419
|
})
|
|
17417
17420
|
}
|
|
17418
17421
|
),
|
|
17419
|
-
/* @__PURE__ */
|
|
17422
|
+
/* @__PURE__ */ jsxs16(Box17, { justifyContent: "space-between", paddingX: 1, children: [
|
|
17420
17423
|
/* @__PURE__ */ jsx20(Text18, { dimColor: true, color: THEME.gray, children: "\u2191\u2193/jk: scroll | g/G: top/bottom | ESC/q: close" }),
|
|
17421
|
-
/* @__PURE__ */
|
|
17424
|
+
/* @__PURE__ */ jsxs16(Text18, { dimColor: true, color: THEME.cyan, children: [
|
|
17422
17425
|
startLine,
|
|
17423
17426
|
"-",
|
|
17424
17427
|
endLine,
|
|
@@ -17433,7 +17436,7 @@ var Modal = memo13(({
|
|
|
17433
17436
|
|
|
17434
17437
|
// src/platform/tui/components/app/bottom-region.tsx
|
|
17435
17438
|
import { Box as Box18 } from "ink";
|
|
17436
|
-
import { jsx as jsx21, jsxs as
|
|
17439
|
+
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
17437
17440
|
var BottomRegion = ({
|
|
17438
17441
|
input,
|
|
17439
17442
|
setInput,
|
|
@@ -17457,7 +17460,7 @@ var BottomRegion = ({
|
|
|
17457
17460
|
const suggestionCount = isSlashMode && !hasArgs && inputRequest.status !== "active" ? Math.min(getMatchingCommands(partialCmd).length, MAX_SUGGESTIONS) : 0;
|
|
17458
17461
|
const previewHeight = suggestionCount;
|
|
17459
17462
|
const bottomMinHeight = 7;
|
|
17460
|
-
return /* @__PURE__ */
|
|
17463
|
+
return /* @__PURE__ */ jsxs17(Box18, { flexDirection: "column", minHeight: bottomMinHeight, children: [
|
|
17461
17464
|
/* @__PURE__ */ jsx21(
|
|
17462
17465
|
StatusDisplay,
|
|
17463
17466
|
{
|
|
@@ -17498,7 +17501,7 @@ var BottomRegion = ({
|
|
|
17498
17501
|
};
|
|
17499
17502
|
|
|
17500
17503
|
// src/platform/tui/app.tsx
|
|
17501
|
-
import { jsx as jsx22, jsxs as
|
|
17504
|
+
import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
17502
17505
|
var MODEL_NAME = getModel() || DEFAULT_MODEL;
|
|
17503
17506
|
var App = ({ autoApprove = false, target }) => {
|
|
17504
17507
|
const { exit } = useApp();
|
|
@@ -17625,7 +17628,7 @@ var App = ({ autoApprove = false, target }) => {
|
|
|
17625
17628
|
}
|
|
17626
17629
|
) });
|
|
17627
17630
|
}
|
|
17628
|
-
return /* @__PURE__ */
|
|
17631
|
+
return /* @__PURE__ */ jsxs18(Box19, { flexDirection: "column", paddingX: 1, width: terminalWidth, children: [
|
|
17629
17632
|
/* @__PURE__ */ jsx22(Box19, { flexDirection: "column", children: /* @__PURE__ */ jsx22(
|
|
17630
17633
|
MessageList,
|
|
17631
17634
|
{
|