1(function() { 2 try { 3 var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}; 4 e.SENTRY_RELEASE = { id: "b96dc26" }; 5 var n = new e.Error().stack; 6 n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "12119685-403e-4424-9479-cb0187aaa8bf", e._sentryDebugIdIdentifier = "sentry-dbid-12119685-403e-4424-9479-cb0187aaa8bf"); 7 } catch (e) {} 8})(); 9import { n as __esmMin } from "./rolldown-runtime-sLwMD6dS.js"; 10import { Cn as agent_path, Kn as campaigns_path, Mi as init_routes, bn as agent_conversation_path, ma as leads_path } from "./controllers-jdPQjaCB.js"; 11import { i as require_compiler_runtime, t as require_jsx_runtime } from "./jsx-runtime-CHSMGLHp.js"; 12import { t as require_react } from "./react-CrLPhuc5.js"; 13import { J as init_useConversationFlow, Q as useConversationFlow, d as consumeAgentHandoffOnce, f as init_agent_handoff, h as useAgentConversation, m as init_useAgentConversation, p as resetAgentHandoffReadGuard } from "./turbo-mount-DM0tFk1M.js"; 14import { a as init_dist, s as usePage } from "./dist-ZlUHm0R7.js"; 15import { n as isModifiedClick } from "./modified-click-BdPBMexs.js"; 16import { i as init_AgentLanding, n as init_AgentConversationView, r as AgentLanding, t as AgentConversationView } from "./AgentConversationView-DLATISOU.js"; 17//#region app/frontend/pages/Agent/flows/flow1.ts 18var FLOW_1_TITLE, FLOW_1; 19function init_flow1() { 20 return (init_flow1 = __esmMin((() => { 21 init_routes(); 22 FLOW_1_TITLE = "christiesrealestate.com"; 23 FLOW_1 = [ 24 { 25 type: "agent_trace", 26 label: "Analyzing christiesrealestate.comâ¦", 27 duration: 2e3, 28 doneLabel: "Analyzed christiesrealestate.com", 29 children: [{ 30 icon: "globe", 31 label: "christiesrealestate.com" 32 }] 33 }, 34 { 35 type: "delay", 36 ms: 400 37 }, 38 { 39 type: "agent_text", 40 text: "I took a look at <strong class=\"fw-medium\">Christieâs International Real Estate</strong> â itâs a luxury real estate brokerage network with a global presence. What would you like to do with this?", 41 html: true 42 }, 43 { 44 type: "suggestions", 45 options: [ 46 "Find people at Christieâs Real Estate", 47 "Find companies similar to Christieâs Real Estate", 48 "Find people mentioned on this page" 49 ] 50 }, 51 { 52 type: "agent_text",
53 text: "Good call. Iâll look for companies with a similar profile â B2B-adjacent, luxury market, comparable size, and a similar tech footprint. Let me search." 54 }, 55 { 56 type: "agent_trace", 57 label: "Discover · Searching for similar companiesâ¦", 58 duration: 3500, 59 doneLabel: "Worked for 6 sec.", 60 children: [{ 61 icon: "search", 62 label: "similar_to: christiesrealestate.com" 63 }] 64 }, 65 { 66 type: "delay", 67 ms: 400 68 }, 69 { 70 type: "agent_text", 71 text: "I found <strong class=\"fw-medium\">642 companies</strong> that match Christieâs profile. Here are the <strong class=\"fw-medium\">top 5</strong> â similar in size, industry positioning, and market focus:", 72 html: true 73 }, 74 { 75 type: "company_preview", 76 footer: { 77 label: "637 more companies", 78 ctaLabel: "Preview", 79 sidepanelTitle: "642 companies matching your criteria" 80 }, 81 companies: [ 82 { 83 name: "Sothebyâs Realty", 84 domain: "sothebysrealty.com", 85 logoUrl: "https://logos.hunter.io/sothebysrealty.com", 86 metas: [ 87 { 88 icon: "users", 89 label: "500â1,000" 90 }, 91 { 92 icon: "buildings", 93 label: "Luxury Real Estate" 94 }, 95 { 96 icon: "map-location-dot", 97 label: "United States" 98 } 99 ] 100 }, 101 { 102 name: "Engel & Völkers", 103 domain: "engelvoelkers.com", 104 logoUrl: "https://logos.hunter.io/engelvoelkers.com", 105 metas: [ 106 { 107 icon: "users", 108 label: "1,000â5,000" 109 }, 110 { 111 icon: "buildings", 112 label: "Real Estate" 113 }, 114 { 115 icon: "map-location-dot", 116 label: "Germany" 117 } 118 ] 119 }, 120 { 121 name: "Knight Frank", 122 domain: "knightfrank.com", 123 logoUrl: "https://logos.hunter.io/knightfrank.com", 124 metas: [ 125 { 126 icon: "users", 127 label: "1,000â5,000" 128 }, 129 { 130 icon: "buildings", 131 label: "Real Estate Advisory" 132 }, 133 { 134 icon: "map-location-dot", 135 label: "United Kingdom" 136 } 137 ] 138 }, 139 { 140 name: "Compass", 141 domain: "compass.com", 142 logoUrl: "https://logos.hunter.io/compass.com", 143 metas: [ 144 { 145 icon: "users", 146 label: "5,000â10,000" 147 }, 148 { 149 icon: "buildings", 150 label: "Real Estate Technology" 151 }, 152 { 153 icon: "map-location-dot", 154 label: "United States" 155 } 156 ] 157 }, 158 { 159 name: "Savills", 160 domain: "savills.com", 161 logoUrl: "https://logos.hunter.io/savills.com", 162 metas: [ 163 { 164 icon: "users", 165 label: "5,000â10,000" 166 }, 167 { 168 icon: "buildings", 169 label: "Real Estate Services" 170 }, 171 { 172 icon: "map-location-dot", 173 label: "United Kingdom" 174 } 175 ] 176 } 177 ] 178 }, 179 { 180 type: "agent_text", 181 text: "Do these look like the right kind of company, or should I adjust the criteria?" 182 }, 183 { 184 type: "suggestions", 185 options: ["These look great", "Adjust the criteria"] 186 }, 187 { 188 type: "agent_text", 189 text: "Sure thing. What would you like to adjust? I can filter by location, company size, industry, or anything else." 190 }, 191 { type: "wait_for_user" }, 192 { 193 type: "agent_text", 194 text: "Got it â filtering to US-based companies only." 195 }, 196 { 197 type: "agent_trace", 198 label: "Discover · Filtering by locationâ¦", 199 duration: 2e3, 200 doneLabel: "Worked for 3 sec.", 201 children: [{ 202 icon: "filter", 203 label: "location: United States" 204 }] 205 }, 206 { 207 type: "delay", 208 ms: 400 209 }, 210 { 211 type: "agent_text", 212 text: "That narrows it down to <strong class=\"fw-medium\">284 companies</strong> in the US. Here are the top matches:", 213 html: true 214 }, 215 { 216 type: "company_preview", 217 footer: { 218 label: "279 more companies", 219 ctaLabel: "Preview", 220 sidepanelTitle: "284 US companies matching your criteria" 221 }, 222 companies: [ 223 { 224 name: "Sothebyâs Realty", 225 domain: "sothebysrealty.com", 226 logoUrl: "https://logos.hunter.io/sothebysrealty.com", 227 metas: [ 228 { 229 icon: "users", 230 label: "500â1,000" 231 }, 232 { 233 icon: "buildings", 234 label: "Luxury Real Estate" 235 }, 236 { 237 icon: "map-location-dot", 238 label: "United States" 239 } 240 ] 241 }, 242 { 243 name: "Compass", 244 domain: "compass.com", 245 logoUrl: "https://logos.hunter.io/compass.com", 246 metas: [ 247 { 248 icon: "users", 249 label: "5,000â10,000" 250 }, 251 { 252 icon: "buildings", 253 label: "Real Estate Technology" 254 }, 255 { 256 icon: "map-location-dot", 257 label: "United States" 258 } 259 ] 260 }, 261 { 262 name: "Douglas Elliman", 263 domain: "elliman.com", 264 logoUrl: "https://logos.hunter.io/elliman.com", 265 metas: [ 266 { 267 icon: "users", 268 label: "1,000â5,000" 269 }, 270 { 271 icon: "buildings", 272 label: "Luxury Real Estate" 273 }, 274 { 275 icon: "map-location-dot", 276 label: "United States" 277 } 278 ] 279 }, 280 { 281 name: "The Agency", 282 domain: "theagencyre.com", 283 logoUrl: "https://logos.hunter.io/theagencyre.com", 284 metas: [ 285 { 286 icon: "users", 287 label: "500â1,000" 288 }, 289 { 290 icon: "buildings", 291 label: "Real Estate Brokerage" 292 }, 293 { 294 icon: "map-location-dot", 295 label: "United States" 296 } 297 ] 298 }, 299 { 300 name: "Coldwell Banker", 301 domain: "coldwellbanker.com", 302 logoUrl: "https://logos.hunter.io/coldwellbanker.com", 303 metas: [ 304 { 305 icon: "users", 306 label: "5,000â10,000" 307 }, 308 { 309 icon: "buildings", 310 label: "Real Estate Services" 311 }, 312 { 313 icon: "map-location-dot", 314 label: "United States" 315 } 316 ] 317 } 318 ] 319 }, 320 { 321 type: "agent_text", 322 text: "Looking better? Want me to find the right contacts at these companies?" 323 }, 324 { 325 type: "suggestions", 326 options: ["Find contacts", "Adjust further"] 327 }, 328 { 329 type: "agent_text", 330 text: "Who are you looking to reach â what role or seniority level?" 331 }, 332 { type: "wait_for_user" }, 333 { 334 type: "agent_text", 335 text: "Got it â marketing managers. Let me search across these companies." 336 }, 337 { 338 type: "agent_trace", 339 label: "Discover · Searching for marketing managersâ¦", 340 duration: 4e3, 341 doneLabel: "Worked for 8 sec.", 342 children: [{ 343 icon: "search", 344 label: "role: marketing manager, 284 companies" 345 }] 346 }, 347 { 348 type: "delay", 349 ms: 400 350 }, 351 { 352 type: "agent_text",
353 text: "I found <strong class=\"fw-medium\">235 people</strong> across these companies. Hereâs a preview â a mix of marketing managers, heads of marketing, and directors:", 354 html: true 355 }, 356 { 357 type: "person_preview", 358 footer: { 359 label: "230 more", 360 ctaLabel: "Preview", 361 sidepanelTitle: "235 people matching your criteria" 362 }, 363 people: [ 364 { 365 name: "Sarah L.", 366 title: "Head of Marketing", 367 companyName: "Sothebyâs Realty", 368 companyLogoUrl: "https://logos.hunter.io/sothebysrealty.com", 369 isDecisionMaker: true 370 }, 371 { 372 name: "James K.", 373 title: "Digital Marketing Lead", 374 companyName: "Compass", 375 companyLogoUrl: "https://logos.hunter.io/compass.com", 376 isDecisionMaker: true 377 }, 378 { 379 name: "Rebecca M.", 380 title: "Marketing Manager", 381 companyName: "Douglas Elliman", 382 companyLogoUrl: "https://logos.hunter.io/elliman.com" 383 }, 384 { 385 name: "Andrew P.", 386 title: "Marketing Coordinator", 387 companyName: "The Agency", 388 companyLogoUrl: "https://logos.hunter.io/theagencyre.com" 389 }, 390 { 391 name: "Karen W.", 392 title: "Brand Marketing Manager", 393 companyName: "Coldwell Banker", 394 companyLogoUrl: "https://logos.hunter.io/coldwellbanker.com" 395 } 396 ] 397 }, 398 { 399 type: "agent_text", 400 text: "I noticed <strong class=\"fw-medium\">96 of these are decision-makers</strong> (VPs, directors, and C-level). Filtering to decision-makers only would give you a much higher reply rate.", 401 html: true 402 }, 403 { 404 type: "suggestions", 405 options: [ 406 "Keep only decision-makers", 407 "Filter by location", 408 "Save all 235" 409 ] 410 }, 411 { 412 type: "agent_text", 413 text: "Right move â Iâll narrow it down to decision-makers only. Filtering out individual contributors and junior roles." 414 }, 415 { 416 type: "agent_trace", 417 label: "Discover · Filtering decision-makersâ¦", 418 duration: 2500, 419 doneLabel: "Worked for 3 sec.", 420 children: [{ 421 icon: "filter", 422 label: "seniority: decision-maker" 423 }] 424 }, 425 { 426 type: "delay", 427 ms: 400 428 }, 429 { 430 type: "agent_text", 431 text: "Done â I narrowed it down to <strong class=\"fw-medium\">96 decision-makers</strong>. Hereâs the updated preview, mostly VPs, directors, and heads of marketing:", 432 html: true 433 }, 434 { 435 type: "person_preview", 436 footer: { 437 label: "91 more", 438 ctaLabel: "Preview", 439 sidepanelTitle: "96 decision-makers matching your criteria" 440 }, 441 people: [ 442 { 443 name: "Sarah L.", 444 title: "Head of Marketing", 445 companyName: "Sothebyâs Realty", 446 companyLogoUrl: "https://logos.hunter.io/sothebysrealty.com", 447 isDecisionMaker: true 448 }, 449 { 450 name: "James K.", 451 title: "VP of Marketing", 452 companyName: "Compass", 453 companyLogoUrl: "https://logos.hunter.io/compass.com", 454 isDecisionMaker: true 455 }, 456 { 457 name: "Laura H.", 458 title: "Marketing Director", 459 companyName: "Douglas Elliman", 460 companyLogoUrl: "https://logos.hunter.io/elliman.com", 461 isDecisionMaker: true 462 }, 463 { 464 name: "David C.", 465 title: "Chief Marketing Officer", 466 companyName: "The Agency", 467 companyLogoUrl: "https://logos.hunter.io/theagencyre.com", 468 isDecisionMaker: true 469 }, 470 { 471 name: "Rachel T.", 472 title: "Head of Brand & Marketing", 473 companyName: "Coldwell Banker", 474 companyLogoUrl: "https://logos.hunter.io/coldwellbanker.com", 475 isDecisionMaker: true 476 } 477 ] 478 }, 479 { 480 type: "agent_text", 481 text: "Would you like to save these to a list or refine further?" 482 }, 483 { 484 type: "suggestions", 485 options: ["Save to a list", "Refine further"] 486 }, 487 { 488 type: "agent_text", 489 text: "Saving these contacts will reveal their full details â verified email addresses, phone numbers, and more. Hereâs the cost breakdown:" 490 }, 491 { 492 type: "credit_confirmation", 493 title: "Ready to save 96 contacts?", 494 description: "Revealing full contact details will use 96 credits. You have 450 credits remaining this month.", 495 credits: 96, 496 confirmLabel: "Save all" 497 }, 498 { 499 type: "agent_trace", 500 label: "Leads · Saving contactsâ¦", 501 duration: 3e3, 502 doneLabel: "Saved 96 contacts · 96 credits used", 503 children: [{ 504 icon: "coin", 505 label: "96 credits" 506 }] 507 }, 508 { 509 type: "delay", 510 ms: 400 511 }, 512 { 513 type: "agent_text", 514 text: "All done! I saved <strong class=\"fw-medium\">96 decision-makers</strong> to a new list. Pretty solid pipeline â hereâs your list:", 515 html: true 516 }, 517 { 518 type: "resource_link", 519 data: { 520 productIcon: "h-leads", 521 title: "Real Estate Marketing Decision-Makers", 522 subtitle: "Leads · 96 people", 523 href: leads_path(), 524 ctaLabel: "Open list" 525 } 526 }, 527 { 528 type: "agent_text", 529 text: "Youâve got 96 decision-makers ready to contact. Whatâs next?" 530 }, 531 { 532 type: "suggestions", 533 options: [ 534 "Write an outreach sequence", 535 "Find more people like this", 536 "Go to the list" 537 ] 538 }, 539 { 540 type: "agent_text", 541 text: "Let me draft a 3-step outreach sequence tailored to real estate marketing leaders. Give me a moment." 542 }, 543 { 544 type: "agent_trace", 545 label: "Sequences · Writing draftâ¦", 546 duration: 5e3, 547 doneLabel: "Worked for 12 sec.", 548 children: [{ 549 icon: "pen", 550 label: "3-step email sequence" 551 }] 552 }, 553 { 554 type: "delay", 555 ms: 400 556 }, 557 { 558 type: "agent_text", 559 text: "Hereâs what I put together â a concise 3-step sequence with a personal opener, a value-focused follow-up, and a soft close:" 560 }, 561 { 562 type: "sequence_preview", 563 defaultExpandedIndex: null, 564 steps: [ 565 { 566 label: "Opening email", 567 subject: "Quick question about {{company}}âs marketing approach", 568 body: "Hey {{first_name}},\n\nI noticed {{company}} has been expanding its digital presence â impressive work. Iâm curious how y
568our team is thinking about outbound as part of the growth playbook.\n\nWeâve been helping real estate brands like yours connect with the right prospects faster. Would love to share a few ideas if youâre open to it.\n\nBest,\n{{sender_first_name}}" 569 }, 570 { 571 label: "Follow-up #1 · 3 days later", 572 subject: "Re: Quick question about {{company}}âs marketing approach", 573 body: "Hi {{first_name}},\n\nJust wanted to follow up on my previous note. I know things move fast in real estate marketing, but I think thereâs a quick win here for {{company}}.\n\nWould you have 15 minutes this week for a brief chat?" 574 }, 575 { 576 label: "Follow-up #2 · 5 days later", 577 subject: "One last thought", 578 body: "Hey {{first_name}},\n\nIâll keep this short â I donât want to be a bother. If the timing isnât right, no worries at all.\n\nBut if youâre curious about how other luxury real estate brands are approaching outbound, Iâm here whenever youâre ready.\n\nCheers,\n{{sender_first_name}}" 579 } 580 ] 581 }, 582 { 583 type: "agent_text", 584 text: "Does this look good to you, or should I adjust the copy?" 585 }, 586 { 587 type: "suggestions", 588 options: ["Looks good", "Adjust the copy"] 589 }, 590 { 591 type: "agent_trace", 592 label: "Sequences · Creating sequenceâ¦", 593 duration: 2e3, 594 doneLabel: "Sequence created" 595 }, 596 { 597 type: "delay", 598 ms: 400 599 }, 600 { 601 type: "agent_text", 602 text: "Done â your 3-step sequence is ready to go. Iâve added the <strong class=\"fw-medium\">96 contacts</strong> from your leads list as recipients so you can launch it whenever youâre ready.", 603 html: true 604 }, 605 { 606 type: "resource_link", 607 data: { 608 productIcon: "h-sequences", 609 title: "Real Estate Marketing Outreach", 610 subtitle: "Sequence · 96 recipients", 611 href: campaigns_path(), 612 ctaLabel: "Open sequence", 613 tag: "Draft" 614 } 615 }, 616 { 617 type: "agent_text", 618 text: "Anything else youâd like to do? I can help you refine the sequence, find more contacts, or explore other companies." 619 }, 620 { 621 type: "suggestions", 622 options: [ 623 "Launch the sequence", 624 "Add more contacts", 625 "Start a new search" 626 ] 627 } 628 ]; 629 })))(); 630} 631//#endregion 632//#region app/frontend/pages/Agent/flows/flow2.ts 633var FLOW_2_TITLE, FLOW_2; 634function init_flow2() { 635 return (init_flow2 = __esmMin((() => { 636 init_routes(); 637 FLOW_2_TITLE = "SaaS Marketing Decision-Makers"; 638 FLOW_2 = [ 639 { 640 type: "agent_text", 641 text: "Good idea â sequencing 1,043 contacts at once usually hurts reply rates. Let me analyze the list and find natural clusters." 642 }, 643 { 644 type: "agent_trace", 645 label: "Leads · Analyzing clustersâ¦", 646 duration: 4e3, 647 doneLabel: "Worked for 7 sec.", 648 children: [{ 649 icon: "layer-group", 650 label: "list: SaaS Marketing Decision-Makers" 651 }] 652 }, 653 { 654 type: "delay", 655 ms: 400 656 }, 657 { 658 type: "agent_text", 659 text: "I found <strong class=\"fw-medium\">4 natural clusters</strong> based on seniority, industry, and company stage. Each will become its own list:", 660 html: true 661 }, 662 { 663 type: "list_preview", 664 lists: [ 665 { 666 name: "Senior decision-makers", 667 count: 301 668 }, 669 { 670 name: "Mid-level managers", 671 count: 312 672 }, 673 { 674 name: "Executives at SaaS companies", 675 count: 187 676 }, 677 { 678 name: "Founders of early-stage startups", 679 count: 143 680 } 681 ] 682 }, 683 { 684 type: "agent_text", 685 text: "The remaining <strong class=\"fw-medium\">100 contacts</strong> that donât fit a clear cluster will stay in your original âSaaS Marketing Decision-Makersâ list, untouched. Does this breakdown make sense, or would you like to adjust any of the clusters?", 686 html: true 687 }, 688 { type: "wait_for_user" }, 689 { 690 type: "agent_text", 691 text: "Got it â merging those two together." 692 }, 693 { 694 type: "agent_trace", 695 label: "Leads · Updating clustersâ¦", 696 duration: 1500, 697 doneLabel: "Clusters updated", 698 children: [{ 699 icon: "merge", 700 label: "SaaS companies + Early-stage startups" 701 }] 702 }, 703 { 704 type: "delay", 705 ms: 400 706 }, 707 { 708 type: "agent_text", 709 text: "Done. That gives you <strong class=\"fw-medium\">3 focused lists</strong>. Startup & SaaS is now 330 contacts:", 710 html: true 711 }, 712 { 713 type: "list_preview", 714 lists: [ 715 { 716 name: "Senior decision-makers", 717 count: 301 718 }, 719 { 720 name: "Mid-level managers", 721 count: 312 722 }, 723 { 724 name: "Startup & SaaS", 725 count: 330 726 } 727 ] 728 }, 729 { 730 type: "agent_text", 731 text: "The remaining <strong class=\"fw-medium\">100 contacts</strong> stay in your original list. What would you like to do next?", 732 html: true 733 }, 734 { 735 type: "suggestions", 736 options: ["Create these 3 lists", "Refine further"] 737 }, 738 { 739 type: "agent_trace", 740 label: "Leads · Creating listsâ¦", 741 duration: 3e3, 742 doneLabel: "3 lists created", 743 children: [{ 744 icon: "layer-group", 745 label: "3 lists from 943 contacts" 746 }] 747 }, 748 { 749 type: "side_effect", 750 key: "lists_created" 751 }, 752 { 753 type: "delay", 754 ms: 400 755 }, 756 { 757 type: "agent_text", 758 text: "All done! Here's what was created:" 759 }, 760 { 761 type: "resource_link", 762 data: { 763 productIcon: "h-leads", 764 title: "Senior decision-makers", 765 subtitle: "Leads · 301 people", 766 href: leads_path(), 767 ctaLabel: "Open list" 768 } 769 }, 770 { 771 type: "resource_link", 772 data: { 773 productIcon: "h-leads", 774 title: "Mid-level managers", 775 subtitle: "Leads · 312 people", 776 href: leads_path(), 777 ctaLabel: "Open list" 778 } 779 }, 780 { 781 type: "resource_link", 782 data: { 783 productIcon: "h-leads", 784 title: "Startup & SaaS", 785 subtitle: "Leads · 330 people", 786 href: leads_path(), 787 ctaLabel: "Open list" 788 } 789 }, 790 { 791 type: "agent_text", 792 text: "The remaining <strong class=\"fw-medium\">100 contacts</strong> stay in your original \"SaaS Marketing Decision-Makers\" list.", 793 html: true 794 }, 795 { 796 type: "agent_text", 797 text: "Your lists are ready. Want me to prepare a sequence for each one?" 798 }, 799 { type: "wait_for_user" }, 800 { 801 type: "agent_text", 802 text: "Should each list get its own tailored sequence, or would you prefer a shared template with personalized fields?" 803 }, 804 { 805 type: "suggestions", 806 options: ["Tailored per list", "Shared template"] 807 }, 808 { 809 type: "agent_text", 810 text: "Before I start â a heads up on list sizes:" 811 }, 812 { 813 type: "alert", 814 title: "Large lists may reduce reply rates", 815 description: "Senior decision-makers (301) and mid-level managers (312) are both larger than ideal for a first send. Sequences with 21â50 recipients get a 6.2% reply rate vs. 2.4% for 500+ â that's a 158% difference.", 816 variant: "info" 817 }, 818 { 819 type: "agent_text", 820 text: "I'd suggest launching an initial campaign of ~100 contacts per list first, measuring results, and A/B testing subject lines before rolling out to the full list. What do you think?" 821 }, 822 { 823 type: "suggestions", 824 options: ["First-wave of 100 per list", "Sequence the full lists"] 825 }, 826 { 827 type: "agent_text", 828 text: "Smart move. I'll draft 3 tailored sequences â one for each audience â and set up the first wave of 100 contacts each." 829 }, 830 { 831 type: "agent_trace", 832 label: "Sequences · Writing 3 draftsâ¦", 833 duration: 8e3, 834 doneLabel: "Worked for 18 sec.", 835 children: [{ 836 icon: "pen", 837 label: "3 tailored sequences" 838 }] 839 }, 840 { 841 type: "delay", 842 ms: 400 843 }, 844 { 845 type: "agent_text", 846 text: "Here are the 3 drafts. Each one is <strong class=\"fw-medium\">tailored to its audience</strong> â different angle, different tone:", 847 html: true 848 }, 849 { 850 type: "agent_text", 851 text: "Sequence 1 â <strong class=\"fw-medium\">Senior decision-makers</strong> (100 of 301):", 852 html: true 853 }, 854 { 855 type: "sequence_preview", 856 defaultExpandedIndex: null, 857 steps: [ 858 { 859 label: "Opening email", 860 subject: "A quick thought on {{company}}'s outbound strategy", 861 body: "Hey {{first_name}},\n\nI've been following {{company}}'s growth â impressive trajectory. At your level, I imagine outbound efficie
861ncy is always on the radar.\n\nWe've helped companies like yours increase reply rates by 3à with more targeted prospecting. Worth a 10-minute conversation?\n\nBest,\n{{sender_first_name}}" 862 }, 863 { 864 label: "Follow-up #1 · 3 days later", 865 subject: "Re: A quick thought on {{company}}'s outbound strategy", 866 body: "Hi {{first_name}},\n\nJust circling back â I know your inbox is busy. Happy to share a one-pager on what we've seen work for teams your size.\n\nWould that be useful?" 867 }, 868 { 869 label: "Follow-up #2 · 5 days later", 870 subject: "Last note from me", 871 body: "Hey {{first_name}},\n\nI'll keep this brief â if the timing isn't right, no worries. But if outbound is on your roadmap this quarter, I'd love to help.\n\nCheers,\n{{sender_first_name}}" 872 } 873 ] 874 }, 875 { 876 type: "agent_text", 877 text: "Sequence 2 â <strong class=\"fw-medium\">Mid-level managers</strong> (100 of 312):", 878 html: true 879 }, 880 { 881 type: "sequence_preview", 882 defaultExpandedIndex: null, 883 steps: [ 884 { 885 label: "Opening email", 886 subject: "Making outbound easier for {{company}}", 887 body: "Hey {{first_name}},\n\nRunning outbound at scale is tough â especially when you're juggling lead quality, personalization, and deliverability all at once.\n\nWe've built tools that help marketing managers like you find verified contacts and launch sequences faster. Curious if that resonates?\n\nBest,\n{{sender_first_name}}" 888 }, 889 { 890 label: "Follow-up #1 · 3 days later", 891 subject: "Re: Making outbound easier for {{company}}", 892 body: "Hi {{first_name}},\n\nQuick follow-up â I wanted to share how teams similar to {{company}} are saving 5+ hours per week on prospecting.\n\nWorth a quick look?" 893 }, 894 { 895 label: "Follow-up #2 · 4 days later", 896 subject: "One last idea", 897 body: "Hey {{first_name}},\n\nLast note from me â if you're evaluating outbound tools this quarter, I'd love to be part of the conversation.\n\nNo pressure either way.\n\nCheers,\n{{sender_first_name}}" 898 } 899 ] 900 }, 901 { 902 type: "agent_text", 903 text: "Sequence 3 â <strong class=\"fw-medium\">Startup & SaaS</strong> (100 of 330):", 904 html: true 905 }, 906 { 907 type: "sequence_preview", 908 defaultExpandedIndex: null, 909 steps: [ 910 { 911 label: "Opening email", 912 subject: "Outbound for fast-moving teams like {{company}}", 913 body: "Hey {{first_name}},\n\nStartups move fast â and I've seen early-stage teams waste weeks building lead lists manually when they could be closing.\n\nWe help teams like {{company}} go from zero to first outbound campaign in under an hour. Interested in seeing how?\n\nBest,\n{{sender_first_name}}" 914 }, 915 { 916 label: "Follow-up #1 · 2 days later", 917 subject: "Re: Outbound for fast-moving teams like {{company}}", 918 body: "Hi {{first_name}},\n\nJust a quick bump â I know things move fast at {{company}}. If outbound is a priority this month, I can show you how to get results in days, not weeks.\n\n15 minutes?" 919 }, 920 { 921 label: "Follow-up #2 · 4 days later", 922 subject: "Worth a look?", 923 body: "Hey {{first_name}},\n\nLast one from me â if now's not the time, totally get it. But if you're curious, here's a 2-minute overview of what we do.\n\nCheers,\n{{sender_first_name}}" 924 } 925 ] 926 }, 927 { 928 type: "agent_text", 929 text: "Do these feel right for each audience, or would you like to adjust the angle for any of them?" 930 }, 931 { type: "wait_for_user" }, 932 { 933 type: "agent_text", 934 text: "Got it â making the decision-makers version more direct and cutting the fluff." 935 }, 936 { 937 type: "agent_trace", 938 label: "Sequences · Rewriting draftâ¦", 939 duration: 3e3, 940 doneLabel: "Draft updated", 941 children: [{ 942 icon: "pen", 943 label: "Senior decision-makers · Opening email" 944 }] 945 }, 946 { 947 type: "delay", 948 ms: 400 949 }, 950 { 951 type: "agent_text", 952 text: "Here's the updated opening for Senior decision-makers â sharper and more direct:" 953 }, 954 { 955 type: "sequence_preview", 956 defaultExpandedIndex: 0, 957 steps: [ 958 { 959 label: "Opening email (updated)", 960 subject: "{{company}} + better outbound â quick question", 961 body: "{{first_name}},\n\nI'll be direct: {{company}} is growing fast, and I think your outbound could be growing faster.\n\nWe help teams like yours find the right contacts, verify emails, and launch sequences â all in one place. Three of your competitors are already using us.\n\n10 minutes to see if it fits?\n\n{{sender_first_name}}" 962 }, 963 { 964 label: "Follow-up #1 · 3 days later",
965 subject: "Re: {{company}} + better outbound â quick question", 966 body: "Hi {{first_name}},\n\nJust circling back â I know your inbox is busy. Happy to share a one-pager on what we've seen work for teams your size.\n\nWould that be useful?" 967 }, 968 { 969 label: "Follow-up #2 · 5 days later", 970 subject: "Last note from me", 971 body: "Hey {{first_name}},\n\nI'll keep this brief â if the timing isn't right, no worries. But if outbound is on your roadmap this quarter, I'd love to help.\n\nCheers,\n{{sender_first_name}}" 972 } 973 ] 974 }, 975 { 976 type: "agent_text", 977 text: "Better? If you're happy with all three, I can create the sequences now." 978 }, 979 { type: "wait_for_user" }, 980 { 981 type: "agent_trace", 982 label: "Sequences · Creating 3 sequencesâ¦", 983 duration: 4e3, 984 doneLabel: "3 sequences created", 985 children: [{ 986 icon: "paper-plane", 987 label: "100 recipients each" 988 }] 989 }, 990 { 991 type: "delay", 992 ms: 400 993 }, 994 { 995 type: "agent_text", 996 text: "Done â here's what was created:" 997 }, 998 { 999 type: "resource_link", 1000 data: { 1001 productIcon: "h-sequences", 1002 title: "Senior decision-makers", 1003 subtitle: "Sequence · 100 recipients", 1004 href: campaigns_path(), 1005 ctaLabel: "Open sequence", 1006 tag: "Draft" 1007 } 1008 }, 1009 { 1010 type: "resource_link", 1011 data: { 1012 productIcon: "h-sequences", 1013 title: "Mid-level managers", 1014 subtitle: "Sequence · 100 recipients", 1015 href: campaigns_path(), 1016 ctaLabel: "Open sequence", 1017 tag: "Draft" 1018 } 1019 }, 1020 { 1021 type: "resource_link", 1022 data: { 1023 productIcon: "h-sequences", 1024 title: "Startup & SaaS", 1025 subtitle: "Sequence · 100 recipients", 1026 href: campaigns_path(), 1027 ctaLabel: "Open sequence", 1028 tag: "Draft" 1029 } 1030 }, 1031 { 1032 type: "agent_text", 1033 text: "None of these sequences are active yet â they're all in draft. The remaining contacts in each list are ready for a second w
1033ave once you've reviewed the results from this first send." 1034 }, 1035 { 1036 type: "agent_text", 1037 text: "What would you like to do next?" 1038 }, 1039 { 1040 type: "suggestions", 1041 options: [ 1042 "Review the sequences", 1043 "Launch the first wave", 1044 "Go back to the list" 1045 ] 1046 } 1047 ]; 1048 })))(); 1049} 1050//#endregion 1051//#region app/frontend/pages/Agent/Show.tsx 1052function HandoffConversation(t0) { 1053 const $ = (0, import_compiler_runtime.c)(5); 1054 const { handoff } = t0; 1055 const isFlow2 = handoff.flowId === "flow-2"; 1056 let t1; 1057 if ($[0] !== handoff.items || $[1] !== handoff.stepIndex) { 1058 t1 = { 1059 items: handoff.items, 1060 stepIndex: handoff.stepIndex 1061 }; 1062 $[0] = handoff.items; 1063 $[1] = handoff.stepIndex; 1064 $[2] = t1; 1065 } else t1 = $[2]; 1066 const flow = useConversationFlow(isFlow2 ? FLOW_2 : FLOW_1, isFlow2 ? FLOW_2_TITLE : FLOW_1_TITLE, void 0, void 0, t1); 1067 let t2; 1068 if ($[3] !== flow) { 1069 t2 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AgentConversationView, { 1070 flow, 1071 contentClassName: "d-flex flex-column" 1072 }); 1073 $[3] = flow; 1074 $[4] = t2; 1075 } else t2 = $[4]; 1076 return t2; 1077} 1078function LiveConversation(t0) { 1079 const $ = (0, import_compiler_runtime.c)(15); 1080 const { initialMessage, initialMessages, chatId, title, model, initialFiles, initialMentions, ignorePageConversation, onLiveConversation } = t0; 1081 let t1; 1082 if ($[0] !== chatId || $[1] !== initialFiles || $[2] !== initialMentions || $[3] !== initialMessage || $[4] !== initialMessages || $[5] !== model || $[6] !== title) { 1083 t1 = { 1084 initialMessage, 1085 initialMessages, 1086 chatId, 1087 title, 1088 model, 1089 initialFiles, 1090 initialMentions 1091 }; 1092 $[0] = chatId; 1093 $[1] = initialFiles; 1094 $[2] = initialMentions; 1095 $[3] = initialMessage; 1096 $[4] = initialMessages; 1097 $[5] = model; 1098 $[6] = title; 1099 $[7] = t1; 1100 } else t1 = $[7]; 1101 const flow = useAgentConversation(t1); 1102 let t2; 1103 let t3; 1104 if ($[8] !== flow.liveConversation || $[9] !== onLiveConversation) { 1105 t2 = () => onLiveConversation?.(flow.liveConversation); 1106 t3 = [flow.liveConversation, onLiveConversation]; 1107 $[8] = flow.liveConversation; 1108 $[9] = onLiveConversation; 1109 $[10] = t2; 1110 $[11] = t3; 1111 } else { 1112 t2 = $[10]; 1113 t3 = $[11]; 1114 } 1115 (0, import_react.useEffect)(t2, t3); 1116 let t4; 1117 if ($[12] !== flow || $[13] !== ignorePageConversation) { 1118 t4 = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AgentConversationView, { 1119 flow,
1120 contentClassName: "d-flex flex-column", 1121 ignorePageConversation 1122 }); 1123 $[12] = flow; 1124 $[13] = ignorePageConversation; 1125 $[14] = t4; 1126 } else t4 = $[14]; 1127 return t4; 1128} 1129function Show({ conversationId, initialMessages = [], conversationTitle = null, availableModels = [], defaultModel = "" }) { 1130 const handoff = (0, import_react.useMemo)(() => consumeAgentHandoffOnce(), []); 1131 const hasTranscript = initialMessages.length > 0; 1132 const initialMessage = (0, import_react.useMemo)(() => hasTranscript ? void 0 : new URLSearchParams(window.location.search).get("q") ?? void 0, [hasTranscript]); 1133 const chatId = conversationTitle != null && conversationId != null && /^\d+$/.test(String(conversationId)) ? Number(conversationId) : null; 1134 (0, import_react.useEffect)(() => { 1135 return () => resetAgentHandoffReadGuard(); 1136 }, []); 1137 const [newChat, setNewChat] = (0, import_react.useState)(null); 1138 const conversations = usePage().props.conversations; 1139 const renderedFor = conversationId ?? null; 1140 const opener = newChat?.from === renderedFor ? newChat : null; 1141 (0, import_react.useEffect)(() => { 1142 const onClick = (event) => { 1143 if (event.defaultPrevented || isModifiedClick(event)) return; 1144 const target = event.target; 1145 if (!(target instanceof Element)) return; 1146 const anchor = target.closest("a"); 1147 if (anchor?.getAttribute("href") !== agent_path()) return; 1148 if (anchor.target && anchor.target !== "_self") return; 1149 event.preventDefault(); 1150 if (window.location.pathname !== agent_path()) window.history.pushState(null, "", agent_path()); 1151 setNewChat((current) => ({ 1152 from: renderedFor, 1153 model: defaultModel || availableModels[0]?.value || "", 1154 started: current?.from === renderedFor ? current.started ?? null : null 1155 })); 1156 }; 1157 document.addEventListener("click", onClick, true); 1158 return () => document.removeEventListener("click", onClick, true); 1159 }, [ 1160 availableModels, 1161 defaultModel, 1162 renderedFor 1163 ]); 1164 (0, import_react.useEffect)(() => { 1165 const onPopState = () => { 1166 if (window.location.pathname === agent_path()) setNewChat((current_0) => current_0 ? { 1167 ...current_0, 1168 message: void 0, 1169 files: void 0, 1170 mentions: void 0 1171 } : current_0); 1172 else setNewChat(null); 1173 }; 1174 window.addEventListener("popstate", onPopState); 1175 return () => window.removeEventListener("popstate", onPopState); 1176 }, []); 1177 const openNewChat = (text, files, mentions, model) => { 1178 setNewChat((current_1) => ({ 1179 from: renderedFor, 1180 started: current_1?.started ?? null, 1181 message: text, 1182 files, 1183 mentions, 1184 model 1185 })); 1186 const url = agent_conversation_path("new") + (text ? "?q=" + encodeURIComponent(text) : ""); 1187 window.history.pushState({ agentPhase: "conversation" }, "", url); 1188 }; 1189 const noteStartedConversation = (conversation) => setNewChat((current_2) => current_2 && current_2.started !== conversation ? { 1190 ...current_2, 1191 started: conversation 1192 } : current_2); 1193 if (handoff) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HandoffConversation, { handoff }); 1194 if (opener && opener.message === void 0 && opener.files === void 0) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AgentLanding, { 1195 conversations, 1196 availableModels, 1197 defaultModel, 1198 startedConversation: opener.started ?? null, 1199 onSubmit: openNewChat 1200 }); 1201 if (opener) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LiveConversation, { 1202 initialMessage: opener.message, 1203 initialMessages: [], 1204 chatId: null, 1205 model: opener.model, 1206 initialFiles: opener.files, 1207 initialMentions: opener.mentions, 1208 ignorePageConversation: true, 1209 onLiveConversation: noteStartedConversation 1210 }, "new-chat"); 1211 return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LiveConversation, { 1212 initialMessage, 1213 initialMessages, 1214 chatId, 1215 title: conversationTitle ?? void 0 1216 }, conversationId ?? "new"); 1217} 1218var import_compiler_runtime, import_react, import_jsx_runtime; 1219function init_Show() { 1220 return (init_Show = __esmMin((() => { 1221 import_compiler_runtime = require_compiler_runtime(); 1222 import_react = require_react(); 1223 init_dist(); 1224 init_AgentConversationView(); 1225 init_AgentLanding(); 1226 init_routes(); 1227 init_useAgentConversation(); 1228 init_useConversationFlow(); 1229 init_flow1(); 1230 init_flow2(); 1231 init_agent_handoff(); 1232 import_jsx_runtime = require_jsx_runtime(); 1233 })))(); 1234} 1235//#endregion 1236init_Show(); 1237export { Show as default };
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.