@agntos/agentos 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/config.js ADDED
@@ -0,0 +1,163 @@
1
+ /**
2
+ * AgentOS local config + data management
3
+ * Everything lives in ~/.agentos/
4
+ */
5
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
6
+ import { join } from 'path';
7
+ import { homedir } from 'os';
8
+ const HOME = join(homedir(), '.agentos');
9
+ // Directory structure
10
+ const DIRS = {
11
+ root: HOME,
12
+ credentials: join(HOME, 'credentials'),
13
+ data: join(HOME, 'data'),
14
+ logs: join(HOME, 'logs'),
15
+ drafts: join(HOME, 'drafts'),
16
+ memory: join(HOME, 'memory'),
17
+ };
18
+ export function ensureDirs() {
19
+ for (const dir of Object.values(DIRS)) {
20
+ if (!existsSync(dir))
21
+ mkdirSync(dir, { recursive: true });
22
+ }
23
+ }
24
+ const CONFIG_PATH = join(HOME, 'config.json');
25
+ const DEFAULT_CONFIG = {
26
+ api: 'https://agntos.dev',
27
+ wallets: {},
28
+ defaultChain: 'solana',
29
+ };
30
+ export function loadConfig() {
31
+ if (!existsSync(CONFIG_PATH))
32
+ return DEFAULT_CONFIG;
33
+ try {
34
+ const raw = JSON.parse(readFileSync(CONFIG_PATH, 'utf8'));
35
+ // Migrate legacy single-keyfile config
36
+ if (raw.keyfile && !raw.wallets) {
37
+ const chain = raw.chain || 'solana';
38
+ raw.wallets = { [chain]: { keyfile: raw.keyfile } };
39
+ raw.defaultChain = chain;
40
+ delete raw.keyfile;
41
+ delete raw.chain;
42
+ }
43
+ return { ...DEFAULT_CONFIG, ...raw };
44
+ }
45
+ catch {
46
+ return DEFAULT_CONFIG;
47
+ }
48
+ }
49
+ export function saveConfig(config) {
50
+ ensureDirs();
51
+ writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
52
+ }
53
+ export function addWalletToConfig(chain, keyfile) {
54
+ const config = loadConfig();
55
+ if (!config.wallets)
56
+ config.wallets = {};
57
+ config.wallets[chain] = { keyfile: keyfile.replace(homedir(), '~') };
58
+ if (!config.setupDone)
59
+ config.defaultChain = chain;
60
+ config.setupDone = true;
61
+ saveConfig(config);
62
+ }
63
+ // ── Credentials ──
64
+ export function getKeyfile(chain) {
65
+ const config = loadConfig();
66
+ const targetChain = chain || config.defaultChain || 'solana';
67
+ // Priority: env var > config wallet > default locations
68
+ if (process.env.AGENTOS_KEYFILE)
69
+ return process.env.AGENTOS_KEYFILE;
70
+ const walletConfig = config.wallets?.[targetChain];
71
+ if (walletConfig?.keyfile) {
72
+ const resolved = walletConfig.keyfile.replace('~', homedir());
73
+ if (existsSync(resolved))
74
+ return resolved;
75
+ }
76
+ // Default Solana location
77
+ if (targetChain === 'solana') {
78
+ const defaultSol = join(homedir(), '.config', 'solana', 'id.json');
79
+ if (existsSync(defaultSol))
80
+ return defaultSol;
81
+ }
82
+ return null;
83
+ }
84
+ export function loadKeypair(chain) {
85
+ const path = getKeyfile(chain);
86
+ if (!path)
87
+ return null;
88
+ try {
89
+ const data = JSON.parse(readFileSync(path, 'utf8'));
90
+ return Uint8Array.from(data);
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ }
96
+ export function getConfiguredChains() {
97
+ const config = loadConfig();
98
+ return Object.keys(config.wallets || {});
99
+ }
100
+ // ── Data Store (small JSON files) ──
101
+ function dataPath(file) { return join(DIRS.data, file); }
102
+ export function getData(file) {
103
+ const p = dataPath(file);
104
+ if (!existsSync(p))
105
+ return null;
106
+ try {
107
+ return JSON.parse(readFileSync(p, 'utf8'));
108
+ }
109
+ catch {
110
+ return null;
111
+ }
112
+ }
113
+ export function setData(file, data) {
114
+ ensureDirs();
115
+ writeFileSync(dataPath(file), JSON.stringify(data, null, 2));
116
+ }
117
+ // Helpers for common data
118
+ export function getPhones() { return getData('phones.json') || []; }
119
+ export function addPhone(phone) { const p = getPhones(); p.push(phone); setData('phones.json', p); }
120
+ export function getInboxes() { return getData('inboxes.json') || []; }
121
+ export function addInbox(inbox) { const i = getInboxes(); i.push(inbox); setData('inboxes.json', i); }
122
+ export function getServers() { return getData('servers.json') || []; }
123
+ export function addServer(server) { const s = getServers(); s.push(server); setData('servers.json', s); }
124
+ export function getDomains() { return getData('domains.json') || []; }
125
+ export function addDomain(domain) { const d = getDomains(); d.push(domain); setData('domains.json', d); }
126
+ export function getWallets() { return getData('wallets.json') || []; }
127
+ export function addWallet(wallet) { const w = getWallets(); w.push(wallet); setData('wallets.json', w); }
128
+ export function getAccounts() { return getData('accounts.json') || []; }
129
+ export function addAccount(account) { const a = getAccounts(); a.push(account); setData('accounts.json', a); }
130
+ // ── Drafts ──
131
+ export function saveDraft(id, draft) {
132
+ ensureDirs();
133
+ writeFileSync(join(DIRS.drafts, `${id}.json`), JSON.stringify(draft, null, 2));
134
+ }
135
+ export function getDraft(id) {
136
+ const p = join(DIRS.drafts, `${id}.json`);
137
+ if (!existsSync(p))
138
+ return null;
139
+ try {
140
+ return JSON.parse(readFileSync(p, 'utf8'));
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ }
146
+ // ── Memory ──
147
+ export function addNote(note) {
148
+ ensureDirs();
149
+ const p = join(DIRS.memory, 'notes.md');
150
+ const existing = existsSync(p) ? readFileSync(p, 'utf8') : '';
151
+ const timestamp = new Date().toISOString();
152
+ writeFileSync(p, existing + `\n- [${timestamp}] ${note}`);
153
+ }
154
+ // ── Logging ──
155
+ export function log(message) {
156
+ ensureDirs();
157
+ const date = new Date().toISOString().split('T')[0];
158
+ const p = join(DIRS.logs, `${date}.log`);
159
+ const existing = existsSync(p) ? readFileSync(p, 'utf8') : '';
160
+ const timestamp = new Date().toISOString();
161
+ writeFileSync(p, existing + `[${timestamp}] ${message}\n`);
162
+ }
163
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../config.ts"],"names":[],"mappings":"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"}
package/dist/pay.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * x402 payment handler for AgentOS CLI
3
+ * Builds, signs, and submits USDC payment transactions on Solana
4
+ */
5
+ /**
6
+ * Parse a 402 response and extract payment requirements
7
+ */
8
+ export declare function parsePaymentRequired(data: any): {
9
+ amount: bigint;
10
+ payTo: string;
11
+ feePayer: string;
12
+ asset: string;
13
+ network: string;
14
+ } | null;
15
+ /**
16
+ * Build and partially sign a USDC transfer transaction for x402 payment
17
+ */
18
+ export declare function buildPaymentTransaction(payTo: string, amount: bigint, feePayer: string): Promise<{
19
+ transaction: string;
20
+ payer: string;
21
+ } | null>;
22
+ /**
23
+ * Make a paid request: call endpoint → if 402 → build payment → retry with payment
24
+ */
25
+ export declare function paidRequest(api: string, method: string, path: string, body?: Record<string, unknown>): Promise<{
26
+ data: any;
27
+ paid: boolean;
28
+ txHash?: string;
29
+ }>;
package/dist/pay.js ADDED
@@ -0,0 +1,139 @@
1
+ /**
2
+ * x402 payment handler for AgentOS CLI
3
+ * Builds, signs, and submits USDC payment transactions on Solana
4
+ */
5
+ import { loadKeypair, log } from './config.js';
6
+ // Solana constants
7
+ const USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
8
+ const TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';
9
+ const ASSOCIATED_TOKEN_PROGRAM = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL';
10
+ const COMPUTE_BUDGET = 'ComputeBudget111111111111111111111111111111';
11
+ const MEMO_PROGRAM = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
12
+ const SOLANA_RPC = 'https://api.mainnet-beta.solana.com';
13
+ /**
14
+ * Parse a 402 response and extract payment requirements
15
+ */
16
+ export function parsePaymentRequired(data) {
17
+ const accepts = data.accepts || [];
18
+ // Prefer Solana
19
+ const solana = accepts.find((a) => a.network?.startsWith('solana:'));
20
+ if (solana) {
21
+ return {
22
+ amount: BigInt(solana.amount),
23
+ payTo: solana.payTo,
24
+ feePayer: solana.extra?.feePayer || '',
25
+ asset: solana.asset || USDC_MINT,
26
+ network: solana.network,
27
+ };
28
+ }
29
+ return null;
30
+ }
31
+ /**
32
+ * Build and partially sign a USDC transfer transaction for x402 payment
33
+ */
34
+ export async function buildPaymentTransaction(payTo, amount, feePayer) {
35
+ const keypairBytes = loadKeypair();
36
+ if (!keypairBytes)
37
+ return null;
38
+ // Dynamic import to keep CLI fast when payment isn't needed
39
+ const { Connection, PublicKey, TransactionMessage, VersionedTransaction, ComputeBudgetProgram } = await import('@solana/web3.js');
40
+ const { getAssociatedTokenAddress, createTransferCheckedInstruction, getMint } = await import('@solana/spl-token');
41
+ const { Keypair } = await import('@solana/web3.js');
42
+ const connection = new Connection(SOLANA_RPC, 'confirmed');
43
+ const payer = Keypair.fromSecretKey(keypairBytes);
44
+ const payerPub = payer.publicKey;
45
+ const feePayerPub = new PublicKey(feePayer);
46
+ const recipientPub = new PublicKey(payTo);
47
+ const mintPub = new PublicKey(USDC_MINT);
48
+ // Get token accounts
49
+ const sourceAta = await getAssociatedTokenAddress(mintPub, payerPub);
50
+ const destAta = await getAssociatedTokenAddress(mintPub, recipientPub);
51
+ // Get mint info for decimals
52
+ const mintInfo = await getMint(connection, mintPub);
53
+ // Build transfer instruction
54
+ const transferIx = createTransferCheckedInstruction(sourceAta, mintPub, destAta, payerPub, amount, mintInfo.decimals);
55
+ // Compute budget
56
+ const computeLimitIx = ComputeBudgetProgram.setComputeUnitLimit({ units: 20000 });
57
+ const computePriceIx = ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 1 });
58
+ // Memo for uniqueness
59
+ const memoIx = {
60
+ keys: [],
61
+ programId: new PublicKey(MEMO_PROGRAM),
62
+ data: Buffer.from(crypto.getRandomValues(new Uint8Array(16)).reduce((s, b) => s + b.toString(16).padStart(2, '0'), ''))
63
+ };
64
+ // Get blockhash
65
+ const { blockhash } = await connection.getLatestBlockhash();
66
+ // Build message with feePayer paying gas
67
+ const message = new TransactionMessage({
68
+ payerKey: feePayerPub,
69
+ recentBlockhash: blockhash,
70
+ instructions: [computeLimitIx, computePriceIx, transferIx, memoIx],
71
+ }).compileToV0Message();
72
+ const tx = new VersionedTransaction(message);
73
+ // Partially sign with our key (feePayer signs on the server)
74
+ tx.sign([payer]);
75
+ // Serialize to base64
76
+ const serialized = Buffer.from(tx.serialize()).toString('base64');
77
+ return {
78
+ transaction: serialized,
79
+ payer: payerPub.toBase58(),
80
+ };
81
+ }
82
+ /**
83
+ * Make a paid request: call endpoint → if 402 → build payment → retry with payment
84
+ */
85
+ export async function paidRequest(api, method, path, body) {
86
+ const opts = {
87
+ method,
88
+ headers: { 'Content-Type': 'application/json' },
89
+ };
90
+ if (body)
91
+ opts.body = JSON.stringify(body);
92
+ // First attempt
93
+ const res = await fetch(api + path, opts);
94
+ const data = await res.json();
95
+ // Not a 402 — return as-is
96
+ if (res.status !== 402) {
97
+ if (data.error)
98
+ throw new Error(data.error);
99
+ return { data, paid: false };
100
+ }
101
+ // 402 — need to pay
102
+ const payment = parsePaymentRequired(data);
103
+ if (!payment)
104
+ throw new Error('Cannot parse payment requirements from 402 response');
105
+ // Determine which chain to pay on and load the right keypair
106
+ const payChain = payment.network.startsWith('solana') ? 'solana' : 'base';
107
+ const keypair = loadKeypair(payChain);
108
+ if (!keypair)
109
+ throw new Error(`No ${payChain} keyfile configured. Run: agentos setup --keyfile /path/to/keypair.json --chain ${payChain}`);
110
+ console.log(` Paying ${Number(payment.amount) / 1e6} USDC on Solana...`);
111
+ const tx = await buildPaymentTransaction(payment.payTo, payment.amount, payment.feePayer);
112
+ if (!tx)
113
+ throw new Error('Failed to build payment transaction');
114
+ // Retry with payment header
115
+ const paymentPayload = {
116
+ x402Version: 2,
117
+ payload: { transaction: tx.transaction },
118
+ accepted: {
119
+ scheme: 'exact',
120
+ network: payment.network,
121
+ }
122
+ };
123
+ const paidOpts = {
124
+ method,
125
+ headers: {
126
+ 'Content-Type': 'application/json',
127
+ 'Payment-Signature': Buffer.from(JSON.stringify(paymentPayload)).toString('base64'),
128
+ },
129
+ };
130
+ if (body)
131
+ paidOpts.body = JSON.stringify(body);
132
+ const paidRes = await fetch(api + path, paidOpts);
133
+ const paidData = await paidRes.json();
134
+ if (paidData.error)
135
+ throw new Error(paidData.error);
136
+ log(`payment: ${Number(payment.amount) / 1e6} USDC → ${path} (payer: ${tx.payer})`);
137
+ return { data: paidData, paid: true, txHash: paidData.txHash };
138
+ }
139
+ //# sourceMappingURL=pay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pay.js","sourceRoot":"","sources":["../pay.ts"],"names":[],"mappings":"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"}
package/dist/sdk.d.ts CHANGED
@@ -2,8 +2,9 @@
2
2
  * AgentOS SDK — programmatic access to all AgentOS services.
