@dopemarkets/agent 0.1.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/bin/dope.js +8 -0
- package/dist/client_factory.d.ts +13 -0
- package/dist/client_factory.js +40 -0
- package/dist/client_factory.js.map +1 -0
- package/dist/commands/agent_key.d.ts +4 -0
- package/dist/commands/agent_key.js +63 -0
- package/dist/commands/agent_key.js.map +1 -0
- package/dist/commands/balance.d.ts +2 -0
- package/dist/commands/balance.js +27 -0
- package/dist/commands/balance.js.map +1 -0
- package/dist/commands/login.d.ts +14 -0
- package/dist/commands/login.js +172 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/markets.d.ts +3 -0
- package/dist/commands/markets.js +84 -0
- package/dist/commands/markets.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.js +180 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/stack.d.ts +6 -0
- package/dist/commands/stack.js +295 -0
- package/dist/commands/stack.js.map +1 -0
- package/dist/commands/whoami.d.ts +2 -0
- package/dist/commands/whoami.js +42 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/credentials.d.ts +39 -0
- package/dist/credentials.js +133 -0
- package/dist/credentials.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +160 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +17 -0
- package/dist/output.js +51 -0
- package/dist/output.js.map +1 -0
- package/dist/util.d.ts +17 -0
- package/dist/util.js +106 -0
- package/dist/util.js.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Local credential storage for `dope`.
|
|
3
|
+
//
|
|
4
|
+
// Stores the Agent Key in ~/.dope/credentials.json with 0600 permissions.
|
|
5
|
+
// Multi-credential support — keyed by `name` (e.g. "default", "claude").
|
|
6
|
+
// Default credential is whichever was most recently `dope login`-ed.
|
|
7
|
+
//
|
|
8
|
+
// Note: the spec recommends OS-native secret storage (macOS Keychain /
|
|
9
|
+
// Linux Secret Service / Windows Credential Manager). File-based is the
|
|
10
|
+
// MVP because `keytar`-style native bindings cause install headaches.
|
|
11
|
+
// A future module can transparently upgrade to keychain while keeping
|
|
12
|
+
// this API surface stable.
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.credentialsPath = void 0;
|
|
48
|
+
exports.saveCredential = saveCredential;
|
|
49
|
+
exports.loadCredential = loadCredential;
|
|
50
|
+
exports.listCredentials = listCredentials;
|
|
51
|
+
exports.deleteCredential = deleteCredential;
|
|
52
|
+
exports.setDefaultCredential = setDefaultCredential;
|
|
53
|
+
const fs = __importStar(require("node:fs"));
|
|
54
|
+
const path = __importStar(require("node:path"));
|
|
55
|
+
const os = __importStar(require("node:os"));
|
|
56
|
+
const CREDENTIALS_DIR = path.join(os.homedir(), '.dope');
|
|
57
|
+
const CREDENTIALS_FILE = path.join(CREDENTIALS_DIR, 'credentials.json');
|
|
58
|
+
const FILE_MODE = 0o600;
|
|
59
|
+
const DIR_MODE = 0o700;
|
|
60
|
+
const EMPTY_FILE = {
|
|
61
|
+
version: 1,
|
|
62
|
+
default_name: null,
|
|
63
|
+
credentials: {},
|
|
64
|
+
};
|
|
65
|
+
function readFileOrEmpty() {
|
|
66
|
+
if (!fs.existsSync(CREDENTIALS_FILE))
|
|
67
|
+
return { ...EMPTY_FILE };
|
|
68
|
+
try {
|
|
69
|
+
const raw = fs.readFileSync(CREDENTIALS_FILE, 'utf8');
|
|
70
|
+
const parsed = JSON.parse(raw);
|
|
71
|
+
if (parsed.version !== 1) {
|
|
72
|
+
throw new Error(`credential file version ${parsed.version} is not supported`);
|
|
73
|
+
}
|
|
74
|
+
return parsed;
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
throw new Error(`failed to read ${CREDENTIALS_FILE}: ${err.message}. Run \`dope login\` to recreate.`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function writeFile(data) {
|
|
81
|
+
if (!fs.existsSync(CREDENTIALS_DIR)) {
|
|
82
|
+
fs.mkdirSync(CREDENTIALS_DIR, { mode: DIR_MODE, recursive: true });
|
|
83
|
+
}
|
|
84
|
+
const tmp = CREDENTIALS_FILE + '.tmp';
|
|
85
|
+
fs.writeFileSync(tmp, JSON.stringify(data, null, 2), { mode: FILE_MODE });
|
|
86
|
+
fs.renameSync(tmp, CREDENTIALS_FILE);
|
|
87
|
+
// Re-assert mode in case the umask softened it.
|
|
88
|
+
fs.chmodSync(CREDENTIALS_FILE, FILE_MODE);
|
|
89
|
+
}
|
|
90
|
+
function saveCredential(cred, { makeDefault = true } = {}) {
|
|
91
|
+
const file = readFileOrEmpty();
|
|
92
|
+
file.credentials[cred.name] = cred;
|
|
93
|
+
if (makeDefault || !file.default_name) {
|
|
94
|
+
file.default_name = cred.name;
|
|
95
|
+
}
|
|
96
|
+
writeFile(file);
|
|
97
|
+
}
|
|
98
|
+
function loadCredential(name) {
|
|
99
|
+
const file = readFileOrEmpty();
|
|
100
|
+
const key = name ?? file.default_name;
|
|
101
|
+
if (!key)
|
|
102
|
+
return null;
|
|
103
|
+
return file.credentials[key] ?? null;
|
|
104
|
+
}
|
|
105
|
+
function listCredentials() {
|
|
106
|
+
const file = readFileOrEmpty();
|
|
107
|
+
return {
|
|
108
|
+
default_name: file.default_name,
|
|
109
|
+
credentials: Object.values(file.credentials),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function deleteCredential(name) {
|
|
113
|
+
const file = readFileOrEmpty();
|
|
114
|
+
if (!file.credentials[name])
|
|
115
|
+
return false;
|
|
116
|
+
delete file.credentials[name];
|
|
117
|
+
if (file.default_name === name) {
|
|
118
|
+
const remaining = Object.keys(file.credentials);
|
|
119
|
+
file.default_name = remaining[0] ?? null;
|
|
120
|
+
}
|
|
121
|
+
writeFile(file);
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
function setDefaultCredential(name) {
|
|
125
|
+
const file = readFileOrEmpty();
|
|
126
|
+
if (!file.credentials[name])
|
|
127
|
+
return false;
|
|
128
|
+
file.default_name = name;
|
|
129
|
+
writeFile(file);
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
exports.credentialsPath = CREDENTIALS_FILE;
|
|
133
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// `dope` CLI dispatcher.
|
|
3
|
+
//
|
|
4
|
+
// Each command lives in src/commands/<name>.ts. This file handles
|
|
5
|
+
// argv-level routing and the --json flag.
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.parseArgs = void 0;
|
|
8
|
+
const util_js_1 = require("./util.js");
|
|
9
|
+
Object.defineProperty(exports, "parseArgs", { enumerable: true, get: function () { return util_js_1.parseArgs; } });
|
|
10
|
+
const output_js_1 = require("./output.js");
|
|
11
|
+
const login_js_1 = require("./commands/login.js");
|
|
12
|
+
const whoami_js_1 = require("./commands/whoami.js");
|
|
13
|
+
const balance_js_1 = require("./commands/balance.js");
|
|
14
|
+
const markets_js_1 = require("./commands/markets.js");
|
|
15
|
+
const stack_js_1 = require("./commands/stack.js");
|
|
16
|
+
const agent_key_js_1 = require("./commands/agent_key.js");
|
|
17
|
+
const mcp_js_1 = require("./commands/mcp.js");
|
|
18
|
+
const VERSION = '0.1.0';
|
|
19
|
+
const HELP = `dope — DOPE Agent Mode CLI (v${VERSION})
|
|
20
|
+
|
|
21
|
+
Usage:
|
|
22
|
+
dope <command> [args] [--json]
|
|
23
|
+
|
|
24
|
+
Authentication:
|
|
25
|
+
dope login Authorize a new Agent Key on this machine.
|
|
26
|
+
--name <label> e.g. "Claude Desktop" (default: "default")
|
|
27
|
+
--max-premium <usd>
|
|
28
|
+
--daily-limit <usd>
|
|
29
|
+
--max-payout <usd>
|
|
30
|
+
--expires <days> 1..90 (default 7)
|
|
31
|
+
--quote-only skip activate:stack permission
|
|
32
|
+
--no-browser don't auto-open the URL
|
|
33
|
+
--base-url <url> override DOPE backend
|
|
34
|
+
dope whoami Current Agent Key identity, permissions, limits.
|
|
35
|
+
|
|
36
|
+
Account:
|
|
37
|
+
dope balance USDC balance breakdown.
|
|
38
|
+
|
|
39
|
+
Markets:
|
|
40
|
+
dope markets search [query] Search eligible prediction markets.
|
|
41
|
+
--category <name>
|
|
42
|
+
--min-liquidity <usdc>
|
|
43
|
+
--closes-before <iso>
|
|
44
|
+
--closes-after <iso>
|
|
45
|
+
--limit <n>
|
|
46
|
+
dope markets show <market_id> Full market detail.
|
|
47
|
+
|
|
48
|
+
Stacks:
|
|
49
|
+
dope stack list Your Stacks. --status active|pending|resolved|failed|all
|
|
50
|
+
dope stack show <stack_id> Full Stack detail with legs.
|
|
51
|
+
dope stack candidates Server-side candidate generator.
|
|
52
|
+
--target-min <X>
|
|
53
|
+
--target-max <Y>
|
|
54
|
+
--max-premium <usdc>
|
|
55
|
+
--categories crypto,macro
|
|
56
|
+
--legs-min 2 --legs-max 4
|
|
57
|
+
--limit 5
|
|
58
|
+
dope stack quote Get a binding quote.
|
|
59
|
+
--legs <market_id:YES,market_id:NO>
|
|
60
|
+
--premium <usdc>
|
|
61
|
+
dope stack activate <quote_id> Activate a quoted Stack. Signs via Turnkey.
|
|
62
|
+
--idempotency-key <key> (auto-generated otherwise)
|
|
63
|
+
|
|
64
|
+
Agent Keys:
|
|
65
|
+
dope agent-key list Your Agent Keys.
|
|
66
|
+
dope agent-key revoke <id> Revoke. DOPE-side immediate.
|
|
67
|
+
dope agent-key create Equivalent to \`dope login\`.
|
|
68
|
+
|
|
69
|
+
MCP (Phase 5, not yet implemented):
|
|
70
|
+
dope mcp install
|
|
71
|
+
dope mcp start
|
|
72
|
+
dope mcp status
|
|
73
|
+
|
|
74
|
+
Global flags:
|
|
75
|
+
--json Structured output. Required for agent use.
|
|
76
|
+
--help Show this message.
|
|
77
|
+
--version Print version.
|
|
78
|
+
|
|
79
|
+
Environment:
|
|
80
|
+
DOPE_BASE_URL Default backend URL for \`dope login\`.
|
|
81
|
+
`;
|
|
82
|
+
async function main() {
|
|
83
|
+
const rawArgs = process.argv.slice(2);
|
|
84
|
+
if (rawArgs.length === 0 || rawArgs[0] === '--help' || rawArgs[0] === '-h' || rawArgs[0] === 'help') {
|
|
85
|
+
(0, output_js_1.printHuman)(HELP);
|
|
86
|
+
process.exit(0);
|
|
87
|
+
}
|
|
88
|
+
if (rawArgs[0] === '--version' || rawArgs[0] === '-v') {
|
|
89
|
+
(0, output_js_1.printHuman)(VERSION);
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
// Strip --json early so each command sees a consistent rest[].
|
|
93
|
+
const jsonIdx = rawArgs.indexOf('--json');
|
|
94
|
+
const json = jsonIdx !== -1;
|
|
95
|
+
if (jsonIdx !== -1)
|
|
96
|
+
rawArgs.splice(jsonIdx, 1);
|
|
97
|
+
const out = { json };
|
|
98
|
+
// Two-part commands ("markets show", "stack activate") consume two
|
|
99
|
+
// positional tokens. One-part commands ("login", "balance") consume one.
|
|
100
|
+
const cmd = rawArgs[0];
|
|
101
|
+
const sub = rawArgs[1];
|
|
102
|
+
const rest = rawArgs.slice(2);
|
|
103
|
+
try {
|
|
104
|
+
switch (cmd) {
|
|
105
|
+
case 'login':
|
|
106
|
+
return await (0, login_js_1.runLogin)((0, login_js_1.parseLoginArgs)(rawArgs.slice(1)), out);
|
|
107
|
+
case 'whoami':
|
|
108
|
+
return await (0, whoami_js_1.runWhoami)(out);
|
|
109
|
+
case 'balance':
|
|
110
|
+
return await (0, balance_js_1.runBalance)(out);
|
|
111
|
+
case 'markets':
|
|
112
|
+
if (sub === 'search')
|
|
113
|
+
return await (0, markets_js_1.runMarketsSearch)(rest, out);
|
|
114
|
+
if (sub === 'show')
|
|
115
|
+
return await (0, markets_js_1.runMarketsShow)(rest, out);
|
|
116
|
+
return unknownSub(cmd, sub, out);
|
|
117
|
+
case 'stack':
|
|
118
|
+
if (sub === 'quote')
|
|
119
|
+
return await (0, stack_js_1.runStackQuote)(rest, out);
|
|
120
|
+
if (sub === 'activate')
|
|
121
|
+
return await (0, stack_js_1.runStackActivate)(rest, out);
|
|
122
|
+
if (sub === 'list')
|
|
123
|
+
return await (0, stack_js_1.runStackList)(rest, out);
|
|
124
|
+
if (sub === 'show')
|
|
125
|
+
return await (0, stack_js_1.runStackShow)(rest, out);
|
|
126
|
+
if (sub === 'candidates')
|
|
127
|
+
return await (0, stack_js_1.runStackCandidates)(rest, out);
|
|
128
|
+
return unknownSub(cmd, sub, out);
|
|
129
|
+
case 'agent-key':
|
|
130
|
+
case 'agent_key':
|
|
131
|
+
if (sub === 'list')
|
|
132
|
+
return await (0, agent_key_js_1.runAgentKeyList)(rest, out);
|
|
133
|
+
if (sub === 'revoke')
|
|
134
|
+
return await (0, agent_key_js_1.runAgentKeyRevoke)(rest, out);
|
|
135
|
+
if (sub === 'create') {
|
|
136
|
+
(0, agent_key_js_1.runAgentKeyCreateHint)(out);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
return unknownSub(cmd, sub, out);
|
|
140
|
+
case 'mcp':
|
|
141
|
+
if (sub === 'install')
|
|
142
|
+
return (0, mcp_js_1.runMcpInstall)(rest, out);
|
|
143
|
+
if (sub === 'start')
|
|
144
|
+
return (0, mcp_js_1.runMcpStart)(rest, out);
|
|
145
|
+
if (sub === 'status')
|
|
146
|
+
return (0, mcp_js_1.runMcpStatus)(rest, out);
|
|
147
|
+
return unknownSub(cmd, sub, out);
|
|
148
|
+
default:
|
|
149
|
+
return (0, output_js_1.emitError)(out, { error_code: 'INVALID_REQUEST', message: `Unknown command: ${cmd ?? '(none)'}` }, 2);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
(0, output_js_1.emitError)(out, { error_code: 'SERVICE_UNAVAILABLE', message: err.message ?? String(err) }, 1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function unknownSub(cmd, sub, out) {
|
|
157
|
+
return (0, output_js_1.emitError)(out, { error_code: 'INVALID_REQUEST', message: `Unknown subcommand: ${cmd} ${sub ?? ''}`.trim() }, 2);
|
|
158
|
+
}
|
|
159
|
+
main();
|
|
160
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/output.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface CliOutput {
|
|
2
|
+
/** True if --json was passed; commands emit structured output. */
|
|
3
|
+
json: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function printJson(value: unknown): void;
|
|
6
|
+
export declare function printHuman(text: string): void;
|
|
7
|
+
export declare function emitOk(out: CliOutput, jsonBody: unknown, humanText: string | (() => string)): void;
|
|
8
|
+
export interface CliError {
|
|
9
|
+
error_code: string;
|
|
10
|
+
message?: string;
|
|
11
|
+
details?: unknown;
|
|
12
|
+
}
|
|
13
|
+
export declare function emitError(out: CliOutput, err: CliError, exitCode?: number): never;
|
|
14
|
+
/** Right-align a label/value row for human output. */
|
|
15
|
+
export declare function row(label: string, value: string, labelWidth?: number): string;
|
|
16
|
+
/** Format a USDC string (e.g. "20.00") with a $ prefix and 2 decimals. Pass-through if already prefixed. */
|
|
17
|
+
export declare function usd(value: string | number | null | undefined): string;
|
package/dist/output.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Output formatting helpers.
|
|
3
|
+
//
|
|
4
|
+
// Every command supports two output modes:
|
|
5
|
+
// - human (default): concise, legible text
|
|
6
|
+
// - json (--json): stable structured output for agents
|
|
7
|
+
//
|
|
8
|
+
// Errors return non-zero exit codes. Stable `error_code` fields are
|
|
9
|
+
// always present in --json mode so agents can react programmatically.
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.printJson = printJson;
|
|
12
|
+
exports.printHuman = printHuman;
|
|
13
|
+
exports.emitOk = emitOk;
|
|
14
|
+
exports.emitError = emitError;
|
|
15
|
+
exports.row = row;
|
|
16
|
+
exports.usd = usd;
|
|
17
|
+
function printJson(value) {
|
|
18
|
+
process.stdout.write(JSON.stringify(value, null, 2) + '\n');
|
|
19
|
+
}
|
|
20
|
+
function printHuman(text) {
|
|
21
|
+
process.stdout.write(text + '\n');
|
|
22
|
+
}
|
|
23
|
+
function emitOk(out, jsonBody, humanText) {
|
|
24
|
+
if (out.json) {
|
|
25
|
+
printJson(jsonBody);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
printHuman(typeof humanText === 'function' ? humanText() : humanText);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function emitError(out, err, exitCode = 1) {
|
|
32
|
+
if (out.json) {
|
|
33
|
+
process.stdout.write(JSON.stringify({ ok: false, ...err }, null, 2) + '\n');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
process.stderr.write(`error: ${err.error_code}${err.message ? ' — ' + err.message : ''}\n`);
|
|
37
|
+
}
|
|
38
|
+
process.exit(exitCode);
|
|
39
|
+
}
|
|
40
|
+
/** Right-align a label/value row for human output. */
|
|
41
|
+
function row(label, value, labelWidth = 14) {
|
|
42
|
+
return `${label.padEnd(labelWidth)} ${value}`;
|
|
43
|
+
}
|
|
44
|
+
/** Format a USDC string (e.g. "20.00") with a $ prefix and 2 decimals. Pass-through if already prefixed. */
|
|
45
|
+
function usd(value) {
|
|
46
|
+
if (value == null)
|
|
47
|
+
return '—';
|
|
48
|
+
const s = typeof value === 'number' ? value.toFixed(2) : String(value);
|
|
49
|
+
return s.startsWith('$') ? s : `$${s}`;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":";AAAA,6BAA6B;AAC7B,EAAE;AACF,2CAA2C;AAC3C,6CAA6C;AAC7C,2DAA2D;AAC3D,EAAE;AACF,oEAAoE;AACpE,sEAAsE;;AAOtE,8BAEC;AAED,gCAEC;AAED,wBAMC;AAQD,8BAOC;AAGD,kBAEC;AAGD,kBAIC;AAzCD,SAAgB,SAAS,CAAC,KAAc;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,UAAU,CAAC,IAAY;IACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAgB,MAAM,CAAC,GAAc,EAAE,QAAiB,EAAE,SAAkC;IAC1F,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAQD,SAAgB,SAAS,CAAC,GAAc,EAAE,GAAa,EAAE,QAAQ,GAAG,CAAC;IACnE,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,sDAAsD;AACtD,SAAgB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,UAAU,GAAG,EAAE;IAC/D,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,EAAE,CAAC;AAChD,CAAC;AAED,4GAA4G;AAC5G,SAAgB,GAAG,CAAC,KAAyC;IAC3D,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC;IAC9B,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACzC,CAAC"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Open a URL in the user's default browser. Returns true on success. */
|
|
2
|
+
export declare function openInBrowser(url: string): boolean;
|
|
3
|
+
/** Async sleep helper. */
|
|
4
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
5
|
+
/** Pretty-print a Bytes-like number as KB/MB/GB. */
|
|
6
|
+
export declare function formatBytes(n: number): string;
|
|
7
|
+
export interface ParsedArgs {
|
|
8
|
+
positionals: string[];
|
|
9
|
+
flags: Record<string, string | true>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Tiny argv parser. Supports --flag, --flag=value, --flag value, -f short.
|
|
13
|
+
* Positionals collected separately. No external dep.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseArgs(argv: string[]): ParsedArgs;
|
|
16
|
+
/** Convert a flag-or-positional value to a string, throwing if missing. */
|
|
17
|
+
export declare function required(value: unknown, fieldName: string): string;
|
package/dist/util.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Small CLI helpers.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.openInBrowser = openInBrowser;
|
|
5
|
+
exports.sleep = sleep;
|
|
6
|
+
exports.formatBytes = formatBytes;
|
|
7
|
+
exports.parseArgs = parseArgs;
|
|
8
|
+
exports.required = required;
|
|
9
|
+
const node_child_process_1 = require("node:child_process");
|
|
10
|
+
/** Open a URL in the user's default browser. Returns true on success. */
|
|
11
|
+
function openInBrowser(url) {
|
|
12
|
+
const platform = process.platform;
|
|
13
|
+
let cmd;
|
|
14
|
+
let args;
|
|
15
|
+
if (platform === 'darwin') {
|
|
16
|
+
cmd = 'open';
|
|
17
|
+
args = [url];
|
|
18
|
+
}
|
|
19
|
+
else if (platform === 'win32') {
|
|
20
|
+
cmd = 'cmd';
|
|
21
|
+
args = ['/c', 'start', '""', url];
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
cmd = 'xdg-open';
|
|
25
|
+
args = [url];
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const child = (0, node_child_process_1.spawn)(cmd, args, { stdio: 'ignore', detached: true });
|
|
29
|
+
child.unref();
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Async sleep helper. */
|
|
37
|
+
function sleep(ms) {
|
|
38
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
39
|
+
}
|
|
40
|
+
/** Pretty-print a Bytes-like number as KB/MB/GB. */
|
|
41
|
+
function formatBytes(n) {
|
|
42
|
+
if (n < 1024)
|
|
43
|
+
return `${n} B`;
|
|
44
|
+
if (n < 1024 ** 2)
|
|
45
|
+
return `${(n / 1024).toFixed(1)} KB`;
|
|
46
|
+
if (n < 1024 ** 3)
|
|
47
|
+
return `${(n / 1024 ** 2).toFixed(1)} MB`;
|
|
48
|
+
return `${(n / 1024 ** 3).toFixed(1)} GB`;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Tiny argv parser. Supports --flag, --flag=value, --flag value, -f short.
|
|
52
|
+
* Positionals collected separately. No external dep.
|
|
53
|
+
*/
|
|
54
|
+
function parseArgs(argv) {
|
|
55
|
+
const positionals = [];
|
|
56
|
+
const flags = {};
|
|
57
|
+
for (let i = 0; i < argv.length; i++) {
|
|
58
|
+
const a = argv[i];
|
|
59
|
+
if (typeof a !== 'string')
|
|
60
|
+
continue;
|
|
61
|
+
if (a === '--') {
|
|
62
|
+
positionals.push(...argv.slice(i + 1).filter((x) => typeof x === 'string'));
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
if (a.startsWith('--')) {
|
|
66
|
+
const eq = a.indexOf('=');
|
|
67
|
+
if (eq !== -1) {
|
|
68
|
+
flags[a.slice(2, eq)] = a.slice(eq + 1);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const name = a.slice(2);
|
|
72
|
+
const next = argv[i + 1];
|
|
73
|
+
if (typeof next === 'string' && !next.startsWith('-')) {
|
|
74
|
+
flags[name] = next;
|
|
75
|
+
i++;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
flags[name] = true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else if (a.startsWith('-') && a.length > 1) {
|
|
83
|
+
const name = a.slice(1);
|
|
84
|
+
const next = argv[i + 1];
|
|
85
|
+
if (typeof next === 'string' && !next.startsWith('-')) {
|
|
86
|
+
flags[name] = next;
|
|
87
|
+
i++;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
flags[name] = true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
positionals.push(a);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { positionals, flags };
|
|
98
|
+
}
|
|
99
|
+
/** Convert a flag-or-positional value to a string, throwing if missing. */
|
|
100
|
+
function required(value, fieldName) {
|
|
101
|
+
if (typeof value !== 'string' || !value.length) {
|
|
102
|
+
throw new Error(`Missing required argument: ${fieldName}`);
|
|
103
|
+
}
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dopemarkets/agent",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "DOPE Agent Mode CLI. Run agentic Stack trades on DOPE from the terminal.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"dope": "bin/dope.js"
|
|
7
|
+
},
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc -p tsconfig.json",
|
|
12
|
+
"clean": "rm -rf dist",
|
|
13
|
+
"dev": "node --import tsx src/index.ts"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@dopemarkets/agent-client": "0.1.0"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/node": "^22.10.5",
|
|
20
|
+
"tsx": "^4.19.2",
|
|
21
|
+
"typescript": "^5.7.2"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=22.0.0"
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"bin",
|
|
29
|
+
"README.md"
|
|
30
|
+
],
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
}
|
|
34
|
+
}
|