@aiassesstech/nole 0.1.9 → 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.
Files changed (42) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +149 -39
  3. package/agent/AGENTS.md +53 -0
  4. package/agent/IDENTITY.md +4 -2
  5. package/agent/SOUL.md +45 -4
  6. package/dist/cli/configure.d.ts +36 -0
  7. package/dist/cli/configure.d.ts.map +1 -0
  8. package/dist/cli/configure.js +243 -0
  9. package/dist/cli/configure.js.map +1 -0
  10. package/dist/cli/runner.d.ts +4 -3
  11. package/dist/cli/runner.d.ts.map +1 -1
  12. package/dist/cli/runner.js +81 -27
  13. package/dist/cli/runner.js.map +1 -1
  14. package/dist/compsi/api-client.d.ts +62 -0
  15. package/dist/compsi/api-client.d.ts.map +1 -0
  16. package/dist/compsi/api-client.js +147 -0
  17. package/dist/compsi/api-client.js.map +1 -0
  18. package/dist/plugin.d.ts.map +1 -1
  19. package/dist/plugin.js +320 -38
  20. package/dist/plugin.js.map +1 -1
  21. package/dist/types/nole-config.d.ts +12 -3
  22. package/dist/types/nole-config.d.ts.map +1 -1
  23. package/dist/types/nole-config.js +6 -2
  24. package/dist/types/nole-config.js.map +1 -1
  25. package/dist/wallet/coinbase-adapter.d.ts +38 -0
  26. package/dist/wallet/coinbase-adapter.d.ts.map +1 -0
  27. package/dist/wallet/coinbase-adapter.js +191 -0
  28. package/dist/wallet/coinbase-adapter.js.map +1 -0
  29. package/dist/wallet/index.d.ts +20 -0
  30. package/dist/wallet/index.d.ts.map +1 -0
  31. package/dist/wallet/index.js +34 -0
  32. package/dist/wallet/index.js.map +1 -0
  33. package/dist/wallet/mock-adapter.d.ts +23 -0
  34. package/dist/wallet/mock-adapter.d.ts.map +1 -0
  35. package/dist/wallet/mock-adapter.js +62 -0
  36. package/dist/wallet/mock-adapter.js.map +1 -0
  37. package/dist/wallet/types.d.ts +30 -0
  38. package/dist/wallet/types.d.ts.map +1 -0
  39. package/dist/wallet/types.js +8 -0
  40. package/dist/wallet/types.js.map +1 -0
  41. package/openclaw.plugin.json +19 -0
  42. package/package.json +10 -2