3
3
  */
4
4
  export declare class AgentOS {
5
- private api;
6
- constructor(apiUrl?: string);
5
+ api: string;
6
+ private autoPay;
7
+ constructor(apiUrl?: string, autoPay?: boolean);
7
8
  private request;
8
9
  phoneSearch(country: string, limit?: number): Promise<any>;
9
10
  phoneBuy(country: string, areaCode?: string): Promise<any>;
package/dist/sdk.js CHANGED
@@ -4,8 +4,10 @@
4
4
  const DEFAULT_API = 'https://agntos.dev';
5
5
  export class AgentOS {
6
6
  api;
7
- constructor(apiUrl) {
7
+ autoPay;
8
+ constructor(apiUrl, autoPay) {
8
9
  this.api = apiUrl || process.env.AGENTOS_API || DEFAULT_API;
10
+ this.autoPay = autoPay ?? true;
9
11
  }
10
12
  async request(method, path, body) {
11
13
  const opts = {
@@ -16,7 +18,18 @@ export class AgentOS {
16
18
  opts.body = JSON.stringify(body);
17
19
  const res = await fetch(this.api + path, opts);
18
20
  const data = await res.json();
19
- if (data.error && res.status !== 402)
21
+ // If 402 and autoPay enabled, try to pay
22
+ if (res.status === 402 && this.autoPay) {
23
+ try {
24
+ const { paidRequest } = await import('./pay.js');
25
+ const result = await paidRequest(this.api, method, path, body);
26
+ return result.data;
27
+ }
28
+ catch (e) {
29
+ throw new Error(e.message);
30
+ }
31
+ }
32
+ if (data.error)
20
33
  throw new Error(data.error);
21
34
  return data;
22
35
  }
package/dist/sdk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../sdk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../sdk.ts"],"names":[],"mappings":"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"}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,53 @@
1
+ /**
2
+ * AgentOS CLI UI — terminal rendering utilities
3
+ * Inspired by Claude Code's aesthetic
4
+ */
5
+ export declare const theme: {
6
+ accent: string;
7
+ success: string;
8
+ error: string;
9
+ warn: string;
10
+ info: string;
11
+ text: string;
12
+ muted: string;
13
+ dim: string;
14
+ bold: string;
15
+ reset: string;
16
+ underline: string;
17
+ };
18
+ export declare const icon: {
19
+ success: string;
20
+ error: string;
21
+ warn: string;
22
+ info: string;
23
+ arrow: string;
24
+ dot: string;
25
+ bullet: string;
26
+ };
27
+ export declare class Spinner {
28
+ private interval;
29
+ private frame;
30
+ start(label: string): void;
31
+ stop(label: string, success?: boolean): void;
32
+ }
33
+ export declare function header(title: string): void;
34
+ export declare function row(label: string, value: string, valueColor?: string): void;
35
+ export declare function ok(msg: string): void;
36
+ export declare function fail(msg: string): void;
37
+ export declare function warn(msg: string): void;
38
+ export declare function info(msg: string): void;
39
+ export declare function subtle(msg: string): void;
40
+ export declare function divider(): void;
41
+ export declare function blank(): void;
42
+ export declare function table(headers: string[], rows: string[][]): void;
43
+ export declare function box(title: string, content: string, color?: string): void;
44
+ export declare function progress(current: number, total: number, label?: string): void;
45
+ export declare function initReport(title: string, items: Array<{
46
+ name: string;
47
+ status: 'created' | 'updated' | 'skipped' | 'exists';
48
+ }>): void;
49
+ export declare function banner(): void;
50
+ export declare function kv(label: string, value: string): void;
51
+ export declare function section(title: string): void;
52
+ export declare function listItem(text: string, indent?: number): void;
53
+ export declare function statusLine(label: string, value: string, good: boolean): void;
package/dist/ui.js ADDED
@@ -0,0 +1,174 @@
1
+ /**
2
+ * AgentOS CLI UI — terminal rendering utilities
3
+ * Inspired by Claude Code's aesthetic
4
+ */
5
+ // ─── Theme ───
6
+ export const theme = {
7
+ // Brand
8
+ accent: '\x1b[38;5;208m', // orange
9
+ // Semantic
10
+ success: '\x1b[38;5;78m', // soft green
11
+ error: '\x1b[38;5;203m', // soft red
12
+ warn: '\x1b[38;5;220m', // yellow
13
+ info: '\x1b[38;5;111m', // soft blue
14
+ // Text
15
+ text: '\x1b[37m', // white
16
+ muted: '\x1b[38;5;243m', // gray
17
+ dim: '\x1b[38;5;238m', // darker gray
18
+ // Formatting
19
+ bold: '\x1b[1m',
20
+ reset: '\x1b[0m',
21
+ underline: '\x1b[4m',
22
+ };
23
+ // ─── Icons ───
24
+ export const icon = {
25
+ success: `${theme.success}✔${theme.reset}`,
26
+ error: `${theme.error}✘${theme.reset}`,
27
+ warn: `${theme.warn}⚠${theme.reset}`,
28
+ info: `${theme.info}●${theme.reset}`,
29
+ arrow: `${theme.muted}→${theme.reset}`,
30
+ dot: `${theme.dim}·${theme.reset}`,
31
+ bullet: `${theme.muted}▸${theme.reset}`,
32
+ };
33
+ // ─── Spinner ───
34
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
35
+ export class Spinner {
36
+ interval = null;
37
+ frame = 0;
38
+ start(label) {
39
+ this.frame = 0;
40
+ this.interval = setInterval(() => {
41
+ const f = SPINNER_FRAMES[this.frame % SPINNER_FRAMES.length];
42
+ process.stdout.write(`\r ${theme.info}${f}${theme.reset} ${theme.muted}${label}${theme.reset}`);
43
+ this.frame++;
44
+ }, 80);
45
+ }
46
+ stop(label, success = true) {
47
+ if (this.interval)
48
+ clearInterval(this.interval);
49
+ this.interval = null;
50
+ process.stdout.write(`\r\x1b[2K`);
51
+ if (success) {
52
+ console.log(` ${icon.success} ${label}`);
53
+ }
54
+ else {
55
+ console.log(` ${icon.error} ${label}`);
56
+ }
57
+ }
58
+ }
59
+ // ─── Layout ───
60
+ export function header(title) {
61
+ console.log();
62
+ console.log(` ${theme.accent}${theme.bold}${title}${theme.reset}`);
63
+ console.log(` ${theme.dim}${'─'.repeat(Math.min(title.length + 4, 50))}${theme.reset}`);
64
+ console.log();
65
+ }
66
+ export function row(label, value, valueColor = theme.text) {
67
+ const padded = label.padEnd(16);
68
+ console.log(` ${theme.muted}${padded}${theme.reset} ${valueColor}${value}${theme.reset}`);
69
+ }
70
+ export function ok(msg) {
71
+ console.log(` ${icon.success} ${msg}`);
72
+ }
73
+ export function fail(msg) {
74
+ console.log(` ${icon.error} ${msg}`);
75
+ }
76
+ export function warn(msg) {
77
+ console.log(` ${icon.warn} ${theme.warn}${msg}${theme.reset}`);
78
+ }
79
+ export function info(msg) {
80
+ console.log(` ${icon.info} ${msg}`);
81
+ }
82
+ export function subtle(msg) {
83
+ console.log(` ${theme.muted}${msg}${theme.reset}`);
84
+ }
85
+ export function divider() {
86
+ console.log(` ${theme.dim}${'─'.repeat(50)}${theme.reset}`);
87
+ }
88
+ export function blank() {
89
+ console.log();
90
+ }
91
+ // ─── Table ───
92
+ export function table(headers, rows) {
93
+ // Calculate column widths
94
+ const widths = headers.map((h, i) => Math.max(h.length, ...rows.map(r => (r[i] || '').length)));
95
+ // Header
96
+ const headerRow = headers.map((h, i) => h.padEnd(widths[i])).join(' ');
97
+ console.log(` ${theme.muted}${headerRow}${theme.reset}`);
98
+ console.log(` ${theme.dim}${widths.map(w => '─'.repeat(w)).join('──')}${theme.reset}`);
99
+ // Rows
100
+ for (const r of rows) {
101
+ const line = r.map((cell, i) => {
102
+ const padded = (cell || '').padEnd(widths[i]);
103
+ return i === 0 ? `${theme.text}${padded}${theme.reset}` : `${theme.muted}${padded}${theme.reset}`;
104
+ }).join(' ');
105
+ console.log(` ${line}`);
106
+ }
107
+ }
108
+ // ─── Box ───
109
+ export function box(title, content, color = theme.muted) {
110
+ const lines = content.split('\n');
111
+ const maxLen = Math.max(title.length + 2, ...lines.map(l => l.length));
112
+ const width = Math.min(maxLen + 4, 60);
113
+ console.log(` ${color}╭${'─'.repeat(width)}╮${theme.reset}`);
114
+ console.log(` ${color}│${theme.reset} ${theme.bold}${title}${theme.reset}${' '.repeat(width - title.length - 1)}${color}│${theme.reset}`);
115
+ console.log(` ${color}├${'─'.repeat(width)}┤${theme.reset}`);
116
+ for (const line of lines) {
117
+ console.log(` ${color}│${theme.reset} ${line}${' '.repeat(Math.max(0, width - line.length - 1))}${color}│${theme.reset}`);
118
+ }
119
+ console.log(` ${color}╰${'─'.repeat(width)}╯${theme.reset}`);
120
+ }
121
+ // ─── Progress ───
122
+ export function progress(current, total, label) {
123
+ const width = 30;
124
+ const filled = Math.round((current / total) * width);
125
+ const bar = '█'.repeat(filled) + '░'.repeat(width - filled);
126
+ const pct = Math.round((current / total) * 100);
127
+ process.stdout.write(`\r ${theme.info}${bar}${theme.reset} ${theme.muted}${pct}%${label ? ' ' + label : ''}${theme.reset}`);
128
+ if (current >= total)
129
+ console.log();
130
+ }
131
+ // ─── Init Report (Claude Code style) ───
132
+ export function initReport(title, items) {
133
+ console.log();
134
+ console.log(` ${theme.accent}${theme.bold}${title}${theme.reset}`);
135
+ console.log();
136
+ for (const item of items) {
137
+ const statusColor = item.status === 'created' ? theme.success
138
+ : item.status === 'updated' ? theme.warn
139
+ : theme.muted;
140
+ const statusLabel = item.status === 'created' ? 'created'
141
+ : item.status === 'updated' ? 'updated'
142
+ : item.status === 'exists' ? 'already exists'
143
+ : 'skipped';
144
+ console.log(` ${statusColor}${item.status === 'created' ? '✔' : item.status === 'updated' ? '↻' : '·'}${theme.reset} ${theme.text}${item.name.padEnd(24)}${theme.reset} ${theme.muted}${statusLabel}${theme.reset}`);
145
+ }
146
+ console.log();
147
+ }
148
+ // ─── Greeting / Banner ───
149
+ export function banner() {
150
+ console.log();
151
+ console.log(` ${theme.accent}${theme.bold}▲ AgentOS${theme.reset} ${theme.muted}v${process.env.AGENTOS_VERSION || '0.2.0'}${theme.reset}`);
152
+ console.log(` ${theme.dim}Everything your AI agent needs${theme.reset}`);
153
+ console.log();
154
+ }
155
+ // ─── Key-Value Pair (compact) ───
156
+ export function kv(label, value) {
157
+ console.log(` ${theme.muted}${label}${theme.reset} ${theme.text}${value}${theme.reset}`);
158
+ }
159
+ // ─── Section ───
160
+ export function section(title) {
161
+ console.log();
162
+ console.log(` ${theme.bold}${title}${theme.reset}`);
163
+ }
164
+ // ─── List Item ───
165
+ export function listItem(text, indent = 0) {
166
+ const pad = ' '.repeat(indent + 1);
167
+ console.log(`${pad}${icon.bullet} ${theme.muted}${text}${theme.reset}`);
168
+ }
169
+ // ─── Compact Status Line ───
170
+ export function statusLine(label, value, good) {
171
+ const dot = good ? `${theme.success}●${theme.reset}` : `${theme.error}●${theme.reset}`;
172
+ console.log(` ${dot} ${theme.muted}${label.padEnd(16)}${theme.reset} ${theme.text}${value}${theme.reset}`);
173
+ }
174
+ //# sourceMappingURL=ui.js.map