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.
Files changed (114) hide show
  1. package/LICENSE +661 -0
  2. package/dist/args.d.ts +33 -0
  3. package/dist/args.d.ts.map +1 -0
  4. package/dist/args.js +314 -0
  5. package/dist/args.js.map +1 -0
  6. package/dist/bin.d.ts +3 -0
  7. package/dist/bin.d.ts.map +1 -0
  8. package/dist/bin.js +5 -0
  9. package/dist/bin.js.map +1 -0
  10. package/dist/cli.d.ts +2 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +192 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/apply.d.ts +8 -0
  15. package/dist/commands/apply.d.ts.map +1 -0
  16. package/dist/commands/apply.js +107 -0
  17. package/dist/commands/apply.js.map +1 -0
  18. package/dist/commands/audit.d.ts +9 -0
  19. package/dist/commands/audit.d.ts.map +1 -0
  20. package/dist/commands/audit.js +92 -0
  21. package/dist/commands/audit.js.map +1 -0
  22. package/dist/commands/connect.d.ts +10 -0
  23. package/dist/commands/connect.d.ts.map +1 -0
  24. package/dist/commands/connect.js +181 -0
  25. package/dist/commands/connect.js.map +1 -0
  26. package/dist/commands/content.d.ts +8 -0
  27. package/dist/commands/content.d.ts.map +1 -0
  28. package/dist/commands/content.js +50 -0
  29. package/dist/commands/content.js.map +1 -0
  30. package/dist/commands/doctor.d.ts +6 -0
  31. package/dist/commands/doctor.d.ts.map +1 -0
  32. package/dist/commands/doctor.js +61 -0
  33. package/dist/commands/doctor.js.map +1 -0
  34. package/dist/commands/freeze.d.ts +6 -0
  35. package/dist/commands/freeze.d.ts.map +1 -0
  36. package/dist/commands/freeze.js +12 -0
  37. package/dist/commands/freeze.js.map +1 -0
  38. package/dist/commands/keywords.d.ts +6 -0
  39. package/dist/commands/keywords.d.ts.map +1 -0
  40. package/dist/commands/keywords.js +68 -0
  41. package/dist/commands/keywords.js.map +1 -0
  42. package/dist/commands/local.d.ts +6 -0
  43. package/dist/commands/local.d.ts.map +1 -0
  44. package/dist/commands/local.js +43 -0
  45. package/dist/commands/local.js.map +1 -0
  46. package/dist/commands/mcp.d.ts +5 -0
  47. package/dist/commands/mcp.d.ts.map +1 -0
  48. package/dist/commands/mcp.js +26 -0
  49. package/dist/commands/mcp.js.map +1 -0
  50. package/dist/commands/measure.d.ts +6 -0
  51. package/dist/commands/measure.d.ts.map +1 -0
  52. package/dist/commands/measure.js +46 -0
  53. package/dist/commands/measure.js.map +1 -0
  54. package/dist/commands/mentions.d.ts +6 -0
  55. package/dist/commands/mentions.d.ts.map +1 -0
  56. package/dist/commands/mentions.js +34 -0
  57. package/dist/commands/mentions.js.map +1 -0
  58. package/dist/commands/onboard.d.ts +11 -0
  59. package/dist/commands/onboard.d.ts.map +1 -0
  60. package/dist/commands/onboard.js +89 -0
  61. package/dist/commands/onboard.js.map +1 -0
  62. package/dist/commands/recipes.d.ts +5 -0
  63. package/dist/commands/recipes.d.ts.map +1 -0
  64. package/dist/commands/recipes.js +20 -0
  65. package/dist/commands/recipes.js.map +1 -0
  66. package/dist/commands/revert.d.ts +6 -0
  67. package/dist/commands/revert.d.ts.map +1 -0
  68. package/dist/commands/revert.js +45 -0
  69. package/dist/commands/revert.js.map +1 -0
  70. package/dist/commands/service.d.ts +9 -0
  71. package/dist/commands/service.d.ts.map +1 -0
  72. package/dist/commands/service.js +66 -0
  73. package/dist/commands/service.js.map +1 -0
  74. package/dist/commands/signup.d.ts +6 -0
  75. package/dist/commands/signup.d.ts.map +1 -0
  76. package/dist/commands/signup.js +31 -0
  77. package/dist/commands/signup.js.map +1 -0
  78. package/dist/commands/start.d.ts +9 -0
  79. package/dist/commands/start.d.ts.map +1 -0
  80. package/dist/commands/start.js +86 -0
  81. package/dist/commands/start.js.map +1 -0
  82. package/dist/commands/status.d.ts +5 -0
  83. package/dist/commands/status.d.ts.map +1 -0
  84. package/dist/commands/status.js +35 -0
  85. package/dist/commands/status.js.map +1 -0
  86. package/dist/commands/stop.d.ts +5 -0
  87. package/dist/commands/stop.d.ts.map +1 -0
  88. package/dist/commands/stop.js +38 -0
  89. package/dist/commands/stop.js.map +1 -0
  90. package/dist/commands/telemetry.d.ts +6 -0
  91. package/dist/commands/telemetry.d.ts.map +1 -0
  92. package/dist/commands/telemetry.js +43 -0
  93. package/dist/commands/telemetry.js.map +1 -0
  94. package/dist/commands/tenant.d.ts +6 -0
  95. package/dist/commands/tenant.d.ts.map +1 -0
  96. package/dist/commands/tenant.js +25 -0
  97. package/dist/commands/tenant.js.map +1 -0
  98. package/dist/commands/uninstall.d.ts +6 -0
  99. package/dist/commands/uninstall.d.ts.map +1 -0
  100. package/dist/commands/uninstall.js +20 -0
  101. package/dist/commands/uninstall.js.map +1 -0
  102. package/dist/commands/update.d.ts +5 -0
  103. package/dist/commands/update.d.ts.map +1 -0
  104. package/dist/commands/update.js +19 -0
  105. package/dist/commands/update.js.map +1 -0
  106. package/dist/commands/visibility.d.ts +6 -0
  107. package/dist/commands/visibility.d.ts.map +1 -0
  108. package/dist/commands/visibility.js +40 -0
  109. package/dist/commands/visibility.js.map +1 -0
  110. package/dist/output.d.ts +3 -0
  111. package/dist/output.d.ts.map +1 -0
  112. package/dist/output.js +15 -0
  113. package/dist/output.js.map +1 -0
  114. 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":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function localCommand(opts: {