@@ -0,0 +1,243 @@
1
+ /**
2
+ * Interactive configuration wizard for Nole
3
+ *
4
+ * Handles credential collection, wallet creation, and env var generation.
5
+ * Runs as: `npx nole configure`
6
+ *
7
+ * Stores credentials at ~/.nole/credentials (chmod 600)
8
+ * Supports both first-time setup and reconfiguration.
9
+ */
10
+ import { readFile, writeFile, mkdir, chmod } from 'node:fs/promises';
11
+ import { join } from 'node:path';
12
+ import { existsSync } from 'node:fs';
13
+ import { homedir } from 'node:os';
14
+ import { createInterface } from 'node:readline';
15
+ // ─── Constants ───
16
+ const NOLE_DIR = join(homedir(), '.nole');
17
+ const CREDENTIALS_PATH = join(NOLE_DIR, 'credentials');
18
+ const CREDENTIALS_VERSION = 1;
19
+ const BASE_SEPOLIA_CONTRACT = '0x42C5D4b5ca0C0a63a57FA29B201749Dcf7888aF7';
20
+ const BASE_MAINNET_CONTRACT = ''; // Not deployed yet
21
+ // ─── Public API ───
22
+ export async function configure(options) {
23
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
24
+ const ask = (q) => new Promise(resolve => rl.question(q, resolve));
25
+ const askSecret = (q) => new Promise(resolve => rl.question(q, resolve));
26
+ try {
27
+ console.log('');
28
+ console.log('╔══════════════════════════════════════════════════════════╗');
29
+ console.log('║ NOLE — Configuration Wizard ║');
30
+ console.log('║ Autonomous Trust Evangelist Setup ║');
31
+ console.log('╚══════════════════════════════════════════════════════════╝');
32
+ console.log('');
33
+ const existing = await loadCredentials();
34
+ if (existing && !options.reconfigure) {
35
+ console.log(' Existing configuration found.');
36
+ console.log(` Wallet: ${existing.walletAddress || 'not created'}`);
37
+ console.log(` Network: ${existing.network || 'not set'}`);
38
+ console.log(` Configured: ${existing.configuredAt || 'unknown'}`);
39
+ console.log('');
40
+ const update = options.nonInteractive
41
+ ? 'y'
42
+ : await ask(' Update existing configuration? (y/N): ');
43
+ if (!update.toLowerCase().startsWith('y')) {
44
+ console.log(' Configuration unchanged.');
45
+ return;
46
+ }
47
+ console.log('');
48
+ }
49
+ // Step 1: Network selection
50
+ console.log('─── Step 1: Network ───');
51
+ console.log('');
52
+ console.log(' [1] Base Sepolia (testnet) — free, for testing');
53
+ console.log(' [2] Base Mainnet — real money, for production');
54
+ console.log('');
55
+ let network = options.network;
56
+ if (!network) {
57
+ const choice = options.nonInteractive
58
+ ? '1'
59
+ : await ask(' Select network (1 or 2) [1]: ');
60
+ network = choice === '2' ? 'base' : 'base-sepolia';
61
+ }
62
+ console.log(` Network: ${network}`);
63
+ console.log('');
64
+ // Step 2: CDP Credentials
65
+ console.log('─── Step 2: Coinbase Developer Platform Credentials ───');
66
+ console.log('');
67
+ console.log(' Get these from: https://portal.cdp.coinbase.com/');
68
+ console.log(' You need a Server Wallet API key with Export + Manage permissions.');
69
+ console.log('');
70
+ const cdpApiKeyId = options.cdpApiKeyId
71
+ || existing?.cdpApiKeyId
72
+ || await ask(' CDP API Key ID: ');
73
+ if (!cdpApiKeyId?.trim()) {
74
+ console.log('\n CDP API Key ID is required. Aborting.');
75
+ return;
76
+ }
77
+ const cdpApiKeySecret = options.cdpApiKeySecret
78
+ || existing?.cdpApiKeySecret
79
+ || await askSecret(' CDP API Key Secret: ');
80
+ if (!cdpApiKeySecret?.trim()) {
81
+ console.log('\n CDP API Key Secret is required. Aborting.');
82
+ return;
83
+ }
84
+ const cdpWalletSecret = options.cdpWalletSecret
85
+ || existing?.cdpWalletSecret
86
+ || await askSecret(' CDP Wallet Secret: ');
87
+ if (!cdpWalletSecret?.trim()) {
88
+ console.log('\n CDP Wallet Secret is required. Aborting.');
89
+ return;
90
+ }
91
+ console.log(' Credentials received.');
92
+ console.log('');
93
+ // Step 3: Create wallet
94
+ let walletAddress = existing?.walletAddress || '';
95
+ if (!options.skipWallet) {
96
+ console.log('─── Step 3: Creating Nole\'s Wallet ───');
97
+ console.log('');
98
+ try {
99
+ walletAddress = await createNoleWallet({
100
+ cdpApiKeyId: cdpApiKeyId.trim(),
101
+ cdpApiKeySecret: cdpApiKeySecret.trim(),
102
+ cdpWalletSecret: cdpWalletSecret.trim(),
103
+ network,
104
+ });
105
+ console.log(` Wallet address: ${walletAddress}`);
106
+ if (network === 'base-sepolia') {
107
+ console.log(' Requesting testnet ETH from faucet...');
108
+ try {
109
+ await fundFromFaucet({
110
+ cdpApiKeyId: cdpApiKeyId.trim(),
111
+ cdpApiKeySecret: cdpApiKeySecret.trim(),
112
+ cdpWalletSecret: cdpWalletSecret.trim(),
113
+ address: walletAddress,
114
+ });
115
+ console.log(' Testnet ETH funded.');
116
+ }
117
+ catch (err) {
118
+ console.log(` Faucet: ${err instanceof Error ? err.message : err}`);
119
+ console.log(' (You can fund manually later)');
120
+ }
121
+ }
122
+ }
123
+ catch (err) {
124
+ console.error(` Wallet creation failed: ${err instanceof Error ? err.message : err}`);
125
+ console.log(' You can retry with: npx nole configure --reconfigure');
126
+ console.log('');
127
+ }
128
+ }
129
+ else {
130
+ console.log('─── Step 3: Wallet creation skipped ───');
131
+ }
132
+ console.log('');
133
+ // Step 4: CompSi API Key (optional)
134
+ console.log('─── Step 4: CompSi Platform (Optional) ───');
135
+ console.log('');
136
+ console.log(' If you already have a CompSi Agent API key (agk_...), enter it now.');
137
+ console.log(' Otherwise, Nole will obtain one when he subscribes.');
138
+ console.log('');
139
+ const compsiApiKey = existing?.compsiAgentApiKey
140
+ || (options.nonInteractive ? '' : await ask(' CompSi Agent API Key (or press Enter to skip): '));
141
+ const compsiApiUrl = existing?.compsiApiUrl || 'https://aiassess.tech';
142
+ const contractAddress = network === 'base'
143
+ ? BASE_MAINNET_CONTRACT
144
+ : BASE_SEPOLIA_CONTRACT;
145
+ // Step 5: Save credentials
146
+ console.log('');
147
+ console.log('─── Step 5: Saving Configuration ───');
148
+ const credentials = {
149
+ cdpApiKeyId: cdpApiKeyId.trim(),
150
+ cdpApiKeySecret: cdpApiKeySecret.trim(),
151
+ cdpWalletSecret: cdpWalletSecret.trim(),
152
+ compsiApiUrl,
153
+ compsiAgentApiKey: compsiApiKey?.trim() || undefined,
154
+ walletAddress,
155
+ network,
156
+ contractAddress,
157
+ configuredAt: new Date().toISOString(),
158
+ version: CREDENTIALS_VERSION,
159
+ };
160
+ await saveCredentials(credentials);
161
+ console.log(` Credentials saved to: ${CREDENTIALS_PATH}`);
162
+ console.log(' (File permissions: owner-only read/write)');
163
+ console.log('');
164
+ // Summary
165
+ console.log('╔══════════════════════════════════════════════════════════╗');
166
+ console.log('║ CONFIGURATION COMPLETE ║');
167
+ console.log('╚══════════════════════════════════════════════════════════╝');
168
+ console.log('');
169
+ console.log(` Network: ${network}`);
170
+ console.log(` Wallet: ${walletAddress || 'not created'}`);
171
+ console.log(` Contract: ${contractAddress || 'not deployed yet'}`);
172
+ console.log(` CompSi API Key: ${compsiApiKey ? 'configured' : 'not set (will obtain on subscribe)'}`);
173
+ console.log(` Credentials: ${CREDENTIALS_PATH}`);
174
+ console.log('');
175
+ if (walletAddress && network === 'base-sepolia') {
176
+ console.log(` Explorer: https://sepolia.basescan.org/address/${walletAddress}`);
177
+ }
178
+ else if (walletAddress) {
179
+ console.log(` Explorer: https://basescan.org/address/${walletAddress}`);
180
+ }
181
+ console.log('');
182
+ console.log(' Next steps:');
183
+ console.log(' 1. Run `npx nole setup` to register with OpenClaw (if not done)');
184
+ console.log(' 2. Restart the OpenClaw gateway to activate Nole');
185
+ console.log(' 3. Nole will use these credentials automatically');
186
+ console.log('');
187
+ }
188
+ finally {
189
+ rl.close();
190
+ }
191
+ }
192
+ // ─── Credential Storage ───
193
+ export async function loadCredentials() {
194
+ if (!existsSync(CREDENTIALS_PATH))
195
+ return null;
196
+ try {
197
+ const raw = await readFile(CREDENTIALS_PATH, 'utf-8');
198
+ return JSON.parse(raw);
199
+ }
200
+ catch {
201
+ return null;
202
+ }
203
+ }
204
+ export async function saveCredentials(creds) {
205
+ await mkdir(NOLE_DIR, { recursive: true });
206
+ await writeFile(CREDENTIALS_PATH, JSON.stringify(creds, null, 2), 'utf-8');
207
+ try {
208
+ await chmod(CREDENTIALS_PATH, 0o600);
209
+ await chmod(NOLE_DIR, 0o700);
210
+ }
211
+ catch {
212
+ // chmod may fail on Windows; non-critical
213
+ }
214
+ }
215
+ export function getCredentialsPath() {
216
+ return CREDENTIALS_PATH;
217
+ }
218
+ async function createNoleWallet(opts) {
219
+ const { CdpClient } = await import('@coinbase/cdp-sdk');
220
+ const client = new CdpClient({
221
+ apiKeyId: opts.cdpApiKeyId,
222
+ apiKeySecret: opts.cdpApiKeySecret,
223
+ walletSecret: opts.cdpWalletSecret,
224
+ });
225
+ const account = await client.evm.getOrCreateAccount({
226
+ name: 'nole-agent-wallet',
227
+ });
228
+ return account.address;
229
+ }
230
+ async function fundFromFaucet(opts) {
231
+ const { CdpClient } = await import('@coinbase/cdp-sdk');
232
+ const client = new CdpClient({
233
+ apiKeyId: opts.cdpApiKeyId,
234
+ apiKeySecret: opts.cdpApiKeySecret,
235
+ walletSecret: opts.cdpWalletSecret,
236
+ });
237
+ await client.evm.requestFaucet({
238
+ address: opts.address,
239
+ network: 'base-sepolia',
240
+ token: 'eth',
241
+ });
242
+ }
243
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/cli/configure.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,10 @@
2
2
  * CLI dispatcher for @aiassesstech/nole
