@aisa-one/cli 0.1.3 → 0.1.5

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/README.md CHANGED
@@ -60,16 +60,15 @@ aisa models show gpt-4.1 # model details + pricing
60
60
  ### API Discovery & Execution
61
61
 
62
62
  ```bash
63
- aisa api list # list all API endpoints
64
- aisa api list --category finance # filter by category
65
- aisa api search "email finder" # natural language search
66
- aisa api show finance /stock/price # endpoint details + params
67
- aisa api code finance /stock/price --lang python # generate code snippet
68
-
69
- # Execute any API
70
- aisa run finance /stock/price -q "symbol=AAPL"
63
+ aisa api list # 🚧 WIP not yet available
64
+ aisa api search "email finder" # 🚧 WIP
65
+ aisa api show finance /stock/price # 🚧 WIP
66
+ aisa api code finance /stock/price --lang python # 🚧 WIP
67
+
68
+ # Execute any API (works now)
69
+ aisa run financial /insider-trades -q "ticker=AAPL"
71
70
  aisa run tavily /search -d '{"query": "AI news"}'
72
- aisa run twitter /tweet/advanced-search -q "query=AI agents" --raw
71
+ aisa run twitter /tweet/advanced_search -q "query=AI agents" --raw
73
72
  ```
74
73
 
75
74
  ### Web Search
@@ -85,11 +84,12 @@ aisa scholar "transformer architecture" # academic papers
85
84
  ### Finance
86
85
 
87
86
  ```bash
88
- aisa stock AAPL # stock price
89
- aisa stock MSFT --field earnings # earnings data
87
+ aisa stock AAPL --field insider # insider trades
88
+ aisa stock AAPL --field news # company news
90
89
  aisa stock TSLA --field filings # SEC filings
91
- aisa stock NVDA --field insider # insider trades
92
- aisa crypto BTC # crypto price
90
+ aisa stock AAPL --field price # stock price (⚠️ may return empty for some tickers)
91
+ aisa stock MSFT --field earnings # earnings data (⚠️ limited ticker support)
92
+ aisa crypto BTC # crypto price snapshot
93
93
  aisa crypto ETH --period 30d # historical
94
94
  aisa screener --sector Technology # stock screener
95
95
  ```
@@ -97,11 +97,10 @@ aisa screener --sector Technology # stock screener
97
97
  ### Twitter/X
98
98
 
99
99
  ```bash
100
- aisa tweet "Hello world!" # post a tweet
101
- aisa tweet "Reply" --reply-to 123456 # reply
102
- aisa twitter search "AI agents" --limit 20 # search tweets
103
100
  aisa twitter user elonmusk # user profile
101
+ aisa twitter search "AI agents" --limit 20 # search tweets
104
102
  aisa twitter trends # trending topics
103
+ aisa tweet "Hello world!" # post (⚠️ requires login cookies, see docs)
105
104
  ```
106
105
 
107
106
  ### Video Generation
@@ -115,9 +114,8 @@ aisa video status <task-id> # check status
115
114
  ### Account
116
115
 
117
116
  ```bash
118
- aisa balance # credit balance
119
- aisa usage --limit 20 # usage history
120
- aisa usage --days 7 # last 7 days
117
+ aisa balance # 🚧 WIP — check https://aisa.one/dashboard
118
+ aisa usage --limit 20 # 🚧 WIP
121
119
  ```
122
120
 
123
121
  ## Skills
