archer-wizard 0.2.0 → 0.2.2
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/ARCHITECTURE.md +378 -0
- package/README.md +72 -46
- package/dist/lib/ascii.js +1 -1
- package/dist/lib/ascii.js.map +1 -1
- package/dist/types/index.d.ts +1 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/wizard/detector.js +3 -3
- package/dist/wizard/detector.js.map +1 -1
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +57 -23
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/injector.d.ts.map +1 -1
- package/dist/wizard/injector.js +17 -7
- package/dist/wizard/injector.js.map +1 -1
- package/dist/wizard/rules.d.ts.map +1 -1
- package/dist/wizard/rules.js +50 -28
- package/dist/wizard/rules.js.map +1 -1
- package/dist/wizard/scanner.d.ts.map +1 -1
- package/dist/wizard/scanner.js +0 -23
- package/dist/wizard/scanner.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/ascii.ts +1 -1
- package/src/types/index.ts +1 -5
- package/src/wizard/detector.ts +3 -3
- package/src/wizard/index.ts +54 -24
- package/src/wizard/injector.ts +23 -7
- package/src/wizard/rules.ts +50 -28
- package/src/wizard/scanner.ts +0 -23
package/dist/wizard/detector.js
CHANGED
|
@@ -21,9 +21,9 @@ const AGENTS = [
|
|
|
21
21
|
{
|
|
22
22
|
name: 'opencode',
|
|
23
23
|
paths: {
|
|
24
|
-
darwin: path.join(os.homedir(), '.config', 'opencode', '
|
|
25
|
-
linux: path.join(os.homedir(), '.config', 'opencode', '
|
|
26
|
-
win32: path.join(process.env['APPDATA'] ?? os.homedir(), 'opencode', '
|
|
24
|
+
darwin: path.join(os.homedir(), '.config', 'opencode', 'opencode.json'),
|
|
25
|
+
linux: path.join(os.homedir(), '.config', 'opencode', 'opencode.json'),
|
|
26
|
+
win32: path.join(process.env['APPDATA'] ?? os.homedir(), 'opencode', 'opencode.json'),
|
|
27
27
|
},
|
|
28
28
|
},
|
|
29
29
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/wizard/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAczB,MAAM,MAAM,GAAsB;IAChC;QACE,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE;YACL,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;YACtD,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC;YACrD,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC;SAC/E;KACF;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE;YACL,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC;YACzG,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,CAAC;YACjF,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,4BAA4B,CAAC;SACjG;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE;YACL,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/wizard/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AAcA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAoF/C"}
|
package/dist/wizard/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import * as clack from '@clack/prompts';
|
|
2
2
|
import pc from 'picocolors';
|
|
3
|
-
import { showAsciiArt,
|
|
3
|
+
import { showAsciiArt, showSuccessBox } from '../lib/ascii.js';
|
|
4
4
|
import { scanProject, promptForMissing } from './scanner.js';
|
|
5
5
|
import { detectAgents } from './detector.js';
|
|
6
6
|
import { injectIntoAgents } from './injector.js';
|
|
7
7
|
import { injectRules } from './rules.js';
|
|
8
|
+
// ─── Helpers ─────────────────────────────────────────────────
|
|
9
|
+
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
8
10
|
// ─── Wizard Sequence ────────────────────────────────────────
|
|
9
11
|
export async function runWizard() {
|
|
10
12
|
const cwd = process.cwd();
|
|
@@ -12,38 +14,70 @@ export async function runWizard() {
|
|
|
12
14
|
showAsciiArt();
|
|
13
15
|
// ─ Step 2: Start clack ─
|
|
14
16
|
clack.intro(pc.bgGreen(pc.black(' archer setup ')));
|
|
15
|
-
// ─ Step 3:
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
// ─ Step 3: Scan for Supabase credentials ─
|
|
18
|
+
const s = clack.spinner();
|
|
19
|
+
s.start('scanning project for supabase credentials');
|
|
20
|
+
await sleep(600);
|
|
19
21
|
const scan = await scanProject(cwd);
|
|
20
|
-
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
await sleep(300);
|
|
23
|
+
// Build scan summary lines
|
|
24
|
+
const scanNotes = [];
|
|
25
|
+
if (scan.supabaseUrl)
|
|
26
|
+
scanNotes.push('SUPABASE_URL');
|
|
27
|
+
if (scan.serviceRoleKey)
|
|
28
|
+
scanNotes.push('SERVICE_ROLE_KEY');
|
|
29
|
+
if (scan.anonKey)
|
|
30
|
+
scanNotes.push('ANON_KEY');
|
|
31
|
+
if (scan.foundInFile)
|
|
32
|
+
scanNotes.push(`from ${scan.foundInFile}`);
|
|
33
|
+
if (scanNotes.length > 0) {
|
|
34
|
+
s.stop(`found ${pc.green(scanNotes.join(pc.dim(' · ')))}`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
s.stop(pc.yellow('no credentials found — will prompt'));
|
|
24
38
|
}
|
|
25
|
-
|
|
26
|
-
|
|
39
|
+
// ─ Step 4: Framework detection ─
|
|
40
|
+
if (scan.framework !== 'unknown' || scan.hasSupabaseInstalled) {
|
|
41
|
+
const s2 = clack.spinner();
|
|
42
|
+
s2.start('detecting project framework');
|
|
43
|
+
await sleep(400);
|
|
44
|
+
const parts = [];
|
|
45
|
+
if (scan.framework !== 'unknown')
|
|
46
|
+
parts.push(pc.bold(scan.framework));
|
|
47
|
+
if (scan.hasSupabaseInstalled)
|
|
48
|
+
parts.push(pc.dim('@supabase/supabase-js'));
|
|
49
|
+
s2.stop(`detected ${parts.join(pc.dim(' + '))}`);
|
|
27
50
|
}
|
|
28
|
-
// ─ Step
|
|
51
|
+
// ─ Step 5: Prompt for missing credentials ─
|
|
29
52
|
const credentials = await promptForMissing(scan);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
53
|
+
// ─ Step 6: Detect agents ─
|
|
54
|
+
const s3 = clack.spinner();
|
|
55
|
+
s3.start('scanning for AI agents');
|
|
56
|
+
await sleep(500);
|
|
33
57
|
const agents = detectAgents();
|
|
34
|
-
|
|
35
|
-
|
|
58
|
+
await sleep(200);
|
|
59
|
+
if (agents.length > 0) {
|
|
60
|
+
const names = agents.map((a) => pc.bold(a.name)).join(pc.dim(', '));
|
|
61
|
+
s3.stop(`found ${pc.green(String(agents.length))} agent${agents.length !== 1 ? 's' : ''} — ${names}`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
s3.stop(pc.yellow('no agents found'));
|
|
65
|
+
}
|
|
66
|
+
// ─ Step 7: Inject into agents ─
|
|
36
67
|
const injectionResults = await injectIntoAgents(agents, credentials.supabaseUrl, credentials.serviceRoleKey);
|
|
37
|
-
|
|
38
|
-
// ─ Step 12: Filter successful injections ─
|
|
68
|
+
// ─ Step 8: Filter successful injections ─
|
|
39
69
|
const successfulAgents = agents.filter((a) => injectionResults.some((r) => r.agent === a.name && r.success));
|
|
40
|
-
// ─ Step
|
|
70
|
+
// ─ Step 9: Inject rules ─
|
|
41
71
|
if (successfulAgents.length > 0) {
|
|
42
|
-
|
|
72
|
+
const s4 = clack.spinner();
|
|
73
|
+
s4.start('writing agent rules');
|
|
74
|
+
await sleep(400);
|
|
43
75
|
injectRules(successfulAgents);
|
|
44
|
-
|
|
76
|
+
await sleep(200);
|
|
77
|
+
s4.stop(`rules injected into ${pc.green(String(successfulAgents.length))} agent${successfulAgents.length !== 1 ? 's' : ''}`);
|
|
45
78
|
}
|
|
46
|
-
// ─ Step
|
|
79
|
+
// ─ Step 10: Success ─
|
|
80
|
+
console.log();
|
|
47
81
|
showSuccessBox(successfulAgents.length);
|
|
48
82
|
clack.outro(pc.dim('docs → github.com/archer-mcp'));
|
|
49
83
|
}
|
package/dist/wizard/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.d.ts","sourceRoot":"","sources":["../../src/wizard/injector.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"injector.d.ts","sourceRoot":"","sources":["../../src/wizard/injector.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AAuFpF,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,eAAe,EAAE,CAAC,CAiC5B"}
|
package/dist/wizard/injector.js
CHANGED
|
@@ -4,15 +4,25 @@ import * as clack from '@clack/prompts';
|
|
|
4
4
|
import pc from 'picocolors';
|
|
5
5
|
import { logSuccess, logError, logAction } from '../lib/ascii.js';
|
|
6
6
|
import { getConfigKey } from './detector.js';
|
|
7
|
-
// ─── Archer MCP Entry
|
|
8
|
-
function buildArcherEntry(supabaseUrl, serviceRoleKey) {
|
|
7
|
+
// ─── Archer MCP Entry (agent-aware) ─────────────────────────
|
|
8
|
+
function buildArcherEntry(agentName, supabaseUrl, serviceRoleKey) {
|
|
9
|
+
const envVars = {
|
|
10
|
+
SUPABASE_URL: supabaseUrl,
|
|
11
|
+
SUPABASE_SERVICE_ROLE_KEY: serviceRoleKey,
|
|
12
|
+
};
|
|
13
|
+
// opencode uses { type, command[], environment }
|
|
14
|
+
if (agentName === 'opencode') {
|
|
15
|
+
return {
|
|
16
|
+
type: 'local',
|
|
17
|
+
command: ['npx', '-y', 'archer-wizard@latest', '--mcp'],
|
|
18
|
+
environment: envVars,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// cursor, claude-code, windsurf, antigravity use { command, args, env }
|
|
9
22
|
return {
|
|
10
23
|
command: 'npx',
|
|
11
24
|
args: ['-y', 'archer-wizard@latest', '--mcp'],
|
|
12
|
-
env:
|
|
13
|
-
SUPABASE_URL: supabaseUrl,
|
|
14
|
-
SUPABASE_SERVICE_ROLE_KEY: serviceRoleKey,
|
|
15
|
-
},
|
|
25
|
+
env: envVars,
|
|
16
26
|
};
|
|
17
27
|
}
|
|
18
28
|
// ─── Read or Create Config ──────────────────────────────────
|
|
@@ -40,7 +50,7 @@ function injectIntoAgent(agent, supabaseUrl, serviceRoleKey) {
|
|
|
40
50
|
try {
|
|
41
51
|
const configKey = getConfigKey(agent.name);
|
|
42
52
|
const config = readConfig(agent.configPath);
|
|
43
|
-
const archerEntry = buildArcherEntry(supabaseUrl, serviceRoleKey);
|
|
53
|
+
const archerEntry = buildArcherEntry(agent.name, supabaseUrl, serviceRoleKey);
|
|
44
54
|
// Ensure the config key object exists
|
|
45
55
|
if (!config[configKey] || typeof config[configKey] !== 'object') {
|
|
46
56
|
config[configKey] = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/wizard/injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,+DAA+D;AAE/D,SAAS,gBAAgB,
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/wizard/injector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,+DAA+D;AAE/D,SAAS,gBAAgB,CACvB,SAAiB,EACjB,WAAmB,EACnB,cAAsB;IAEtB,MAAM,OAAO,GAAG;QACd,YAAY,EAAE,WAAW;QACzB,yBAAyB,EAAE,cAAc;KAC1C,CAAC;IAEF,iDAAiD;IACjD,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC;YACvD,WAAW,EAAE,OAAO;SACrB,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,sBAAsB,EAAE,OAAO,CAAC;QAC7C,GAAG,EAAE,OAAO;KACb,CAAC;AACJ,CAAC;AAED,+DAA+D;AAE/D,SAAS,UAAU,CAAC,UAAkB;IACpC,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QACxD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,MAA+B;IACtE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAChF,CAAC;AAED,+DAA+D;AAE/D,SAAS,eAAe,CACtB,KAAgB,EAChB,WAAmB,EACnB,cAAsB;IAEtB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QAE9E,sCAAsC;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,QAAQ,EAAE,CAAC;YAChE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACzB,CAAC;QAED,wDAAwD;QACxD,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAA4B,CAAC;QAC7D,OAAO,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;QAEhC,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAEtC,UAAU,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,QAAQ,CAAC,yBAAyB,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,+DAA+D;AAE/D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAmB,EACnB,WAAmB,EACnB,cAAsB;IAEtB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,QAAQ,CAAC,sCAAsC,CAAC,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,sBAAsB;IACtB,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QACvC,OAAO,EAAE,sBAAsB,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;QACtF,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClD,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mCAAmC;IACnC,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/wizard/rules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/wizard/rules.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AA4InD,wBAAgB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAIrD"}
|
package/dist/wizard/rules.js
CHANGED
|
@@ -6,53 +6,75 @@ import { getRulesPath } from './detector.js';
|
|
|
6
6
|
const RULE_CONTENT = `
|
|
7
7
|
# Archer — Event Intelligence for AI Agents
|
|
8
8
|
|
|
9
|
-
Archer is the event intelligence layer for AI agents. It
|
|
9
|
+
Archer is the universal event intelligence layer for AI agents. It watches your data sources in real time, detects changes the moment they happen, and delivers full context to your webhook — so your agent can react instantly, without polling.
|
|
10
10
|
|
|
11
|
-
## Available
|
|
11
|
+
## Available MCP Tools
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
### archer_watch
|
|
14
|
+
Create a persistent real-time watch on a data source. Watches survive agent session restarts.
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
**Parameters:**
|
|
17
|
+
- **table** *(required)* — name of the table or resource to watch
|
|
18
|
+
- **event** — type of change: \`INSERT\`, \`UPDATE\`, \`DELETE\`, or \`*\` (all). Default: \`*\`
|
|
19
|
+
- **filter** — optional filter expression, e.g. \`"status=eq.active"\` or \`"amount=gt.1000"\`
|
|
20
|
+
- **webhookUrl** — URL to receive a POST with full event payload when a match fires
|
|
16
21
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
- Watch for new user signups
|
|
20
|
-
- React to events in external services
|
|
21
|
-
- Automate responses to data changes
|
|
22
|
-
- Set up real-time notifications
|
|
22
|
+
### archer_unwatch
|
|
23
|
+
Remove an active watch by its ID. Stops listening and cleans up.
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
**Parameters:**
|
|
26
|
+
- **watchId** *(required)* — the watch ID returned by \`archer_watch\`
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
- **table**: the table name (required for table events)
|
|
29
|
-
- **condition**: optional filter like \`"email ends with @gmail.com"\`
|
|
30
|
-
- **webhookUrl**: URL to receive POST notifications when events match
|
|
28
|
+
### archer_watches
|
|
29
|
+
List all active watches — their IDs, tables, events, filters, and webhook URLs.
|
|
31
30
|
|
|
32
|
-
|
|
31
|
+
## When to Use Archer
|
|
33
32
|
|
|
34
|
-
|
|
33
|
+
Use Archer any time the user wants to:
|
|
34
|
+
- **Monitor data changes** — new rows, updates, deletions in any table
|
|
35
|
+
- **React to events** — trigger automations when conditions are met
|
|
36
|
+
- **Set up alerts** — notify on signups, new orders, status changes, threshold breaches
|
|
37
|
+
- **Build event-driven workflows** — chain watches with webhooks for real-time pipelines
|
|
38
|
+
- **Track activity** — audit logs, user actions, system events
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
1. Watch for new rows in a table:
|
|
43
|
+
\`\`\`
|
|
44
|
+
archer_watch({ table: "users", event: "INSERT", webhookUrl: "https://hooks.example.com/new-users" })
|
|
45
|
+
\`\`\`
|
|
46
|
+
|
|
47
|
+
2. Watch for updates with a filter:
|
|
35
48
|
\`\`\`
|
|
36
|
-
|
|
49
|
+
archer_watch({ table: "orders", event: "UPDATE", filter: "status=eq.shipped", webhookUrl: "https://hooks.example.com/shipped" })
|
|
37
50
|
\`\`\`
|
|
38
51
|
|
|
39
|
-
|
|
52
|
+
3. Watch all changes on a table:
|
|
40
53
|
\`\`\`
|
|
41
|
-
|
|
54
|
+
archer_watch({ table: "payments", webhookUrl: "https://hooks.example.com/payments" })
|
|
42
55
|
\`\`\`
|
|
43
56
|
|
|
44
|
-
|
|
57
|
+
4. List active watches:
|
|
45
58
|
\`\`\`
|
|
46
|
-
|
|
59
|
+
archer_watches()
|
|
47
60
|
\`\`\`
|
|
48
61
|
|
|
49
|
-
|
|
62
|
+
5. Stop a watch:
|
|
63
|
+
\`\`\`
|
|
64
|
+
archer_unwatch({ watchId: "abc-123" })
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
## Best Practices
|
|
68
|
+
|
|
69
|
+
- Add filters to reduce noise — only fire on events that matter
|
|
70
|
+
- Use descriptive webhook URLs that map to specific actions
|
|
71
|
+
- Chain multiple watches for complex event-driven workflows
|
|
72
|
+
- Use \`archer_watches\` to inspect and manage active watchers
|
|
73
|
+
- Clean up watches you no longer need with \`archer_unwatch\`
|
|
50
74
|
|
|
51
|
-
|
|
52
|
-
- Add conditions to filter events and reduce noise
|
|
53
|
-
- Combine with your existing workflows for maximum impact
|
|
75
|
+
## Trigger Words
|
|
54
76
|
|
|
55
|
-
When the user
|
|
77
|
+
When the user says **"watch"**, **"monitor"**, **"notify me"**, **"alert me"**, **"track"**, **"listen for"**, or **"fire when"** — use Archer.
|
|
56
78
|
`.trim();
|
|
57
79
|
// ─── Archer Block Markers ───────────────────────────────────
|
|
58
80
|
const BLOCK_START = '<!-- archer:start -->';
|
package/dist/wizard/rules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/wizard/rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,+DAA+D;AAE/D,MAAM,YAAY,GAAG
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/wizard/rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/wizard/scanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/wizard/scanner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,mBAAmB,CAAC;AAgL/D,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAkElE;AAID,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,UAAU,GACf,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAgD1D"}
|
package/dist/wizard/scanner.js
CHANGED
|
@@ -2,7 +2,6 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import * as clack from '@clack/prompts';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { logSuccess, logError, maskCredential } from '../lib/ascii.js';
|
|
6
5
|
// Helper to search for keys in files
|
|
7
6
|
function searchInFiles(cwd, patterns) {
|
|
8
7
|
const results = new Map();
|
|
@@ -195,28 +194,6 @@ export async function scanProject(cwd) {
|
|
|
195
194
|
const serviceRoleKey = findByAliases(mergedEnv, SERVICE_ROLE_KEY_ALIASES);
|
|
196
195
|
const anonKey = findByAliases(mergedEnv, ANON_KEY_ALIASES);
|
|
197
196
|
const { framework, hasSupabaseInstalled } = detectFramework(cwd);
|
|
198
|
-
// Log found credentials
|
|
199
|
-
if (supabaseUrl) {
|
|
200
|
-
logSuccess(`SUPABASE_URL = ${maskCredential(supabaseUrl)}`);
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
logError('missing SUPABASE_URL');
|
|
204
|
-
}
|
|
205
|
-
if (serviceRoleKey) {
|
|
206
|
-
logSuccess(`SUPABASE_SERVICE_ROLE_KEY = ${maskCredential(serviceRoleKey)}`);
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
logError('missing SUPABASE_SERVICE_ROLE_KEY');
|
|
210
|
-
}
|
|
211
|
-
if (anonKey) {
|
|
212
|
-
logSuccess(`SUPABASE_ANON_KEY = ${maskCredential(anonKey)}`);
|
|
213
|
-
}
|
|
214
|
-
if (foundInFile) {
|
|
215
|
-
logSuccess(`found credentials in ${foundInFile}`);
|
|
216
|
-
}
|
|
217
|
-
else if (codebaseResults.size > 0) {
|
|
218
|
-
logSuccess(`found credentials in codebase`);
|
|
219
|
-
}
|
|
220
197
|
return {
|
|
221
198
|
supabaseUrl,
|
|
222
199
|
serviceRoleKey,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/wizard/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/wizard/scanner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/lib/ascii.ts
CHANGED
|
@@ -65,7 +65,7 @@ export function showSuccessBox(agentCount: number): void {
|
|
|
65
65
|
` ${pc.green('▶')} Archer is ready`,
|
|
66
66
|
'',
|
|
67
67
|
` injected into ${agentCount} agent${agentCount !== 1 ? 's' : ''}`,
|
|
68
|
-
' connected to your
|
|
68
|
+
' connected to your backend',
|
|
69
69
|
'',
|
|
70
70
|
' open your AI agent and say:',
|
|
71
71
|
` ${pc.dim('"watch my users table for new signups"')}`,
|
package/src/types/index.ts
CHANGED
package/src/wizard/detector.ts
CHANGED
|
@@ -34,9 +34,9 @@ const AGENTS: AgentPathConfig[] = [
|
|
|
34
34
|
{
|
|
35
35
|
name: 'opencode',
|
|
36
36
|
paths: {
|
|
37
|
-
darwin: path.join(os.homedir(), '.config', 'opencode', '
|
|
38
|
-
linux: path.join(os.homedir(), '.config', 'opencode', '
|
|
39
|
-
win32: path.join(process.env['APPDATA'] ?? os.homedir(), 'opencode', '
|
|
37
|
+
darwin: path.join(os.homedir(), '.config', 'opencode', 'opencode.json'),
|
|
38
|
+
linux: path.join(os.homedir(), '.config', 'opencode', 'opencode.json'),
|
|
39
|
+
win32: path.join(process.env['APPDATA'] ?? os.homedir(), 'opencode', 'opencode.json'),
|
|
40
40
|
},
|
|
41
41
|
},
|
|
42
42
|
{
|
package/src/wizard/index.ts
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import * as clack from '@clack/prompts';
|
|
2
2
|
import pc from 'picocolors';
|
|
3
|
-
import { showAsciiArt,
|
|
3
|
+
import { showAsciiArt, showSuccessBox } from '../lib/ascii.js';
|
|
4
4
|
import { scanProject, promptForMissing } from './scanner.js';
|
|
5
5
|
import { detectAgents } from './detector.js';
|
|
6
6
|
import { injectIntoAgents } from './injector.js';
|
|
7
7
|
import { injectRules } from './rules.js';
|
|
8
8
|
|
|
9
|
+
// ─── Helpers ─────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
|
|
12
|
+
|
|
9
13
|
// ─── Wizard Sequence ────────────────────────────────────────
|
|
10
14
|
|
|
11
15
|
export async function runWizard(): Promise<void> {
|
|
@@ -17,52 +21,78 @@ export async function runWizard(): Promise<void> {
|
|
|
17
21
|
// ─ Step 2: Start clack ─
|
|
18
22
|
clack.intro(pc.bgGreen(pc.black(' archer setup ')));
|
|
19
23
|
|
|
20
|
-
// ─ Step 3:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// ─ Step 4-6: Scan env files ─
|
|
24
|
+
// ─ Step 3: Scan for Supabase credentials ─
|
|
25
|
+
const s = clack.spinner();
|
|
26
|
+
s.start('scanning project for supabase credentials');
|
|
27
|
+
await sleep(600);
|
|
25
28
|
const scan = await scanProject(cwd);
|
|
26
|
-
|
|
29
|
+
await sleep(300);
|
|
30
|
+
|
|
31
|
+
// Build scan summary lines
|
|
32
|
+
const scanNotes: string[] = [];
|
|
33
|
+
if (scan.supabaseUrl) scanNotes.push('SUPABASE_URL');
|
|
34
|
+
if (scan.serviceRoleKey) scanNotes.push('SERVICE_ROLE_KEY');
|
|
35
|
+
if (scan.anonKey) scanNotes.push('ANON_KEY');
|
|
36
|
+
if (scan.foundInFile) scanNotes.push(`from ${scan.foundInFile}`);
|
|
27
37
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
if (scanNotes.length > 0) {
|
|
39
|
+
s.stop(`found ${pc.green(scanNotes.join(pc.dim(' · ')))}`);
|
|
40
|
+
} else {
|
|
41
|
+
s.stop(pc.yellow('no credentials found — will prompt'));
|
|
31
42
|
}
|
|
32
|
-
|
|
33
|
-
|
|
43
|
+
|
|
44
|
+
// ─ Step 4: Framework detection ─
|
|
45
|
+
if (scan.framework !== 'unknown' || scan.hasSupabaseInstalled) {
|
|
46
|
+
const s2 = clack.spinner();
|
|
47
|
+
s2.start('detecting project framework');
|
|
48
|
+
await sleep(400);
|
|
49
|
+
const parts: string[] = [];
|
|
50
|
+
if (scan.framework !== 'unknown') parts.push(pc.bold(scan.framework));
|
|
51
|
+
if (scan.hasSupabaseInstalled) parts.push(pc.dim('@supabase/supabase-js'));
|
|
52
|
+
s2.stop(`detected ${parts.join(pc.dim(' + '))}`);
|
|
34
53
|
}
|
|
35
54
|
|
|
36
|
-
// ─ Step
|
|
55
|
+
// ─ Step 5: Prompt for missing credentials ─
|
|
37
56
|
const credentials = await promptForMissing(scan);
|
|
38
|
-
console.log();
|
|
39
57
|
|
|
40
|
-
// ─ Step
|
|
41
|
-
|
|
58
|
+
// ─ Step 6: Detect agents ─
|
|
59
|
+
const s3 = clack.spinner();
|
|
60
|
+
s3.start('scanning for AI agents');
|
|
61
|
+
await sleep(500);
|
|
42
62
|
const agents = detectAgents();
|
|
43
|
-
|
|
63
|
+
await sleep(200);
|
|
64
|
+
|
|
65
|
+
if (agents.length > 0) {
|
|
66
|
+
const names = agents.map((a) => pc.bold(a.name)).join(pc.dim(', '));
|
|
67
|
+
s3.stop(`found ${pc.green(String(agents.length))} agent${agents.length !== 1 ? 's' : ''} — ${names}`);
|
|
68
|
+
} else {
|
|
69
|
+
s3.stop(pc.yellow('no agents found'));
|
|
70
|
+
}
|
|
44
71
|
|
|
45
|
-
// ─ Step
|
|
72
|
+
// ─ Step 7: Inject into agents ─
|
|
46
73
|
const injectionResults = await injectIntoAgents(
|
|
47
74
|
agents,
|
|
48
75
|
credentials.supabaseUrl,
|
|
49
76
|
credentials.serviceRoleKey,
|
|
50
77
|
);
|
|
51
|
-
console.log();
|
|
52
78
|
|
|
53
|
-
// ─ Step
|
|
79
|
+
// ─ Step 8: Filter successful injections ─
|
|
54
80
|
const successfulAgents = agents.filter((a) =>
|
|
55
81
|
injectionResults.some((r) => r.agent === a.name && r.success),
|
|
56
82
|
);
|
|
57
83
|
|
|
58
|
-
// ─ Step
|
|
84
|
+
// ─ Step 9: Inject rules ─
|
|
59
85
|
if (successfulAgents.length > 0) {
|
|
60
|
-
|
|
86
|
+
const s4 = clack.spinner();
|
|
87
|
+
s4.start('writing agent rules');
|
|
88
|
+
await sleep(400);
|
|
61
89
|
injectRules(successfulAgents);
|
|
62
|
-
|
|
90
|
+
await sleep(200);
|
|
91
|
+
s4.stop(`rules injected into ${pc.green(String(successfulAgents.length))} agent${successfulAgents.length !== 1 ? 's' : ''}`);
|
|
63
92
|
}
|
|
64
93
|
|
|
65
|
-
// ─ Step
|
|
94
|
+
// ─ Step 10: Success ─
|
|
95
|
+
console.log();
|
|
66
96
|
showSuccessBox(successfulAgents.length);
|
|
67
97
|
|
|
68
98
|
clack.outro(pc.dim('docs → github.com/archer-mcp'));
|