3
3
  *
4
4
  * Usage:
5
- * npx @aiassesstech/nole setup [--model <model>] [--hck <key>] [--force]
6
- * [--skip-commander] [--commander-id <id>]
7
- * npx @aiassesstech/nole --help
5
+ * npx nole configure Interactive credential & wallet setup
6
+ * npx nole setup [options] Register Nole with OpenClaw + upgrade Commander
7
+ * npx nole status Show current configuration status
8
+ * npx nole --help Show help
8
9
  */
9
10
  export declare function run(args: string[]): Promise<void>;
10
11
  //# sourceMappingURL=runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBvD"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CvD"}
@@ -1,11 +1,13 @@
1
1
  import { setup } from './setup.js';
2
+ import { configure, loadCredentials, getCredentialsPath } from './configure.js';
2
3
  /**
3
4
  * CLI dispatcher for @aiassesstech/nole
4
5
  *
5
6
  * Usage:
6
- * npx @aiassesstech/nole setup [--model <model>] [--hck <key>] [--force]
7
- * [--skip-commander] [--commander-id <id>]
8
- * npx @aiassesstech/nole --help
7
+ * npx nole configure Interactive credential & wallet setup
8
+ * npx nole setup [options] Register Nole with OpenClaw + upgrade Commander
9
+ * npx nole status Show current configuration status
10
+ * npx nole --help Show help
9
11
  */
