@datasynx/agentic-crm 0.1.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 (251) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +767 -0
  3. package/dist/agent-config-zPvcqu07.js +14 -0
  4. package/dist/agent-config-zPvcqu07.js.map +1 -0
  5. package/dist/approvals-DpjxGHFp.js +67 -0
  6. package/dist/approvals-DpjxGHFp.js.map +1 -0
  7. package/dist/ask-CID3jnuL.js +52 -0
  8. package/dist/ask-CID3jnuL.js.map +1 -0
  9. package/dist/audit-log-DNMY9mUZ.js +49 -0
  10. package/dist/audit-log-DNMY9mUZ.js.map +1 -0
  11. package/dist/auth-CyFuu9X_.js +2 -0
  12. package/dist/auth-DFWwWcYD.js +93 -0
  13. package/dist/auth-DFWwWcYD.js.map +1 -0
  14. package/dist/autofill-Di_-SP7t.js +51 -0
  15. package/dist/autofill-Di_-SP7t.js.map +1 -0
  16. package/dist/backup-CeMk9z86.js +417 -0
  17. package/dist/backup-CeMk9z86.js.map +1 -0
  18. package/dist/backup-f_hC7rBV.js +2 -0
  19. package/dist/calendly-Bft_wwji.js +52 -0
  20. package/dist/calendly-Bft_wwji.js.map +1 -0
  21. package/dist/calendly-D3coO92o.cjs +53 -0
  22. package/dist/calendly-D3coO92o.cjs.map +1 -0
  23. package/dist/chunk-DakpK96I.cjs +43 -0
  24. package/dist/churn-C28IgnAj.js +54 -0
  25. package/dist/churn-C28IgnAj.js.map +1 -0
  26. package/dist/cli.js +4396 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/colors-BG07TZQz.js +11 -0
  29. package/dist/colors-BG07TZQz.js.map +1 -0
  30. package/dist/compliance-B1kk5-YS.js +115 -0
  31. package/dist/compliance-B1kk5-YS.js.map +1 -0
  32. package/dist/compliance-B91zNvCR.cjs +156 -0
  33. package/dist/compliance-B91zNvCR.cjs.map +1 -0
  34. package/dist/compliance-CKSBoQUe.js +118 -0
  35. package/dist/compliance-CKSBoQUe.js.map +1 -0
  36. package/dist/compliance-CujOqAKk.js +2 -0
  37. package/dist/context-builder-BzWAp3Zs.js +96 -0
  38. package/dist/context-builder-BzWAp3Zs.js.map +1 -0
  39. package/dist/context-builder-DlrRcqmJ.js +2 -0
  40. package/dist/conversation-intel-mm7Lhemh.js +72 -0
  41. package/dist/conversation-intel-mm7Lhemh.js.map +1 -0
  42. package/dist/custom-fields-CzNeD3_v.js +2 -0
  43. package/dist/custom-fields-Pl2t9xzp.js +73 -0
  44. package/dist/custom-fields-Pl2t9xzp.js.map +1 -0
  45. package/dist/custom-objects-BHgn1GEX.js +78 -0
  46. package/dist/custom-objects-BHgn1GEX.js.map +1 -0
  47. package/dist/custom-objects-CIFrmQ2V.js +2 -0
  48. package/dist/customer-dir-DIylZ8Q6.js +75 -0
  49. package/dist/customer-dir-DIylZ8Q6.js.map +1 -0
  50. package/dist/daemon/worker.js +207 -0
  51. package/dist/daemon/worker.js.map +1 -0
  52. package/dist/enrichment-3XvgGDfB.js +103 -0
  53. package/dist/enrichment-3XvgGDfB.js.map +1 -0
  54. package/dist/file-lock-B_zi7NQl.js +22 -0
  55. package/dist/file-lock-B_zi7NQl.js.map +1 -0
  56. package/dist/gmail-auth-BP6cJwfw.js +40 -0
  57. package/dist/gmail-auth-BP6cJwfw.js.map +1 -0
  58. package/dist/gmail-auth-DxakCtGm.cjs +44 -0
  59. package/dist/gmail-auth-DxakCtGm.cjs.map +1 -0
  60. package/dist/gmail-auth-OComS92L.js +40 -0
  61. package/dist/gmail-auth-OComS92L.js.map +1 -0
  62. package/dist/gmail-push-watch-DELQFMPk.js +20 -0
  63. package/dist/gmail-push-watch-DELQFMPk.js.map +1 -0
  64. package/dist/gmail-sender-StTpJ9Ub.js +32 -0
  65. package/dist/gmail-sender-StTpJ9Ub.js.map +1 -0
  66. package/dist/gmail-sync-DIaxInDT.js +204 -0
  67. package/dist/gmail-sync-DIaxInDT.js.map +1 -0
  68. package/dist/gmail-sync-hHm9gaWd.cjs +218 -0
  69. package/dist/gmail-sync-hHm9gaWd.cjs.map +1 -0
  70. package/dist/gmail-sync-rQaVqKWd.js +214 -0
  71. package/dist/gmail-sync-rQaVqKWd.js.map +1 -0
  72. package/dist/gmail-webhook-handler-DS7OlRPX.js +3 -0
  73. package/dist/gmail-webhook-handler-e5Od25FX.js +97 -0
  74. package/dist/gmail-webhook-handler-e5Od25FX.js.map +1 -0
  75. package/dist/goal-engine-CUZSpERI.js +2 -0
  76. package/dist/goal-engine-KpBftn4V.js +295 -0
  77. package/dist/goal-engine-KpBftn4V.js.map +1 -0
  78. package/dist/google-drive-sync-DEPcqFca.js +105 -0
  79. package/dist/google-drive-sync-DEPcqFca.js.map +1 -0
  80. package/dist/hybrid-search-BmHttLrR.js +40 -0
  81. package/dist/hybrid-search-BmHttLrR.js.map +1 -0
  82. package/dist/hygiene-DZqfYpFf.js +38 -0
  83. package/dist/hygiene-DZqfYpFf.js.map +1 -0
  84. package/dist/identity-CI6olMNm.js +41 -0
  85. package/dist/identity-CI6olMNm.js.map +1 -0
  86. package/dist/identity-gyfWdrcX.js +2 -0
  87. package/dist/import-hubspot-BaK71U_K.js +588 -0
  88. package/dist/import-hubspot-BaK71U_K.js.map +1 -0
  89. package/dist/index-V8BFaH-b.d.ts +539 -0
  90. package/dist/index-V8BFaH-b.d.ts.map +1 -0
  91. package/dist/index-YqwMd6aQ.d.cts +538 -0
  92. package/dist/index-YqwMd6aQ.d.cts.map +1 -0
  93. package/dist/index.cjs +185 -0
  94. package/dist/index.cjs.map +1 -0
  95. package/dist/index.d.cts +538 -0
  96. package/dist/index.d.cts.map +1 -0
  97. package/dist/index.d.ts +539 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +165 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/interactions-writer-CrPStUll.cjs +77 -0
  102. package/dist/interactions-writer-CrPStUll.cjs.map +1 -0
  103. package/dist/interactions-writer-DO3KcSR3.js +52 -0
  104. package/dist/interactions-writer-DO3KcSR3.js.map +1 -0
  105. package/dist/interactions-writer-SLHnoEeE.js +46 -0
  106. package/dist/interactions-writer-SLHnoEeE.js.map +1 -0
  107. package/dist/interactions-writer-dSPy1XfO.js +2 -0
  108. package/dist/knowledge-base-D0Fh40kc.js +1013 -0
  109. package/dist/knowledge-base-D0Fh40kc.js.map +1 -0
  110. package/dist/lancedb-CCBbpulq.js +2 -0
  111. package/dist/lancedb-rlvWoPwl.js +98 -0
  112. package/dist/lancedb-rlvWoPwl.js.map +1 -0
  113. package/dist/lead-model-BCFzyktm.js +109 -0
  114. package/dist/lead-model-BCFzyktm.js.map +1 -0
  115. package/dist/llm-DEjWcqmW.js +2 -0
  116. package/dist/llm-DvzZqva0.js +372 -0
  117. package/dist/llm-DvzZqva0.js.map +1 -0
  118. package/dist/llm-Z8RIYkpF.js +174 -0
  119. package/dist/llm-Z8RIYkpF.js.map +1 -0
  120. package/dist/llm-iijeXmgq.cjs +198 -0
  121. package/dist/llm-iijeXmgq.cjs.map +1 -0
  122. package/dist/mcp-CdTJWTJf.d.cts +12 -0
  123. package/dist/mcp-CdTJWTJf.d.cts.map +1 -0
  124. package/dist/mcp-CdTJWTJf.d.ts +12 -0
  125. package/dist/mcp-CdTJWTJf.d.ts.map +1 -0
  126. package/dist/mcp.cjs +7464 -0
  127. package/dist/mcp.cjs.map +1 -0
  128. package/dist/mcp.d.cts +12 -0
  129. package/dist/mcp.d.cts.map +1 -0
  130. package/dist/mcp.d.ts +12 -0
  131. package/dist/mcp.d.ts.map +1 -0
  132. package/dist/mcp.js +7448 -0
  133. package/dist/mcp.js.map +1 -0
  134. package/dist/memory-Bb6ky3kb.js +58 -0
  135. package/dist/memory-Bb6ky3kb.js.map +1 -0
  136. package/dist/memory-Cy6-Tbyl.js +2 -0
  137. package/dist/metrics-DH8wHvya.js +26 -0
  138. package/dist/metrics-DH8wHvya.js.map +1 -0
  139. package/dist/microsoft-auth-B8_S45gh.js +17 -0
  140. package/dist/microsoft-auth-B8_S45gh.js.map +1 -0
  141. package/dist/microsoft-calendar-B6MMtUQK.js +67 -0
  142. package/dist/microsoft-calendar-B6MMtUQK.js.map +1 -0
  143. package/dist/microsoft-sync-CpZVoSuq.js +68 -0
  144. package/dist/microsoft-sync-CpZVoSuq.js.map +1 -0
  145. package/dist/nba-3wanmJ0U.js +48 -0
  146. package/dist/nba-3wanmJ0U.js.map +1 -0
  147. package/dist/notification-dispatcher-0vYNngWe.js +97 -0
  148. package/dist/notification-dispatcher-0vYNngWe.js.map +1 -0
  149. package/dist/opportunity-score-BTMOQSTV.js +47 -0
  150. package/dist/opportunity-score-BTMOQSTV.js.map +1 -0
  151. package/dist/pipedrive-client-CdGKpH9b.js +17 -0
  152. package/dist/pipedrive-client-CdGKpH9b.js.map +1 -0
  153. package/dist/pipeline-writer-BqBrYrQc.js +2 -0
  154. package/dist/pipeline-writer-BvVquKIe.js +96 -0
  155. package/dist/pipeline-writer-BvVquKIe.js.map +1 -0
  156. package/dist/pipeline-writer-N2omexxp.cjs +121 -0
  157. package/dist/pipeline-writer-N2omexxp.cjs.map +1 -0
  158. package/dist/pipeline-writer-eufx_0o1.js +102 -0
  159. package/dist/pipeline-writer-eufx_0o1.js.map +1 -0
  160. package/dist/proactive-agent-BgQXw3ac.js +96 -0
  161. package/dist/proactive-agent-BgQXw3ac.js.map +1 -0
  162. package/dist/proactive-worker-BrLHNhjH.js +229 -0
  163. package/dist/proactive-worker-BrLHNhjH.js.map +1 -0
  164. package/dist/push-manager-CdqIIkuh.js +108 -0
  165. package/dist/push-manager-CdqIIkuh.js.map +1 -0
  166. package/dist/push-manager-CowY-0IK.js +2 -0
  167. package/dist/quote-generator-BfwENXzg.js +133 -0
  168. package/dist/quote-generator-BfwENXzg.js.map +1 -0
  169. package/dist/quote-generator-OhSFsi3x.js +2 -0
  170. package/dist/rbac-C7c8tcES.js +2 -0
  171. package/dist/rbac-CTIktZaC.js +91 -0
  172. package/dist/rbac-CTIktZaC.js.map +1 -0
  173. package/dist/relationship-health-odxEoQdJ.js +454 -0
  174. package/dist/relationship-health-odxEoQdJ.js.map +1 -0
  175. package/dist/revenue-simulation-BJdRTEHc.js +2 -0
  176. package/dist/revenue-simulation-Bqf2DLVB.js +251 -0
  177. package/dist/revenue-simulation-Bqf2DLVB.js.map +1 -0
  178. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  179. package/dist/salesforce-client-rhZFa_p5.js +51 -0
  180. package/dist/salesforce-client-rhZFa_p5.js.map +1 -0
  181. package/dist/segments-BqcD5HIl.js +61 -0
  182. package/dist/segments-BqcD5HIl.js.map +1 -0
  183. package/dist/sequence-engine-CCTHEBgi.js +2 -0
  184. package/dist/sequence-engine-J1lTW_in.js +91 -0
  185. package/dist/sequence-engine-J1lTW_in.js.map +1 -0
  186. package/dist/sequence-store-DaaWr0Os.js +221 -0
  187. package/dist/sequence-store-DaaWr0Os.js.map +1 -0
  188. package/dist/server-Dyva03K8.js +4287 -0
  189. package/dist/server-Dyva03K8.js.map +1 -0
  190. package/dist/session-B9AilxOE.js +81 -0
  191. package/dist/session-B9AilxOE.js.map +1 -0
  192. package/dist/session-D0qFkBla.cjs +82 -0
  193. package/dist/session-D0qFkBla.cjs.map +1 -0
  194. package/dist/session-D9ub6Wl1.js +79 -0
  195. package/dist/session-D9ub6Wl1.js.map +1 -0
  196. package/dist/session-mWHA71Lw.js +2 -0
  197. package/dist/session-store-B0QZE8Bx.cjs +697 -0
  198. package/dist/session-store-B0QZE8Bx.cjs.map +1 -0
  199. package/dist/session-store-C8tEvMPw.js +543 -0
  200. package/dist/session-store-C8tEvMPw.js.map +1 -0
  201. package/dist/session-store-CEa39Dxs.js +15 -0
  202. package/dist/session-store-CEa39Dxs.js.map +1 -0
  203. package/dist/sla-engine-5IhTsBUR.js +2 -0
  204. package/dist/sla-engine-BqX-7u-7.js +53 -0
  205. package/dist/sla-engine-BqX-7u-7.js.map +1 -0
  206. package/dist/sop-DkhVChGy.js +2 -0
  207. package/dist/sop-Vp0UPWFW.js +70 -0
  208. package/dist/sop-Vp0UPWFW.js.map +1 -0
  209. package/dist/survey-engine-C06hcQt3.js +2 -0
  210. package/dist/survey-engine-DBjCYqCv.js +147 -0
  211. package/dist/survey-engine-DBjCYqCv.js.map +1 -0
  212. package/dist/sync-state-ChaLbamC.js +33 -0
  213. package/dist/sync-state-ChaLbamC.js.map +1 -0
  214. package/dist/sync-state-CwLSt_1m.js +2 -0
  215. package/dist/ticket-writer-CjqKeIRD.js +2 -0
  216. package/dist/ticket-writer-j2oX_Wal.js +134 -0
  217. package/dist/ticket-writer-j2oX_Wal.js.map +1 -0
  218. package/dist/tone-Bdm5uaht.js +48 -0
  219. package/dist/tone-Bdm5uaht.js.map +1 -0
  220. package/dist/tone-DRKlZgPr.cjs +43 -0
  221. package/dist/tone-DRKlZgPr.cjs.map +1 -0
  222. package/dist/tone-vNb2DAAD.js +39 -0
  223. package/dist/tone-vNb2DAAD.js.map +1 -0
  224. package/dist/transcript-watcher-CL2QUygI.js +132 -0
  225. package/dist/transcript-watcher-CL2QUygI.js.map +1 -0
  226. package/dist/unmatched-transcripts-BsH5bhkU.js +26 -0
  227. package/dist/unmatched-transcripts-BsH5bhkU.js.map +1 -0
  228. package/dist/unmatched-transcripts-D0PrJ9iz.js +2 -0
  229. package/dist/update-deal-BNwPGaTV.js +2 -0
  230. package/dist/update-deal-DKC79skb.js +91 -0
  231. package/dist/update-deal-DKC79skb.js.map +1 -0
  232. package/dist/usage-CClTf5e6.cjs +57 -0
  233. package/dist/usage-CClTf5e6.cjs.map +1 -0
  234. package/dist/usage-D0-TYJkw.js +93 -0
  235. package/dist/usage-D0-TYJkw.js.map +1 -0
  236. package/dist/usage-D0u9a-lV.js +54 -0
  237. package/dist/usage-D0u9a-lV.js.map +1 -0
  238. package/dist/vault-C1D3zScD.js +2 -0
  239. package/dist/vault-DXCg29W-.js +86 -0
  240. package/dist/vault-DXCg29W-.js.map +1 -0
  241. package/dist/webhooks-7EpA05Qr.js +138 -0
  242. package/dist/webhooks-7EpA05Qr.js.map +1 -0
  243. package/dist/webhooks-BO2UAnmn.js +94 -0
  244. package/dist/webhooks-BO2UAnmn.js.map +1 -0
  245. package/dist/webhooks-Xn6zO6kd.cjs +97 -0
  246. package/dist/webhooks-Xn6zO6kd.cjs.map +1 -0
  247. package/dist/write-queue-BDolUxfs.cjs +26 -0
  248. package/dist/write-queue-BDolUxfs.cjs.map +1 -0
  249. package/dist/write-queue-IbsAjUnh.js +21 -0
  250. package/dist/write-queue-IbsAjUnh.js.map +1 -0
  251. package/package.json +142 -0