@@ -127,12 +125,11 @@ Skills are markdown files that teach AI coding agents (Claude Code, Cursor, Copi
127
125
  ### Browse & Install
128
126
 
129
127
  ```bash
130
- aisa skills list # browse skills
131
- aisa skills search "financial analysis" # search
132
- aisa skills show aisa-team/finance-analyst # details
133
- aisa skills add aisa-team/finance-analyst # install to all agents
134
- aisa skills add aisa-team/llm-assistant --agent claude # specific agent
135
- aisa skills remove aisa-team/finance-analyst # uninstall
128
+ aisa skills list # 🚧 WIP — requires backend
129
+ aisa skills search "financial analysis" # 🚧 WIP
130
+ aisa skills show aisa-team/finance-analyst # 🚧 WIP
131
+ aisa skills add aisa-team/finance-analyst # 🚧 WIP
132
+ aisa skills remove aisa-team/finance-analyst # 🚧 WIP
136
133
  ```
137
134
 
138
135
  Skills install to agent directories automatically:
@@ -150,12 +147,12 @@ Skills install to agent directories automatically:
150
147
  ### Create & Publish
151
148
 
152
149
  ```bash
153
- aisa skills init my-skill # create from default template
150
+ aisa skills init my-skill # create from default template (works locally)
154
151
  aisa skills init my-skill --template finance # finance template
155
152
  aisa skills init my-skill --template llm # LLM template
156
- aisa skills submit ./my-skill # submit to AISA
157
- aisa skills push owner/my-skill # push updates
158
- aisa skills request-verification owner/my-skill # request review
153
+ aisa skills submit ./my-skill # 🚧 WIP — requires backend
154
+ aisa skills push owner/my-skill # 🚧 WIP
155
+ aisa skills request-verification owner/my-skill # 🚧 WIP
159
156
  ```
160
157
 
161
158
  Available templates: `default`, `llm`, `search`, `finance`, `twitter`, `video`
@@ -1,5 +1,5 @@
1
1
  export declare function balanceAction(): Promise<void>;
2
- export declare function usageAction(options: {
2
+ export declare function usageAction(_options: {
3
3
  limit?: string;
4
4
  days?: string;
5
5
  }): Promise<void>;
@@ -1,47 +1,13 @@
1
- import ora from "ora";
2
1
  import chalk from "chalk";
3
2
  import { requireApiKey } from "../config.js";
4
- import { apiRequest } from "../api.js";
5
- import { error, table } from "../utils/display.js";
3
+ import { hint } from "../utils/display.js";
6
4
  export async function balanceAction() {
7
- const key = requireApiKey();
8
- const spinner = ora("Fetching balance...").start();
9
- const res = await apiRequest(key, "credits/balance");
10
- if (!res.success || !res.data) {
11
- spinner.fail("Failed to fetch balance");
12
- error(res.error || "Unknown error");
13
- return;
14
- }
15
- spinner.stop();
16
- console.log(` Balance: ${chalk.green("$" + res.data.balance.toFixed(2))} ${res.data.currency}`);
17
- console.log(chalk.gray(" Add credits at https://aisa.one/dashboard/wallet"));
5
+ requireApiKey();
6
+ console.log(chalk.yellow(" Balance API is not yet available."));
7
+ hint("Check your balance at https://aisa.one/dashboard");
18
8
  }
19
- export async function usageAction(options) {
20
- const key = requireApiKey();
21
- const spinner = ora("Fetching usage...").start();
22
- const query = {};
23
- if (options.limit)
24
- query.limit = options.limit;
25
- if (options.days)
26
- query.days = options.days;
27
- const res = await apiRequest(key, "credits/usage", { query });
28
- if (!res.success || !res.data) {
29
- spinner.fail("Failed to fetch usage");
30
- error(res.error || "Unknown error");
31
- return;
32
- }
33
- spinner.stop();
34
- const { records } = res.data;
35
- if (records.length === 0) {
36
- console.log(" No usage records found.");
37
- return;
38
- }
39
- const rows = records.map((r) => [
40
- new Date(r.timestamp).toLocaleDateString(),
41
- r.api,
42
- r.endpoint,
43
- `$${r.cost.toFixed(4)}`,
44
- r.status,
45
- ]);
46
- console.log(table(["Date", "API", "Endpoint", "Cost", "Status"], rows));
9
+ export async function usageAction(_options) {
10
+ requireApiKey();
11
+ console.log(chalk.yellow(" Usage API is not yet available."));
12
+ hint("View usage history at https://aisa.one/dashboard");
47
13
  }
@@ -1,10 +1,10 @@
1
- export declare function apiListAction(options: {
1
+ export declare function apiListAction(_options: {
2
2
  category?: string;
3
3
  }): Promise<void>;
4
- export declare function apiSearchAction(query: string, options: {
4
+ export declare function apiSearchAction(_query: string, _options: {
5
5
  limit?: string;
6
6
  }): Promise<void>;
7
- export declare function apiShowAction(slug: string, path?: string): Promise<void>;
8
- export declare function apiCodeAction(slug: string, path: string, options: {
7
+ export declare function apiShowAction(_slug: string, _path?: string): Promise<void>;
8
+ export declare function apiCodeAction(_slug: string, _path: string, _options: {
9
9
  lang?: string;
10
10
  }): Promise<void>;
@@ -1,116 +1,26 @@
1
- import ora from "ora";
2
1
  import chalk from "chalk";
3
2
  import { requireApiKey } from "../config.js";
4
- import { apiRequest } from "../api.js";
5
- import { error, badge, table, hint, truncate } from "../utils/display.js";
6
- export async function apiListAction(options) {
7
- const key = requireApiKey();
8
- const spinner = ora("Listing APIs...").start();
9
- const query = {};
10
- if (options.category)
11
- query.category = options.category;
12
- const res = await apiRequest(key, "cli/apis", { query });
13
- if (!res.success || !res.data) {
14
- spinner.fail("Failed to list APIs");
15
- error(res.error || "Unknown error");
16
- return;
17
- }
18
- spinner.stop();
19
- const { apis } = res.data;
20
- if (apis.length === 0) {
21
- console.log(" No APIs found.");
22
- return;
23
- }
24
- for (const api of apis) {
25
- console.log(`\n ${chalk.cyan.bold(api.name)} ${chalk.gray(api.slug)} ${badge(api.category)}`);
26
- console.log(` ${chalk.gray(api.description)}`);
27
- const shown = api.endpoints.slice(0, 3);
28
- for (const ep of shown) {
29
- console.log(` ${chalk.yellow(ep.method.padEnd(6))} ${ep.path} ${chalk.gray("- " + truncate(ep.description, 50))}`);
30
- }
31
- if (api.endpoints.length > 3) {
32
- hint(`+${api.endpoints.length - 3} more endpoints`);
33
- }
34
- }
35
- console.log(chalk.gray("\n Run 'aisa api show <slug>' for endpoint details"));
3
+ import { hint } from "../utils/display.js";
4
+ const COMING_SOON = chalk.yellow(" API catalog is not yet available.");
5
+ const BROWSE_HINT = "Browse available APIs at https://docs.aisa.one/reference";
6
+ export async function apiListAction(_options) {
7
+ requireApiKey();
8
+ console.log(COMING_SOON);
9
+ hint(BROWSE_HINT);
10
+ hint("Use 'aisa run <slug> <path>' to call APIs directly");
36
11
  }
37
- export async function apiSearchAction(query, options) {
38
- const key = requireApiKey();
39
- const spinner = ora(`Searching "${query}"...`).start();
40
- const res = await apiRequest(key, "cli/apis/search", {
41
- method: "POST",
42
- body: { query, limit: parseInt(options.limit || "10") },
43
- });
44
- if (!res.success || !res.data) {
45
- spinner.fail("Search failed");
46
- error(res.error || "Unknown error");
47
- return;
48
- }
49
- spinner.stop();
50
- const { apis } = res.data;
51
- if (apis.length === 0) {
52
- console.log(` No APIs found for "${query}".`);
53
- return;
54
- }
55
- for (const api of apis) {
56
- console.log(`\n ${chalk.cyan.bold(api.name)} ${chalk.gray(api.slug)} ${badge(api.category)}`);
57
- console.log(` ${chalk.gray(api.description)}`);
58
- for (const ep of api.endpoints.slice(0, 2)) {
59
- console.log(` ${chalk.yellow(ep.method.padEnd(6))} ${ep.path}`);
60
- }
61
- }
62
- console.log(chalk.gray("\n Run 'aisa run <slug> <path>' to execute"));
12
+ export async function apiSearchAction(_query, _options) {
13
+ requireApiKey();
14
+ console.log(COMING_SOON);
15
+ hint(BROWSE_HINT);
63
16
  }
64
- export async function apiShowAction(slug, path) {
65
- const key = requireApiKey();
66
- const spinner = ora(`Loading ${slug}${path ? " " + path : ""}...`).start();
67
- const endpoint = path ? `cli/apis/${slug}${path}` : `cli/apis/${slug}`;
68
- const res = await apiRequest(key, endpoint);
69
- if (!res.success || !res.data) {
70
- spinner.fail("Failed to load API details");
71
- error(res.error || "Unknown error");
72
- return;
73
- }
74
- spinner.stop();
75
- const data = res.data;
76
- if ("endpoints" in data) {
77
- // ApiGroup
78
- console.log(`\n ${chalk.cyan.bold(data.name)} ${badge(data.category)}`);
79
- console.log(` ${data.description}\n`);
80
- for (const ep of data.endpoints) {
81
- console.log(` ${chalk.yellow(ep.method.padEnd(6))} ${ep.path}`);
82
- console.log(` ${chalk.gray(ep.description)}`);
83
- }
84
- }
85
- else {
86
- // ApiEndpoint with parameters
87
- console.log(`\n ${chalk.yellow(data.method)} ${data.path}`);
88
- console.log(` ${data.description}\n`);
89
- if (data.parameters && data.parameters.length > 0) {
90
- const rows = data.parameters.map((p) => [
91
- p.name,
92
- p.type,
93
- p.required ? chalk.red("required") : "optional",
94
- truncate(p.description, 40),
95
- ]);
96
- console.log(table(["Name", "Type", "Required", "Description"], rows));
97
- }
98
- console.log(chalk.gray(`\n Example: aisa run ${slug} ${data.path} -q "param=value"`));
99
- }
17
+ export async function apiShowAction(_slug, _path) {
18
+ requireApiKey();
19
+ console.log(COMING_SOON);
20
+ hint(BROWSE_HINT);
100
21
  }
101
- export async function apiCodeAction(slug, path, options) {
102
- const key = requireApiKey();
103
- const lang = options.lang || "typescript";
104
- const spinner = ora(`Generating ${lang} code...`).start();
105
- const res = await apiRequest(key, "cli/apis/code", {
106
- method: "POST",
107
- body: { slug, path, language: lang },
108
- });
109
- if (!res.success || !res.data) {
110
- spinner.fail("Failed to generate code");
111
- error(res.error || "Unknown error");
112
- return;
113
- }
114
- spinner.stop();
115
- console.log(`\n${res.data.code}`);
22
+ export async function apiCodeAction(_slug, _path, _options) {
23
+ requireApiKey();
24
+ console.log(COMING_SOON);
25
+ hint(BROWSE_HINT);
116
26
  }
@@ -1,4 +1,4 @@
1
- export declare const VERSION = "0.1.3";
1
+ export declare const VERSION = "0.1.5";
2
2
  export declare const BASE_URL = "https://api.aisa.one";
3
3
  export declare const CLI_BASE_URL = "https://api.aisa.one/v1";
4
4
  export declare const APIS_BASE_URL = "https://api.aisa.one/apis/v1";
package/dist/constants.js CHANGED
@@ -1,4 +1,4 @@
1
- export const VERSION = "0.1.3";
1
+ export const VERSION = "0.1.5";
2
2
  export const BASE_URL = "https://api.aisa.one";
3
3
  export const CLI_BASE_URL = `${BASE_URL}/v1`;
4
4
  export const APIS_BASE_URL = `${BASE_URL}/apis/v1`;
package/dist/index.js CHANGED
@@ -58,33 +58,33 @@ program
58
58
  // ── Account ──
59
59
  program
60
60
  .command("balance")
61
- .description("Show credit balance")
61
+ .description("Show credit balance (WIP)")
62
62
  .action(wrap(balanceAction));
63
63
  program
64
64
  .command("usage")
65
- .description("Show usage history")
65
+ .description("Show usage history (WIP)")
66
66
  .option("--limit <n>", "Max records")
67
67
  .option("--days <n>", "Lookback days")
68
68
  .action(wrap(usageAction));
69
69
  // ── API ──
70
- const api = program.command("api").description("Discover and inspect APIs");
70
+ const api = program.command("api").description("Discover and inspect APIs (WIP)");
71
71
  api
72
72
  .command("list")
73
- .description("List available API endpoints")
73
+ .description("List available API endpoints (WIP)")
74
74
  .option("--category <cat>", "Filter by category (llm, search, finance, twitter, video, scholar)")
75
75
  .action(wrap(apiListAction));
76
76
  api
77
77
  .command("search <query>")
78
- .description("Search APIs by keyword")
78
+ .description("Search APIs by keyword (WIP)")
79
79
  .option("--limit <n>", "Max results")
80
80
  .action(wrap(apiSearchAction));
81
81
  api
82
82
  .command("show <slug> [path]")
83
- .description("Show API endpoint details")
83
+ .description("Show API endpoint details (WIP)")
84
84
  .action(wrap(apiShowAction));
85
85
  api
86
86
  .command("code <slug> <path>")
87
- .description("Generate code snippet")
87
+ .description("Generate code snippet (WIP)")
88
88
  .option("--lang <language>", "Language: typescript, python, curl", "typescript")
89
89
  .action(wrap(apiCodeAction));
90
90
  // ── Run ──
@@ -202,32 +202,32 @@ video
202
202
  const skills = program.command("skills").description("Browse and manage agent skills");
203
203
  skills
204
204
  .command("list")
205
- .description("List available skills")
205
+ .description("List available skills (WIP)")
206
206
  .option("--category <cat>", "Filter by category")
207
207
  .option("--limit <n>", "Max results")
208
208
  .action(wrap(skillsListAction));
209
209
  skills
210
210
  .command("search <query>")
211
- .description("Search skills")
211
+ .description("Search skills (WIP)")
212
212
  .option("--limit <n>", "Max results")
213
213
  .action(wrap(skillsSearchAction));
214
214
  skills
215
215
  .command("show <slug>")
216
- .description("Show skill details")
216
+ .description("Show skill details (WIP)")
217
217
  .action(wrap(skillsShowAction));
218
218
  skills
219
219
  .command("add <slug>")
220
- .description("Install a skill to agent directories")
220
+ .description("Install a skill to agent directories (WIP)")
221
221
  .option("--agent <agent>", "Target agent: claude, cursor, copilot, windsurf, codex, gemini, openclaw, all")
222
222
  .action(wrap(skillsAddAction));
223
223
  skills
224
224
  .command("remove <slug>")
225
- .description("Remove an installed skill")
225
+ .description("Remove an installed skill (WIP)")
226
226
  .option("--agent <agent>", "Target agent")
227
227
  .action(skillsRemoveAction);
228
228
  skills
229
229
  .command("update [slug]")
230
- .description("Update installed skill(s)")
230
+ .description("Update installed skill(s) (WIP)")
231
231
  .action(wrap(skillsUpdateAction));
232
232
  skills
233
233
  .command("init <name>")
@@ -237,15 +237,15 @@ skills
237
237
  .action(skillsInitAction);
238
238
  skills
239
239
  .command("submit <path>")
240
- .description("Submit a skill to AISA")
240
+ .description("Submit a skill to AISA (WIP)")
241
241
  .action(wrap(skillsSubmitAction));
242
242
  skills
243
243
  .command("push <slug>")
244
- .description("Push local changes to a submitted skill")
244
+ .description("Push local changes to a submitted skill (WIP)")
245
245
  .action(wrap(skillsPushAction));
246
246
  skills
247
247
  .command("request-verification <slug>")
248
- .description("Request skill verification")
248
+ .description("Request skill verification (WIP)")
249
249
  .action(wrap(skillsVerifyAction));
250
250
  // ── MCP ──
251
251
  const mcp = program.command("mcp").description("MCP server integration");
@@ -279,12 +279,12 @@ configCmd
279
279
  // ── Top-level aliases ──
280
280
  program
281
281
  .command("search <query>")
282
- .description("Search APIs (alias for 'api search')")
282
+ .description("Search APIs (alias for 'api search') (WIP)")
283
283
  .option("--limit <n>", "Max results")
284
284
  .action(wrap(apiSearchAction));
285
285
  program
286
286
  .command("code <slug> <path>")
287
- .description("Generate code (alias for 'api code')")
287
+ .description("Generate code (alias for 'api code') (WIP)")
288
288
  .option("--lang <language>", "Language", "typescript")
289
289
  .action(wrap(apiCodeAction));
290
290
  // ── Parse ──
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aisa-one/cli",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "CLI for the AISA unified AI infrastructure platform - access 70+ LLMs, web search, finance, Twitter, and video generation APIs",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",