10
12
  export async function run(args) {
11
13
  const command = args[0];
@@ -13,6 +15,19 @@ export async function run(args) {
13
15
  printHelp();
14
16
  return;
15
17
  }
18
+ if (command === 'configure' || command === 'config') {
19
+ const flags = parseFlags(args.slice(1));
20
+ await configure({
21
+ network: flags['network'],
22
+ nonInteractive: 'non-interactive' in flags || 'yes' in flags,
23
+ cdpApiKeyId: flags['cdp-api-key-id'],
24
+ cdpApiKeySecret: flags['cdp-api-key-secret'],
25
+ cdpWalletSecret: flags['cdp-wallet-secret'],
26
+ skipWallet: 'skip-wallet' in flags,
27
+ reconfigure: 'reconfigure' in flags || 'force' in flags,
28
+ });
29
+ return;
30
+ }
16
31
  if (command === 'setup') {
17
32
  const flags = parseFlags(args.slice(1));
18
33
  await setup({
@@ -25,42 +40,81 @@ export async function run(args) {
25
40
  });
26
41
  return;
27
42
  }
43
+ if (command === 'status') {
44
+ await showStatus();
45
+ return;
46
+ }
28
47
  console.error(`Unknown command: ${command}`);
29
48
  printHelp();
30
49
  process.exit(1);
31
50
  }
51
+ async function showStatus() {
52
+ console.log('');
53
+ console.log('NOLE — Configuration Status');
54
+ console.log('─'.repeat(40));
55
+ const creds = await loadCredentials();
56
+ const credsPath = getCredentialsPath();
57
+ if (!creds) {
58
+ console.log(` Credentials: not configured`);
59
+ console.log(` Run \`npx nole configure\` to set up.`);
60
+ console.log('');
61
+ return;
62
+ }
63
+ console.log(` Credentials: ${credsPath}`);
64
+ console.log(` Network: ${creds.network || 'not set'}`);
65
+ console.log(` Wallet: ${creds.walletAddress || 'not created'}`);
66
+ console.log(` CDP API Key: ${creds.cdpApiKeyId ? maskKey(creds.cdpApiKeyId) : 'not set'}`);
67
+ console.log(` CDP Secret: ${creds.cdpApiKeySecret ? '••••••••' : 'not set'}`);
68
+ console.log(` Wallet Secret: ${creds.cdpWalletSecret ? '••••••••' : 'not set'}`);
69
+ console.log(` Contract: ${creds.contractAddress || 'not set'}`);
70
+ console.log(` CompSi API Key: ${creds.compsiAgentApiKey || 'not set'}`);
71
+ console.log(` Configured: ${creds.configuredAt || 'unknown'}`);
72
+ if (creds.walletAddress && creds.network === 'base-sepolia') {
73
+ console.log(` Explorer: https://sepolia.basescan.org/address/${creds.walletAddress}`);
74
+ }
75
+ else if (creds.walletAddress) {
76
+ console.log(` Explorer: https://basescan.org/address/${creds.walletAddress}`);
77
+ }
78
+ console.log('');
79
+ }
80
+ function maskKey(key) {
81
+ if (key.length <= 8)
82
+ return '••••••••';
83
+ return key.slice(0, 4) + '••••' + key.slice(-4);
84
+ }
32
85
  function printHelp() {
33
86
  console.log(`
34
- @aiassesstech/nole — Autonomous Trust Agent
87
+ @aiassesstech/nole — Autonomous Trust Evangelist
35
88
 
36
89
  Usage:
37
- nole setup [options] Set up Nole as an OpenClaw agent + upgrade Commander
38
- nole --help Show this help message
90
+ nole configure [options] Set up CDP credentials, create wallet, save config
91
+ nole setup [options] Register Nole with OpenClaw + upgrade Commander
92
+ nole status Show current configuration status
93
+ nole --help Show this help message
94
+
95
+ Configure Options:
96
+ --network <network> Network: base-sepolia (default) or base
97
+ --cdp-api-key-id <id> CDP API Key ID (non-interactive)
98
+ --cdp-api-key-secret <s> CDP API Key Secret (non-interactive)
99
+ --cdp-wallet-secret <s> CDP Wallet Secret (non-interactive)
100
+ --skip-wallet Skip MPC wallet creation
101
+ --reconfigure Force reconfiguration even if already set up
102
+ --non-interactive Skip prompts (requires all credentials as flags)
39
103
 
40
104
  Setup Options:
41
- --model <model> Model to use (default: anthropic/claude-sonnet-4-5)
42
- --hck <key> Health Check Key (hck_...)
43
- --config <path> Path to openclaw.json (default: auto-detect)
44
- --force Re-template agent workspace files and Commander files
45
- --skip-commander Skip the Commander (Jessie) workspace upgrade
46
- --commander-id <id> Commander agent ID (default: main)
105
+ --model <model> Model to use (default: anthropic/claude-sonnet-4-5)
106
+ --hck <key> Health Check Key (hck_...)
107
+ --config <path> Path to openclaw.json (default: auto-detect)
108
+ --force Re-template agent workspace files
109
+ --skip-commander Skip Commander (Jessie) workspace upgrade
110
+ --commander-id <id> Commander agent ID (default: main)
47
111
 
48
- What setup does:
49
- 1. Creates Nole's agent directory with SOUL.md, AGENTS.md, IDENTITY.md
50
- 2. Adds Nole to agents.list in openclaw.json
51
- 3. Configures HCK if provided
52
- 4. Upgrades the Commander (Jessie) with Commander role, tools, and rules
53
- - Appends to SOUL.md (Commander section)
54
- - Appends to AGENTS.md (Commander operating rules C1-C8)
55
- - Updates IDENTITY.md (Commander role)
56
- - Creates timestamped backups before any changes
57
- - Idempotent: skips if Commander content already present
112
+ Getting Started:
113
+ 1. npx nole configure Enter CDP credentials, create wallet
114
+ 2. npx nole setup Register with OpenClaw
115
+ 3. Restart OpenClaw gateway Nole is live
58
116
 
59
- Examples:
60
- npx @aiassesstech/nole setup --model anthropic/claude-sonnet-4-5 --hck hck_your_key
61
- npx @aiassesstech/nole setup --force
62
- npx @aiassesstech/nole setup --skip-commander
63
- npx @aiassesstech/nole setup --commander-id jessie
117
+ Get CDP credentials at: https://portal.cdp.coinbase.com/
64
118
  `.trim());
65
119
  }
66
120
  function parseFlags(args) {
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,IAAc;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAExB,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACzD,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC;YACV,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,6BAA6B;YACtD,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC;YACjB,KAAK,EAAE,OAAO,IAAI,KAAK;YACvB,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;YAC3B,aAAa,EAAE,gBAAgB,IAAI,KAAK;YACxC,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC;SACnC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAC7C,SAAS,EAAE,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BX,CAAC,IAAI,EAAE,CAAC,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,IAAc;IAChC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzD,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * CompSi Platform API Client
3
+ *
4
+ * Nole's interface to the AI Assess Tech agent subscription system.
5
+ * Handles recruitment, subscription management, commission tracking,
6
+ * and trust directory queries.
7
+ *
8
+ * @see SPEC-AGENT-CRYPTO-SUBSCRIPTIONS-1.0.md v1.1.1
9
+ */
10
+ export interface CompSiClientConfig {
11
+ apiUrl: string;
12
+ apiKey?: string;
13
+ walletAddress?: string;
14
+ }
15
+ export interface SubscribeRequest {
16
+ walletAddress: string;
17
+ tier: string;
18
+ agentName: string;
19
+ agentPlatform: string;
20
+ referralCode?: string;
21
+ recruiterWallet?: string;
22
+ signature?: string;
23
+ }
24
+ export interface DirectoryOptions {
25
+ limit?: number;
26
+ offset?: number;
27
+ tier?: string;
28
+ }
29
+ export interface ApiResponse<T = unknown> {
30
+ ok: boolean;
31
+ status: number;
32
+ data?: T;
33
+ error?: string;
34
+ }
35
+ export declare class CompSiApiClient {
36
+ private baseUrl;
37
+ private apiKey?;
38
+ private walletAddress?;
39
+ constructor(config: CompSiClientConfig);
40
+ get isConfigured(): boolean;
41
+ get configStatus(): {
42
+ apiKey: boolean;
43
+ wallet: boolean;
44
+ url: string;
45
+ };
46
+ private headers;
47
+ private request;
48
+ subscribe(req: SubscribeRequest): Promise<ApiResponse>;
49
+ getSubscription(wallet?: string): Promise<ApiResponse>;
50
+ upgrade(tier: string): Promise<ApiResponse>;
51
+ renew(): Promise<ApiResponse>;
52
+ triggerAssessment(targetAgentId: string, systemPrompt: string): Promise<ApiResponse>;
53
+ getScores(wallet?: string): Promise<ApiResponse>;
54
+ getCertification(wallet?: string): Promise<ApiResponse>;
55
+ generateReferralCode(): Promise<ApiResponse>;
56
+ validateReferralCode(code: string): Promise<ApiResponse>;
57
+ getCommissionStatus(wallet?: string): Promise<ApiResponse>;
58
+ claimCommission(): Promise<ApiResponse>;
59
+ getDirectory(options?: DirectoryOptions): Promise<ApiResponse>;
60
+ checkTrialEligibility(): Promise<ApiResponse>;
61
+ }
62
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/compsi/api-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,MAAM,EAAE,kBAAkB;IAMtC,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,YAAY,IAAI;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAMpE;IAED,OAAO,CAAC,OAAO;YAUD,OAAO;IA+Bf,SAAS,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAItD,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMtD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAS3C,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAY7B,iBAAiB,CACrB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC;IAOjB,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMhD,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAUvD,oBAAoB,IAAI,OAAO,CAAC,WAAW,CAAC;IAI5C,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAaxD,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAM1D,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;IAYvC,YAAY,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;IAkB9D,qBAAqB,IAAI,OAAO,CAAC,WAAW,CAAC;CAGpD"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * CompSi Platform API Client
3
+ *
4
+ * Nole's interface to the AI Assess Tech agent subscription system.
5
+ * Handles recruitment, subscription management, commission tracking,
6
+ * and trust directory queries.
7
+ *
8
+ * @see SPEC-AGENT-CRYPTO-SUBSCRIPTIONS-1.0.md v1.1.1
9
+ */
10
+ export class CompSiApiClient {
11
+ baseUrl;
12
+ apiKey;
13
+ walletAddress;
14
+ constructor(config) {
15
+ this.baseUrl = config.apiUrl.replace(/\/$/, '');
16
+ this.apiKey = config.apiKey;
17
+ this.walletAddress = config.walletAddress;
18
+ }
19
+ get isConfigured() {
20
+ return !!this.apiKey && !!this.walletAddress;
21
+ }
22
+ get configStatus() {
23
+ return {
24
+ apiKey: !!this.apiKey,
25
+ wallet: !!this.walletAddress,
26
+ url: this.baseUrl,
27
+ };
28
+ }
29
+ headers(includeAuth = true) {
30
+ const h = {
31
+ 'Content-Type': 'application/json',
32
+ };
33
+ if (includeAuth && this.apiKey) {
34
+ h['X-API-Key'] = this.apiKey;
35
+ }
36
+ return h;
37
+ }
38
+ async request(method, path, body, auth = true) {
39
+ try {
40
+ const res = await fetch(`${this.baseUrl}${path}`, {
41
+ method,
42
+ headers: this.headers(auth),
43
+ ...(body ? { body: JSON.stringify(body) } : {}),
44
+ });
45
+ const data = await res.json().catch(() => null);
46
+ if (!res.ok) {
47
+ return {
48
+ ok: false,
49
+ status: res.status,
50
+ error: data?.error || `HTTP ${res.status}`,
51
+ };
52
+ }
53
+ return { ok: true, status: res.status, data: data };
54
+ }
55
+ catch (err) {
56
+ const msg = err instanceof Error ? err.message : String(err);
57
+ return { ok: false, status: 0, error: `Network error: ${msg}` };
58
+ }
59
+ }
60
+ // =====================================================================
61
+ // Subscription Management
62
+ // =====================================================================
63
+ async subscribe(req) {
64
+ return this.request('POST', '/api/v1/agent/subscribe', req, false);
65
+ }
66
+ async getSubscription(wallet) {
67
+ const w = wallet || this.walletAddress;
68
+ if (!w)
69
+ return { ok: false, status: 0, error: 'No wallet address' };
70
+ return this.request('GET', `/api/v1/agent/subscription/${w}`, undefined, false);
71
+ }
72
+ async upgrade(tier) {
73
+ if (!this.walletAddress)
74
+ return { ok: false, status: 0, error: 'No wallet address' };
75
+ return this.request('POST', `/api/v1/agent/subscription/${this.walletAddress}/upgrade`, { tier });
76
+ }
77
+ async renew() {
78
+ if (!this.walletAddress)
79
+ return { ok: false, status: 0, error: 'No wallet address' };
80
+ return this.request('POST', `/api/v1/agent/subscription/${this.walletAddress}/renew`);
81
+ }
82
+ // =====================================================================
83
+ // Assessment
84
+ // =====================================================================
85
+ async triggerAssessment(targetAgentId, systemPrompt) {
86
+ return this.request('POST', '/api/v1/agent/assess', {
87
+ targetAgentId,
88
+ systemPrompt,
89
+ });
90
+ }
91
+ async getScores(wallet) {
92
+ const w = wallet || this.walletAddress;
93
+ if (!w)
94
+ return { ok: false, status: 0, error: 'No wallet address' };
95
+ return this.request('GET', `/api/v1/agent/scores/${w}`, undefined, false);
96
+ }
97
+ async getCertification(wallet) {
98
+ const w = wallet || this.walletAddress;
99
+ if (!w)
100
+ return { ok: false, status: 0, error: 'No wallet address' };
101
+ return this.request('GET', `/api/v1/agent/certification/${w}`, undefined, false);
102
+ }
103
+ // =====================================================================
104
+ // Recruitment & Referrals
105
+ // =====================================================================
106
+ async generateReferralCode() {
107
+ return this.request('POST', '/api/v1/agent/referral/generate');
108
+ }
109
+ async validateReferralCode(code) {
110
+ return this.request('GET', `/api/v1/agent/referral/validate?code=${encodeURIComponent(code)}`, undefined, false);
111
+ }
112
+ // =====================================================================
113
+ // Commission
114
+ // =====================================================================
115
+ async getCommissionStatus(wallet) {
116
+ const w = wallet || this.walletAddress;
117
+ if (!w)
118
+ return { ok: false, status: 0, error: 'No wallet address' };
119
+ return this.request('GET', `/api/v1/agent/commission/${w}`);
120
+ }
121
+ async claimCommission() {
122
+ if (!this.walletAddress)
123
+ return { ok: false, status: 0, error: 'No wallet address' };
124
+ return this.request('POST', `/api/v1/agent/commission/${this.walletAddress}/claim`);
125
+ }
126
+ // =====================================================================
127
+ // Trust Directory
128
+ // =====================================================================
129
+ async getDirectory(options) {
130
+ const params = new URLSearchParams();
131
+ if (options?.limit)
132
+ params.set('limit', String(options.limit));
133
+ if (options?.offset)
134
+ params.set('offset', String(options.offset));
135
+ if (options?.tier)
136
+ params.set('tier', options.tier);
137
+ const qs = params.toString();
138
+ return this.request('GET', `/api/v1/agent/directory${qs ? `?${qs}` : ''}`, undefined, false);
139
+ }
140
+ // =====================================================================
141
+ // Free Trial
142
+ // =====================================================================
143
+ async checkTrialEligibility() {
144
+ return this.request('GET', '/api/v1/agent/trial/status', undefined, false);
145
+ }
146
+ }
147
+ //# sourceMappingURL=api-client.js.map