@aria_asi/cli 0.2.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/aria.js +168 -0
- package/dist/aria-connector/src/auth-commands.d.ts +28 -0
- package/dist/aria-connector/src/auth-commands.d.ts.map +1 -0
- package/dist/aria-connector/src/auth-commands.js +129 -0
- package/dist/aria-connector/src/auth-commands.js.map +1 -0
- package/dist/aria-connector/src/auth.d.ts +12 -0
- package/dist/aria-connector/src/auth.d.ts.map +1 -0
- package/dist/aria-connector/src/auth.js +31 -0
- package/dist/aria-connector/src/auth.js.map +1 -0
- package/dist/aria-connector/src/auto-mcp.d.ts +23 -0
- package/dist/aria-connector/src/auto-mcp.d.ts.map +1 -0
- package/dist/aria-connector/src/auto-mcp.js +994 -0
- package/dist/aria-connector/src/auto-mcp.js.map +1 -0
- package/dist/aria-connector/src/chat.d.ts +21 -0
- package/dist/aria-connector/src/chat.d.ts.map +1 -0
- package/dist/aria-connector/src/chat.js +332 -0
- package/dist/aria-connector/src/chat.js.map +1 -0
- package/dist/aria-connector/src/codebase-scanner.d.ts +7 -0
- package/dist/aria-connector/src/codebase-scanner.d.ts.map +1 -0
- package/dist/aria-connector/src/codebase-scanner.js +6 -0
- package/dist/aria-connector/src/codebase-scanner.js.map +1 -0
- package/dist/aria-connector/src/cognition-log.d.ts +17 -0
- package/dist/aria-connector/src/cognition-log.d.ts.map +1 -0
- package/dist/aria-connector/src/cognition-log.js +19 -0
- package/dist/aria-connector/src/cognition-log.js.map +1 -0
- package/dist/aria-connector/src/config.d.ts +41 -0
- package/dist/aria-connector/src/config.d.ts.map +1 -0
- package/dist/aria-connector/src/config.js +50 -0
- package/dist/aria-connector/src/config.js.map +1 -0
- package/dist/aria-connector/src/connectors/claude-code.d.ts +4 -0
- package/dist/aria-connector/src/connectors/claude-code.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/claude-code.js +204 -0
- package/dist/aria-connector/src/connectors/claude-code.js.map +1 -0
- package/dist/aria-connector/src/connectors/cursor.d.ts +4 -0
- package/dist/aria-connector/src/connectors/cursor.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/cursor.js +63 -0
- package/dist/aria-connector/src/connectors/cursor.js.map +1 -0
- package/dist/aria-connector/src/connectors/opencode.d.ts +4 -0
- package/dist/aria-connector/src/connectors/opencode.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/opencode.js +102 -0
- package/dist/aria-connector/src/connectors/opencode.js.map +1 -0
- package/dist/aria-connector/src/connectors/shell.d.ts +4 -0
- package/dist/aria-connector/src/connectors/shell.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/shell.js +58 -0
- package/dist/aria-connector/src/connectors/shell.js.map +1 -0
- package/dist/aria-connector/src/garden-client.d.ts +19 -0
- package/dist/aria-connector/src/garden-client.d.ts.map +1 -0
- package/dist/aria-connector/src/garden-client.js +85 -0
- package/dist/aria-connector/src/garden-client.js.map +1 -0
- package/dist/aria-connector/src/garden-control-plane.d.ts +22 -0
- package/dist/aria-connector/src/garden-control-plane.d.ts.map +1 -0
- package/dist/aria-connector/src/garden-control-plane.js +43 -0
- package/dist/aria-connector/src/garden-control-plane.js.map +1 -0
- package/dist/aria-connector/src/harness-client.d.ts +166 -0
- package/dist/aria-connector/src/harness-client.d.ts.map +1 -0
- package/dist/aria-connector/src/harness-client.js +344 -0
- package/dist/aria-connector/src/harness-client.js.map +1 -0
- package/dist/aria-connector/src/hive-client.d.ts +32 -0
- package/dist/aria-connector/src/hive-client.d.ts.map +1 -0
- package/dist/aria-connector/src/hive-client.js +69 -0
- package/dist/aria-connector/src/hive-client.js.map +1 -0
- package/dist/aria-connector/src/index.d.ts +19 -0
- package/dist/aria-connector/src/index.d.ts.map +1 -0
- package/dist/aria-connector/src/index.js +13 -0
- package/dist/aria-connector/src/index.js.map +1 -0
- package/dist/aria-connector/src/install-hooks.d.ts +18 -0
- package/dist/aria-connector/src/install-hooks.d.ts.map +1 -0
- package/dist/aria-connector/src/install-hooks.js +224 -0
- package/dist/aria-connector/src/install-hooks.js.map +1 -0
- package/dist/aria-connector/src/model-context.d.ts +8 -0
- package/dist/aria-connector/src/model-context.d.ts.map +1 -0
- package/dist/aria-connector/src/model-context.js +83 -0
- package/dist/aria-connector/src/model-context.js.map +1 -0
- package/dist/aria-connector/src/persona.d.ts +27 -0
- package/dist/aria-connector/src/persona.d.ts.map +1 -0
- package/dist/aria-connector/src/persona.js +86 -0
- package/dist/aria-connector/src/persona.js.map +1 -0
- package/dist/aria-connector/src/providers/anthropic.d.ts +4 -0
- package/dist/aria-connector/src/providers/anthropic.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/anthropic.js +92 -0
- package/dist/aria-connector/src/providers/anthropic.js.map +1 -0
- package/dist/aria-connector/src/providers/deepseek.d.ts +3 -0
- package/dist/aria-connector/src/providers/deepseek.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/deepseek.js +28 -0
- package/dist/aria-connector/src/providers/deepseek.js.map +1 -0
- package/dist/aria-connector/src/providers/google.d.ts +3 -0
- package/dist/aria-connector/src/providers/google.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/google.js +38 -0
- package/dist/aria-connector/src/providers/google.js.map +1 -0
- package/dist/aria-connector/src/providers/ollama.d.ts +3 -0
- package/dist/aria-connector/src/providers/ollama.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/ollama.js +28 -0
- package/dist/aria-connector/src/providers/ollama.js.map +1 -0
- package/dist/aria-connector/src/providers/openai.d.ts +4 -0
- package/dist/aria-connector/src/providers/openai.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/openai.js +84 -0
- package/dist/aria-connector/src/providers/openai.js.map +1 -0
- package/dist/aria-connector/src/providers/openrouter.d.ts +3 -0
- package/dist/aria-connector/src/providers/openrouter.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/openrouter.js +30 -0
- package/dist/aria-connector/src/providers/openrouter.js.map +1 -0
- package/dist/aria-connector/src/providers/types.d.ts +20 -0
- package/dist/aria-connector/src/providers/types.d.ts.map +1 -0
- package/dist/aria-connector/src/providers/types.js +2 -0
- package/dist/aria-connector/src/providers/types.js.map +1 -0
- package/dist/aria-connector/src/setup-wizard.d.ts +2 -0
- package/dist/aria-connector/src/setup-wizard.d.ts.map +1 -0
- package/dist/aria-connector/src/setup-wizard.js +140 -0
- package/dist/aria-connector/src/setup-wizard.js.map +1 -0
- package/dist/aria-connector/src/types.d.ts +30 -0
- package/dist/aria-connector/src/types.d.ts.map +1 -0
- package/dist/aria-connector/src/types.js +5 -0
- package/dist/aria-connector/src/types.js.map +1 -0
- package/dist/aria-web/src/lib/codebase-scanner.d.ts +127 -0
- package/dist/aria-web/src/lib/codebase-scanner.d.ts.map +1 -0
- package/dist/aria-web/src/lib/codebase-scanner.js +1730 -0
- package/dist/aria-web/src/lib/codebase-scanner.js.map +1 -0
- package/dist/cli-0.2.0.tgz +0 -0
- package/dist/install.sh +13 -0
- package/hooks/aria-harness-via-sdk.mjs +317 -0
- package/hooks/aria-pre-tool-gate.mjs +596 -0
- package/hooks/aria-preprompt-consult.mjs +175 -0
- package/hooks/aria-stop-gate.mjs +222 -0
- package/package.json +47 -0
- package/src/__tests__/auth-commands.test.ts +132 -0
- package/src/auth-commands.ts +175 -0
- package/src/auth.ts +33 -0
- package/src/auto-mcp.ts +1172 -0
- package/src/chat.ts +387 -0
- package/src/codebase-scanner.ts +18 -0
- package/src/cognition-log.ts +30 -0
- package/src/config.ts +94 -0
- package/src/connectors/claude-code.ts +213 -0
- package/src/connectors/cursor.ts +75 -0
- package/src/connectors/opencode.ts +115 -0
- package/src/connectors/shell.ts +72 -0
- package/src/garden-client.ts +98 -0
- package/src/garden-control-plane.ts +108 -0
- package/src/harness-client.ts +454 -0
- package/src/hive-client.ts +104 -0
- package/src/index.ts +26 -0
- package/src/install-hooks.ts +259 -0
- package/src/model-context.ts +88 -0
- package/src/persona.ts +113 -0
- package/src/providers/anthropic.ts +120 -0
- package/src/providers/deepseek.ts +40 -0
- package/src/providers/google.ts +57 -0
- package/src/providers/ollama.ts +43 -0
- package/src/providers/openai.ts +108 -0
- package/src/providers/openrouter.ts +42 -0
- package/src/providers/types.ts +35 -0
- package/src/setup-wizard.ts +177 -0
- package/src/types.ts +32 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { loadLicense, saveLicense } from './auth.js';
|
|
2
|
+
import { harnessClient } from './harness-client.js';
|
|
3
|
+
import * as fs from 'node:fs';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
|
|
7
|
+
const LICENSE_PATH = path.join(homedir(), '.aria', 'license.json');
|
|
8
|
+
|
|
9
|
+
interface LicenseClaims {
|
|
10
|
+
jti: string;
|
|
11
|
+
sub: string;
|
|
12
|
+
tier: string;
|
|
13
|
+
exp: number;
|
|
14
|
+
iat: number;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface LoginResult {
|
|
18
|
+
ok: boolean;
|
|
19
|
+
tier?: string;
|
|
20
|
+
jti?: string;
|
|
21
|
+
expiresAt?: string;
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface StatusResult {
|
|
26
|
+
loggedIn: boolean;
|
|
27
|
+
jti?: string;
|
|
28
|
+
tier?: string;
|
|
29
|
+
expiresAt?: string;
|
|
30
|
+
revoked?: boolean;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface LogoutResult {
|
|
34
|
+
ok: boolean;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface RevokeResult {
|
|
38
|
+
ok: boolean;
|
|
39
|
+
jti?: string;
|
|
40
|
+
error?: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export async function login(token: string): Promise<LoginResult> {
|
|
44
|
+
try {
|
|
45
|
+
// Validate token via heartbeat; if unverified, issue endpoint
|
|
46
|
+
let response;
|
|
47
|
+
try {
|
|
48
|
+
response = await harnessClient.get('/api/license/heartbeat', {
|
|
49
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
50
|
+
});
|
|
51
|
+
} catch {
|
|
52
|
+
// If heartbeat fails (unverified token), try issue
|
|
53
|
+
response = await harnessClient.post('/api/license/issue', {
|
|
54
|
+
body: { token },
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
const errBody = await response.json().catch(() => ({}));
|
|
60
|
+
return { ok: false, error: errBody.error || 'Login failed' };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const body = await response.json();
|
|
64
|
+
const claims: LicenseClaims = body.claims || body;
|
|
65
|
+
|
|
66
|
+
// Persist to ~/.aria/license.json with mode 0600
|
|
67
|
+
const dir = path.dirname(LICENSE_PATH);
|
|
68
|
+
if (!fs.existsSync(dir)) {
|
|
69
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
70
|
+
}
|
|
71
|
+
fs.writeFileSync(LICENSE_PATH, JSON.stringify(claims, null, 2), {
|
|
72
|
+
mode: 0o600,
|
|
73
|
+
encoding: 'utf-8',
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
ok: true,
|
|
78
|
+
tier: claims.tier,
|
|
79
|
+
jti: claims.jti,
|
|
80
|
+
expiresAt: new Date(claims.exp * 1000).toISOString(),
|
|
81
|
+
};
|
|
82
|
+
} catch (err: any) {
|
|
83
|
+
return { ok: false, error: err.message || 'Unexpected error during login' };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export async function status(): Promise<StatusResult> {
|
|
88
|
+
try {
|
|
89
|
+
const license = await loadLicense();
|
|
90
|
+
if (!license || !license.jti) {
|
|
91
|
+
return { loggedIn: false };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Verify with server
|
|
95
|
+
const response = await harnessClient.get('/api/license/heartbeat', {
|
|
96
|
+
headers: { Authorization: `Bearer ${license.jti}` },
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
if (response.status === 410) {
|
|
100
|
+
// Gone = revoked
|
|
101
|
+
return {
|
|
102
|
+
loggedIn: true,
|
|
103
|
+
jti: license.jti,
|
|
104
|
+
tier: license.tier,
|
|
105
|
+
expiresAt: license.exp ? new Date(license.exp * 1000).toISOString() : undefined,
|
|
106
|
+
revoked: true,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
return { loggedIn: false };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const body = await response.json();
|
|
115
|
+
const claims: LicenseClaims = body.claims || body;
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
loggedIn: true,
|
|
119
|
+
jti: claims.jti,
|
|
120
|
+
tier: claims.tier,
|
|
121
|
+
expiresAt: new Date(claims.exp * 1000).toISOString(),
|
|
122
|
+
revoked: false,
|
|
123
|
+
};
|
|
124
|
+
} catch {
|
|
125
|
+
// Offline / unreachable — show local state
|
|
126
|
+
const license = await loadLicense();
|
|
127
|
+
if (!license || !license.jti) {
|
|
128
|
+
return { loggedIn: false };
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
loggedIn: true,
|
|
132
|
+
jti: license.jti,
|
|
133
|
+
tier: license.tier,
|
|
134
|
+
expiresAt: license.exp ? new Date(license.exp * 1000).toISOString() : undefined,
|
|
135
|
+
revoked: undefined, // unknown
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export async function logout(): Promise<LogoutResult> {
|
|
141
|
+
try {
|
|
142
|
+
if (fs.existsSync(LICENSE_PATH)) {
|
|
143
|
+
fs.unlinkSync(LICENSE_PATH);
|
|
144
|
+
}
|
|
145
|
+
return { ok: true };
|
|
146
|
+
} catch {
|
|
147
|
+
// Best-effort; file may not exist
|
|
148
|
+
return { ok: true };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export async function revoke(reason?: string): Promise<RevokeResult> {
|
|
153
|
+
try {
|
|
154
|
+
const license = await loadLicense();
|
|
155
|
+
if (!license || !license.jti) {
|
|
156
|
+
return { ok: false, error: 'No active license to revoke' };
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const response = await harnessClient.post('/api/license/revoke', {
|
|
160
|
+
body: { jti: license.jti, reason: reason || 'User-initiated revocation', revokedBy: 'self' },
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
if (!response.ok) {
|
|
164
|
+
const errBody = await response.json().catch(() => ({}));
|
|
165
|
+
return { ok: false, error: errBody.error || 'Revocation failed' };
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Clear local state
|
|
169
|
+
await logout();
|
|
170
|
+
|
|
171
|
+
return { ok: true, jti: license.jti };
|
|
172
|
+
} catch (err: any) {
|
|
173
|
+
return { ok: false, error: err.message || 'Unexpected error during revocation' };
|
|
174
|
+
}
|
|
175
|
+
}
|
package/src/auth.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join, dirname } from 'node:path';
|
|
4
|
+
import type { AuthConfig } from './types.js';
|
|
5
|
+
|
|
6
|
+
const LICENSE_PATH = join(homedir(), '.aria', 'license.json');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Load license configuration from ~/.aria/license.json.
|
|
10
|
+
* Returns null if the file does not exist or cannot be parsed.
|
|
11
|
+
*/
|
|
12
|
+
export async function loadLicense(): Promise<AuthConfig | null> {
|
|
13
|
+
try {
|
|
14
|
+
const raw = await readFile(LICENSE_PATH, 'utf-8');
|
|
15
|
+
const parsed: AuthConfig = JSON.parse(raw);
|
|
16
|
+
return parsed;
|
|
17
|
+
} catch {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Persist license configuration to ~/.aria/license.json (mode 0600).
|
|
24
|
+
* Creates ~/.aria/ directory if missing.
|
|
25
|
+
*/
|
|
26
|
+
export async function saveLicense(config: AuthConfig): Promise<void> {
|
|
27
|
+
const dir = dirname(LICENSE_PATH);
|
|
28
|
+
await mkdir(dir, { recursive: true, mode: 0o700 });
|
|
29
|
+
await writeFile(LICENSE_PATH, JSON.stringify(config, null, 2), {
|
|
30
|
+
mode: 0o600,
|
|
31
|
+
encoding: 'utf-8',
|
|
32
|
+
});
|
|
33
|
+
}
|