arc402-cli 1.8.8 → 1.8.9
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/abis.js +1 -1
- package/dist/abis.js.map +1 -1
- package/dist/approval/broker.d.ts +9 -0
- package/dist/approval/broker.d.ts.map +1 -0
- package/dist/approval/broker.js +45 -0
- package/dist/approval/broker.js.map +1 -0
- package/dist/approval/config.d.ts +20 -0
- package/dist/approval/config.d.ts.map +1 -0
- package/dist/approval/config.js +42 -0
- package/dist/approval/config.js.map +1 -0
- package/dist/approval/init.d.ts +4 -0
- package/dist/approval/init.d.ts.map +1 -0
- package/dist/approval/init.js +128 -0
- package/dist/approval/init.js.map +1 -0
- package/dist/approval/passkey-requests.d.ts +22 -0
- package/dist/approval/passkey-requests.d.ts.map +1 -0
- package/dist/approval/passkey-requests.js +85 -0
- package/dist/approval/passkey-requests.js.map +1 -0
- package/dist/approval/transports/local-qr.d.ts +3 -0
- package/dist/approval/transports/local-qr.d.ts.map +1 -0
- package/dist/approval/transports/local-qr.js +42 -0
- package/dist/approval/transports/local-qr.js.map +1 -0
- package/dist/approval/transports/telegram-passkey-link.d.ts +3 -0
- package/dist/approval/transports/telegram-passkey-link.d.ts.map +1 -0
- package/dist/approval/transports/telegram-passkey-link.js +137 -0
- package/dist/approval/transports/telegram-passkey-link.js.map +1 -0
- package/dist/approval/transports/telegram-walletconnect.d.ts +3 -0
- package/dist/approval/transports/telegram-walletconnect.d.ts.map +1 -0
- package/dist/approval/transports/telegram-walletconnect.js +53 -0
- package/dist/approval/transports/telegram-walletconnect.js.map +1 -0
- package/dist/approval/types.d.ts +66 -0
- package/dist/approval/types.d.ts.map +1 -0
- package/dist/approval/types.js +3 -0
- package/dist/approval/types.js.map +1 -0
- package/dist/bundler.d.ts +1 -0
- package/dist/bundler.d.ts.map +1 -1
- package/dist/bundler.js +31 -0
- package/dist/bundler.js.map +1 -1
- package/dist/commands/accept.js +1 -1
- package/dist/commands/accept.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +22 -7
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/approvals.d.ts +3 -0
- package/dist/commands/approvals.d.ts.map +1 -0
- package/dist/commands/approvals.js +78 -0
- package/dist/commands/approvals.js.map +1 -0
- package/dist/commands/arena-handshake.d.ts.map +1 -1
- package/dist/commands/arena-handshake.js +9 -18
- package/dist/commands/arena-handshake.js.map +1 -1
- package/dist/commands/arena-v2.d.ts.map +1 -1
- package/dist/commands/arena-v2.js +23 -38
- package/dist/commands/arena-v2.js.map +1 -1
- package/dist/commands/compute.d.ts.map +1 -1
- package/dist/commands/compute.js +3 -4
- package/dist/commands/compute.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +1 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/deliver.js +1 -1
- package/dist/commands/deliver.js.map +1 -1
- package/dist/commands/hire.d.ts.map +1 -1
- package/dist/commands/hire.js +3 -4
- package/dist/commands/hire.js.map +1 -1
- package/dist/commands/job.d.ts.map +1 -1
- package/dist/commands/job.js +1 -1
- package/dist/commands/job.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +4 -8
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/wallet.d.ts.map +1 -1
- package/dist/commands/wallet.js +580 -204
- package/dist/commands/wallet.js.map +1 -1
- package/dist/commands/workroom.js +1 -1
- package/dist/config.d.ts +20 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +77 -36
- package/dist/config.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +59 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/passkey-approvals.d.ts +24 -0
- package/dist/daemon/passkey-approvals.d.ts.map +1 -0
- package/dist/daemon/passkey-approvals.js +31 -0
- package/dist/daemon/passkey-approvals.js.map +1 -0
- package/dist/endpoint-notify.d.ts +1 -2
- package/dist/endpoint-notify.d.ts.map +1 -1
- package/dist/endpoint-notify.js +1 -3
- package/dist/endpoint-notify.js.map +1 -1
- package/dist/index.js +5 -11
- package/dist/index.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +2 -0
- package/dist/program.js.map +1 -1
- package/dist/tui-esm/App.js +136 -0
- package/dist/tui-esm/App.js.map +1 -0
- package/dist/tui-esm/Footer.js +13 -0
- package/dist/tui-esm/Footer.js.map +1 -0
- package/dist/tui-esm/Header.js +19 -0
- package/dist/tui-esm/Header.js.map +1 -0
- package/dist/tui-esm/InputLine.js +121 -0
- package/dist/tui-esm/InputLine.js.map +1 -0
- package/dist/tui-esm/Viewport.js +39 -0
- package/dist/tui-esm/Viewport.js.map +1 -0
- package/dist/tui-esm/WalletConnectPairing.js +61 -0
- package/dist/tui-esm/WalletConnectPairing.js.map +1 -0
- package/dist/tui-esm/command-catalog.js +20 -0
- package/dist/tui-esm/command-catalog.js.map +1 -0
- package/dist/tui-esm/command-renderers.js +180 -0
- package/dist/tui-esm/command-renderers.js.map +1 -0
- package/dist/tui-esm/commerce-format.js +19 -0
- package/dist/tui-esm/commerce-format.js.map +1 -0
- package/dist/tui-esm/components/Button.js +21 -0
- package/dist/tui-esm/components/Button.js.map +1 -0
- package/dist/tui-esm/components/CeremonyView.js +10 -0
- package/dist/tui-esm/components/CeremonyView.js.map +1 -0
- package/dist/tui-esm/components/CompletionDropdown.js +23 -0
- package/dist/tui-esm/components/CompletionDropdown.js.map +1 -0
- package/dist/tui-esm/components/ConfirmPrompt.js +10 -0
- package/dist/tui-esm/components/ConfirmPrompt.js.map +1 -0
- package/dist/tui-esm/components/CustomTextInput.js +99 -0
- package/dist/tui-esm/components/CustomTextInput.js.map +1 -0
- package/dist/tui-esm/components/InteractiveTable.js +61 -0
- package/dist/tui-esm/components/InteractiveTable.js.map +1 -0
- package/dist/tui-esm/components/StepSpinner.js +32 -0
- package/dist/tui-esm/components/StepSpinner.js.map +1 -0
- package/dist/tui-esm/components/Toast.js +29 -0
- package/dist/tui-esm/components/Toast.js.map +1 -0
- package/dist/tui-esm/components/commerce/AgreementList.js +25 -0
- package/dist/tui-esm/components/commerce/AgreementList.js.map +1 -0
- package/dist/tui-esm/components/commerce/ComputeCard.js +9 -0
- package/dist/tui-esm/components/commerce/ComputeCard.js.map +1 -0
- package/dist/tui-esm/components/commerce/DiscoverList.js +14 -0
- package/dist/tui-esm/components/commerce/DiscoverList.js.map +1 -0
- package/dist/tui-esm/components/commerce/HireCard.js +11 -0
- package/dist/tui-esm/components/commerce/HireCard.js.map +1 -0
- package/dist/tui-esm/components/commerce/RoundsList.js +9 -0
- package/dist/tui-esm/components/commerce/RoundsList.js.map +1 -0
- package/dist/tui-esm/components/commerce/SquadCard.js +10 -0
- package/dist/tui-esm/components/commerce/SquadCard.js.map +1 -0
- package/dist/tui-esm/components/commerce/StatusCard.js +10 -0
- package/dist/tui-esm/components/commerce/StatusCard.js.map +1 -0
- package/dist/tui-esm/components/commerce/SubscribeCard.js +10 -0
- package/dist/tui-esm/components/commerce/SubscribeCard.js.map +1 -0
- package/dist/tui-esm/components/commerce/WorkroomCard.js +10 -0
- package/dist/tui-esm/components/commerce/WorkroomCard.js.map +1 -0
- package/dist/tui-esm/components/commerce/common.js +71 -0
- package/dist/tui-esm/components/commerce/common.js.map +1 -0
- package/dist/tui-esm/components/commerce/index.js +27 -0
- package/dist/tui-esm/components/commerce/index.js.map +1 -0
- package/dist/tui-esm/index.js +55 -0
- package/dist/tui-esm/index.js.map +1 -0
- package/dist/tui-esm/kernel.js +734 -0
- package/dist/tui-esm/kernel.js.map +1 -0
- package/dist/tui-esm/render-inline.js +32 -0
- package/dist/tui-esm/render-inline.js.map +1 -0
- package/dist/tui-esm/useChat.js +91 -0
- package/dist/tui-esm/useChat.js.map +1 -0
- package/dist/tui-esm/useCommand.js +142 -0
- package/dist/tui-esm/useCommand.js.map +1 -0
- package/dist/tui-esm/useNotifications.js +17 -0
- package/dist/tui-esm/useNotifications.js.map +1 -0
- package/dist/tui-esm/useScroll.js +46 -0
- package/dist/tui-esm/useScroll.js.map +1 -0
- package/dist/tui-esm/useTerminalSize.js +32 -0
- package/dist/tui-esm/useTerminalSize.js.map +1 -0
- package/hermes/plugins/dist/arc402_hermes-1.0.0-py3-none-any.whl +0 -0
- package/hermes/plugins/dist/arc402_hermes-1.0.0.tar.gz +0 -0
- package/package.json +2 -2
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.App = App;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const ink_1 = require("ink");
|
|
10
|
+
const Header_1 = require("./Header");
|
|
11
|
+
const Viewport_1 = require("./Viewport");
|
|
12
|
+
const Footer_1 = require("./Footer");
|
|
13
|
+
const InputLine_1 = require("./InputLine");
|
|
14
|
+
const useCommand_1 = require("./useCommand");
|
|
15
|
+
const useChat_1 = require("./useChat");
|
|
16
|
+
const useScroll_1 = require("./useScroll");
|
|
17
|
+
const useTerminalSize_1 = require("./useTerminalSize");
|
|
18
|
+
const banner_1 = require("../ui/banner");
|
|
19
|
+
const kernel_1 = require("./kernel");
|
|
20
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
22
|
+
const pkg = require("../../package.json");
|
|
23
|
+
const BUILTIN_CMDS = ["help", "exit", "quit", "clear", "status"];
|
|
24
|
+
/**
|
|
25
|
+
* Root TUI component — fixed header/footer with scrollable viewport.
|
|
26
|
+
*/
|
|
27
|
+
function App({ version, network, wallet, balance }) {
|
|
28
|
+
const { exit } = (0, ink_1.useApp)();
|
|
29
|
+
const [outputBuffer, setOutputBuffer] = (0, react_1.useState)([
|
|
30
|
+
chalk_1.default.dim(" Type 'help' to see available commands"),
|
|
31
|
+
"",
|
|
32
|
+
]);
|
|
33
|
+
const [isProcessing, setIsProcessing] = (0, react_1.useState)(false);
|
|
34
|
+
const { execute, isRunning } = (0, useCommand_1.useCommand)();
|
|
35
|
+
const { send, isSending } = (0, useChat_1.useChat)();
|
|
36
|
+
// Measure viewport height from actual terminal size and real header line count.
|
|
37
|
+
// The separator Box rendered between Header and Viewport adds 1 row.
|
|
38
|
+
// Footer (InputLine) is 1 row.
|
|
39
|
+
const { rows } = (0, useTerminalSize_1.useTerminalSize)();
|
|
40
|
+
const headerLineCount = (0, banner_1.getBannerLines)({ network, wallet, balance }).length;
|
|
41
|
+
const SEPARATOR_ROWS = 1;
|
|
42
|
+
const FOOTER_ROWS = 1;
|
|
43
|
+
const viewportHeight = Math.max(1, rows - headerLineCount - SEPARATOR_ROWS - FOOTER_ROWS);
|
|
44
|
+
const { scrollOffset, isAutoScroll, scrollUp, scrollDown, snapToBottom } = (0, useScroll_1.useScroll)(viewportHeight);
|
|
45
|
+
const [topCmds] = (0, react_1.useState)(() => (0, kernel_1.getTuiTopLevelCommands)());
|
|
46
|
+
const appendLine = (0, react_1.useCallback)((line) => {
|
|
47
|
+
setOutputBuffer((prev) => [...prev, line]);
|
|
48
|
+
}, []);
|
|
49
|
+
const handleCommand = (0, react_1.useCallback)(async (input) => {
|
|
50
|
+
// Echo command to viewport
|
|
51
|
+
appendLine(chalk_1.default.cyanBright("◈") +
|
|
52
|
+
" " +
|
|
53
|
+
chalk_1.default.dim("arc402") +
|
|
54
|
+
" " +
|
|
55
|
+
chalk_1.default.white(">") +
|
|
56
|
+
" " +
|
|
57
|
+
chalk_1.default.white(input));
|
|
58
|
+
// Snap to bottom on new command
|
|
59
|
+
snapToBottom();
|
|
60
|
+
setIsProcessing(true);
|
|
61
|
+
const firstWord = input.split(/\s+/)[0];
|
|
62
|
+
const allKnown = [...BUILTIN_CMDS, ...topCmds];
|
|
63
|
+
// ── Built-in: exit/quit ────────────────────────────────────────────────
|
|
64
|
+
if (input === "exit" || input === "quit") {
|
|
65
|
+
appendLine(" " + chalk_1.default.cyanBright("◈") + chalk_1.default.dim(" goodbye"));
|
|
66
|
+
setIsProcessing(false);
|
|
67
|
+
setTimeout(() => exit(), 100);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
// ── Built-in: clear ────────────────────────────────────────────────────
|
|
71
|
+
if (input === "clear") {
|
|
72
|
+
setOutputBuffer([]);
|
|
73
|
+
setIsProcessing(false);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// ── Built-in: help ─────────────────────────────────────────────────────
|
|
77
|
+
if (input === "help" || input === "/help") {
|
|
78
|
+
const lines = [
|
|
79
|
+
chalk_1.default.cyanBright("ARC-402 TUI"),
|
|
80
|
+
"",
|
|
81
|
+
" status",
|
|
82
|
+
" discover [--limit N] [--sort trust|price|jobs|stake|composite] [--online]",
|
|
83
|
+
" agreements [--as client|provider]",
|
|
84
|
+
" workroom status",
|
|
85
|
+
"",
|
|
86
|
+
chalk_1.default.dim(" Other commands still route through the CLI adapter path while the TUI kernel extraction is in progress."),
|
|
87
|
+
"",
|
|
88
|
+
chalk_1.default.cyanBright("Chat"),
|
|
89
|
+
];
|
|
90
|
+
lines.push(" " +
|
|
91
|
+
chalk_1.default.white("<message>") +
|
|
92
|
+
chalk_1.default.dim(" Send message to OpenClaw gateway"));
|
|
93
|
+
lines.push(" " +
|
|
94
|
+
chalk_1.default.white("/chat <message>") +
|
|
95
|
+
chalk_1.default.dim(" Explicitly route to chat"));
|
|
96
|
+
lines.push(chalk_1.default.dim(" Gateway: http://localhost:19000 (openclaw gateway start)"));
|
|
97
|
+
lines.push("");
|
|
98
|
+
for (const l of lines)
|
|
99
|
+
appendLine(l);
|
|
100
|
+
setIsProcessing(false);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// ── Built-in: status ───────────────────────────────────────────────────
|
|
104
|
+
if (input === "status") {
|
|
105
|
+
await execute("status", appendLine);
|
|
106
|
+
appendLine("");
|
|
107
|
+
setIsProcessing(false);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// ── /chat prefix or unknown command → chat ─────────────────────────────
|
|
111
|
+
const isExplicitChat = input.startsWith("/chat ");
|
|
112
|
+
const isChatInput = isExplicitChat || (!allKnown.includes(firstWord) && firstWord !== "");
|
|
113
|
+
if (isChatInput) {
|
|
114
|
+
const msg = isExplicitChat ? input.slice(6).trim() : input;
|
|
115
|
+
if (msg) {
|
|
116
|
+
await send(msg, appendLine);
|
|
117
|
+
}
|
|
118
|
+
appendLine("");
|
|
119
|
+
setIsProcessing(false);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// ── TUI kernel first for flagship read-only commerce routes ───────────
|
|
123
|
+
if (await (0, kernel_1.executeTuiKernel)(input)) {
|
|
124
|
+
appendLine("");
|
|
125
|
+
setIsProcessing(false);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// ── Dispatch to commander ──────────────────────────────────────────────
|
|
129
|
+
await execute(input, appendLine);
|
|
130
|
+
appendLine("");
|
|
131
|
+
setIsProcessing(false);
|
|
132
|
+
}, [appendLine, execute, send, snapToBottom, topCmds, network, wallet, balance, exit]);
|
|
133
|
+
const isDisabled = isProcessing || isRunning || isSending;
|
|
134
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", height: "100%", children: [(0, jsx_runtime_1.jsx)(Header_1.Header, { version: version, network: network, wallet: wallet, balance: balance }), (0, jsx_runtime_1.jsx)(ink_1.Box, { children: (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "─".repeat(60) }) }), (0, jsx_runtime_1.jsx)(Viewport_1.Viewport, { lines: outputBuffer, scrollOffset: scrollOffset, isAutoScroll: isAutoScroll, viewportHeight: viewportHeight }), (0, jsx_runtime_1.jsx)(Footer_1.Footer, { children: (0, jsx_runtime_1.jsx)(InputLine_1.InputLine, { onSubmit: handleCommand, isDisabled: isDisabled }) })] }));
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=App.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Footer = Footer;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const ink_1 = require("ink");
|
|
6
|
+
/**
|
|
7
|
+
* Fixed footer containing the input line.
|
|
8
|
+
* Pinned at the bottom of the screen.
|
|
9
|
+
*/
|
|
10
|
+
function Footer({ children }) {
|
|
11
|
+
return ((0, jsx_runtime_1.jsx)(ink_1.Box, { flexShrink: 0, children: children }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../src/tui/Footer.tsx"],"names":[],"mappings":";;AAWA,wBAMC;;AAhBD,6BAA0B;AAM1B;;;GAGG;AACH,SAAgB,MAAM,CAAC,EAAE,QAAQ,EAAe;IAC9C,OAAO,CACL,uBAAC,SAAG,IAAC,UAAU,EAAE,CAAC,YACf,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Header = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_1 = __importDefault(require("react"));
|
|
9
|
+
const ink_1 = require("ink");
|
|
10
|
+
const banner_1 = require("../ui/banner");
|
|
11
|
+
/**
|
|
12
|
+
* Fixed header showing the ASCII art banner + status info.
|
|
13
|
+
* Never re-renders unless config changes.
|
|
14
|
+
*/
|
|
15
|
+
exports.Header = react_1.default.memo(function Header({ network, wallet, balance, }) {
|
|
16
|
+
const bannerLines = (0, banner_1.getBannerLines)({ network, wallet, balance });
|
|
17
|
+
return ((0, jsx_runtime_1.jsx)(ink_1.Box, { flexDirection: "column", children: bannerLines.map((line, i) => ((0, jsx_runtime_1.jsx)(ink_1.Text, { children: line }, i))) }));
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../src/tui/Header.tsx"],"names":[],"mappings":";;;;;;;AAAA,kDAA0B;AAC1B,6BAAgC;AAChC,yCAA8C;AAS9C;;;GAGG;AACU,QAAA,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,EAC/C,OAAO,EACP,MAAM,EACN,OAAO,GACK;IACZ,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAEjE,OAAO,CACL,uBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5B,uBAAC,UAAI,cAAU,IAAI,IAAR,CAAC,CAAe,CAC5B,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.InputLine = InputLine;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const react_1 = require("react");
|
|
9
|
+
const ink_1 = require("ink");
|
|
10
|
+
const ink_text_input_1 = __importDefault(require("ink-text-input"));
|
|
11
|
+
const command_catalog_1 = require("./command-catalog");
|
|
12
|
+
/**
|
|
13
|
+
* Input line with command history navigation and tab completion.
|
|
14
|
+
* Uses ink-text-input for text input with cursor.
|
|
15
|
+
*/
|
|
16
|
+
function InputLine({ onSubmit, isDisabled = false }) {
|
|
17
|
+
const [value, setValue] = (0, react_1.useState)("");
|
|
18
|
+
const [history, setHistory] = (0, react_1.useState)([]);
|
|
19
|
+
const [historyIdx, setHistoryIdx] = (0, react_1.useState)(-1);
|
|
20
|
+
const [historyTemp, setHistoryTemp] = (0, react_1.useState)("");
|
|
21
|
+
const [topCmds] = (0, react_1.useState)(() => [...command_catalog_1.TUI_TOP_LEVEL_COMMANDS]);
|
|
22
|
+
const [subCmds] = (0, react_1.useState)(() => new Map(Object.entries(command_catalog_1.TUI_SUBCOMMANDS)));
|
|
23
|
+
const handleSubmit = (0, react_1.useCallback)((val) => {
|
|
24
|
+
const trimmed = val.trim();
|
|
25
|
+
if (!trimmed)
|
|
26
|
+
return;
|
|
27
|
+
// Add to history (avoid duplicate of last entry)
|
|
28
|
+
setHistory((prev) => {
|
|
29
|
+
if (prev[prev.length - 1] === trimmed)
|
|
30
|
+
return prev;
|
|
31
|
+
return [...prev, trimmed];
|
|
32
|
+
});
|
|
33
|
+
setHistoryIdx(-1);
|
|
34
|
+
setHistoryTemp("");
|
|
35
|
+
setValue("");
|
|
36
|
+
onSubmit(trimmed);
|
|
37
|
+
}, [onSubmit]);
|
|
38
|
+
(0, ink_1.useInput)((_input, key) => {
|
|
39
|
+
if (isDisabled)
|
|
40
|
+
return;
|
|
41
|
+
// Up arrow — history prev
|
|
42
|
+
if (key.upArrow) {
|
|
43
|
+
setHistory((hist) => {
|
|
44
|
+
setHistoryIdx((idx) => {
|
|
45
|
+
if (idx === -1) {
|
|
46
|
+
setHistoryTemp(value);
|
|
47
|
+
const newIdx = hist.length - 1;
|
|
48
|
+
if (newIdx >= 0)
|
|
49
|
+
setValue(hist[newIdx]);
|
|
50
|
+
return newIdx;
|
|
51
|
+
}
|
|
52
|
+
else if (idx > 0) {
|
|
53
|
+
const newIdx = idx - 1;
|
|
54
|
+
setValue(hist[newIdx]);
|
|
55
|
+
return newIdx;
|
|
56
|
+
}
|
|
57
|
+
return idx;
|
|
58
|
+
});
|
|
59
|
+
return hist;
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Down arrow — history next
|
|
64
|
+
if (key.downArrow) {
|
|
65
|
+
setHistory((hist) => {
|
|
66
|
+
setHistoryIdx((idx) => {
|
|
67
|
+
if (idx >= 0) {
|
|
68
|
+
const newIdx = idx + 1;
|
|
69
|
+
if (newIdx >= hist.length) {
|
|
70
|
+
setValue(historyTemp);
|
|
71
|
+
return -1;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
setValue(hist[newIdx]);
|
|
75
|
+
return newIdx;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return idx;
|
|
79
|
+
});
|
|
80
|
+
return hist;
|
|
81
|
+
});
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// Tab — completion
|
|
85
|
+
if (_input === "\t") {
|
|
86
|
+
const allTop = [...command_catalog_1.BUILTIN_CMDS, ...topCmds];
|
|
87
|
+
const trimmed = value.trimStart();
|
|
88
|
+
const spaceIdx = trimmed.indexOf(" ");
|
|
89
|
+
let completions;
|
|
90
|
+
if (spaceIdx === -1) {
|
|
91
|
+
completions = allTop.filter((cmd) => cmd.startsWith(trimmed));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const parent = trimmed.slice(0, spaceIdx);
|
|
95
|
+
const rest = trimmed.slice(spaceIdx + 1);
|
|
96
|
+
const subs = subCmds.get(parent) ?? [];
|
|
97
|
+
completions = subs
|
|
98
|
+
.filter((s) => s.startsWith(rest))
|
|
99
|
+
.map((s) => `${parent} ${s}`);
|
|
100
|
+
}
|
|
101
|
+
if (completions.length === 0)
|
|
102
|
+
return;
|
|
103
|
+
if (completions.length === 1) {
|
|
104
|
+
setValue(completions[0] + " ");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Find common prefix
|
|
108
|
+
const common = completions.reduce((a, b) => {
|
|
109
|
+
let i = 0;
|
|
110
|
+
while (i < a.length && i < b.length && a[i] === b[i])
|
|
111
|
+
i++;
|
|
112
|
+
return a.slice(0, i);
|
|
113
|
+
});
|
|
114
|
+
if (common.length > value.trimStart().length) {
|
|
115
|
+
setValue(common);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}, { isActive: !isDisabled });
|
|
119
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { color: "cyan", children: "\u25C8" }), (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: " arc402 " }), (0, jsx_runtime_1.jsxs)(ink_1.Text, { color: "white", children: [">", " "] }), (0, jsx_runtime_1.jsx)(ink_text_input_1.default, { value: value, onChange: setValue, onSubmit: handleSubmit, focus: !isDisabled })] }));
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=InputLine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputLine.js","sourceRoot":"","sources":["../../src/tui/InputLine.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Viewport = Viewport;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const ink_1 = require("ink");
|
|
6
|
+
/**
|
|
7
|
+
* Scrollable output area that fills remaining terminal space.
|
|
8
|
+
* Renders a window slice of the buffer, not terminal scroll.
|
|
9
|
+
* scrollOffset=0 means pinned to bottom (auto-scroll).
|
|
10
|
+
* Positive scrollOffset means scrolled up by that many lines.
|
|
11
|
+
*/
|
|
12
|
+
function Viewport({ lines, scrollOffset, isAutoScroll, viewportHeight }) {
|
|
13
|
+
// Compute the window slice
|
|
14
|
+
// scrollOffset=0 → show last viewportHeight lines
|
|
15
|
+
// scrollOffset=N → show lines ending viewportHeight+N from end
|
|
16
|
+
const totalLines = lines.length;
|
|
17
|
+
let endIdx;
|
|
18
|
+
let startIdx;
|
|
19
|
+
if (scrollOffset === 0) {
|
|
20
|
+
// Auto-scroll: pinned to bottom
|
|
21
|
+
endIdx = totalLines;
|
|
22
|
+
startIdx = Math.max(0, endIdx - viewportHeight);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// Scrolled up: scrollOffset lines from bottom
|
|
26
|
+
endIdx = Math.max(0, totalLines - scrollOffset);
|
|
27
|
+
startIdx = Math.max(0, endIdx - viewportHeight);
|
|
28
|
+
}
|
|
29
|
+
const visibleLines = lines.slice(startIdx, endIdx);
|
|
30
|
+
// Pad with empty lines if fewer than viewportHeight
|
|
31
|
+
const padCount = Math.max(0, viewportHeight - visibleLines.length);
|
|
32
|
+
const paddedLines = [
|
|
33
|
+
...Array(padCount).fill(""),
|
|
34
|
+
...visibleLines,
|
|
35
|
+
];
|
|
36
|
+
const canScrollDown = scrollOffset > 0;
|
|
37
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", flexGrow: 1, children: [(0, jsx_runtime_1.jsx)(ink_1.Box, { flexDirection: "column", flexGrow: 1, children: paddedLines.map((line, i) => ((0, jsx_runtime_1.jsx)(ink_1.Text, { children: line }, i))) }), canScrollDown && !isAutoScroll && ((0, jsx_runtime_1.jsx)(ink_1.Box, { justifyContent: "flex-end", children: (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "\u2193 more" }) }))] }));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=Viewport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Viewport.js","sourceRoot":"","sources":["../../src/tui/Viewport.tsx"],"names":[],"mappings":";;AAiBA,4BA4CC;;AA5DD,6BAAgC;AAUhC;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAiB;IAE3F,2BAA2B;IAC3B,kDAAkD;IAClD,+DAA+D;IAC/D,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IAChC,IAAI,MAAc,CAAC;IACnB,IAAI,QAAgB,CAAC;IAErB,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,gCAAgC;QAChC,MAAM,GAAG,UAAU,CAAC;QACpB,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACN,8CAA8C;QAC9C,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC,CAAC;QAChD,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEnD,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG;QAClB,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,GAAG,YAAY;KAChB,CAAC;IAEF,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,CAAC;IAEvC,OAAO,CACL,wBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,aACrC,uBAAC,SAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,YACpC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5B,uBAAC,UAAI,cAAU,IAAI,IAAR,CAAC,CAAe,CAC5B,CAAC,GACE,EACL,aAAa,IAAI,CAAC,YAAY,IAAI,CACjC,uBAAC,SAAG,IAAC,cAAc,EAAC,UAAU,YAC5B,uBAAC,UAAI,IAAC,QAAQ,kCAAc,GACxB,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WalletConnectPairing = WalletConnectPairing;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const ink_1 = require("ink");
|
|
7
|
+
const qr_render_js_1 = require("../ui/qr-render.js");
|
|
8
|
+
/**
|
|
9
|
+
* Renders WalletConnect pairing inside the Ink TUI viewport:
|
|
10
|
+
* - ASCII QR code
|
|
11
|
+
* - Deep links for MetaMask, Rainbow, Trust, etc.
|
|
12
|
+
* - Status transitions: connecting → connected → chain-switching → ready
|
|
13
|
+
*/
|
|
14
|
+
function WalletConnectPairing({ onComplete, onError, connect, }) {
|
|
15
|
+
const [stage, setStage] = (0, react_1.useState)("connecting");
|
|
16
|
+
const [uri, setUri] = (0, react_1.useState)(null);
|
|
17
|
+
const [links, setLinks] = (0, react_1.useState)({});
|
|
18
|
+
const [account, setAccount] = (0, react_1.useState)(null);
|
|
19
|
+
const [qrLines, setQrLines] = (0, react_1.useState)([]);
|
|
20
|
+
const [detail, setDetail] = (0, react_1.useState)("");
|
|
21
|
+
const handleUri = (0, react_1.useCallback)((wcUri, wcLinks) => {
|
|
22
|
+
setUri(wcUri);
|
|
23
|
+
setLinks(wcLinks);
|
|
24
|
+
// Generate ASCII QR using our compact renderer
|
|
25
|
+
try {
|
|
26
|
+
const lines = (0, qr_render_js_1.renderQR)(wcUri);
|
|
27
|
+
setQrLines(lines);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// QR rendering is best-effort
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
const handleStatus = (0, react_1.useCallback)((status, statusDetail) => {
|
|
34
|
+
setStage(status);
|
|
35
|
+
if (statusDetail)
|
|
36
|
+
setDetail(statusDetail);
|
|
37
|
+
if (status === "connected" && statusDetail) {
|
|
38
|
+
setAccount(statusDetail);
|
|
39
|
+
}
|
|
40
|
+
}, []);
|
|
41
|
+
(0, react_1.useEffect)(() => {
|
|
42
|
+
const callbacks = {
|
|
43
|
+
onUri: handleUri,
|
|
44
|
+
onStatus: handleStatus,
|
|
45
|
+
};
|
|
46
|
+
connect(callbacks)
|
|
47
|
+
.then((result) => onComplete(result))
|
|
48
|
+
.catch((err) => onError(err instanceof Error ? err.message : String(err)));
|
|
49
|
+
}, [connect, handleUri, handleStatus, onComplete, onError]);
|
|
50
|
+
const statusIcon = stage === "error" ? "✗" : stage === "ready" ? "✓" : "◈";
|
|
51
|
+
const statusColor = stage === "error" ? "red" : stage === "ready" ? "green" : "cyan";
|
|
52
|
+
const statusMessages = {
|
|
53
|
+
connecting: "Waiting for wallet approval...",
|
|
54
|
+
connected: `Connected: ${account ?? ""}`,
|
|
55
|
+
"chain-switching": `Switching chain${detail ? `: ${detail}` : ""}...`,
|
|
56
|
+
ready: `Ready — ${account ?? ""}`,
|
|
57
|
+
error: detail || "Connection failed",
|
|
58
|
+
};
|
|
59
|
+
return ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", paddingLeft: 1, children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { color: "cyan", bold: true, children: "WalletConnect Pairing" }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: " " }), (0, jsx_runtime_1.jsxs)(ink_1.Box, { children: [(0, jsx_runtime_1.jsxs)(ink_1.Text, { color: statusColor, children: [statusIcon, " "] }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: statusMessages[stage] })] }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: " " }), uri && stage === "connecting" && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "Tap a link for your wallet app:" }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: " " }), Object.entries(links).map(([name, link]) => ((0, jsx_runtime_1.jsxs)(ink_1.Box, { flexDirection: "column", children: [(0, jsx_runtime_1.jsxs)(ink_1.Text, { color: "white", children: [name, ":"] }), (0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: link }), (0, jsx_runtime_1.jsx)(ink_1.Text, { children: " " })] }, name))), qrLines.length > 0 && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ink_1.Text, { dimColor: true, children: "Or scan QR:" }), qrLines.map((line, i) => ((0, jsx_runtime_1.jsx)(ink_1.Text, { children: line }, i)))] }))] }))] }));
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=WalletConnectPairing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WalletConnectPairing.js","sourceRoot":"","sources":["../../src/tui/WalletConnectPairing.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TUI_SUBCOMMANDS = exports.TUI_TOP_LEVEL_COMMANDS = exports.BUILTIN_CMDS = void 0;
|
|
4
|
+
exports.BUILTIN_CMDS = ["help", "exit", "quit", "clear", "status"];
|
|
5
|
+
exports.TUI_TOP_LEVEL_COMMANDS = [
|
|
6
|
+
"status",
|
|
7
|
+
"discover",
|
|
8
|
+
"agreements",
|
|
9
|
+
"workroom",
|
|
10
|
+
"subscription",
|
|
11
|
+
"subscribe",
|
|
12
|
+
"arena",
|
|
13
|
+
];
|
|
14
|
+
exports.TUI_SUBCOMMANDS = {
|
|
15
|
+
workroom: ["status", "worker"],
|
|
16
|
+
subscription: ["status", "list", "cancel", "topup"],
|
|
17
|
+
arena: ["rounds", "squad"],
|
|
18
|
+
squad: ["list", "info"],
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=command-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-catalog.js","sourceRoot":"","sources":["../../src/tui/command-catalog.ts"],"names":[],"mappings":";;;AAAa,QAAA,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAEpE,QAAA,sBAAsB,GAAG;IACpC,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,UAAU;IACV,cAAc;IACd,WAAW;IACX,OAAO;CACC,CAAC;AAEE,QAAA,eAAe,GAA6B;IACvD,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC9B,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC;IACnD,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB,CAAC"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.printStatusCard = printStatusCard;
|
|
4
|
+
exports.printDiscoverList = printDiscoverList;
|
|
5
|
+
exports.printHireCard = printHireCard;
|
|
6
|
+
exports.printAgreementList = printAgreementList;
|
|
7
|
+
exports.printComputeCard = printComputeCard;
|
|
8
|
+
exports.printSubscribeCard = printSubscribeCard;
|
|
9
|
+
exports.printRoundsList = printRoundsList;
|
|
10
|
+
exports.printSquadCard = printSquadCard;
|
|
11
|
+
exports.printWorkroomCard = printWorkroomCard;
|
|
12
|
+
const commerce_format_1 = require("./commerce-format");
|
|
13
|
+
const render_inline_1 = require("./render-inline");
|
|
14
|
+
function emit(lines) {
|
|
15
|
+
for (const line of lines)
|
|
16
|
+
(0, render_inline_1.writeTuiLine)(line);
|
|
17
|
+
}
|
|
18
|
+
function separator() {
|
|
19
|
+
return "─".repeat(60);
|
|
20
|
+
}
|
|
21
|
+
function badge(label) {
|
|
22
|
+
return label ? ` ${label}` : "";
|
|
23
|
+
}
|
|
24
|
+
function detail(label, value) {
|
|
25
|
+
return ` ${label.padEnd(14)} ${value}`;
|
|
26
|
+
}
|
|
27
|
+
function bullet(value) {
|
|
28
|
+
return ` • ${value}`;
|
|
29
|
+
}
|
|
30
|
+
function listItem(title, meta, detailLine, status) {
|
|
31
|
+
return [
|
|
32
|
+
`${title}${badge(status)}`,
|
|
33
|
+
...(meta ? [meta] : []),
|
|
34
|
+
...(detailLine ? [detailLine] : []),
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
async function printStatusCard(props) {
|
|
38
|
+
emit([
|
|
39
|
+
"◈ Wallet Status",
|
|
40
|
+
`${props.wallet}${badge(props.status?.label)}`,
|
|
41
|
+
props.network,
|
|
42
|
+
separator(),
|
|
43
|
+
detail("balance", props.balance ?? "n/a"),
|
|
44
|
+
detail("endpoint", props.endpoint ?? "n/a"),
|
|
45
|
+
...(typeof props.trustScore === "number"
|
|
46
|
+
? [detail("trust", (0, commerce_format_1.formatPercent)(Math.min(100, Math.max(0, props.trustScore / 5)), 1))]
|
|
47
|
+
: []),
|
|
48
|
+
...(props.agreements
|
|
49
|
+
? [
|
|
50
|
+
"",
|
|
51
|
+
"agreements",
|
|
52
|
+
detail("active", String(props.agreements.active)),
|
|
53
|
+
detail("verify", String(props.agreements.pendingVerification)),
|
|
54
|
+
detail("disputed", String(props.agreements.disputed)),
|
|
55
|
+
]
|
|
56
|
+
: []),
|
|
57
|
+
...(props.workroom
|
|
58
|
+
? [
|
|
59
|
+
"",
|
|
60
|
+
"workroom",
|
|
61
|
+
detail("status", props.workroom.status),
|
|
62
|
+
detail("jobs", String(props.workroom.activeJobs ?? 0)),
|
|
63
|
+
detail("harness", props.workroom.harness ?? "n/a"),
|
|
64
|
+
]
|
|
65
|
+
: []),
|
|
66
|
+
]);
|
|
67
|
+
}
|
|
68
|
+
async function printDiscoverList(props) {
|
|
69
|
+
emit([
|
|
70
|
+
"◈ Discover",
|
|
71
|
+
`${props.title ?? "Discover Results"}${badge(props.status?.label)}`,
|
|
72
|
+
...(props.summary ? [props.summary] : []),
|
|
73
|
+
separator(),
|
|
74
|
+
...props.agents.flatMap((agent) => listItem(`#${agent.rank} ${agent.name}`, `${agent.wallet} · trust ${agent.trustScore}${agent.priceLabel ? ` · ${agent.priceLabel}` : ""}`, `${agent.serviceType}${agent.capabilitySummary ? ` · ${agent.capabilitySummary}` : ""}${typeof agent.compositeScore === "number" ? ` · score ${(0, commerce_format_1.formatPercent)(agent.compositeScore * 100, 1)}` : ""}`, agent.endpointStatus).map((line) => ` ${line}`)),
|
|
75
|
+
`${props.agents.length} ranked result${props.agents.length === 1 ? "" : "s"}`,
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
async function printHireCard(props) {
|
|
79
|
+
emit([
|
|
80
|
+
"◈ Hire",
|
|
81
|
+
`${props.providerName ? `${props.providerName} · ${props.providerAddress}` : props.providerAddress}${badge(props.status?.label)}`,
|
|
82
|
+
props.capability,
|
|
83
|
+
separator(),
|
|
84
|
+
detail("price", props.price),
|
|
85
|
+
detail("deadline", props.deadline ?? "open"),
|
|
86
|
+
detail("agreement", props.agreementId ?? "pending"),
|
|
87
|
+
detail("tx", props.txHash ?? "not submitted"),
|
|
88
|
+
...((props.notes ?? []).length > 0
|
|
89
|
+
? ["", "operator notes", ...(props.notes ?? []).map(bullet)]
|
|
90
|
+
: []),
|
|
91
|
+
]);
|
|
92
|
+
}
|
|
93
|
+
async function printAgreementList(props) {
|
|
94
|
+
emit([
|
|
95
|
+
"◈ Agreements",
|
|
96
|
+
`${props.roleLabel ?? "Recent Agreements"}${badge(props.status?.label)}`,
|
|
97
|
+
...(props.totalEscrowLabel ? [props.totalEscrowLabel] : []),
|
|
98
|
+
separator(),
|
|
99
|
+
...(props.agreements.length > 0
|
|
100
|
+
? props.agreements.flatMap((agreement) => listItem(`#${agreement.id} ${agreement.counterparty}`, `${agreement.serviceType}${agreement.price ? ` · ${agreement.price}` : ""}`, agreement.verifyWindowMinutes !== undefined
|
|
101
|
+
? `verify window ${(0, commerce_format_1.formatCountdown)(agreement.verifyWindowMinutes)}`
|
|
102
|
+
: agreement.deadlineMinutes !== undefined
|
|
103
|
+
? `deadline ${(0, commerce_format_1.formatCountdown)(agreement.deadlineMinutes)}`
|
|
104
|
+
: undefined, agreement.status).map((line) => ` ${line}`))
|
|
105
|
+
: [" No agreements found."]),
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
async function printComputeCard(props) {
|
|
109
|
+
emit([
|
|
110
|
+
"◈ Compute Session",
|
|
111
|
+
`${props.sessionId}${badge(props.status?.label)}`,
|
|
112
|
+
`${props.provider} · ${props.gpuSpec}`,
|
|
113
|
+
separator(),
|
|
114
|
+
detail("rate", props.rateLabel),
|
|
115
|
+
detail("consumed", props.consumedLabel ?? "n/a"),
|
|
116
|
+
detail("cost", props.costLabel ?? "n/a"),
|
|
117
|
+
detail("remaining", props.remainingLabel ?? "n/a"),
|
|
118
|
+
...(props.utilizationPercent !== undefined
|
|
119
|
+
? [detail("utilization", (0, commerce_format_1.formatPercent)(props.utilizationPercent, 2))]
|
|
120
|
+
: []),
|
|
121
|
+
]);
|
|
122
|
+
}
|
|
123
|
+
async function printSubscribeCard(props) {
|
|
124
|
+
emit([
|
|
125
|
+
"◈ Subscription",
|
|
126
|
+
`${props.provider}${badge(props.status?.label)}`,
|
|
127
|
+
props.planId,
|
|
128
|
+
separator(),
|
|
129
|
+
detail("rate", props.rateLabel),
|
|
130
|
+
detail("months", String(props.months ?? 1)),
|
|
131
|
+
detail("renewal", props.nextRenewalLabel ?? "immediate access"),
|
|
132
|
+
detail("payments", props.paymentOptions?.length ? props.paymentOptions.join(", ") : "subscription"),
|
|
133
|
+
...((props.accessSummary ?? []).length > 0
|
|
134
|
+
? ["", "access", ...(props.accessSummary ?? []).map(bullet)]
|
|
135
|
+
: []),
|
|
136
|
+
]);
|
|
137
|
+
}
|
|
138
|
+
async function printRoundsList(props) {
|
|
139
|
+
emit([
|
|
140
|
+
"◈ Arena",
|
|
141
|
+
`${props.title ?? "Arena Rounds"}${badge(props.status?.label)}`,
|
|
142
|
+
separator(),
|
|
143
|
+
...(props.rounds.length > 0
|
|
144
|
+
? props.rounds.flatMap((round) => listItem(`#${round.id} ${round.question}`, `${round.category ?? "uncategorized"} · ${round.timingLabel}`, `YES ${round.yesLabel} · NO ${round.noLabel}`, round.resolved ? (round.outcomeLabel ?? "resolved") : "open").map((line) => ` ${line}`))
|
|
145
|
+
: [" No arena rounds found."]),
|
|
146
|
+
"Built for round boards and live resolution views.",
|
|
147
|
+
]);
|
|
148
|
+
}
|
|
149
|
+
async function printSquadCard(props) {
|
|
150
|
+
emit([
|
|
151
|
+
"◈ Squad",
|
|
152
|
+
`${props.name}${badge(props.status?.label ?? props.statusLabel)}`,
|
|
153
|
+
props.id,
|
|
154
|
+
separator(),
|
|
155
|
+
detail("domain", props.domainTag),
|
|
156
|
+
detail("members", String(props.memberCount)),
|
|
157
|
+
detail("invite", props.inviteOnly ? "yes" : "no"),
|
|
158
|
+
detail("creator", props.creator ?? "n/a"),
|
|
159
|
+
...((props.members ?? []).length > 0
|
|
160
|
+
? ["", "members", ...(props.members ?? []).map((member) => bullet(`${member.agent}${member.role ? ` · ${member.role}` : ""}${member.trustScore !== undefined ? ` · trust ${member.trustScore}` : ""}`))]
|
|
161
|
+
: []),
|
|
162
|
+
...((props.briefings ?? []).length > 0
|
|
163
|
+
? ["", "briefings", ...(props.briefings ?? []).map((briefing) => bullet(`${briefing.preview}${briefing.publishedLabel ? ` · ${briefing.publishedLabel}` : ""}${briefing.tags?.length ? ` · ${briefing.tags.join(", ")}` : ""}`))]
|
|
164
|
+
: []),
|
|
165
|
+
]);
|
|
166
|
+
}
|
|
167
|
+
async function printWorkroomCard(props) {
|
|
168
|
+
emit([
|
|
169
|
+
"◈ Workroom",
|
|
170
|
+
`${props.runtime ?? "Governed execution environment"}${badge(props.status?.label ?? props.statusLabel)}`,
|
|
171
|
+
separator(),
|
|
172
|
+
detail("harness", props.harness ?? "n/a"),
|
|
173
|
+
detail("queue", String(props.queueDepth ?? props.activeJobs?.length ?? 0)),
|
|
174
|
+
detail("policy", props.policyHash ?? "n/a"),
|
|
175
|
+
...((props.activeJobs ?? []).length > 0
|
|
176
|
+
? ["", "jobs", ...(props.activeJobs ?? []).map((job) => bullet(`${job.id} · ${job.status}${job.harness ? ` · ${job.harness}` : ""}${job.task ? ` · ${job.task}` : ""}`))]
|
|
177
|
+
: []),
|
|
178
|
+
]);
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=command-renderers.js.map
|