@datasynx/agentic-crm 0.1.0 → 1.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.
- package/README.md +270 -669
- package/dist/{approvals-DpjxGHFp.js → approvals-CmDT2eUg.js} +7 -24
- package/dist/approvals-CmDT2eUg.js.map +1 -0
- package/dist/{ask-CID3jnuL.js → ask-CDysGnRg.js} +6 -6
- package/dist/{ask-CID3jnuL.js.map → ask-CDysGnRg.js.map} +1 -1
- package/dist/atomic-write-8yjqqLtS.js +29 -0
- package/dist/atomic-write-8yjqqLtS.js.map +1 -0
- package/dist/atomic-write-BYmF-ThH.cjs +37 -0
- package/dist/atomic-write-BYmF-ThH.cjs.map +1 -0
- package/dist/attachments-CX2GAtsw.cjs +517 -0
- package/dist/attachments-CX2GAtsw.cjs.map +1 -0
- package/dist/attachments-D207gXfN.js +514 -0
- package/dist/attachments-D207gXfN.js.map +1 -0
- package/dist/attachments-rLa96rOK.js +514 -0
- package/dist/attachments-rLa96rOK.js.map +1 -0
- package/dist/auth-B5DcjJ_6.js +2 -0
- package/dist/{auth-DFWwWcYD.js → auth-DDXZTwS0.js} +4 -13
- package/dist/auth-DDXZTwS0.js.map +1 -0
- package/dist/{autofill-Di_-SP7t.js → autofill-B9VtlR2j.js} +2 -2
- package/dist/{autofill-Di_-SP7t.js.map → autofill-B9VtlR2j.js.map} +1 -1
- package/dist/{backup-CeMk9z86.js → backup-CTlIxUdO.js} +5 -7
- package/dist/backup-CTlIxUdO.js.map +1 -0
- package/dist/backup-LFnC09oV.js +2 -0
- package/dist/chunk-BfDYWZQ8.cjs +32 -0
- package/dist/chunk-BfDYWZQ8.cjs.map +1 -0
- package/dist/chunk-BhUZmQg5.js +32 -0
- package/dist/chunk-BhUZmQg5.js.map +1 -0
- package/dist/chunk-ChC83jai.js +2 -0
- package/dist/chunk-e_w8qqtP.js +32 -0
- package/dist/chunk-e_w8qqtP.js.map +1 -0
- package/dist/{churn-C28IgnAj.js → churn-DN9WDGNM.js} +3 -3
- package/dist/{churn-C28IgnAj.js.map → churn-DN9WDGNM.js.map} +1 -1
- package/dist/cli.js +285 -186
- package/dist/cli.js.map +1 -1
- package/dist/{compliance-CKSBoQUe.js → compliance-Bc12Hn9a.js} +3 -3
- package/dist/{compliance-CKSBoQUe.js.map → compliance-Bc12Hn9a.js.map} +1 -1
- package/dist/{compliance-CujOqAKk.js → compliance-TqYQXhBj.js} +1 -1
- package/dist/{compliance-B1kk5-YS.js → compliance-kq0xHRw3.js} +3 -3
- package/dist/{compliance-B1kk5-YS.js.map → compliance-kq0xHRw3.js.map} +1 -1
- package/dist/{compliance-B91zNvCR.cjs → compliance-pAj9FcGI.cjs} +3 -3
- package/dist/{compliance-B91zNvCR.cjs.map → compliance-pAj9FcGI.cjs.map} +1 -1
- package/dist/{context-builder-BzWAp3Zs.js → context-builder-7Uab5-G4.js} +3 -2
- package/dist/context-builder-7Uab5-G4.js.map +1 -0
- package/dist/context-builder-hmOPvgso.js +2 -0
- package/dist/{custom-fields-CzNeD3_v.js → custom-fields-BMyz5Ruh.js} +1 -1
- package/dist/{custom-fields-Pl2t9xzp.js → custom-fields-GzpOHW_2.js} +4 -13
- package/dist/custom-fields-GzpOHW_2.js.map +1 -0
- package/dist/{custom-objects-CIFrmQ2V.js → custom-objects-BNy-ayR-.js} +1 -1
- package/dist/{custom-objects-BHgn1GEX.js → custom-objects-CxW1gHwJ.js} +10 -25
- package/dist/custom-objects-CxW1gHwJ.js.map +1 -0
- package/dist/{customer-dir-DIylZ8Q6.js → customer-dir-CkMMXhb0.js} +9 -4
- package/dist/customer-dir-CkMMXhb0.js.map +1 -0
- package/dist/daemon/worker.js +66 -40
- package/dist/daemon/worker.js.map +1 -1
- package/dist/doctor-C14-vnJ1.js +103 -0
- package/dist/doctor-C14-vnJ1.js.map +1 -0
- package/dist/email-body-BFSRa0AW.cjs +42 -0
- package/dist/email-body-BFSRa0AW.cjs.map +1 -0
- package/dist/email-body-BOd7U-D2.js +42 -0
- package/dist/email-body-BOd7U-D2.js.map +1 -0
- package/dist/{enrichment-3XvgGDfB.js → enrichment-CDFdWmvD.js} +3 -3
- package/dist/{enrichment-3XvgGDfB.js.map → enrichment-CDFdWmvD.js.map} +1 -1
- package/dist/{file-lock-B_zi7NQl.js → file-lock-CcHotQkZ.js} +3 -4
- package/dist/file-lock-CcHotQkZ.js.map +1 -0
- package/dist/{gmail-sync-DIaxInDT.js → gmail-sync-B4Iu3AQb.js} +56 -22
- package/dist/gmail-sync-B4Iu3AQb.js.map +1 -0
- package/dist/{gmail-sync-hHm9gaWd.cjs → gmail-sync-BpSVESSe.cjs} +55 -21
- package/dist/gmail-sync-BpSVESSe.cjs.map +1 -0
- package/dist/{gmail-sync-rQaVqKWd.js → gmail-sync-DIbrPnTK.js} +55 -21
- package/dist/gmail-sync-DIbrPnTK.js.map +1 -0
- package/dist/{gmail-webhook-handler-e5Od25FX.js → gmail-webhook-handler-BzOFbvgh.js} +4 -4
- package/dist/{gmail-webhook-handler-e5Od25FX.js.map → gmail-webhook-handler-BzOFbvgh.js.map} +1 -1
- package/dist/{gmail-webhook-handler-DS7OlRPX.js → gmail-webhook-handler-CvSDW_Js.js} +2 -2
- package/dist/{goal-engine-KpBftn4V.js → goal-engine-BbroPhqm.js} +10 -11
- package/dist/goal-engine-BbroPhqm.js.map +1 -0
- package/dist/{goal-engine-CUZSpERI.js → goal-engine-CfDAJTFt.js} +1 -1
- package/dist/{google-drive-sync-DEPcqFca.js → google-drive-sync-B_I1d54Y.js} +3 -3
- package/dist/{google-drive-sync-DEPcqFca.js.map → google-drive-sync-B_I1d54Y.js.map} +1 -1
- package/dist/html-BaeOCZKE.js +36 -0
- package/dist/html-BaeOCZKE.js.map +1 -0
- package/dist/html-CmOku6jS.cjs +47 -0
- package/dist/html-CmOku6jS.cjs.map +1 -0
- package/dist/{hygiene-DZqfYpFf.js → hygiene-DzQPnc6P.js} +3 -3
- package/dist/{hygiene-DZqfYpFf.js.map → hygiene-DzQPnc6P.js.map} +1 -1
- package/dist/identity-CB7j-Zr1.js +2 -0
- package/dist/{identity-CI6olMNm.js → identity-_uZ3Lbr2.js} +2 -2
- package/dist/{identity-CI6olMNm.js.map → identity-_uZ3Lbr2.js.map} +1 -1
- package/dist/{import-hubspot-BaK71U_K.js → import-hubspot-CTId9IGV.js} +51 -45
- package/dist/import-hubspot-CTId9IGV.js.map +1 -0
- package/dist/{index-YqwMd6aQ.d.cts → index-BAutNcAT.d.cts} +20 -12
- package/dist/index-BAutNcAT.d.cts.map +1 -0
- package/dist/{index-V8BFaH-b.d.ts → index-FzDsNSSb.d.ts} +12 -4
- package/dist/index-FzDsNSSb.d.ts.map +1 -0
- package/dist/index.cjs +19 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -12
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -21
- package/dist/index.js.map +1 -1
- package/dist/interactions-writer-B2y-73lh.js +2 -0
- package/dist/{interactions-writer-SLHnoEeE.js → interactions-writer-B8XAzdqR.js} +34 -4
- package/dist/interactions-writer-B8XAzdqR.js.map +1 -0
- package/dist/{interactions-writer-CrPStUll.cjs → interactions-writer-BRJNrefF.cjs} +7 -3
- package/dist/interactions-writer-BRJNrefF.cjs.map +1 -0
- package/dist/{interactions-writer-DO3KcSR3.js → interactions-writer-ZQcpFOh9.js} +7 -3
- package/dist/interactions-writer-ZQcpFOh9.js.map +1 -0
- package/dist/json-store-WWsFzXub.js +43 -0
- package/dist/json-store-WWsFzXub.js.map +1 -0
- package/dist/{knowledge-base-D0Fh40kc.js → knowledge-base--063Kpa3.js} +51 -22
- package/dist/knowledge-base--063Kpa3.js.map +1 -0
- package/dist/{lancedb-CCBbpulq.js → lancedb-CswQEE5K.js} +1 -1
- package/dist/{lancedb-rlvWoPwl.js → lancedb-CuHKNsNZ.js} +4 -3
- package/dist/lancedb-CuHKNsNZ.js.map +1 -0
- package/dist/{lead-model-BCFzyktm.js → lead-model-CEmx7te7.js} +6 -14
- package/dist/lead-model-CEmx7te7.js.map +1 -0
- package/dist/{llm-Z8RIYkpF.js → llm-BnSUBisu.js} +2 -2
- package/dist/{llm-Z8RIYkpF.js.map → llm-BnSUBisu.js.map} +1 -1
- package/dist/{llm-iijeXmgq.cjs → llm-CXycmEl9.cjs} +2 -2
- package/dist/{llm-iijeXmgq.cjs.map → llm-CXycmEl9.cjs.map} +1 -1
- package/dist/{llm-DEjWcqmW.js → llm-DSX1-wFu.js} +1 -1
- package/dist/{llm-DvzZqva0.js → llm-PZzgPphl.js} +3 -3
- package/dist/{llm-DvzZqva0.js.map → llm-PZzgPphl.js.map} +1 -1
- package/dist/logger-BkInaGoV.cjs +167 -0
- package/dist/logger-BkInaGoV.cjs.map +1 -0
- package/dist/logger-Dyl4VcLO.js +147 -0
- package/dist/logger-Dyl4VcLO.js.map +1 -0
- package/dist/logger-UaF5p9d1.js +147 -0
- package/dist/logger-UaF5p9d1.js.map +1 -0
- package/dist/logger-vKQS34w9.js +2 -0
- package/dist/mcp-CdTJWTJf.d.cts.map +1 -1
- package/dist/mcp-CdTJWTJf.d.ts.map +1 -1
- package/dist/mcp.cjs +365 -319
- package/dist/mcp.cjs.map +1 -1
- package/dist/mcp.d.cts.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +365 -319
- package/dist/mcp.js.map +1 -1
- package/dist/{memory-Cy6-Tbyl.js → memory-D8hmgD9d.js} +1 -1
- package/dist/{memory-Bb6ky3kb.js → memory-Dzr9dXSM.js} +4 -11
- package/dist/memory-Dzr9dXSM.js.map +1 -0
- package/dist/{microsoft-calendar-B6MMtUQK.js → microsoft-calendar-BgVR8GDv.js} +4 -4
- package/dist/{microsoft-calendar-B6MMtUQK.js.map → microsoft-calendar-BgVR8GDv.js.map} +1 -1
- package/dist/{microsoft-sync-CpZVoSuq.js → microsoft-sync-D30_XksI.js} +5 -5
- package/dist/{microsoft-sync-CpZVoSuq.js.map → microsoft-sync-D30_XksI.js.map} +1 -1
- package/dist/{nba-3wanmJ0U.js → nba-DwdfM93s.js} +3 -3
- package/dist/{nba-3wanmJ0U.js.map → nba-DwdfM93s.js.map} +1 -1
- package/dist/{notification-dispatcher-0vYNngWe.js → notification-dispatcher-inpKyuBz.js} +7 -3
- package/dist/notification-dispatcher-inpKyuBz.js.map +1 -0
- package/dist/{pipeline-writer-BqBrYrQc.js → pipeline-writer-0LJ6Qkat.js} +1 -1
- package/dist/{pipeline-writer-N2omexxp.cjs → pipeline-writer-B1tRAhuD.cjs} +11 -3
- package/dist/pipeline-writer-B1tRAhuD.cjs.map +1 -0
- package/dist/{pipeline-writer-BvVquKIe.js → pipeline-writer-CIllfnZl.js} +5 -3
- package/dist/pipeline-writer-CIllfnZl.js.map +1 -0
- package/dist/{pipeline-writer-eufx_0o1.js → pipeline-writer-rDj-ni6q.js} +6 -4
- package/dist/pipeline-writer-rDj-ni6q.js.map +1 -0
- package/dist/{proactive-agent-BgQXw3ac.js → proactive-agent-B7u3Bj_l.js} +6 -6
- package/dist/{proactive-agent-BgQXw3ac.js.map → proactive-agent-B7u3Bj_l.js.map} +1 -1
- package/dist/{proactive-worker-BrLHNhjH.js → proactive-worker-1zkm6aJD.js} +7 -8
- package/dist/proactive-worker-1zkm6aJD.js.map +1 -0
- package/dist/{push-manager-CowY-0IK.js → push-manager-BXM-IHfP.js} +1 -1
- package/dist/{push-manager-CdqIIkuh.js → push-manager-C0ECQgva.js} +4 -4
- package/dist/push-manager-C0ECQgva.js.map +1 -0
- package/dist/{quote-generator-OhSFsi3x.js → quote-generator-ByUyIYtw.js} +1 -1
- package/dist/{quote-generator-BfwENXzg.js → quote-generator-CTdR8eEI.js} +5 -5
- package/dist/quote-generator-CTdR8eEI.js.map +1 -0
- package/dist/rbac-DzbyFhVH.js +2 -0
- package/dist/{rbac-CTIktZaC.js → rbac-msmBc_tK.js} +19 -12
- package/dist/rbac-msmBc_tK.js.map +1 -0
- package/dist/regex-Jt5DatPi.js +13 -0
- package/dist/regex-Jt5DatPi.js.map +1 -0
- package/dist/{relationship-health-odxEoQdJ.js → relationship-health-ZZNXR1RZ.js} +8 -16
- package/dist/relationship-health-ZZNXR1RZ.js.map +1 -0
- package/dist/{revenue-simulation-Bqf2DLVB.js → revenue-simulation-D8f_YkUY.js} +9 -19
- package/dist/revenue-simulation-D8f_YkUY.js.map +1 -0
- package/dist/{revenue-simulation-BJdRTEHc.js → revenue-simulation-njJZlTqm.js} +1 -1
- package/dist/safe-path-mpp0dKtO.js +18 -0
- package/dist/safe-path-mpp0dKtO.js.map +1 -0
- package/dist/{segments-BqcD5HIl.js → segments-DI3LOQNe.js} +5 -14
- package/dist/segments-DI3LOQNe.js.map +1 -0
- package/dist/sequence-engine-C6nnewHX.js +2 -0
- package/dist/{sequence-engine-J1lTW_in.js → sequence-engine-DNTVLq7o.js} +15 -8
- package/dist/sequence-engine-DNTVLq7o.js.map +1 -0
- package/dist/{sequence-store-DaaWr0Os.js → sequence-store-CmYb6s0g.js} +6 -5
- package/dist/sequence-store-CmYb6s0g.js.map +1 -0
- package/dist/{server-Dyva03K8.js → server-DoRPPOeR.js} +308 -230
- package/dist/server-DoRPPOeR.js.map +1 -0
- package/dist/{session-D9ub6Wl1.js → session-B6XaP83h.js} +3 -3
- package/dist/session-B6XaP83h.js.map +1 -0
- package/dist/{session-B9AilxOE.js → session-BgGDyP2C.js} +3 -3
- package/dist/session-BgGDyP2C.js.map +1 -0
- package/dist/session-Bp4zTh4l.js +2 -0
- package/dist/{session-D0qFkBla.cjs → session-Mm7GQbSH.cjs} +3 -3
- package/dist/session-Mm7GQbSH.cjs.map +1 -0
- package/dist/{session-store-C8tEvMPw.js → session-store-DWxJ5Pof.js} +79 -17
- package/dist/session-store-DWxJ5Pof.js.map +1 -0
- package/dist/{session-store-B0QZE8Bx.cjs → session-store-yfwnj0OC.cjs} +126 -16
- package/dist/session-store-yfwnj0OC.cjs.map +1 -0
- package/dist/{sla-engine-5IhTsBUR.js → sla-engine-CP2KiKDS.js} +1 -1
- package/dist/{sla-engine-BqX-7u-7.js → sla-engine-O-A1ntu_.js} +2 -2
- package/dist/{sla-engine-BqX-7u-7.js.map → sla-engine-O-A1ntu_.js.map} +1 -1
- package/dist/{sop-Vp0UPWFW.js → sop-BV7ICAFR.js} +4 -11
- package/dist/sop-BV7ICAFR.js.map +1 -0
- package/dist/{sop-DkhVChGy.js → sop-D33qTHUb.js} +1 -1
- package/dist/survey-engine-DKctGcLQ.js +2 -0
- package/dist/{survey-engine-DBjCYqCv.js → survey-engine-DngXBv47.js} +5 -4
- package/dist/survey-engine-DngXBv47.js.map +1 -0
- package/dist/{sync-state-CwLSt_1m.js → sync-state-BaA8LbTI.js} +1 -1
- package/dist/{sync-state-ChaLbamC.js → sync-state-DMZgzpez.js} +4 -12
- package/dist/sync-state-DMZgzpez.js.map +1 -0
- package/dist/{ticket-writer-CjqKeIRD.js → ticket-writer-DsfpeLGZ.js} +1 -1
- package/dist/{ticket-writer-j2oX_Wal.js → ticket-writer-a9on36Wb.js} +12 -24
- package/dist/ticket-writer-a9on36Wb.js.map +1 -0
- package/dist/{tone-Bdm5uaht.js → tone-C7bqK69y.js} +5 -12
- package/dist/tone-C7bqK69y.js.map +1 -0
- package/dist/{tone-DRKlZgPr.cjs → tone-Cmc7O2Fx.cjs} +3 -9
- package/dist/tone-Cmc7O2Fx.cjs.map +1 -0
- package/dist/{tone-vNb2DAAD.js → tone-mXSftvTn.js} +3 -8
- package/dist/tone-mXSftvTn.js.map +1 -0
- package/dist/{transcript-watcher-CL2QUygI.js → transcript-watcher-BoClrJAz.js} +18 -11
- package/dist/transcript-watcher-BoClrJAz.js.map +1 -0
- package/dist/unmatched-transcripts-C92zAoM4.js +2 -0
- package/dist/unmatched-transcripts-DC-VQ9YS.js +16 -0
- package/dist/unmatched-transcripts-DC-VQ9YS.js.map +1 -0
- package/dist/update-deal-CWy1eLJI.js +2 -0
- package/dist/{update-deal-DKC79skb.js → update-deal-DSzr_Aau.js} +3 -3
- package/dist/{update-deal-DKC79skb.js.map → update-deal-DSzr_Aau.js.map} +1 -1
- package/dist/{usage-D0-TYJkw.js → usage-BVlFlKW_.js} +8 -6
- package/dist/usage-BVlFlKW_.js.map +1 -0
- package/dist/usage-CClTf5e6.cjs.map +1 -1
- package/dist/usage-D0u9a-lV.js.map +1 -1
- package/dist/{vault-DXCg29W-.js → vault-CfwZdNzC.js} +3 -4
- package/dist/vault-CfwZdNzC.js.map +1 -0
- package/dist/{vault-C1D3zScD.js → vault-DxKP4_R2.js} +1 -1
- package/dist/{webhooks-Xn6zO6kd.cjs → webhooks-CwW-3kvG.cjs} +5 -19
- package/dist/webhooks-CwW-3kvG.cjs.map +1 -0
- package/dist/{webhooks-7EpA05Qr.js → webhooks-DXr1IoKn.js} +8 -21
- package/dist/webhooks-DXr1IoKn.js.map +1 -0
- package/dist/{webhooks-BO2UAnmn.js → webhooks-sWZ8CJtR.js} +5 -18
- package/dist/webhooks-sWZ8CJtR.js.map +1 -0
- package/package.json +22 -2
- package/dist/approvals-DpjxGHFp.js.map +0 -1
- package/dist/auth-CyFuu9X_.js +0 -2
- package/dist/auth-DFWwWcYD.js.map +0 -1
- package/dist/backup-CeMk9z86.js.map +0 -1
- package/dist/backup-f_hC7rBV.js +0 -2
- package/dist/context-builder-BzWAp3Zs.js.map +0 -1
- package/dist/context-builder-DlrRcqmJ.js +0 -2
- package/dist/custom-fields-Pl2t9xzp.js.map +0 -1
- package/dist/custom-objects-BHgn1GEX.js.map +0 -1
- package/dist/customer-dir-DIylZ8Q6.js.map +0 -1
- package/dist/file-lock-B_zi7NQl.js.map +0 -1
- package/dist/gmail-sync-DIaxInDT.js.map +0 -1
- package/dist/gmail-sync-hHm9gaWd.cjs.map +0 -1
- package/dist/gmail-sync-rQaVqKWd.js.map +0 -1
- package/dist/goal-engine-KpBftn4V.js.map +0 -1
- package/dist/identity-gyfWdrcX.js +0 -2
- package/dist/import-hubspot-BaK71U_K.js.map +0 -1
- package/dist/index-V8BFaH-b.d.ts.map +0 -1
- package/dist/index-YqwMd6aQ.d.cts.map +0 -1
- package/dist/interactions-writer-CrPStUll.cjs.map +0 -1
- package/dist/interactions-writer-DO3KcSR3.js.map +0 -1
- package/dist/interactions-writer-SLHnoEeE.js.map +0 -1
- package/dist/interactions-writer-dSPy1XfO.js +0 -2
- package/dist/knowledge-base-D0Fh40kc.js.map +0 -1
- package/dist/lancedb-rlvWoPwl.js.map +0 -1
- package/dist/lead-model-BCFzyktm.js.map +0 -1
- package/dist/memory-Bb6ky3kb.js.map +0 -1
- package/dist/notification-dispatcher-0vYNngWe.js.map +0 -1
- package/dist/pipeline-writer-BvVquKIe.js.map +0 -1
- package/dist/pipeline-writer-N2omexxp.cjs.map +0 -1
- package/dist/pipeline-writer-eufx_0o1.js.map +0 -1
- package/dist/proactive-worker-BrLHNhjH.js.map +0 -1
- package/dist/push-manager-CdqIIkuh.js.map +0 -1
- package/dist/quote-generator-BfwENXzg.js.map +0 -1
- package/dist/rbac-C7c8tcES.js +0 -2
- package/dist/rbac-CTIktZaC.js.map +0 -1
- package/dist/relationship-health-odxEoQdJ.js.map +0 -1
- package/dist/revenue-simulation-Bqf2DLVB.js.map +0 -1
- package/dist/segments-BqcD5HIl.js.map +0 -1
- package/dist/sequence-engine-CCTHEBgi.js +0 -2
- package/dist/sequence-engine-J1lTW_in.js.map +0 -1
- package/dist/sequence-store-DaaWr0Os.js.map +0 -1
- package/dist/server-Dyva03K8.js.map +0 -1
- package/dist/session-B9AilxOE.js.map +0 -1
- package/dist/session-D0qFkBla.cjs.map +0 -1
- package/dist/session-D9ub6Wl1.js.map +0 -1
- package/dist/session-mWHA71Lw.js +0 -2
- package/dist/session-store-B0QZE8Bx.cjs.map +0 -1
- package/dist/session-store-C8tEvMPw.js.map +0 -1
- package/dist/sop-Vp0UPWFW.js.map +0 -1
- package/dist/survey-engine-C06hcQt3.js +0 -2
- package/dist/survey-engine-DBjCYqCv.js.map +0 -1
- package/dist/sync-state-ChaLbamC.js.map +0 -1
- package/dist/ticket-writer-j2oX_Wal.js.map +0 -1
- package/dist/tone-Bdm5uaht.js.map +0 -1
- package/dist/tone-DRKlZgPr.cjs.map +0 -1
- package/dist/tone-vNb2DAAD.js.map +0 -1
- package/dist/transcript-watcher-CL2QUygI.js.map +0 -1
- package/dist/unmatched-transcripts-BsH5bhkU.js +0 -26
- package/dist/unmatched-transcripts-BsH5bhkU.js.map +0 -1
- package/dist/unmatched-transcripts-D0PrJ9iz.js +0 -2
- package/dist/update-deal-BNwPGaTV.js +0 -2
- package/dist/usage-D0-TYJkw.js.map +0 -1
- package/dist/vault-DXCg29W-.js.map +0 -1
- package/dist/webhooks-7EpA05Qr.js.map +0 -1
- package/dist/webhooks-BO2UAnmn.js.map +0 -1
- package/dist/webhooks-Xn6zO6kd.cjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { i as writeJsonFile, n as readJsonFile, r as writeJsonArray, t as readJsonArray } from "./json-store-WWsFzXub.js";
|
|
1
2
|
import path from "path";
|
|
2
|
-
import fs from "fs";
|
|
3
3
|
import "crypto";
|
|
4
4
|
//#region src/core/approvals.ts
|
|
5
5
|
function policyPath(dataDir) {
|
|
@@ -9,13 +9,7 @@ function approvalsPath(dataDir) {
|
|
|
9
9
|
return path.join(dataDir, ".agentic", "approvals.json");
|
|
10
10
|
}
|
|
11
11
|
function loadPolicyConfig(dataDir) {
|
|
12
|
-
|
|
13
|
-
if (!fs.existsSync(p)) return {};
|
|
14
|
-
try {
|
|
15
|
-
return JSON.parse(fs.readFileSync(p, "utf-8"));
|
|
16
|
-
} catch {
|
|
17
|
-
return {};
|
|
18
|
-
}
|
|
12
|
+
return readJsonFile(policyPath(dataDir), {});
|
|
19
13
|
}
|
|
20
14
|
function setPolicy(dataDir, tool, policy, slug) {
|
|
21
15
|
const cfg = loadPolicyConfig(dataDir);
|
|
@@ -29,25 +23,14 @@ function setPolicy(dataDir, tool, policy, slug) {
|
|
|
29
23
|
...cfg.tools ?? {},
|
|
30
24
|
[tool]: policy
|
|
31
25
|
};
|
|
32
|
-
|
|
33
|
-
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
34
|
-
fs.writeFileSync(p, JSON.stringify(cfg, null, 2), "utf-8");
|
|
26
|
+
writeJsonFile(policyPath(dataDir), cfg);
|
|
35
27
|
}
|
|
36
28
|
function listApprovals(dataDir, status) {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
const all = JSON.parse(fs.readFileSync(p, "utf-8")).approvals;
|
|
41
|
-
const list = Array.isArray(all) ? all : [];
|
|
42
|
-
return status ? list.filter((a) => a.status === status) : list;
|
|
43
|
-
} catch {
|
|
44
|
-
return [];
|
|
45
|
-
}
|
|
29
|
+
const list = readJsonArray(approvalsPath(dataDir), "approvals");
|
|
30
|
+
return status ? list.filter((a) => a.status === status) : list;
|
|
46
31
|
}
|
|
47
32
|
function writeApprovals(dataDir, approvals) {
|
|
48
|
-
|
|
49
|
-
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
50
|
-
fs.writeFileSync(p, JSON.stringify({ approvals }, null, 2), "utf-8");
|
|
33
|
+
writeJsonArray(approvalsPath(dataDir), "approvals", approvals);
|
|
51
34
|
}
|
|
52
35
|
function decideApproval(dataDir, id, decision) {
|
|
53
36
|
const all = listApprovals(dataDir);
|
|
@@ -64,4 +47,4 @@ function decideApproval(dataDir, id, decision) {
|
|
|
64
47
|
//#endregion
|
|
65
48
|
export { decideApproval, listApprovals, setPolicy };
|
|
66
49
|
|
|
67
|
-
//# sourceMappingURL=approvals-
|
|
50
|
+
//# sourceMappingURL=approvals-CmDT2eUg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals-CmDT2eUg.js","names":[],"sources":["../src/core/approvals.ts"],"sourcesContent":["import { randomBytes } from \"crypto\";\nimport path from \"path\";\nimport { readJsonFile, writeJsonFile, readJsonArray, writeJsonArray } from \"../fs/json-store.js\";\n\n/**\n * Human-in-the-loop / approval gate (domino D4 / F3). A per-tool, per-customer\n * autonomy policy (auto | approve | block) decides whether an agent action runs\n * immediately, is queued for human approval, or is blocked. The generic gate\n * wraps any write/automation action so later features get HITL for free.\n */\nexport type Policy = \"auto\" | \"approve\" | \"block\";\n\ninterface PolicyConfig {\n default?: Policy;\n tools?: Record<string, Policy>;\n customers?: Record<string, Record<string, Policy>>;\n}\n\nexport interface Approval {\n id: string;\n tool: string;\n slug?: string;\n payload: unknown;\n status: \"pending\" | \"approved\" | \"rejected\";\n requestedAt: string;\n decidedAt?: string;\n}\n\nfunction policyPath(dataDir: string): string {\n return path.join(dataDir, \".agentic\", \"policy.json\");\n}\nfunction approvalsPath(dataDir: string): string {\n return path.join(dataDir, \".agentic\", \"approvals.json\");\n}\n\nfunction loadPolicyConfig(dataDir: string): PolicyConfig {\n return readJsonFile<PolicyConfig>(policyPath(dataDir), {});\n}\n\n/** Resolve the effective policy: customer-specific → global tool → default (auto). */\nexport function getPolicy(dataDir: string, tool: string, slug?: string): Policy {\n const cfg = loadPolicyConfig(dataDir);\n if (slug && cfg.customers?.[slug]?.[tool]) return cfg.customers[slug]![tool]!;\n if (cfg.tools?.[tool]) return cfg.tools[tool]!;\n return cfg.default ?? \"auto\";\n}\n\nexport function setPolicy(dataDir: string, tool: string, policy: Policy, slug?: string): void {\n const cfg = loadPolicyConfig(dataDir);\n if (slug) {\n cfg.customers = cfg.customers ?? {};\n cfg.customers[slug] = { ...(cfg.customers[slug] ?? {}), [tool]: policy };\n } else {\n cfg.tools = { ...(cfg.tools ?? {}), [tool]: policy };\n }\n writeJsonFile(policyPath(dataDir), cfg);\n}\n\nexport function listApprovals(dataDir: string, status?: Approval[\"status\"]): Approval[] {\n const list = readJsonArray<Approval>(approvalsPath(dataDir), \"approvals\");\n return status ? list.filter((a) => a.status === status) : list;\n}\n\nfunction writeApprovals(dataDir: string, approvals: Approval[]): void {\n writeJsonArray(approvalsPath(dataDir), \"approvals\", approvals);\n}\n\nexport function requestApproval(\n dataDir: string,\n req: { tool: string; slug?: string; payload: unknown }\n): Approval {\n const approval: Approval = {\n id: `apr_${randomBytes(5).toString(\"hex\")}`,\n tool: req.tool,\n ...(req.slug ? { slug: req.slug } : {}),\n payload: req.payload,\n status: \"pending\",\n requestedAt: new Date().toISOString(),\n };\n writeApprovals(dataDir, [...listApprovals(dataDir), approval]);\n return approval;\n}\n\nexport function decideApproval(\n dataDir: string,\n id: string,\n decision: \"approved\" | \"rejected\"\n): boolean {\n const all = listApprovals(dataDir);\n const idx = all.findIndex((a) => a.id === id);\n if (idx < 0) return false;\n all[idx] = { ...all[idx]!, status: decision, decidedAt: new Date().toISOString() };\n writeApprovals(dataDir, all);\n return true;\n}\n\nexport interface GateResult<T> {\n status: \"executed\" | \"pending\" | \"blocked\";\n result?: T;\n approvalId?: string;\n}\n\n/** Gate an action by the effective policy: run, queue for approval, or block. */\nexport async function gateAction<T>(\n dataDir: string,\n action: { tool: string; slug?: string; payload: unknown },\n execute: () => T | Promise<T>\n): Promise<GateResult<T>> {\n const policy = getPolicy(dataDir, action.tool, action.slug);\n if (policy === \"block\") return { status: \"blocked\" };\n if (policy === \"approve\") {\n const approval = requestApproval(dataDir, action);\n return { status: \"pending\", approvalId: approval.id };\n }\n return { status: \"executed\", result: await execute() };\n}\n"],"mappings":";;;;AA4BA,SAAS,WAAW,SAAyB;CAC3C,OAAO,KAAK,KAAK,SAAS,YAAY,aAAa;AACrD;AACA,SAAS,cAAc,SAAyB;CAC9C,OAAO,KAAK,KAAK,SAAS,YAAY,gBAAgB;AACxD;AAEA,SAAS,iBAAiB,SAA+B;CACvD,OAAO,aAA2B,WAAW,OAAO,GAAG,CAAC,CAAC;AAC3D;AAUA,SAAgB,UAAU,SAAiB,MAAc,QAAgB,MAAqB;CAC5F,MAAM,MAAM,iBAAiB,OAAO;CACpC,IAAI,MAAM;EACR,IAAI,YAAY,IAAI,aAAa,CAAC;EAClC,IAAI,UAAU,QAAQ;GAAE,GAAI,IAAI,UAAU,SAAS,CAAC;IAAK,OAAO;EAAO;CACzE,OACE,IAAI,QAAQ;EAAE,GAAI,IAAI,SAAS,CAAC;GAAK,OAAO;CAAO;CAErD,cAAc,WAAW,OAAO,GAAG,GAAG;AACxC;AAEA,SAAgB,cAAc,SAAiB,QAAyC;CACtF,MAAM,OAAO,cAAwB,cAAc,OAAO,GAAG,WAAW;CACxE,OAAO,SAAS,KAAK,QAAQ,MAAM,EAAE,WAAW,MAAM,IAAI;AAC5D;AAEA,SAAS,eAAe,SAAiB,WAA6B;CACpE,eAAe,cAAc,OAAO,GAAG,aAAa,SAAS;AAC/D;AAkBA,SAAgB,eACd,SACA,IACA,UACS;CACT,MAAM,MAAM,cAAc,OAAO;CACjC,MAAM,MAAM,IAAI,WAAW,MAAM,EAAE,OAAO,EAAE;CAC5C,IAAI,MAAM,GAAG,OAAO;CACpB,IAAI,OAAO;EAAE,GAAG,IAAI;EAAO,QAAQ;EAAU,4BAAW,IAAI,KAAK,GAAE,YAAY;CAAE;CACjF,eAAe,SAAS,GAAG;CAC3B,OAAO;AACT"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as readPipeline } from "./pipeline-writer-
|
|
1
|
+
import { i as readInteractions } from "./interactions-writer-B8XAzdqR.js";
|
|
2
|
+
import { t as readPipeline } from "./pipeline-writer-CIllfnZl.js";
|
|
3
3
|
import { t as hybridSearch } from "./hybrid-search-BmHttLrR.js";
|
|
4
|
-
import { n as loadMemories } from "./memory-
|
|
5
|
-
import { r as loadSops } from "./sop-
|
|
4
|
+
import { n as loadMemories } from "./memory-Dzr9dXSM.js";
|
|
5
|
+
import { r as loadSops } from "./sop-BV7ICAFR.js";
|
|
6
6
|
//#region src/core/ask.ts
|
|
7
7
|
async function gatherCorpus(dataDir, slug) {
|
|
8
8
|
const docs = [];
|
|
@@ -34,7 +34,7 @@ async function askCrm(dataDir, question, slug) {
|
|
|
34
34
|
const sources = ranked.map((r) => byId.get(r.id)).filter(Boolean);
|
|
35
35
|
if (sources.length === 0) return { sources: [] };
|
|
36
36
|
try {
|
|
37
|
-
const { callLlm } = await import("./llm-
|
|
37
|
+
const { callLlm } = await import("./llm-DSX1-wFu.js");
|
|
38
38
|
return {
|
|
39
39
|
answer: await callLlm(`Answer the question using ONLY the context. Cite snippet numbers. If unknown, say so.\n\nQuestion: ${question}\n\nContext:\n${sources.map((s, i) => `[${i + 1}] ${s.text}`).join("\n")}`, {
|
|
40
40
|
tool: "ask_crm",
|
|
@@ -49,4 +49,4 @@ async function askCrm(dataDir, question, slug) {
|
|
|
49
49
|
//#endregion
|
|
50
50
|
export { askCrm };
|
|
51
51
|
|
|
52
|
-
//# sourceMappingURL=ask-
|
|
52
|
+
//# sourceMappingURL=ask-CDysGnRg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask-
|
|
1
|
+
{"version":3,"file":"ask-CDysGnRg.js","names":[],"sources":["../src/core/ask.ts"],"sourcesContent":["import { hybridSearch, type HybridDoc } from \"./hybrid-search.js\";\nimport { loadMemories } from \"./memory.js\";\nimport { loadSops } from \"./sop.js\";\nimport { readInteractions } from \"../fs/interactions-writer.js\";\nimport { readPipeline } from \"../fs/pipeline-writer.js\";\n\n/**\n * Ask-your-CRM (domino D10 / C2): natural-language Q&A over CRM data. Gathers a\n * corpus (interactions, pipeline, memories, SOPs), retrieves relevant snippets\n * via hybrid search, and — when an LLM is available — synthesizes a grounded\n * answer. Without an LLM it returns the ranked sources (still useful).\n */\nexport interface AskResult {\n answer?: string;\n sources: Array<{ id: string; text: string }>;\n}\n\nexport async function gatherCorpus(dataDir: string, slug?: string): Promise<HybridDoc[]> {\n const docs: HybridDoc[] = [];\n\n for (const m of loadMemories(dataDir, slug)) docs.push({ id: `mem:${m.id}`, text: m.text });\n for (const s of loadSops(dataDir, slug))\n docs.push({ id: `sop:${s.id}`, text: `${s.title} ${s.triggers.join(\" \")} ${s.body}` });\n\n if (slug) {\n const interactions = await readInteractions(dataDir, slug).catch(() => \"\");\n interactions\n .split(/(?=^## )/m)\n .map((e) => e.trim())\n .filter((e) => e && !e.startsWith(\"# \"))\n .forEach((e, i) => docs.push({ id: `int:${slug}:${i}`, text: e }));\n\n const deals = await readPipeline(dataDir, slug).catch(() => []);\n for (const d of deals)\n docs.push({\n id: `deal:${d.name}`,\n text: `${d.name} stage ${d.stage} value ${d.value ?? \"\"} ${d.notes ?? \"\"}`,\n });\n }\n\n return docs;\n}\n\nexport async function askCrm(dataDir: string, question: string, slug?: string): Promise<AskResult> {\n const corpus = await gatherCorpus(dataDir, slug);\n const ranked = hybridSearch(question, corpus, { limit: 6 });\n const byId = new Map(corpus.map((d) => [d.id, d]));\n const sources = ranked.map((r) => byId.get(r.id)!).filter(Boolean);\n\n if (sources.length === 0) return { sources: [] };\n\n try {\n const { callLlm } = await import(\"./llm.js\");\n const context = sources.map((s, i) => `[${i + 1}] ${s.text}`).join(\"\\n\");\n const answer = await callLlm(\n `Answer the question using ONLY the context. Cite snippet numbers. If unknown, say so.\\n\\n` +\n `Question: ${question}\\n\\nContext:\\n${context}`,\n { tool: \"ask_crm\", ...(slug ? { slug } : {}) }\n );\n return { answer, sources };\n } catch {\n return { sources };\n }\n}\n"],"mappings":";;;;;;AAiBA,eAAsB,aAAa,SAAiB,MAAqC;CACvF,MAAM,OAAoB,CAAC;CAE3B,KAAK,MAAM,KAAK,aAAa,SAAS,IAAI,GAAG,KAAK,KAAK;EAAE,IAAI,OAAO,EAAE;EAAM,MAAM,EAAE;CAAK,CAAC;CAC1F,KAAK,MAAM,KAAK,SAAS,SAAS,IAAI,GACpC,KAAK,KAAK;EAAE,IAAI,OAAO,EAAE;EAAM,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,SAAS,KAAK,GAAG,EAAE,GAAG,EAAE;CAAO,CAAC;CAEvF,IAAI,MAAM;EAER,CAAA,MAD2B,iBAAiB,SAAS,IAAI,EAAE,YAAY,EAAE,GAEtE,MAAM,WAAW,EACjB,KAAK,MAAM,EAAE,KAAK,CAAC,EACnB,QAAQ,MAAM,KAAK,CAAC,EAAE,WAAW,IAAI,CAAC,EACtC,SAAS,GAAG,MAAM,KAAK,KAAK;GAAE,IAAI,OAAO,KAAK,GAAG;GAAK,MAAM;EAAE,CAAC,CAAC;EAEnE,MAAM,QAAQ,MAAM,aAAa,SAAS,IAAI,EAAE,YAAY,CAAC,CAAC;EAC9D,KAAK,MAAM,KAAK,OACd,KAAK,KAAK;GACR,IAAI,QAAQ,EAAE;GACd,MAAM,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE,SAAS;EACxE,CAAC;CACL;CAEA,OAAO;AACT;AAEA,eAAsB,OAAO,SAAiB,UAAkB,MAAmC;CACjG,MAAM,SAAS,MAAM,aAAa,SAAS,IAAI;CAC/C,MAAM,SAAS,aAAa,UAAU,QAAQ,EAAE,OAAO,EAAE,CAAC;CAC1D,MAAM,OAAO,IAAI,IAAI,OAAO,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;CACjD,MAAM,UAAU,OAAO,KAAK,MAAM,KAAK,IAAI,EAAE,EAAE,CAAE,EAAE,OAAO,OAAO;CAEjE,IAAI,QAAQ,WAAW,GAAG,OAAO,EAAE,SAAS,CAAC,EAAE;CAE/C,IAAI;EACF,MAAM,EAAE,YAAY,MAAM,OAAO;EAOjC,OAAO;GAAE,QAAA,MALY,QACnB,sGACe,SAAS,gBAHV,QAAQ,KAAK,GAAG,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAGnB,KAC9C;IAAE,MAAM;IAAW,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;GAAG,CAC/C;GACiB;EAAQ;CAC3B,QAAQ;EACN,OAAO,EAAE,QAAQ;CACnB;AACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { randomBytes } from "crypto";
|
|
4
|
+
//#region src/fs/atomic-write.ts
|
|
5
|
+
/**
|
|
6
|
+
* Atomically write `content` to `filePath`, creating parent directories as
|
|
7
|
+
* needed. The payload is written to a sibling temp file and then renamed over
|
|
8
|
+
* the target. rename(2) is atomic within a filesystem, so a crash or a
|
|
9
|
+
* concurrent reader can never observe a half-written (truncated/corrupt) file —
|
|
10
|
+
* only the complete old or complete new content. Used for every durable file
|
|
11
|
+
* the product owns (customer Markdown, JSON config/state, audit logs).
|
|
12
|
+
*/
|
|
13
|
+
function writeFileAtomic(filePath, content) {
|
|
14
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
15
|
+
const tmp = `${filePath}.${process.pid}.${randomBytes(4).toString("hex")}.tmp`;
|
|
16
|
+
try {
|
|
17
|
+
fs.writeFileSync(tmp, content, "utf-8");
|
|
18
|
+
fs.renameSync(tmp, filePath);
|
|
19
|
+
} catch (err) {
|
|
20
|
+
try {
|
|
21
|
+
if (fs.existsSync(tmp)) fs.unlinkSync(tmp);
|
|
22
|
+
} catch {}
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
export { writeFileAtomic as t };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=atomic-write-8yjqqLtS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write-8yjqqLtS.js","names":[],"sources":["../src/fs/atomic-write.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { randomBytes } from \"crypto\";\n\n/**\n * Atomically write `content` to `filePath`, creating parent directories as\n * needed. The payload is written to a sibling temp file and then renamed over\n * the target. rename(2) is atomic within a filesystem, so a crash or a\n * concurrent reader can never observe a half-written (truncated/corrupt) file —\n * only the complete old or complete new content. Used for every durable file\n * the product owns (customer Markdown, JSON config/state, audit logs).\n */\nexport function writeFileAtomic(filePath: string, content: string): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const tmp = `${filePath}.${process.pid}.${randomBytes(4).toString(\"hex\")}.tmp`;\n try {\n fs.writeFileSync(tmp, content, \"utf-8\");\n fs.renameSync(tmp, filePath);\n } catch (err) {\n // Best-effort cleanup of the temp file if the write/rename failed.\n try {\n if (fs.existsSync(tmp)) fs.unlinkSync(tmp);\n } catch {\n /* ignore cleanup failure */\n }\n throw err;\n }\n}\n"],"mappings":";;;;;;;;;;;;AAYA,SAAgB,gBAAgB,UAAkB,SAAuB;CACvE,GAAG,UAAU,KAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;CACxD,MAAM,MAAM,GAAG,SAAS,GAAG,QAAQ,IAAI,GAAG,YAAY,CAAC,EAAE,SAAS,KAAK,EAAE;CACzE,IAAI;EACF,GAAG,cAAc,KAAK,SAAS,OAAO;EACtC,GAAG,WAAW,KAAK,QAAQ;CAC7B,SAAS,KAAK;EAEZ,IAAI;GACF,IAAI,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG;EAC3C,QAAQ,CAER;EACA,MAAM;CACR;AACF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const require_chunk = require("./chunk-DakpK96I.cjs");
|
|
2
|
+
let path = require("path");
|
|
3
|
+
path = require_chunk.__toESM(path, 1);
|
|
4
|
+
let fs = require("fs");
|
|
5
|
+
fs = require_chunk.__toESM(fs, 1);
|
|
6
|
+
let crypto = require("crypto");
|
|
7
|
+
//#region src/fs/atomic-write.ts
|
|
8
|
+
/**
|
|
9
|
+
* Atomically write `content` to `filePath`, creating parent directories as
|
|
10
|
+
* needed. The payload is written to a sibling temp file and then renamed over
|
|
11
|
+
* the target. rename(2) is atomic within a filesystem, so a crash or a
|
|
12
|
+
* concurrent reader can never observe a half-written (truncated/corrupt) file —
|
|
13
|
+
* only the complete old or complete new content. Used for every durable file
|
|
14
|
+
* the product owns (customer Markdown, JSON config/state, audit logs).
|
|
15
|
+
*/
|
|
16
|
+
function writeFileAtomic(filePath, content) {
|
|
17
|
+
fs.default.mkdirSync(path.default.dirname(filePath), { recursive: true });
|
|
18
|
+
const tmp = `${filePath}.${process.pid}.${(0, crypto.randomBytes)(4).toString("hex")}.tmp`;
|
|
19
|
+
try {
|
|
20
|
+
fs.default.writeFileSync(tmp, content, "utf-8");
|
|
21
|
+
fs.default.renameSync(tmp, filePath);
|
|
22
|
+
} catch (err) {
|
|
23
|
+
try {
|
|
24
|
+
if (fs.default.existsSync(tmp)) fs.default.unlinkSync(tmp);
|
|
25
|
+
} catch {}
|
|
26
|
+
throw err;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
Object.defineProperty(exports, "writeFileAtomic", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function() {
|
|
33
|
+
return writeFileAtomic;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
//# sourceMappingURL=atomic-write-BYmF-ThH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-write-BYmF-ThH.cjs","names":[],"sources":["../src/fs/atomic-write.ts"],"sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport { randomBytes } from \"crypto\";\n\n/**\n * Atomically write `content` to `filePath`, creating parent directories as\n * needed. The payload is written to a sibling temp file and then renamed over\n * the target. rename(2) is atomic within a filesystem, so a crash or a\n * concurrent reader can never observe a half-written (truncated/corrupt) file —\n * only the complete old or complete new content. Used for every durable file\n * the product owns (customer Markdown, JSON config/state, audit logs).\n */\nexport function writeFileAtomic(filePath: string, content: string): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const tmp = `${filePath}.${process.pid}.${randomBytes(4).toString(\"hex\")}.tmp`;\n try {\n fs.writeFileSync(tmp, content, \"utf-8\");\n fs.renameSync(tmp, filePath);\n } catch (err) {\n // Best-effort cleanup of the temp file if the write/rename failed.\n try {\n if (fs.existsSync(tmp)) fs.unlinkSync(tmp);\n } catch {\n /* ignore cleanup failure */\n }\n throw err;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAYA,SAAgB,gBAAgB,UAAkB,SAAuB;CACvE,GAAA,QAAG,UAAU,KAAA,QAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;CACxD,MAAM,MAAM,GAAG,SAAS,GAAG,QAAQ,IAAI,IAAA,GAAA,OAAA,aAAe,CAAC,EAAE,SAAS,KAAK,EAAE;CACzE,IAAI;EACF,GAAA,QAAG,cAAc,KAAK,SAAS,OAAO;EACtC,GAAA,QAAG,WAAW,KAAK,QAAQ;CAC7B,SAAS,KAAK;EAEZ,IAAI;GACF,IAAI,GAAA,QAAG,WAAW,GAAG,GAAG,GAAA,QAAG,WAAW,GAAG;EAC3C,QAAQ,CAER;EACA,MAAM;CACR;AACF"}
|