@@ -0,0 +1,81 @@
1
+ import { i as readMainFacts, t as customerExists } from "./customer-dir-DIylZ8Q6.js";
2
+ import { i as success, n as error, r as info } from "./colors-BG07TZQz.js";
3
+ import { n as getSession, r as setSession, t as clearSession } from "./session-store-CEa39Dxs.js";
4
+ import { Command } from "commander";
5
+ import path from "path";
6
+ import fs from "fs";
7
+ //#region src/commands/session.ts
8
+ function sessionsDir(dataDir) {
9
+ return path.join(dataDir, ".agentic", "sessions");
10
+ }
11
+ function persistSession(dataDir, session) {
12
+ const dir = sessionsDir(dataDir);
13
+ fs.mkdirSync(dir, { recursive: true });
14
+ const key = (session.owner ?? `pid-${process.pid}`).replace(/[^a-zA-Z0-9_-]/g, "_");
15
+ fs.writeFileSync(path.join(dir, `${key}.json`), JSON.stringify({
16
+ ...session,
17
+ pid: process.pid
18
+ }));
19
+ }
20
+ function clearPersistedSession(dataDir, owner) {
21
+ const dir = sessionsDir(dataDir);
22
+ if (!fs.existsSync(dir)) return;
23
+ if (owner !== void 0) {
24
+ const key = owner.replace(/[^a-zA-Z0-9_-]/g, "_");
25
+ const file = path.join(dir, `${key}.json`);
26
+ if (fs.existsSync(file)) fs.unlinkSync(file);
27
+ return;
28
+ }
29
+ try {
30
+ for (const f of fs.readdirSync(dir).filter((n) => n.endsWith(".json"))) try {
31
+ fs.unlinkSync(path.join(dir, f));
32
+ } catch {}
33
+ } catch {}
34
+ }
35
+ function readAllSessions(dataDir) {
36
+ const dir = sessionsDir(dataDir);
37
+ if (!fs.existsSync(dir)) return [];
38
+ return fs.readdirSync(dir).filter((f) => f.endsWith(".json")).map((f) => {
39
+ try {
40
+ return JSON.parse(fs.readFileSync(path.join(dir, f), "utf-8"));
41
+ } catch {
42
+ return null;
43
+ }
44
+ }).filter((s) => s !== null);
45
+ }
46
+ const sessionCommand = new Command("session");
47
+ sessionCommand.command("open <slug>").option("--owner <owner>", "Set the owner of this session").action(async (slug, opts) => {
48
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
49
+ if (!customerExists(dataDir, slug)) {
50
+ console.error(error(`✗ Customer not found: ${slug}`));
51
+ process.exit(1);
52
+ }
53
+ const facts = await readMainFacts(dataDir, slug);
54
+ const owner = opts.owner ?? process.env["DXCRM_ACTOR"];
55
+ const session = {
56
+ customerSlug: slug,
57
+ customerName: facts.name,
58
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
59
+ ...owner !== void 0 ? { owner } : {}
60
+ };
61
+ setSession(session);
62
+ persistSession(dataDir, session);
63
+ console.log(success(`✓ Session opened: ${facts.name}`));
64
+ });
65
+ sessionCommand.command("close").action(() => {
66
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
67
+ const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;
68
+ clearSession();
69
+ clearPersistedSession(dataDir, s?.owner);
70
+ console.log(success("✓ Session closed."));
71
+ });
72
+ sessionCommand.command("status").action(() => {
73
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
74
+ const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;
75
+ if (!s) console.log(info("No active session."));
76
+ else console.log(info(`Active: ${s.customerName} (${s.customerSlug}) since ${s.startedAt}`));
77
+ });
78
+ //#endregion
79
+ export { sessionCommand as i, persistSession as n, readAllSessions as r, clearPersistedSession as t };
80
+
81
+ //# sourceMappingURL=session-B9AilxOE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-B9AilxOE.js","names":[],"sources":["../src/commands/session.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { setSession, getSession, clearSession } from \"../core/session-store.js\";\nimport { readMainFacts, customerExists } from \"../fs/customer-dir.js\";\nimport { success, error, info } from \"../ui/colors.js\";\n\nfunction sessionsDir(dataDir: string): string {\n return path.join(dataDir, \".agentic\", \"sessions\");\n}\n\nexport function persistSession(\n dataDir: string,\n session: {\n customerSlug: string;\n customerName: string;\n startedAt: string;\n owner?: string;\n }\n): void {\n const dir = sessionsDir(dataDir);\n fs.mkdirSync(dir, { recursive: true });\n const key = (session.owner ?? `pid-${process.pid}`).replace(/[^a-zA-Z0-9_-]/g, \"_\");\n fs.writeFileSync(path.join(dir, `${key}.json`), JSON.stringify({ ...session, pid: process.pid }));\n}\n\nexport function clearPersistedSession(dataDir: string, owner?: string): void {\n const dir = sessionsDir(dataDir);\n if (!fs.existsSync(dir)) return;\n if (owner !== undefined) {\n const key = owner.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n const file = path.join(dir, `${key}.json`);\n if (fs.existsSync(file)) fs.unlinkSync(file);\n return;\n }\n // No specific owner — clear all session files\n try {\n for (const f of fs.readdirSync(dir).filter((n) => n.endsWith(\".json\"))) {\n try {\n fs.unlinkSync(path.join(dir, f));\n } catch {\n /* ignore */\n }\n }\n } catch {\n /* ignore */\n }\n}\n\nexport function readAllSessions(\n dataDir: string\n): Array<{ customerSlug: string; customerName: string; startedAt: string; owner?: string }> {\n const dir = sessionsDir(dataDir);\n if (!fs.existsSync(dir)) return [];\n return fs\n .readdirSync(dir)\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => {\n try {\n return JSON.parse(fs.readFileSync(path.join(dir, f), \"utf-8\")) as {\n customerSlug: string;\n customerName: string;\n startedAt: string;\n owner?: string;\n };\n } catch {\n return null;\n }\n })\n .filter((s): s is NonNullable<typeof s> => s !== null);\n}\n\nexport const sessionCommand = new Command(\"session\");\n\nsessionCommand\n .command(\"open <slug>\")\n .option(\"--owner <owner>\", \"Set the owner of this session\")\n .action(async (slug: string, opts: { owner?: string }) => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n if (!customerExists(dataDir, slug)) {\n console.error(error(`✗ Customer not found: ${slug}`));\n process.exit(1);\n }\n const facts = await readMainFacts(dataDir, slug);\n const owner = opts.owner ?? process.env[\"DXCRM_ACTOR\"];\n const session = {\n customerSlug: slug,\n customerName: facts.name,\n startedAt: new Date().toISOString(),\n ...(owner !== undefined ? { owner } : {}),\n };\n setSession(session);\n persistSession(dataDir, session);\n console.log(success(`✓ Session opened: ${facts.name}`));\n });\n\nsessionCommand.command(\"close\").action(() => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;\n clearSession();\n clearPersistedSession(dataDir, s?.owner);\n console.log(success(\"✓ Session closed.\"));\n});\n\nsessionCommand.command(\"status\").action(() => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;\n if (!s) {\n console.log(info(\"No active session.\"));\n } else {\n console.log(info(`Active: ${s.customerName} (${s.customerSlug}) since ${s.startedAt}`));\n }\n});\n"],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ const require_chunk = require("./chunk-DakpK96I.cjs");
2
+ const require_session_store = require("./session-store-B0QZE8Bx.cjs");
3
+ let commander = require("commander");
4
+ let path = require("path");
5
+ path = require_chunk.__toESM(path, 1);
6
+ let fs = require("fs");
7
+ fs = require_chunk.__toESM(fs, 1);
8
+ //#region src/commands/session.ts
9
+ function sessionsDir(dataDir) {
10
+ return path.default.join(dataDir, ".agentic", "sessions");
11
+ }
12
+ function persistSession(dataDir, session) {
13
+ const dir = sessionsDir(dataDir);
14
+ fs.default.mkdirSync(dir, { recursive: true });
15
+ const key = (session.owner ?? `pid-${process.pid}`).replace(/[^a-zA-Z0-9_-]/g, "_");
16
+ fs.default.writeFileSync(path.default.join(dir, `${key}.json`), JSON.stringify({
17
+ ...session,
18
+ pid: process.pid
19
+ }));
20
+ }
21
+ function clearPersistedSession(dataDir, owner) {
22
+ const dir = sessionsDir(dataDir);
23
+ if (!fs.default.existsSync(dir)) return;
24
+ if (owner !== void 0) {
25
+ const key = owner.replace(/[^a-zA-Z0-9_-]/g, "_");
26
+ const file = path.default.join(dir, `${key}.json`);
27
+ if (fs.default.existsSync(file)) fs.default.unlinkSync(file);
28
+ return;
29
+ }
30
+ try {
31
+ for (const f of fs.default.readdirSync(dir).filter((n) => n.endsWith(".json"))) try {
32
+ fs.default.unlinkSync(path.default.join(dir, f));
33
+ } catch {}
34
+ } catch {}
35
+ }
36
+ function readAllSessions(dataDir) {
37
+ const dir = sessionsDir(dataDir);
38
+ if (!fs.default.existsSync(dir)) return [];
39
+ return fs.default.readdirSync(dir).filter((f) => f.endsWith(".json")).map((f) => {
40
+ try {
41
+ return JSON.parse(fs.default.readFileSync(path.default.join(dir, f), "utf-8"));
42
+ } catch {
43
+ return null;
44
+ }
45
+ }).filter((s) => s !== null);
46
+ }
47
+ const sessionCommand = new commander.Command("session");
48
+ sessionCommand.command("open <slug>").option("--owner <owner>", "Set the owner of this session").action(async (slug, opts) => {
49
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
50
+ if (!require_session_store.customerExists(dataDir, slug)) {
51
+ console.error(require_session_store.error(`✗ Customer not found: ${slug}`));
52
+ process.exit(1);
53
+ }
54
+ const facts = await require_session_store.readMainFacts(dataDir, slug);
55
+ const owner = opts.owner ?? process.env["DXCRM_ACTOR"];
56
+ const session = {
57
+ customerSlug: slug,
58
+ customerName: facts.name,
59
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
60
+ ...owner !== void 0 ? { owner } : {}
61
+ };
62
+ require_session_store.setSession(session);
63
+ persistSession(dataDir, session);
64
+ console.log(require_session_store.success(`✓ Session opened: ${facts.name}`));
65
+ });
66
+ sessionCommand.command("close").action(() => {
67
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
68
+ const s = require_session_store.getSession() ?? readAllSessions(dataDir)[0] ?? null;
69
+ require_session_store.clearSession();
70
+ clearPersistedSession(dataDir, s?.owner);
71
+ console.log(require_session_store.success("✓ Session closed."));
72
+ });
73
+ sessionCommand.command("status").action(() => {
74
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
75
+ const s = require_session_store.getSession() ?? readAllSessions(dataDir)[0] ?? null;
76
+ if (!s) console.log(require_session_store.info("No active session."));
77
+ else console.log(require_session_store.info(`Active: ${s.customerName} (${s.customerSlug}) since ${s.startedAt}`));
78
+ });
79
+ //#endregion
80
+ exports.readAllSessions = readAllSessions;
81
+
82
+ //# sourceMappingURL=session-D0qFkBla.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-D0qFkBla.cjs","names":["Command","customerExists","error","readMainFacts","success","getSession","info"],"sources":["../src/commands/session.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { setSession, getSession, clearSession } from \"../core/session-store.js\";\nimport { readMainFacts, customerExists } from \"../fs/customer-dir.js\";\nimport { success, error, info } from \"../ui/colors.js\";\n\nfunction sessionsDir(dataDir: string): string {\n return path.join(dataDir, \".agentic\", \"sessions\");\n}\n\nexport function persistSession(\n dataDir: string,\n session: {\n customerSlug: string;\n customerName: string;\n startedAt: string;\n owner?: string;\n }\n): void {\n const dir = sessionsDir(dataDir);\n fs.mkdirSync(dir, { recursive: true });\n const key = (session.owner ?? `pid-${process.pid}`).replace(/[^a-zA-Z0-9_-]/g, \"_\");\n fs.writeFileSync(path.join(dir, `${key}.json`), JSON.stringify({ ...session, pid: process.pid }));\n}\n\nexport function clearPersistedSession(dataDir: string, owner?: string): void {\n const dir = sessionsDir(dataDir);\n if (!fs.existsSync(dir)) return;\n if (owner !== undefined) {\n const key = owner.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n const file = path.join(dir, `${key}.json`);\n if (fs.existsSync(file)) fs.unlinkSync(file);\n return;\n }\n // No specific owner — clear all session files\n try {\n for (const f of fs.readdirSync(dir).filter((n) => n.endsWith(\".json\"))) {\n try {\n fs.unlinkSync(path.join(dir, f));\n } catch {\n /* ignore */\n }\n }\n } catch {\n /* ignore */\n }\n}\n\nexport function readAllSessions(\n dataDir: string\n): Array<{ customerSlug: string; customerName: string; startedAt: string; owner?: string }> {\n const dir = sessionsDir(dataDir);\n if (!fs.existsSync(dir)) return [];\n return fs\n .readdirSync(dir)\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => {\n try {\n return JSON.parse(fs.readFileSync(path.join(dir, f), \"utf-8\")) as {\n customerSlug: string;\n customerName: string;\n startedAt: string;\n owner?: string;\n };\n } catch {\n return null;\n }\n })\n .filter((s): s is NonNullable<typeof s> => s !== null);\n}\n\nexport const sessionCommand = new Command(\"session\");\n\nsessionCommand\n .command(\"open <slug>\")\n .option(\"--owner <owner>\", \"Set the owner of this session\")\n .action(async (slug: string, opts: { owner?: string }) => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n if (!customerExists(dataDir, slug)) {\n console.error(error(`✗ Customer not found: ${slug}`));\n process.exit(1);\n }\n const facts = await readMainFacts(dataDir, slug);\n const owner = opts.owner ?? process.env[\"DXCRM_ACTOR\"];\n const session = {\n customerSlug: slug,\n customerName: facts.name,\n startedAt: new Date().toISOString(),\n ...(owner !== undefined ? { owner } : {}),\n };\n setSession(session);\n persistSession(dataDir, session);\n console.log(success(`✓ Session opened: ${facts.name}`));\n });\n\nsessionCommand.command(\"close\").action(() => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;\n clearSession();\n clearPersistedSession(dataDir, s?.owner);\n console.log(success(\"✓ Session closed.\"));\n});\n\nsessionCommand.command(\"status\").action(() => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;\n if (!s) {\n console.log(info(\"No active session.\"));\n } else {\n console.log(info(`Active: ${s.customerName} (${s.customerSlug}) since ${s.startedAt}`));\n }\n});\n"],"mappings":";;;;;;;;AAOA,SAAS,YAAY,SAAyB;CAC5C,OAAO,KAAA,QAAK,KAAK,SAAS,YAAY,UAAU;AAClD;AAEA,SAAgB,eACd,SACA,SAMM;CACN,MAAM,MAAM,YAAY,OAAO;CAC/B,GAAA,QAAG,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;CACrC,MAAM,OAAO,QAAQ,SAAS,OAAO,QAAQ,OAAO,QAAQ,mBAAmB,GAAG;CAClF,GAAA,QAAG,cAAc,KAAA,QAAK,KAAK,KAAK,GAAG,IAAI,MAAM,GAAG,KAAK,UAAU;EAAE,GAAG;EAAS,KAAK,QAAQ;CAAI,CAAC,CAAC;AAClG;AAEA,SAAgB,sBAAsB,SAAiB,OAAsB;CAC3E,MAAM,MAAM,YAAY,OAAO;CAC/B,IAAI,CAAC,GAAA,QAAG,WAAW,GAAG,GAAG;CACzB,IAAI,UAAU,KAAA,GAAW;EACvB,MAAM,MAAM,MAAM,QAAQ,mBAAmB,GAAG;EAChD,MAAM,OAAO,KAAA,QAAK,KAAK,KAAK,GAAG,IAAI,MAAM;EACzC,IAAI,GAAA,QAAG,WAAW,IAAI,GAAG,GAAA,QAAG,WAAW,IAAI;EAC3C;CACF;CAEA,IAAI;EACF,KAAK,MAAM,KAAK,GAAA,QAAG,YAAY,GAAG,EAAE,QAAQ,MAAM,EAAE,SAAS,OAAO,CAAC,GACnE,IAAI;GACF,GAAA,QAAG,WAAW,KAAA,QAAK,KAAK,KAAK,CAAC,CAAC;EACjC,QAAQ,CAER;CAEJ,QAAQ,CAER;AACF;AAEA,SAAgB,gBACd,SAC0F;CAC1F,MAAM,MAAM,YAAY,OAAO;CAC/B,IAAI,CAAC,GAAA,QAAG,WAAW,GAAG,GAAG,OAAO,CAAC;CACjC,OAAO,GAAA,QACJ,YAAY,GAAG,EACf,QAAQ,MAAM,EAAE,SAAS,OAAO,CAAC,EACjC,KAAK,MAAM;EACV,IAAI;GACF,OAAO,KAAK,MAAM,GAAA,QAAG,aAAa,KAAA,QAAK,KAAK,KAAK,CAAC,GAAG,OAAO,CAAC;EAM/D,QAAQ;GACN,OAAO;EACT;CACF,CAAC,EACA,QAAQ,MAAkC,MAAM,IAAI;AACzD;AAEA,MAAa,iBAAiB,IAAIA,UAAAA,QAAQ,SAAS;AAEnD,eACG,QAAQ,aAAa,EACrB,OAAO,mBAAmB,+BAA+B,EACzD,OAAO,OAAO,MAAc,SAA6B;CACxD,MAAM,UAAU,QAAQ,IAAI,qBAAqB,QAAQ,IAAI;CAC7D,IAAI,CAACC,sBAAAA,eAAe,SAAS,IAAI,GAAG;EAClC,QAAQ,MAAMC,sBAAAA,MAAM,yBAAyB,MAAM,CAAC;EACpD,QAAQ,KAAK,CAAC;CAChB;CACA,MAAM,QAAQ,MAAMC,sBAAAA,cAAc,SAAS,IAAI;CAC/C,MAAM,QAAQ,KAAK,SAAS,QAAQ,IAAI;CACxC,MAAM,UAAU;EACd,cAAc;EACd,cAAc,MAAM;EACpB,4BAAW,IAAI,KAAK,GAAE,YAAY;EAClC,GAAI,UAAU,KAAA,IAAY,EAAE,MAAM,IAAI,CAAC;CACzC;CACA,sBAAA,WAAW,OAAO;CAClB,eAAe,SAAS,OAAO;CAC/B,QAAQ,IAAIC,sBAAAA,QAAQ,qBAAqB,MAAM,MAAM,CAAC;AACxD,CAAC;AAEH,eAAe,QAAQ,OAAO,EAAE,aAAa;CAC3C,MAAM,UAAU,QAAQ,IAAI,qBAAqB,QAAQ,IAAI;CAC7D,MAAM,IAAIC,sBAAAA,WAAW,KAAK,gBAAgB,OAAO,EAAE,MAAM;CACzD,sBAAA,aAAa;CACb,sBAAsB,SAAS,GAAG,KAAK;CACvC,QAAQ,IAAID,sBAAAA,QAAQ,mBAAmB,CAAC;AAC1C,CAAC;AAED,eAAe,QAAQ,QAAQ,EAAE,aAAa;CAC5C,MAAM,UAAU,QAAQ,IAAI,qBAAqB,QAAQ,IAAI;CAC7D,MAAM,IAAIC,sBAAAA,WAAW,KAAK,gBAAgB,OAAO,EAAE,MAAM;CACzD,IAAI,CAAC,GACH,QAAQ,IAAIC,sBAAAA,KAAK,oBAAoB,CAAC;MAEtC,QAAQ,IAAIA,sBAAAA,KAAK,WAAW,EAAE,aAAa,IAAI,EAAE,aAAa,UAAU,EAAE,WAAW,CAAC;AAE1F,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { C as readMainFacts, _ as info, b as customerExists, g as error, n as getSession, r as setSession, t as clearSession, v as success } from "./session-store-C8tEvMPw.js";
2
+ import { Command } from "commander";
3
+ import path from "path";
4
+ import fs from "fs";
5
+ //#region src/commands/session.ts
6
+ function sessionsDir(dataDir) {
7
+ return path.join(dataDir, ".agentic", "sessions");
8
+ }
9
+ function persistSession(dataDir, session) {
10
+ const dir = sessionsDir(dataDir);
11
+ fs.mkdirSync(dir, { recursive: true });
12
+ const key = (session.owner ?? `pid-${process.pid}`).replace(/[^a-zA-Z0-9_-]/g, "_");
13
+ fs.writeFileSync(path.join(dir, `${key}.json`), JSON.stringify({
14
+ ...session,
15
+ pid: process.pid
16
+ }));
17
+ }
18
+ function clearPersistedSession(dataDir, owner) {
19
+ const dir = sessionsDir(dataDir);
20
+ if (!fs.existsSync(dir)) return;
21
+ if (owner !== void 0) {
22
+ const key = owner.replace(/[^a-zA-Z0-9_-]/g, "_");
23
+ const file = path.join(dir, `${key}.json`);
24
+ if (fs.existsSync(file)) fs.unlinkSync(file);
25
+ return;
26
+ }
27
+ try {
28
+ for (const f of fs.readdirSync(dir).filter((n) => n.endsWith(".json"))) try {
29
+ fs.unlinkSync(path.join(dir, f));
30
+ } catch {}
31
+ } catch {}
32
+ }
33
+ function readAllSessions(dataDir) {
34
+ const dir = sessionsDir(dataDir);
35
+ if (!fs.existsSync(dir)) return [];
36
+ return fs.readdirSync(dir).filter((f) => f.endsWith(".json")).map((f) => {
37
+ try {
38
+ return JSON.parse(fs.readFileSync(path.join(dir, f), "utf-8"));
39
+ } catch {
40
+ return null;
41
+ }
42
+ }).filter((s) => s !== null);
43
+ }
44
+ const sessionCommand = new Command("session");
45
+ sessionCommand.command("open <slug>").option("--owner <owner>", "Set the owner of this session").action(async (slug, opts) => {
46
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
47
+ if (!customerExists(dataDir, slug)) {
48
+ console.error(error(`✗ Customer not found: ${slug}`));
49
+ process.exit(1);
50
+ }
51
+ const facts = await readMainFacts(dataDir, slug);
52
+ const owner = opts.owner ?? process.env["DXCRM_ACTOR"];
53
+ const session = {
54
+ customerSlug: slug,
55
+ customerName: facts.name,
56
+ startedAt: (/* @__PURE__ */ new Date()).toISOString(),
57
+ ...owner !== void 0 ? { owner } : {}
58
+ };
59
+ setSession(session);
60
+ persistSession(dataDir, session);
61
+ console.log(success(`✓ Session opened: ${facts.name}`));
62
+ });
63
+ sessionCommand.command("close").action(() => {
64
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
65
+ const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;
66
+ clearSession();
67
+ clearPersistedSession(dataDir, s?.owner);
68
+ console.log(success("✓ Session closed."));
69
+ });
70
+ sessionCommand.command("status").action(() => {
71
+ const dataDir = process.env["DXCRM_DATA_DIR"] ?? process.cwd();
72
+ const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;
73
+ if (!s) console.log(info("No active session."));
74
+ else console.log(info(`Active: ${s.customerName} (${s.customerSlug}) since ${s.startedAt}`));
75
+ });
76
+ //#endregion
77
+ export { readAllSessions };
78
+
79
+ //# sourceMappingURL=session-D9ub6Wl1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-D9ub6Wl1.js","names":[],"sources":["../src/commands/session.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { setSession, getSession, clearSession } from \"../core/session-store.js\";\nimport { readMainFacts, customerExists } from \"../fs/customer-dir.js\";\nimport { success, error, info } from \"../ui/colors.js\";\n\nfunction sessionsDir(dataDir: string): string {\n return path.join(dataDir, \".agentic\", \"sessions\");\n}\n\nexport function persistSession(\n dataDir: string,\n session: {\n customerSlug: string;\n customerName: string;\n startedAt: string;\n owner?: string;\n }\n): void {\n const dir = sessionsDir(dataDir);\n fs.mkdirSync(dir, { recursive: true });\n const key = (session.owner ?? `pid-${process.pid}`).replace(/[^a-zA-Z0-9_-]/g, \"_\");\n fs.writeFileSync(path.join(dir, `${key}.json`), JSON.stringify({ ...session, pid: process.pid }));\n}\n\nexport function clearPersistedSession(dataDir: string, owner?: string): void {\n const dir = sessionsDir(dataDir);\n if (!fs.existsSync(dir)) return;\n if (owner !== undefined) {\n const key = owner.replace(/[^a-zA-Z0-9_-]/g, \"_\");\n const file = path.join(dir, `${key}.json`);\n if (fs.existsSync(file)) fs.unlinkSync(file);\n return;\n }\n // No specific owner — clear all session files\n try {\n for (const f of fs.readdirSync(dir).filter((n) => n.endsWith(\".json\"))) {\n try {\n fs.unlinkSync(path.join(dir, f));\n } catch {\n /* ignore */\n }\n }\n } catch {\n /* ignore */\n }\n}\n\nexport function readAllSessions(\n dataDir: string\n): Array<{ customerSlug: string; customerName: string; startedAt: string; owner?: string }> {\n const dir = sessionsDir(dataDir);\n if (!fs.existsSync(dir)) return [];\n return fs\n .readdirSync(dir)\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => {\n try {\n return JSON.parse(fs.readFileSync(path.join(dir, f), \"utf-8\")) as {\n customerSlug: string;\n customerName: string;\n startedAt: string;\n owner?: string;\n };\n } catch {\n return null;\n }\n })\n .filter((s): s is NonNullable<typeof s> => s !== null);\n}\n\nexport const sessionCommand = new Command(\"session\");\n\nsessionCommand\n .command(\"open <slug>\")\n .option(\"--owner <owner>\", \"Set the owner of this session\")\n .action(async (slug: string, opts: { owner?: string }) => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n if (!customerExists(dataDir, slug)) {\n console.error(error(`✗ Customer not found: ${slug}`));\n process.exit(1);\n }\n const facts = await readMainFacts(dataDir, slug);\n const owner = opts.owner ?? process.env[\"DXCRM_ACTOR\"];\n const session = {\n customerSlug: slug,\n customerName: facts.name,\n startedAt: new Date().toISOString(),\n ...(owner !== undefined ? { owner } : {}),\n };\n setSession(session);\n persistSession(dataDir, session);\n console.log(success(`✓ Session opened: ${facts.name}`));\n });\n\nsessionCommand.command(\"close\").action(() => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;\n clearSession();\n clearPersistedSession(dataDir, s?.owner);\n console.log(success(\"✓ Session closed.\"));\n});\n\nsessionCommand.command(\"status\").action(() => {\n const dataDir = process.env[\"DXCRM_DATA_DIR\"] ?? process.cwd();\n const s = getSession() ?? readAllSessions(dataDir)[0] ?? null;\n if (!s) {\n console.log(info(\"No active session.\"));\n } else {\n console.log(info(`Active: ${s.customerName} (${s.customerSlug}) since ${s.startedAt}`));\n }\n});\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { r as readAllSessions } from "./session-B9AilxOE.js";
2
+ export { readAllSessions };