2
+ json: boolean;
3
+ home?: string | undefined;
4
+ target?: string | undefined;
5
+ }): Promise<number>;
6
+ //# sourceMappingURL=local.d.ts.map
@@ -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,5 @@
1
+ export declare function mcpCommand(opts: {
2
+ json: boolean;
3
+ home?: string | undefined;
4
+ }): Promise<number>;
5
+ //# sourceMappingURL=mcp.d.ts.map
@@ -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,6 @@
1
+ export declare function measureCommand(opts: {
2
+ json: boolean;
3
+ home?: string | undefined;
4
+ target?: string | undefined;
5
+ }): Promise<number>;
6
+ //# sourceMappingURL=measure.d.ts.map
@@ -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,6 @@
1
+ export declare function mentionsCommand(opts: {
2
+ json: boolean;
3
+ home?: string | undefined;
4
+ target?: string | undefined;
5
+ }): Promise<number>;
6
+ //# sourceMappingURL=mentions.d.ts.map
@@ -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,5 @@
1
+ export declare function recipesCommand(opts: {
2
+ json: boolean;
3
+ target?: string | undefined;
4
+ }): Promise<number>;
5
+ //# sourceMappingURL=recipes.d.ts.map
@@ -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,6 @@
1
+ export declare function revertCommand(opts: {
2
+ json: boolean;
3
+ home?: string | undefined;
4
+ changeId?: string | undefined;
5
+ }): Promise<number>;
6
+ //# sourceMappingURL=revert.d.ts.map
@@ -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":"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"}
@@ -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,6 @@
1
+ export declare function signupCommand(opts: {
2
+ json: boolean;
3
+ home?: string | undefined;
4
+ target?: string | undefined;
5
+ }): Promise<number>;
6
+ //# sourceMappingURL=signup.d.ts.map
@@ -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"}