agentsean 1.0.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/LICENSE +661 -0
- package/dist/args.d.ts +33 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +314 -0
- package/dist/args.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +5 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +192 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/apply.d.ts +8 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +107 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/audit.d.ts +9 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +92 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/connect.d.ts +10 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +181 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/content.d.ts +8 -0
- package/dist/commands/content.d.ts.map +1 -0
- package/dist/commands/content.js +50 -0
- package/dist/commands/content.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +61 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/freeze.d.ts +6 -0
- package/dist/commands/freeze.d.ts.map +1 -0
- package/dist/commands/freeze.js +12 -0
- package/dist/commands/freeze.js.map +1 -0
- package/dist/commands/keywords.d.ts +6 -0
- package/dist/commands/keywords.d.ts.map +1 -0
- package/dist/commands/keywords.js +68 -0
- package/dist/commands/keywords.js.map +1 -0
- package/dist/commands/local.d.ts +6 -0
- package/dist/commands/local.d.ts.map +1 -0
- package/dist/commands/local.js +43 -0
- package/dist/commands/local.js.map +1 -0
- package/dist/commands/mcp.d.ts +5 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +26 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/measure.d.ts +6 -0
- package/dist/commands/measure.d.ts.map +1 -0
- package/dist/commands/measure.js +46 -0
- package/dist/commands/measure.js.map +1 -0
- package/dist/commands/mentions.d.ts +6 -0
- package/dist/commands/mentions.d.ts.map +1 -0
- package/dist/commands/mentions.js +34 -0
- package/dist/commands/mentions.js.map +1 -0
- package/dist/commands/onboard.d.ts +11 -0
- package/dist/commands/onboard.d.ts.map +1 -0
- package/dist/commands/onboard.js +89 -0
- package/dist/commands/onboard.js.map +1 -0
- package/dist/commands/recipes.d.ts +5 -0
- package/dist/commands/recipes.d.ts.map +1 -0
- package/dist/commands/recipes.js +20 -0
- package/dist/commands/recipes.js.map +1 -0
- package/dist/commands/revert.d.ts +6 -0
- package/dist/commands/revert.d.ts.map +1 -0
- package/dist/commands/revert.js +45 -0
- package/dist/commands/revert.js.map +1 -0
- package/dist/commands/service.d.ts +9 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +66 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/signup.d.ts +6 -0
- package/dist/commands/signup.d.ts.map +1 -0
- package/dist/commands/signup.js +31 -0
- package/dist/commands/signup.js.map +1 -0
- package/dist/commands/start.d.ts +9 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +86 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +35 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +5 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +38 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/telemetry.d.ts +6 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +43 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/tenant.d.ts +6 -0
- package/dist/commands/tenant.d.ts.map +1 -0
- package/dist/commands/tenant.js +25 -0
- package/dist/commands/tenant.js.map +1 -0
- package/dist/commands/uninstall.d.ts +6 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +20 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +5 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +19 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/visibility.d.ts +6 -0
- package/dist/commands/visibility.d.ts.map +1 -0
- package/dist/commands/visibility.js +40 -0
- package/dist/commands/visibility.js.map +1 -0
- package/dist/output.d.ts +3 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +15 -0
- package/dist/output.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { openSqlite, sites } from "@agentsean/db";
|
|
3
|
+
import { brandTermsFromOrigin } from "@agentsean/scheduler";
|
|
4
|
+
import { createBingClient, createProviderStack, loadProviderKeys, } from "@agentsean/providers";
|
|
5
|
+
import { createHashEmbeddings, loadGscQueries, runKeywordsJob, } from "@agentsean/keywords";
|
|
6
|
+
import { dbPath, defaultSeanHome, ensureSeanHome, getSettingNumber, openDaemonStore, } from "@agentsean/daemon";
|
|
7
|
+
import { emit, emitError } from "../output.js";
|
|
8
|
+
export async function keywordsCommand(opts) {
|
|
9
|
+
const home = ensureSeanHome(opts.home ?? defaultSeanHome());
|
|
10
|
+
const { db, sqlite } = openSqlite(dbPath(home));
|
|
11
|
+
try {
|
|
12
|
+
const site = opts.target
|
|
13
|
+
? db.select().from(sites).where(eq(sites.origin, opts.target)).get()
|
|
14
|
+
: db.select().from(sites).all()[0];
|
|
15
|
+
if (!site) {
|
|
16
|
+
emitError(opts.json, { command: "keywords", error: "unknown_site" }, "No site in the database. Run `sean audit https://example.com` first.");
|
|
17
|
+
return 2;
|
|
18
|
+
}
|
|
19
|
+
const store = openDaemonStore(home);
|
|
20
|
+
const keys = await loadProviderKeys(store);
|
|
21
|
+
const gsc = loadGscQueries(db, site.id);
|
|
22
|
+
const stack = createProviderStack({
|
|
23
|
+
keys,
|
|
24
|
+
gsc: gsc.map((r) => ({
|
|
25
|
+
query: r.query,
|
|
26
|
+
source: "gsc",
|
|
27
|
+
clicks: r.clicks,
|
|
28
|
+
impressions: r.impressions,
|
|
29
|
+
position: r.position,
|
|
30
|
+
})),
|
|
31
|
+
});
|
|
32
|
+
const bing = keys.bing ? createBingClient({ apiKey: keys.bing }) : null;
|
|
33
|
+
const result = await runKeywordsJob(db, {
|
|
34
|
+
siteId: site.id,
|
|
35
|
+
origin: site.origin,
|
|
36
|
+
stack,
|
|
37
|
+
gsc,
|
|
38
|
+
brandTerms: brandTermsFromOrigin(site.origin),
|
|
39
|
+
embeddings: createHashEmbeddings(),
|
|
40
|
+
dailyBudgetUsd: getSettingNumber(db, "budgetUsdDaily", 8),
|
|
41
|
+
...(bing
|
|
42
|
+
? {
|
|
43
|
+
expand: (seed) => bing.getRelatedKeywords(seed),
|
|
44
|
+
}
|
|
45
|
+
: {}),
|
|
46
|
+
});
|
|
47
|
+
emit(opts.json, {
|
|
48
|
+
command: "keywords",
|
|
49
|
+
ok: true,
|
|
50
|
+
paidUpgrade: result.paidUpgrade,
|
|
51
|
+
opportunities: result.opportunities.length,
|
|
52
|
+
clusters: result.clusters.length,
|
|
53
|
+
strikingDistance: result.strikingDistance.length,
|
|
54
|
+
ranks: result.ranks.length,
|
|
55
|
+
embeddingsModel: result.embeddingsModel,
|
|
56
|
+
difficultyNote: result.difficultyNote,
|
|
57
|
+
quotes: result.quotes,
|
|
58
|
+
reason: result.reason ?? null,
|
|
59
|
+
}, result.paidUpgrade
|
|
60
|
+
? `Keywords: ${result.opportunities.length} opportunities, ${result.clusters.length} clusters, ${result.ranks.length} licensed ranks. DataForSEO upgrade is on.`
|
|
61
|
+
: `Keywords: ${result.opportunities.length} opportunities, ${result.clusters.length} clusters from GSC + Bing (zero paid keys). Add a DataForSEO key to upgrade ranks in place.`);
|
|
62
|
+
return 0;
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
sqlite.close();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=keywords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keywords.js","sourceRoot":"","sources":["../../src/commands/keywords.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,MAAM,EACN,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAIrC;IACC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS,CACP,IAAI,CAAC,IAAI,EACT,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,EAC9C,sEAAsE,CACvE,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC;YAChC,IAAI;YACJ,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE;YACtC,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK;YACL,GAAG;YACH,UAAU,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;YAC7C,UAAU,EAAE,oBAAoB,EAAE;YAClC,cAAc,EAAE,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACzD,GAAG,CAAC,IAAI;gBACN,CAAC,CAAC;oBACE,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;iBACxD;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,IAAI,CACF,IAAI,CAAC,IAAI,EACT;YACE,OAAO,EAAE,UAAU;YACnB,EAAE,EAAE,IAAI;YACR,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM;YAC1C,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;YAChC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM;YAChD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;YAC1B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;SAC9B,EACD,MAAM,CAAC,WAAW;YAChB,CAAC,CAAC,aAAa,MAAM,CAAC,aAAa,CAAC,MAAM,mBAAmB,MAAM,CAAC,QAAQ,CAAC,MAAM,cAAc,MAAM,CAAC,KAAK,CAAC,MAAM,4CAA4C;YAChK,CAAC,CAAC,aAAa,MAAM,CAAC,aAAa,CAAC,MAAM,mBAAmB,MAAM,CAAC,QAAQ,CAAC,MAAM,6FAA6F,CACnL,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/commands/local.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CA2ClB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { openSqlite, sites } from "@agentsean/db";
|
|
3
|
+
import { listGbpLocations, listMentions, localCitationGap } from "@agentsean/surfaces";
|
|
4
|
+
import { dbPath, defaultSeanHome, ensureSeanHome } from "@agentsean/daemon";
|
|
5
|
+
import { emit, emitError } from "../output.js";
|
|
6
|
+
export async function localCommand(opts) {
|
|
7
|
+
const home = ensureSeanHome(opts.home ?? defaultSeanHome());
|
|
8
|
+
const { db, sqlite } = openSqlite(dbPath(home));
|
|
9
|
+
try {
|
|
10
|
+
const site = opts.target
|
|
11
|
+
? db.select().from(sites).where(eq(sites.origin, opts.target)).get()
|
|
12
|
+
: db.select().from(sites).all()[0];
|
|
13
|
+
if (!site) {
|
|
14
|
+
emitError(opts.json, { command: "local", error: "unknown_site" }, "No site. Run sean audit first.");
|
|
15
|
+
return 2;
|
|
16
|
+
}
|
|
17
|
+
const locations = listGbpLocations(db, site.id);
|
|
18
|
+
const gap = localCitationGap({
|
|
19
|
+
gbpListed: locations.length > 0,
|
|
20
|
+
aiMentions: listMentions(db, site.id).length,
|
|
21
|
+
localPackVisible: locations.length > 0,
|
|
22
|
+
});
|
|
23
|
+
emit(opts.json, {
|
|
24
|
+
command: "local",
|
|
25
|
+
ok: true,
|
|
26
|
+
locations: locations.map((l) => ({
|
|
27
|
+
id: l.id,
|
|
28
|
+
name: l.locationName,
|
|
29
|
+
category: l.primaryCategory,
|
|
30
|
+
approvalStatus: l.approvalStatus,
|
|
31
|
+
})),
|
|
32
|
+
gap,
|
|
33
|
+
editsPerMin: 10,
|
|
34
|
+
}, locations.length
|
|
35
|
+
? `GBP ${locations.length} location(s). Cap 10 edits/min/profile. ${gap.message}`
|
|
36
|
+
: "No GBP connected. Local mode is read-only until Google approves Basic API Access (quota starts at 0 QPM).");
|
|
37
|
+
return 0;
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
sqlite.close();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/commands/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAIlC;IACC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS,CACP,IAAI,CAAC,IAAI,EACT,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,EAC3C,gCAAgC,CACjC,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,gBAAgB,CAAC;YAC3B,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;YAC/B,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM;YAC5C,gBAAgB,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC;SACvC,CAAC,CAAC;QACH,IAAI,CACF,IAAI,CAAC,IAAI,EACT;YACE,OAAO,EAAE,OAAO;YAChB,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,YAAY;gBACpB,QAAQ,EAAE,CAAC,CAAC,eAAe;gBAC3B,cAAc,EAAE,CAAC,CAAC,cAAc;aACjC,CAAC,CAAC;YACH,GAAG;YACH,WAAW,EAAE,EAAE;SAChB,EACD,SAAS,CAAC,MAAM;YACd,CAAC,CAAC,OAAO,SAAS,CAAC,MAAM,2CAA2C,GAAG,CAAC,OAAO,EAAE;YACjF,CAAC,CAAC,2GAA2G,CAChH,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBlB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { openSqlite } from "@agentsean/db";
|
|
2
|
+
import { MCP_TOOLS, serveStdio } from "@agentsean/mcp";
|
|
3
|
+
import { dbPath, defaultSeanHome, ensureSeanHome } from "@agentsean/daemon";
|
|
4
|
+
import { emit } from "../output.js";
|
|
5
|
+
export async function mcpCommand(opts) {
|
|
6
|
+
const home = ensureSeanHome(opts.home ?? defaultSeanHome());
|
|
7
|
+
if (opts.json) {
|
|
8
|
+
emit(true, {
|
|
9
|
+
command: "mcp",
|
|
10
|
+
ok: true,
|
|
11
|
+
transport: "stdio",
|
|
12
|
+
protocol: "2024-11-05",
|
|
13
|
+
tools: MCP_TOOLS.map((t) => t.name),
|
|
14
|
+
}, "");
|
|
15
|
+
return 0;
|
|
16
|
+
}
|
|
17
|
+
const { db, sqlite } = openSqlite(dbPath(home));
|
|
18
|
+
try {
|
|
19
|
+
await serveStdio({ db });
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
finally {
|
|
23
|
+
sqlite.close();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAGhC;IACC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,CACF,IAAI,EACJ;YACE,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,IAAI;YACR,SAAS,EAAE,OAAO;YAClB,QAAQ,EAAE,YAAY;YACtB,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACpC,EACD,EAAE,CACH,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../../src/commands/measure.ts"],"names":[],"mappings":"AAMA,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CA8ClB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { openSqlite, sites } from "@agentsean/db";
|
|
3
|
+
import { runMeasureJob } from "@agentsean/measure";
|
|
4
|
+
import { dbPath, defaultSeanHome, ensureSeanHome } from "@agentsean/daemon";
|
|
5
|
+
import { emit, emitError } from "../output.js";
|
|
6
|
+
export async function measureCommand(opts) {
|
|
7
|
+
const home = ensureSeanHome(opts.home ?? defaultSeanHome());
|
|
8
|
+
const { db, sqlite } = openSqlite(dbPath(home));
|
|
9
|
+
try {
|
|
10
|
+
const site = opts.target
|
|
11
|
+
? db.select().from(sites).where(eq(sites.origin, opts.target)).get()
|
|
12
|
+
: db.select().from(sites).all()[0];
|
|
13
|
+
if (!site) {
|
|
14
|
+
emitError(opts.json, { command: "measure", error: "unknown_site" }, "No site in the database. Run `sean audit https://example.com` first.");
|
|
15
|
+
return 2;
|
|
16
|
+
}
|
|
17
|
+
const result = runMeasureJob(db, { siteId: site.id });
|
|
18
|
+
emit(opts.json, {
|
|
19
|
+
command: "measure",
|
|
20
|
+
ok: true,
|
|
21
|
+
origin: site.origin,
|
|
22
|
+
headline: result.headline,
|
|
23
|
+
power: result.power,
|
|
24
|
+
claims: result.claims.map((c) => ({
|
|
25
|
+
id: c.id,
|
|
26
|
+
evidenceTier: c.evidenceTier,
|
|
27
|
+
causationClaimed: c.causationClaimed,
|
|
28
|
+
statement: c.statement,
|
|
29
|
+
})),
|
|
30
|
+
waterfall: result.waterfall
|
|
31
|
+
? {
|
|
32
|
+
residual: result.waterfall.residual,
|
|
33
|
+
anonymizedQueryShare: result.waterfall.anonymizedQueryShare,
|
|
34
|
+
euInvisibleShare: result.waterfall.euInvisibleShare,
|
|
35
|
+
causes: result.waterfall.steps.length,
|
|
36
|
+
}
|
|
37
|
+
: null,
|
|
38
|
+
analysed: result.analysed.length,
|
|
39
|
+
}, `Evidence: ${result.headline}\n${result.power.message}`);
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
sqlite.close();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=measure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure.js","sourceRoot":"","sources":["../../src/commands/measure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAIpC;IACC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS,CACP,IAAI,CAAC,IAAI,EACT,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,EAC7C,sEAAsE,CACvE,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,CACF,IAAI,CAAC,IAAI,EACT;YACE,OAAO,EAAE,SAAS;YAClB,EAAE,EAAE,IAAI;YACR,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;gBACpC,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC;YACH,SAAS,EAAE,MAAM,CAAC,SAAS;gBACzB,CAAC,CAAC;oBACE,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ;oBACnC,oBAAoB,EAAE,MAAM,CAAC,SAAS,CAAC,oBAAoB;oBAC3D,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,gBAAgB;oBACnD,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM;iBACtC;gBACH,CAAC,CAAC,IAAI;YACR,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;SACjC,EACD,aAAa,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CACxD,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../src/commands/mentions.ts"],"names":[],"mappings":"AAMA,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CAkClB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { openSqlite, sites } from "@agentsean/db";
|
|
3
|
+
import { listMentions, listOutreach } from "@agentsean/surfaces";
|
|
4
|
+
import { dbPath, defaultSeanHome, ensureSeanHome } from "@agentsean/daemon";
|
|
5
|
+
import { emit, emitError } from "../output.js";
|
|
6
|
+
export async function mentionsCommand(opts) {
|
|
7
|
+
const home = ensureSeanHome(opts.home ?? defaultSeanHome());
|
|
8
|
+
const { db, sqlite } = openSqlite(dbPath(home));
|
|
9
|
+
try {
|
|
10
|
+
const site = opts.target
|
|
11
|
+
? db.select().from(sites).where(eq(sites.origin, opts.target)).get()
|
|
12
|
+
: db.select().from(sites).all()[0];
|
|
13
|
+
if (!site) {
|
|
14
|
+
emitError(opts.json, { command: "mentions", error: "unknown_site" }, "No site. Run sean audit first.");
|
|
15
|
+
return 2;
|
|
16
|
+
}
|
|
17
|
+
const rows = listMentions(db, site.id);
|
|
18
|
+
const drafts = listOutreach(db, site.id);
|
|
19
|
+
emit(opts.json, {
|
|
20
|
+
command: "mentions",
|
|
21
|
+
ok: true,
|
|
22
|
+
mentions: rows,
|
|
23
|
+
outreachDrafts: drafts.length,
|
|
24
|
+
sendRequiresApproval: true,
|
|
25
|
+
}, rows.length
|
|
26
|
+
? `${rows.length} brand-mention opportunities. Outreach send is T3 (per-message approval).`
|
|
27
|
+
: "No mention opportunities stored. Run sean visibility to harvest.");
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
sqlite.close();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=mentions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions.js","sourceRoot":"","sources":["../../src/commands/mentions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAIrC;IACC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM;YACtB,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS,CACP,IAAI,CAAC,IAAI,EACT,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,EAC9C,gCAAgC,CACjC,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,CACF,IAAI,CAAC,IAAI,EACT;YACE,OAAO,EAAE,UAAU;YACnB,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,IAAI;YACd,cAAc,EAAE,MAAM,CAAC,MAAM;YAC7B,oBAAoB,EAAE,IAAI;SAC3B,EACD,IAAI,CAAC,MAAM;YACT,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,2EAA2E;YAC3F,CAAC,CAAC,kEAAkE,CACvE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function onboardCommand(opts: {
|
|
2
|
+
json: boolean;
|
|
3
|
+
home?: string | undefined;
|
|
4
|
+
target?: string | undefined;
|
|
5
|
+
cms?: string | undefined;
|
|
6
|
+
telemetry?: string | undefined;
|
|
7
|
+
noStart?: boolean | undefined;
|
|
8
|
+
host?: string | undefined;
|
|
9
|
+
port?: number | undefined;
|
|
10
|
+
}): Promise<number>;
|
|
11
|
+
//# sourceMappingURL=onboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AA4BA,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,GAAG,OAAO,CAAC,MAAM,CAAC,CAmGlB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { CSRF_HEADER, DEFAULT_HOST, DEFAULT_PORT, defaultSeanHome, ensureSeanHome, loadOrCreateToken, openDaemonStore, readPid, TOKEN_HEADER, } from "@agentsean/daemon";
|
|
2
|
+
import { consentTelemetry, dntHonored, isOnboarded, markOnboarded, ONBOARD_QUESTIONS, parseCms, parseSiteUrl, previewPayload, provisionHome, readInstallMethod, SERVICE_HINT, } from "@agentsean/launch";
|
|
3
|
+
import { emit, emitError } from "../output.js";
|
|
4
|
+
import { startCommand } from "./start.js";
|
|
5
|
+
export async function onboardCommand(opts) {
|
|
6
|
+
const home = ensureSeanHome(opts.home ?? defaultSeanHome());
|
|
7
|
+
provisionHome(home, readInstallMethod(home));
|
|
8
|
+
const method = readInstallMethod(home);
|
|
9
|
+
const url = parseSiteUrl(opts.target);
|
|
10
|
+
if (opts.target && !url) {
|
|
11
|
+
emitError(opts.json, { command: "onboard", error: "invalid_url", target: opts.target }, `Invalid URL: ${opts.target}`);
|
|
12
|
+
return 2;
|
|
13
|
+
}
|
|
14
|
+
const cms = parseCms(opts.cms) ?? "other";
|
|
15
|
+
const telemetryOff = dntHonored() ||
|
|
16
|
+
opts.telemetry === "off" ||
|
|
17
|
+
opts.telemetry === "0" ||
|
|
18
|
+
opts.telemetry === "no";
|
|
19
|
+
const telemetryOn = opts.telemetry === "on" || opts.telemetry === "yes";
|
|
20
|
+
// Non-interactive default is off — never enable silently (GitHub CLI 2026).
|
|
21
|
+
const enableTelemetry = telemetryOn && !telemetryOff;
|
|
22
|
+
consentTelemetry(home, enableTelemetry, method);
|
|
23
|
+
if (!opts.noStart) {
|
|
24
|
+
const code = await startCommand({
|
|
25
|
+
json: opts.json,
|
|
26
|
+
foreground: false,
|
|
27
|
+
host: opts.host,
|
|
28
|
+
port: opts.port,
|
|
29
|
+
home,
|
|
30
|
+
quiet: true,
|
|
31
|
+
});
|
|
32
|
+
if (code !== 0)
|
|
33
|
+
return code;
|
|
34
|
+
}
|
|
35
|
+
const info = readPid(home);
|
|
36
|
+
const host = info?.host ?? opts.host ?? DEFAULT_HOST;
|
|
37
|
+
const port = info?.port ?? opts.port ?? DEFAULT_PORT;
|
|
38
|
+
const store = openDaemonStore(home);
|
|
39
|
+
const token = await loadOrCreateToken(store);
|
|
40
|
+
const dashboard = `http://${host}:${port}/#token=${token.unwrap()}`;
|
|
41
|
+
let crawl = null;
|
|
42
|
+
if (url && info) {
|
|
43
|
+
try {
|
|
44
|
+
const res = await fetch(`http://${host}:${port}/api/onboard`, {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers: {
|
|
47
|
+
Host: `${host}:${port}`,
|
|
48
|
+
[TOKEN_HEADER]: token.unwrap(),
|
|
49
|
+
[CSRF_HEADER]: "1",
|
|
50
|
+
"content-type": "application/json",
|
|
51
|
+
},
|
|
52
|
+
body: JSON.stringify({ url, maxPages: 80, render: false }),
|
|
53
|
+
});
|
|
54
|
+
crawl = (await res.json());
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
emitError(opts.json, { command: "onboard", error: "crawl_failed", detail: String(err) }, `Started Sean but the first crawl failed: ${String(err)}`);
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const already = isOnboarded(home);
|
|
62
|
+
markOnboarded(home);
|
|
63
|
+
const preview = previewPayload({ installMethod: method, cmsType: cms });
|
|
64
|
+
emit(opts.json, {
|
|
65
|
+
ok: true,
|
|
66
|
+
command: "onboard",
|
|
67
|
+
already,
|
|
68
|
+
url: url ?? null,
|
|
69
|
+
cms,
|
|
70
|
+
telemetry: enableTelemetry,
|
|
71
|
+
questions: ONBOARD_QUESTIONS.map((q) => q.id),
|
|
72
|
+
dashboard,
|
|
73
|
+
preview,
|
|
74
|
+
crawl,
|
|
75
|
+
next: ["sean service install", "sean connect google", "sean doctor"],
|
|
76
|
+
}, [
|
|
77
|
+
url
|
|
78
|
+
? `Sean is on ${url} (${cms}).`
|
|
79
|
+
: "Sean is provisioned. Pass a URL to crawl now, or open the dashboard.",
|
|
80
|
+
`Dashboard: ${dashboard}`,
|
|
81
|
+
enableTelemetry
|
|
82
|
+
? `Telemetry on. Preview: ${JSON.stringify(preview)}`
|
|
83
|
+
: "Telemetry off. sean telemetry on to share anonymous events.",
|
|
84
|
+
SERVICE_HINT,
|
|
85
|
+
"Connect Google when you want clicks: sean connect google",
|
|
86
|
+
].join("\n"));
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=onboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../../src/commands/recipes.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BlB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RECIPES, recipeById } from "@agentsean/launch";
|
|
2
|
+
import { emit, emitError } from "../output.js";
|
|
3
|
+
export async function recipesCommand(opts) {
|
|
4
|
+
if (opts.target) {
|
|
5
|
+
const recipe = recipeById(opts.target);
|
|
6
|
+
if (!recipe) {
|
|
7
|
+
emitError(opts.json, { command: "recipes", error: "unknown_recipe", id: opts.target }, `Unknown recipe ${opts.target}. Try sean recipes.`);
|
|
8
|
+
return 2;
|
|
9
|
+
}
|
|
10
|
+
emit(opts.json, { ok: true, command: "recipes", recipe }, `${recipe.title}\n${recipe.summary}\n\n${recipe.steps.map((s, i) => `${i + 1}. ${s}`).join("\n")}`);
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
emit(opts.json, {
|
|
14
|
+
ok: true,
|
|
15
|
+
command: "recipes",
|
|
16
|
+
recipes: RECIPES.map((r) => ({ id: r.id, title: r.title, cms: r.cms })),
|
|
17
|
+
}, RECIPES.map((r) => `${r.id}\n ${r.title}`).join("\n"));
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=recipes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../../src/commands/recipes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAGpC;IACC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CACP,IAAI,CAAC,IAAI,EACT,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAChE,kBAAkB,IAAI,CAAC,MAAM,qBAAqB,CACnD,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CACF,IAAI,CAAC,IAAI,EACT,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EACxC,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnG,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CACF,IAAI,CAAC,IAAI,EACT;QACE,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;KACxE,EACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvD,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revert.d.ts","sourceRoot":"","sources":["../../src/commands/revert.ts"],"names":[],"mappings":"AAaA,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,GAAG,OAAO,CAAC,MAAM,CAAC,CAmDlB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { openSqlite } from "@agentsean/db";
|
|
2
|
+
import { loadChange, loadGitConnection, markReverted, revertChange, } from "@agentsean/actions";
|
|
3
|
+
import { createGitAdapter } from "@agentsean/adapter-git";
|
|
4
|
+
import { actions } from "@agentsean/db";
|
|
5
|
+
import { eq } from "drizzle-orm";
|
|
6
|
+
import { defaultSeanHome, dbPath, ensureSeanHome } from "@agentsean/daemon";
|
|
7
|
+
import { emit, emitError } from "../output.js";
|
|
8
|
+
export async function revertCommand(opts) {
|
|
9
|
+
if (!opts.changeId) {
|
|
10
|
+
emitError(opts.json, { command: "revert", error: "missing_change_id" }, "Missing change id. Try `sean revert <changeId> --json`.");
|
|
11
|
+
return 2;
|
|
12
|
+
}
|
|
13
|
+
const home = ensureSeanHome(opts.home ?? defaultSeanHome());
|
|
14
|
+
const { db, sqlite } = openSqlite(dbPath(home));
|
|
15
|
+
try {
|
|
16
|
+
const change = loadChange(db, opts.changeId);
|
|
17
|
+
if (!change) {
|
|
18
|
+
emitError(opts.json, { command: "revert", error: "unknown_change", id: opts.changeId }, `Unknown change ${opts.changeId}`);
|
|
19
|
+
return 2;
|
|
20
|
+
}
|
|
21
|
+
const cfg = loadGitConnection(db, change.siteId);
|
|
22
|
+
const repoPath = typeof cfg?.["repoPath"] === "string" ? cfg["repoPath"] : null;
|
|
23
|
+
if (!repoPath) {
|
|
24
|
+
emitError(opts.json, { command: "revert", error: "missing_repo" }, "Git adapter is not connected for this site.");
|
|
25
|
+
return 2;
|
|
26
|
+
}
|
|
27
|
+
const adapter = createGitAdapter({ repoPath });
|
|
28
|
+
const result = await revertChange({ db, change, adapter });
|
|
29
|
+
if (!result.ok) {
|
|
30
|
+
emitError(opts.json, { command: "revert", error: result.error }, result.error);
|
|
31
|
+
return 1;
|
|
32
|
+
}
|
|
33
|
+
markReverted(db, change.id);
|
|
34
|
+
db.update(actions)
|
|
35
|
+
.set({ state: "reverted" })
|
|
36
|
+
.where(eq(actions.id, change.actionId))
|
|
37
|
+
.run();
|
|
38
|
+
emit(opts.json, { ok: true, command: "revert", changeId: change.id }, `Reverted ${change.id}. Shadow-ledger snapshot restored.`);
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
sqlite.close();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=revert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revert.js","sourceRoot":"","sources":["../../src/commands/revert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAInC;IACC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,SAAS,CACP,IAAI,CAAC,IAAI,EACT,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE,EACjD,yDAAyD,CAC1D,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5D,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,SAAS,CACP,IAAI,CAAC,IAAI,EACT,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,EACjE,kBAAkB,IAAI,CAAC,QAAQ,EAAE,CAClC,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS,CACP,IAAI,CAAC,IAAI,EACT,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,EAC5C,6CAA6C,CAC9C,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/E,OAAO,CAAC,CAAC;QACX,CAAC;QACD,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;aAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;aACtC,GAAG,EAAE,CAAC;QACT,IAAI,CACF,IAAI,CAAC,IAAI,EACT,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,EACpD,YAAY,MAAM,CAAC,EAAE,oCAAoC,CAC1D,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function serviceCommand(opts: {
|
|
2
|
+
json: boolean;
|
|
3
|
+
home?: string | undefined;
|
|
4
|
+
target?: string | undefined;
|
|
5
|
+
yes?: boolean | undefined;
|
|
6
|
+
host?: string | undefined;
|
|
7
|
+
port?: number | undefined;
|
|
8
|
+
}): Promise<number>;
|
|
9
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"AAgBA,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,GAAG,OAAO,CAAC,MAAM,CAAC,CAiFlB"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { defaultSeanHome, ensureSeanHome, DEFAULT_HOST, DEFAULT_PORT, } from "@agentsean/daemon";
|
|
4
|
+
import { planService, writeService, removeServiceFile } from "@agentsean/launch";
|
|
5
|
+
import { emit, emitError } from "../output.js";
|
|
6
|
+
async function daemonEntry() {
|
|
7
|
+
const resolved = import.meta.resolve("@agentsean/daemon/main");
|
|
8
|
+
return fileURLToPath(resolved);
|
|
9
|
+
}
|
|
10
|
+
export async function serviceCommand(opts) {
|
|
11
|
+
const home = ensureSeanHome(opts.home ?? defaultSeanHome());
|
|
12
|
+
const action = (opts.target ?? "status").toLowerCase();
|
|
13
|
+
const plan = planService({
|
|
14
|
+
home,
|
|
15
|
+
nodePath: process.execPath,
|
|
16
|
+
daemonEntry: await daemonEntry(),
|
|
17
|
+
host: opts.host ?? DEFAULT_HOST,
|
|
18
|
+
port: opts.port ?? DEFAULT_PORT,
|
|
19
|
+
});
|
|
20
|
+
if (action === "status") {
|
|
21
|
+
emit(opts.json, { ok: true, command: "service", action: "status", plan }, `Service plan (${plan.kind}):\n${plan.summary}\nNot installed until you run sean service install.`);
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
if (action === "install") {
|
|
25
|
+
if (!opts.yes) {
|
|
26
|
+
if (!process.stdin.isTTY) {
|
|
27
|
+
emitError(opts.json, { command: "service", error: "confirm_required", summary: plan.summary }, `${plan.summary}\n\nPass --yes to write the unit. Service install is never a side effect of npm or onboard.`);
|
|
28
|
+
return 2;
|
|
29
|
+
}
|
|
30
|
+
const { createInterface } = await import("node:readline/promises");
|
|
31
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
32
|
+
const answer = await rl.question(`This will write:\n${plan.summary}\n\nType yes to continue: `);
|
|
33
|
+
rl.close();
|
|
34
|
+
if (answer.trim().toLowerCase() !== "yes") {
|
|
35
|
+
emit(opts.json, { ok: true, command: "service", aborted: true }, "Aborted.");
|
|
36
|
+
return 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
writeService(plan);
|
|
40
|
+
const ran = spawnSync(plan.enable[0] ?? "true", plan.enable.slice(1), {
|
|
41
|
+
encoding: "utf8",
|
|
42
|
+
});
|
|
43
|
+
const enabled = ran.status === 0;
|
|
44
|
+
emit(opts.json, {
|
|
45
|
+
ok: true,
|
|
46
|
+
command: "service",
|
|
47
|
+
action: "install",
|
|
48
|
+
path: plan.path,
|
|
49
|
+
enable: plan.enable,
|
|
50
|
+
enabled,
|
|
51
|
+
stderr: ran.stderr,
|
|
52
|
+
}, enabled
|
|
53
|
+
? `Installed ${plan.kind} at ${plan.path}.`
|
|
54
|
+
: `Wrote ${plan.path}. Enable it with: ${plan.enable.join(" ")}\n${ran.stderr || ran.stdout || ""}`.trim());
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
if (action === "uninstall") {
|
|
58
|
+
spawnSync(plan.disable[0] ?? "true", plan.disable.slice(1), { encoding: "utf8" });
|
|
59
|
+
removeServiceFile(plan);
|
|
60
|
+
emit(opts.json, { ok: true, command: "service", action: "uninstall", path: plan.path }, `Removed ${plan.path}.`);
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
emitError(opts.json, { command: "service", error: "unknown_action" }, "Usage: sean service [status|install|uninstall]");
|
|
64
|
+
return 2;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["../../src/commands/signup.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CAoClB"}
|