fodda-mcp 1.46.31 → 1.46.97
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 +14 -94
- package/dist/agents/fodda-researcher/skills.d.ts +1 -1
- package/dist/agents/fodda-researcher/skills.d.ts.map +1 -1
- package/dist/agents/fodda-researcher/skills.js +1 -1
- package/dist/brandTemplate.d.ts +1 -1
- package/dist/brandTemplate.d.ts.map +1 -1
- package/dist/brandTemplate.js +162 -74
- package/dist/brandTemplate.js.map +1 -1
- package/dist/catalogCache.d.ts +29 -1
- package/dist/catalogCache.d.ts.map +1 -1
- package/dist/catalogCache.js +267 -16
- package/dist/catalogCache.js.map +1 -1
- package/dist/coverageRelevance.d.ts +97 -2
- package/dist/coverageRelevance.d.ts.map +1 -1
- package/dist/coverageRelevance.js +959 -164
- package/dist/coverageRelevance.js.map +1 -1
- package/dist/editorialFill.d.ts +5 -0
- package/dist/editorialFill.d.ts.map +1 -1
- package/dist/editorialFill.js +1 -1
- package/dist/editorialFill.js.map +1 -1
- package/dist/enrichment.d.ts +26 -0
- package/dist/enrichment.d.ts.map +1 -1
- package/dist/enrichment.js +394 -31
- package/dist/enrichment.js.map +1 -1
- package/dist/errorHandling.d.ts +35 -7
- package/dist/errorHandling.d.ts.map +1 -1
- package/dist/errorHandling.js +225 -155
- package/dist/errorHandling.js.map +1 -1
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +351 -143
- package/dist/index.js.map +1 -1
- package/dist/jobs/jlens_quarterly_sweep.d.ts +62 -0
- package/dist/jobs/jlens_quarterly_sweep.d.ts.map +1 -0
- package/dist/jobs/jlens_quarterly_sweep.js +160 -0
- package/dist/jobs/jlens_quarterly_sweep.js.map +1 -0
- package/dist/pricingCache.d.ts.map +1 -1
- package/dist/pricingCache.js +41 -1
- package/dist/pricingCache.js.map +1 -1
- package/dist/queryCache.d.ts.map +1 -1
- package/dist/queryCache.js +2 -0
- package/dist/queryCache.js.map +1 -1
- package/dist/reportBriefing.d.ts +89 -0
- package/dist/reportBriefing.d.ts.map +1 -0
- package/dist/reportBriefing.js +662 -0
- package/dist/reportBriefing.js.map +1 -0
- package/dist/searchTemplate.d.ts.map +1 -1
- package/dist/searchTemplate.js +65 -53
- package/dist/searchTemplate.js.map +1 -1
- package/dist/services/graphRouter.d.ts +7 -0
- package/dist/services/graphRouter.d.ts.map +1 -0
- package/dist/services/graphRouter.js +7 -0
- package/dist/services/graphRouter.js.map +1 -0
- package/dist/services/notifications.d.ts +49 -0
- package/dist/services/notifications.d.ts.map +1 -0
- package/dist/services/notifications.js +206 -0
- package/dist/services/notifications.js.map +1 -0
- package/dist/sessionTracker.d.ts +19 -2
- package/dist/sessionTracker.d.ts.map +1 -1
- package/dist/sessionTracker.js +69 -16
- package/dist/sessionTracker.js.map +1 -1
- package/dist/skillClient.d.ts.map +1 -1
- package/dist/skillClient.js +11 -6
- package/dist/skillClient.js.map +1 -1
- package/dist/svgVisuals.d.ts +17 -19
- package/dist/svgVisuals.d.ts.map +1 -1
- package/dist/svgVisuals.js +189 -233
- package/dist/svgVisuals.js.map +1 -1
- package/dist/systemPrompt.d.ts +7 -2
- package/dist/systemPrompt.d.ts.map +1 -1
- package/dist/systemPrompt.js +110 -68
- package/dist/systemPrompt.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +15 -0
- package/dist/telemetry.js.map +1 -1
- package/dist/test_adjacent_trends_polymorphic.d.ts +2 -0
- package/dist/test_adjacent_trends_polymorphic.d.ts.map +1 -0
- package/dist/test_adjacent_trends_polymorphic.js +154 -0
- package/dist/test_adjacent_trends_polymorphic.js.map +1 -0
- package/dist/test_book_a_call_live.js +18 -5
- package/dist/test_book_a_call_live.js.map +1 -1
- package/dist/test_byo_mcp_submission_clarity.d.ts +2 -0
- package/dist/test_byo_mcp_submission_clarity.d.ts.map +1 -0
- package/dist/test_byo_mcp_submission_clarity.js +142 -0
- package/dist/test_byo_mcp_submission_clarity.js.map +1 -0
- package/dist/test_capabilities_guidance.d.ts +2 -0
- package/dist/test_capabilities_guidance.d.ts.map +1 -0
- package/dist/test_capabilities_guidance.js +372 -0
- package/dist/test_capabilities_guidance.js.map +1 -0
- package/dist/test_client_provenance.d.ts +2 -0
- package/dist/test_client_provenance.d.ts.map +1 -0
- package/dist/test_client_provenance.js +77 -0
- package/dist/test_client_provenance.js.map +1 -0
- package/dist/test_connection_surface_cleanup.d.ts +2 -0
- package/dist/test_connection_surface_cleanup.d.ts.map +1 -0
- package/dist/test_connection_surface_cleanup.js +203 -0
- package/dist/test_connection_surface_cleanup.js.map +1 -0
- package/dist/test_consult_routing.d.ts +2 -0
- package/dist/test_consult_routing.d.ts.map +1 -0
- package/dist/test_consult_routing.js +86 -0
- package/dist/test_consult_routing.js.map +1 -0
- package/dist/test_consult_split.d.ts +2 -0
- package/dist/test_consult_split.d.ts.map +1 -0
- package/dist/test_consult_split.js +30 -0
- package/dist/test_consult_split.js.map +1 -0
- package/dist/test_coverage_relevance.js +111 -70
- package/dist/test_coverage_relevance.js.map +1 -1
- package/dist/test_coverage_replay.d.ts +2 -0
- package/dist/test_coverage_replay.d.ts.map +1 -0
- package/dist/test_coverage_replay.js +170 -0
- package/dist/test_coverage_replay.js.map +1 -0
- package/dist/test_dcr_and_legacy_deprecation.js +45 -50
- package/dist/test_dcr_and_legacy_deprecation.js.map +1 -1
- package/dist/test_demand_signal_logging.d.ts +2 -0
- package/dist/test_demand_signal_logging.d.ts.map +1 -0
- package/dist/test_demand_signal_logging.js +92 -0
- package/dist/test_demand_signal_logging.js.map +1 -0
- package/dist/test_earnings_activity_scope.d.ts +5 -0
- package/dist/test_earnings_activity_scope.d.ts.map +1 -0
- package/dist/test_earnings_activity_scope.js +101 -0
- package/dist/test_earnings_activity_scope.js.map +1 -0
- package/dist/test_earnings_divergence_live.d.ts +5 -0
- package/dist/test_earnings_divergence_live.d.ts.map +1 -0
- package/dist/test_earnings_divergence_live.js +135 -0
- package/dist/test_earnings_divergence_live.js.map +1 -0
- package/dist/test_earnings_hygiene_and_binding.d.ts +5 -0
- package/dist/test_earnings_hygiene_and_binding.d.ts.map +1 -0
- package/dist/test_earnings_hygiene_and_binding.js +104 -0
- package/dist/test_earnings_hygiene_and_binding.js.map +1 -0
- package/dist/test_exec_quotes_render.d.ts +2 -0
- package/dist/test_exec_quotes_render.d.ts.map +1 -0
- package/dist/test_exec_quotes_render.js +86 -0
- package/dist/test_exec_quotes_render.js.map +1 -0
- package/dist/test_expert_intro.d.ts +2 -0
- package/dist/test_expert_intro.d.ts.map +1 -0
- package/dist/test_expert_intro.js +57 -0
- package/dist/test_expert_intro.js.map +1 -0
- package/dist/test_expert_layer.d.ts +11 -0
- package/dist/test_expert_layer.d.ts.map +1 -0
- package/dist/test_expert_layer.js +356 -0
- package/dist/test_expert_layer.js.map +1 -0
- package/dist/test_gap_alert.js +8 -0
- package/dist/test_gap_alert.js.map +1 -1
- package/dist/test_grok_offering_surfaces.d.ts +2 -0
- package/dist/test_grok_offering_surfaces.d.ts.map +1 -0
- package/dist/test_grok_offering_surfaces.js +155 -0
- package/dist/test_grok_offering_surfaces.js.map +1 -0
- package/dist/test_human_agent_live.d.ts +2 -0
- package/dist/test_human_agent_live.d.ts.map +1 -0
- package/dist/test_human_agent_live.js +48 -0
- package/dist/test_human_agent_live.js.map +1 -0
- package/dist/test_identity_gap.d.ts +2 -0
- package/dist/test_identity_gap.d.ts.map +1 -0
- package/dist/test_identity_gap.js +171 -0
- package/dist/test_identity_gap.js.map +1 -0
- package/dist/test_intelligence_and_verifier.d.ts +17 -0
- package/dist/test_intelligence_and_verifier.d.ts.map +1 -0
- package/dist/test_intelligence_and_verifier.js +162 -0
- package/dist/test_intelligence_and_verifier.js.map +1 -0
- package/dist/test_latency_mcp_brief5.d.ts +12 -0
- package/dist/test_latency_mcp_brief5.d.ts.map +1 -0
- package/dist/test_latency_mcp_brief5.js +200 -0
- package/dist/test_latency_mcp_brief5.js.map +1 -0
- package/dist/test_limit_and_credit_card_capture.d.ts +21 -0
- package/dist/test_limit_and_credit_card_capture.d.ts.map +1 -0
- package/dist/test_limit_and_credit_card_capture.js +216 -0
- package/dist/test_limit_and_credit_card_capture.js.map +1 -0
- package/dist/test_list_graphs_topics.js +1 -1
- package/dist/test_list_graphs_topics.js.map +1 -1
- package/dist/test_live_deployed_mcp_search.d.ts +2 -0
- package/dist/test_live_deployed_mcp_search.d.ts.map +1 -0
- package/dist/test_live_deployed_mcp_search.js +85 -0
- package/dist/test_live_deployed_mcp_search.js.map +1 -0
- package/dist/test_live_deployed_split.d.ts +2 -0
- package/dist/test_live_deployed_split.d.ts.map +1 -0
- package/dist/test_live_deployed_split.js +72 -0
- package/dist/test_live_deployed_split.js.map +1 -0
- package/dist/test_live_endpoint_runner.js +2 -2
- package/dist/test_live_endpoint_runner.js.map +1 -1
- package/dist/test_live_mcp.js +1 -1
- package/dist/test_live_mcp.js.map +1 -1
- package/dist/test_live_neil_widget.d.ts +2 -0
- package/dist/test_live_neil_widget.d.ts.map +1 -0
- package/dist/test_live_neil_widget.js +84 -0
- package/dist/test_live_neil_widget.js.map +1 -0
- package/dist/test_longpoll_status.d.ts +2 -0
- package/dist/test_longpoll_status.d.ts.map +1 -0
- package/dist/test_longpoll_status.js +117 -0
- package/dist/test_longpoll_status.js.map +1 -0
- package/dist/test_mcp_find_expert_and_vocabulary_routing.d.ts +2 -0
- package/dist/test_mcp_find_expert_and_vocabulary_routing.d.ts.map +1 -0
- package/dist/test_mcp_find_expert_and_vocabulary_routing.js +130 -0
- package/dist/test_mcp_find_expert_and_vocabulary_routing.js.map +1 -0
- package/dist/test_next_moves.js +644 -279
- package/dist/test_next_moves.js.map +1 -1
- package/dist/test_next_moves_transcripts.js +122 -40
- package/dist/test_next_moves_transcripts.js.map +1 -1
- package/dist/test_on_request_caller_identity.d.ts +13 -0
- package/dist/test_on_request_caller_identity.d.ts.map +1 -0
- package/dist/test_on_request_caller_identity.js +131 -0
- package/dist/test_on_request_caller_identity.js.map +1 -0
- package/dist/test_on_request_intercept.d.ts +10 -0
- package/dist/test_on_request_intercept.d.ts.map +1 -0
- package/dist/test_on_request_intercept.js +95 -0
- package/dist/test_on_request_intercept.js.map +1 -0
- package/dist/test_onboarding_consent_and_errors.d.ts +2 -0
- package/dist/test_onboarding_consent_and_errors.d.ts.map +1 -0
- package/dist/test_onboarding_consent_and_errors.js +110 -0
- package/dist/test_onboarding_consent_and_errors.js.map +1 -0
- package/dist/test_onboarding_live_scenarios.d.ts +2 -0
- package/dist/test_onboarding_live_scenarios.d.ts.map +1 -0
- package/dist/test_onboarding_live_scenarios.js +189 -0
- package/dist/test_onboarding_live_scenarios.js.map +1 -0
- package/dist/test_referral_live.d.ts +2 -0
- package/dist/test_referral_live.d.ts.map +1 -0
- package/dist/test_referral_live.js +33 -0
- package/dist/test_referral_live.js.map +1 -0
- package/dist/test_referral_piers.d.ts +2 -0
- package/dist/test_referral_piers.d.ts.map +1 -0
- package/dist/test_referral_piers.js +33 -0
- package/dist/test_referral_piers.js.map +1 -0
- package/dist/test_report_editorial_briefing.d.ts +21 -0
- package/dist/test_report_editorial_briefing.d.ts.map +1 -0
- package/dist/test_report_editorial_briefing.js +356 -0
- package/dist/test_report_editorial_briefing.js.map +1 -0
- package/dist/test_search_graph_quality.d.ts +2 -0
- package/dist/test_search_graph_quality.d.ts.map +1 -0
- package/dist/test_search_graph_quality.js +493 -0
- package/dist/test_search_graph_quality.js.map +1 -0
- package/dist/test_service_to_service_auth.d.ts +2 -0
- package/dist/test_service_to_service_auth.d.ts.map +1 -0
- package/dist/test_service_to_service_auth.js +199 -0
- package/dist/test_service_to_service_auth.js.map +1 -0
- package/dist/test_sources_live.d.ts +2 -0
- package/dist/test_sources_live.d.ts.map +1 -0
- package/dist/test_sources_live.js +30 -0
- package/dist/test_sources_live.js.map +1 -0
- package/dist/test_specialist_and_analyst_tiers.d.ts +2 -0
- package/dist/test_specialist_and_analyst_tiers.d.ts.map +1 -0
- package/dist/test_specialist_and_analyst_tiers.js +155 -0
- package/dist/test_specialist_and_analyst_tiers.js.map +1 -0
- package/dist/test_v2_2_visual_hardening.d.ts +5 -0
- package/dist/test_v2_2_visual_hardening.d.ts.map +1 -0
- package/dist/test_v2_2_visual_hardening.js +333 -0
- package/dist/test_v2_2_visual_hardening.js.map +1 -0
- package/dist/test_verify_deprecate_render_spec.d.ts +2 -0
- package/dist/test_verify_deprecate_render_spec.d.ts.map +1 -0
- package/dist/test_verify_deprecate_render_spec.js +217 -0
- package/dist/test_verify_deprecate_render_spec.js.map +1 -0
- package/dist/test_verify_neil_demo.d.ts +2 -0
- package/dist/test_verify_neil_demo.d.ts.map +1 -0
- package/dist/test_verify_neil_demo.js +149 -0
- package/dist/test_verify_neil_demo.js.map +1 -0
- package/dist/test_waitable_research_and_grounded_links.d.ts +2 -0
- package/dist/test_waitable_research_and_grounded_links.d.ts.map +1 -0
- package/dist/test_waitable_research_and_grounded_links.js +129 -0
- package/dist/test_waitable_research_and_grounded_links.js.map +1 -0
- package/dist/test_widget_guards.d.ts +2 -0
- package/dist/test_widget_guards.d.ts.map +1 -0
- package/dist/test_widget_guards.js +229 -0
- package/dist/test_widget_guards.js.map +1 -0
- package/dist/test_zero_retention_alerts.d.ts +14 -0
- package/dist/test_zero_retention_alerts.d.ts.map +1 -0
- package/dist/test_zero_retention_alerts.js +76 -0
- package/dist/test_zero_retention_alerts.js.map +1 -0
- package/dist/toolHandlers.d.ts +38 -1
- package/dist/toolHandlers.d.ts.map +1 -1
- package/dist/toolHandlers.js +3856 -938
- package/dist/toolHandlers.js.map +1 -1
- package/dist/tools.d.ts +20 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +25 -4
- package/dist/tools.js.map +1 -1
- package/dist/verify_discoverability.d.ts +2 -0
- package/dist/verify_discoverability.d.ts.map +1 -0
- package/dist/verify_discoverability.js +53 -0
- package/dist/verify_discoverability.js.map +1 -0
- package/dist/verify_tools_endpoint.js +16 -3
- package/dist/verify_tools_endpoint.js.map +1 -1
- package/dist/widgetShell.d.ts +2 -2
- package/dist/widgetShell.d.ts.map +1 -1
- package/dist/widgetShell.js +1 -1
- package/dist/widgetShell.js.map +1 -1
- package/package.json +1 -1
- package/server.json +4 -32
- package/dist/oauthRegisterShim.d.ts +0 -13
- package/dist/oauthRegisterShim.d.ts.map +0 -1
- package/dist/oauthRegisterShim.js +0 -83
- package/dist/oauthRegisterShim.js.map +0 -1
package/dist/enrichment.js
CHANGED
|
@@ -36,15 +36,50 @@ export function computeLifecycle(row, now) {
|
|
|
36
36
|
return 'mature';
|
|
37
37
|
return 'building';
|
|
38
38
|
}
|
|
39
|
+
export function reconcileFreshnessDays(row, now) {
|
|
40
|
+
const ts = now || Date.now();
|
|
41
|
+
const substantiveDateStr = row.freshnessDate || row.published_date || row.lastSeen || (Array.isArray(row.evidence) && row.evidence[0]?.publishedAt) || null;
|
|
42
|
+
if (substantiveDateStr) {
|
|
43
|
+
const subTime = new Date(substantiveDateStr).getTime();
|
|
44
|
+
if (!isNaN(subTime) && subTime > 0) {
|
|
45
|
+
const calculatedDays = Math.max(0, Math.floor((ts - subTime) / 86400000));
|
|
46
|
+
// If the API returned a freshnessDays that is derived from DB updated_at
|
|
47
|
+
// (e.g. freshnessDays is 16 from DB updated_at while substantive date is 190 days ago),
|
|
48
|
+
// prefer the substantive calculation.
|
|
49
|
+
if (row.freshnessDays !== undefined && row.freshnessDays !== null) {
|
|
50
|
+
if (Math.abs(calculatedDays - row.freshnessDays) > 30 && calculatedDays > row.freshnessDays) {
|
|
51
|
+
return calculatedDays;
|
|
52
|
+
}
|
|
53
|
+
return row.freshnessDays;
|
|
54
|
+
}
|
|
55
|
+
return calculatedDays;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (row.freshnessDays !== undefined && row.freshnessDays !== null) {
|
|
59
|
+
return row.freshnessDays;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
39
63
|
export function computeMomentum(row, now) {
|
|
40
64
|
const ts = now || Date.now();
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
65
|
+
const freshnessDays = reconcileFreshnessDays(row, ts);
|
|
66
|
+
if (freshnessDays !== null) {
|
|
67
|
+
if (freshnessDays < 45)
|
|
68
|
+
return 'accelerating';
|
|
69
|
+
if (freshnessDays < 120)
|
|
70
|
+
return 'steady';
|
|
71
|
+
if (freshnessDays < 240)
|
|
72
|
+
return 'building';
|
|
73
|
+
return 'slowing';
|
|
74
|
+
}
|
|
75
|
+
// Fallback based on lifecycle or evidence count
|
|
76
|
+
if (row.lifecycle === 'fading')
|
|
77
|
+
return 'slowing';
|
|
78
|
+
if (row.lifecycle === 'emerging' || row.lifecycle === 'building')
|
|
46
79
|
return 'steady';
|
|
47
|
-
|
|
80
|
+
if ((row.evidence_count || row.evidenceCount || 0) >= 5)
|
|
81
|
+
return 'steady';
|
|
82
|
+
return 'steady';
|
|
48
83
|
}
|
|
49
84
|
export function isFastMover(row, now) {
|
|
50
85
|
const ts = now || Date.now();
|
|
@@ -74,6 +109,109 @@ const EVIDENCE_ROLES = {
|
|
|
74
109
|
'datapoint': 'background', // Narrative texture — NOT standalone evidence
|
|
75
110
|
'data point': 'background',
|
|
76
111
|
};
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
// Geographic Metadata & Placeholder Cleaning
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
export const KNOWN_CITY_LOCATIONS = {
|
|
116
|
+
'milan': 'Milan, Italy',
|
|
117
|
+
'paris': 'Paris, France',
|
|
118
|
+
'tokyo': 'Tokyo, Japan',
|
|
119
|
+
'harajuku': 'Tokyo, Japan',
|
|
120
|
+
'ginza': 'Tokyo, Japan',
|
|
121
|
+
'shibuya': 'Tokyo, Japan',
|
|
122
|
+
'kyoto': 'Kyoto, Japan',
|
|
123
|
+
'london': 'London, UK',
|
|
124
|
+
'mayfair': 'London, UK',
|
|
125
|
+
'covent garden': 'London, UK',
|
|
126
|
+
'new york': 'New York, USA',
|
|
127
|
+
'soho': 'New York, USA',
|
|
128
|
+
'manhattan': 'New York, USA',
|
|
129
|
+
'brooklyn': 'New York, USA',
|
|
130
|
+
'los angeles': 'Los Angeles, USA',
|
|
131
|
+
'beverly hills': 'Los Angeles, USA',
|
|
132
|
+
'west hollywood': 'Los Angeles, USA',
|
|
133
|
+
'miami': 'Miami, USA',
|
|
134
|
+
'chicago': 'Chicago, USA',
|
|
135
|
+
'san francisco': 'San Francisco, USA',
|
|
136
|
+
'seattle': 'Seattle, USA',
|
|
137
|
+
'atlanta': 'Atlanta, USA',
|
|
138
|
+
'las vegas': 'Las Vegas, USA',
|
|
139
|
+
'dallas': 'Dallas, USA',
|
|
140
|
+
'austin': 'Austin, USA',
|
|
141
|
+
'boston': 'Boston, USA',
|
|
142
|
+
'singapore': 'Singapore',
|
|
143
|
+
'hong kong': 'Hong Kong',
|
|
144
|
+
'shanghai': 'Shanghai, China',
|
|
145
|
+
'beijing': 'Beijing, China',
|
|
146
|
+
'seoul': 'Seoul, South Korea',
|
|
147
|
+
'gangnam': 'Seoul, South Korea',
|
|
148
|
+
'dubai': 'Dubai, UAE',
|
|
149
|
+
'rome': 'Rome, Italy',
|
|
150
|
+
'florence': 'Florence, Italy',
|
|
151
|
+
'venice': 'Venice, Italy',
|
|
152
|
+
'berlin': 'Berlin, Germany',
|
|
153
|
+
'munich': 'Munich, Germany',
|
|
154
|
+
'madrid': 'Madrid, Spain',
|
|
155
|
+
'barcelona': 'Barcelona, Spain',
|
|
156
|
+
'sydney': 'Sydney, Australia',
|
|
157
|
+
'melbourne': 'Melbourne, Australia',
|
|
158
|
+
'toronto': 'Toronto, Canada',
|
|
159
|
+
'vancouver': 'Vancouver, Canada',
|
|
160
|
+
'buenos aires': 'Buenos Aires, Argentina',
|
|
161
|
+
'são paulo': 'São Paulo, Brazil',
|
|
162
|
+
'sao paulo': 'São Paulo, Brazil',
|
|
163
|
+
'rio de janeiro': 'Rio de Janeiro, Brazil'
|
|
164
|
+
};
|
|
165
|
+
const PLACEHOLDER_TOKENS = new Set([
|
|
166
|
+
'string', 'n/a', 'na', 'n', 'a', 'none', 'null', 'undefined', 'unknown',
|
|
167
|
+
'placeholder', 'test', 'tbd', 'tba'
|
|
168
|
+
]);
|
|
169
|
+
export function isPlaceholderPlace(val) {
|
|
170
|
+
if (val === null || val === undefined)
|
|
171
|
+
return true;
|
|
172
|
+
if (typeof val !== 'string') {
|
|
173
|
+
if (Array.isArray(val)) {
|
|
174
|
+
return val.length === 0 || val.every(p => isPlaceholderPlace(p));
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
const trimmed = val.trim().toLowerCase();
|
|
179
|
+
if (!trimmed)
|
|
180
|
+
return true;
|
|
181
|
+
if (PLACEHOLDER_TOKENS.has(trimmed) || /^(string(,\s*string)*|n\/?a|none|null|undefined|unknown|placeholder|test|tbd|tba)$/i.test(trimmed)) {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
const parts = trimmed.split(/[,/]/).map(p => p.trim()).filter(Boolean);
|
|
185
|
+
if (parts.length === 0)
|
|
186
|
+
return true;
|
|
187
|
+
return parts.every(p => PLACEHOLDER_TOKENS.has(p));
|
|
188
|
+
}
|
|
189
|
+
export function reconcilePlace(currentPlace, title, summary) {
|
|
190
|
+
let place = currentPlace && !isPlaceholderPlace(currentPlace) ? currentPlace.trim() : undefined;
|
|
191
|
+
const text = `${title || ''} ${summary || ''}`;
|
|
192
|
+
if (!text.trim())
|
|
193
|
+
return place;
|
|
194
|
+
// Normalize duplicate components like "Singapore, Singapore" -> "Singapore"
|
|
195
|
+
if (place) {
|
|
196
|
+
const parts = place.split(',').map(s => s.trim());
|
|
197
|
+
if (parts.length === 2 && parts[0] && parts[1] && parts[0].toLowerCase() === parts[1].toLowerCase()) {
|
|
198
|
+
place = parts[0];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// Sort by key length descending so longer/more specific keys match before shorter substrings
|
|
202
|
+
const sortedEntries = Object.entries(KNOWN_CITY_LOCATIONS).sort((a, b) => b[0].length - a[0].length);
|
|
203
|
+
for (const [cityKey, canonicalLocation] of sortedEntries) {
|
|
204
|
+
const pattern = new RegExp(`\\b(?:in|at|across|hosted in|opens? in|launched in)\\s+${cityKey}\\b|\\b${cityKey}\\s+(?:pop-?up|ephemeral|store|carousel|activation|flagship|boutique|residency)\\b`, 'i');
|
|
205
|
+
if (pattern.test(text)) {
|
|
206
|
+
// If place is missing or contradicts the explicit city from text, override
|
|
207
|
+
if (!place || !place.toLowerCase().includes(cityKey)) {
|
|
208
|
+
return canonicalLocation;
|
|
209
|
+
}
|
|
210
|
+
return place;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return place;
|
|
214
|
+
}
|
|
77
215
|
/**
|
|
78
216
|
* Enrich evidence items with pre-formatted markdown citations and editorial roles.
|
|
79
217
|
* Models are much more likely to pass through a ready-made link than construct one.
|
|
@@ -92,14 +230,15 @@ export function enrichEvidence(items, opts = {}) {
|
|
|
92
230
|
});
|
|
93
231
|
}
|
|
94
232
|
return items.map(item => {
|
|
233
|
+
const cleanItem = { ...item };
|
|
95
234
|
// Assign editorial role based on content type — but don't stamp unknown
|
|
96
235
|
// contentTypes as 'proof' (that mislabels everything as standalone evidence).
|
|
97
|
-
const ct = (
|
|
236
|
+
const ct = (cleanItem.contentType || '').toLowerCase();
|
|
98
237
|
const mappedRole = EVIDENCE_ROLES[ct];
|
|
99
238
|
if (mappedRole)
|
|
100
|
-
|
|
101
|
-
const url =
|
|
102
|
-
const rawPubName =
|
|
239
|
+
cleanItem.role = mappedRole;
|
|
240
|
+
const url = cleanItem.sourceUrl?.trim();
|
|
241
|
+
const rawPubName = cleanItem.publication?.trim() || cleanItem.sourceName?.trim() || (url ? extractCleanDomain(url) : 'Source');
|
|
103
242
|
// Clean RSS feed labels (e.g. "Fast Casual | Latest Media" -> "Fast Casual", "NYT > Top Stories" -> "NYT")
|
|
104
243
|
let cleanPub = rawPubName.split('|')[0].trim().split('>')[0].trim().split(' - ')[0].trim().split(':')[0].trim();
|
|
105
244
|
if (cleanPub.endsWith(' RSS') || cleanPub.endsWith(' Feed')) {
|
|
@@ -120,33 +259,223 @@ export function enrichEvidence(items, opts = {}) {
|
|
|
120
259
|
}
|
|
121
260
|
const isInternalFoddaUrl = url ? /fodda\.ai/i.test(url) : true;
|
|
122
261
|
const finalPubLabel = cleanPub.startsWith('via ') ? cleanPub : `via ${cleanPub}`;
|
|
123
|
-
|
|
124
|
-
if (
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
262
|
+
cleanItem.short_citation = (url && !isInternalFoddaUrl) ? `[${finalPubLabel}](${url})` : finalPubLabel;
|
|
263
|
+
if (!cleanItem.formatted_citation) {
|
|
264
|
+
const title = cleanItem.title?.trim();
|
|
265
|
+
// Enhanced citation for quotes with speaker attribution
|
|
266
|
+
if (cleanItem.role === 'voice' && cleanItem.speakerName) {
|
|
267
|
+
const speaker = cleanItem.speakerName;
|
|
268
|
+
const titleSuffix = cleanItem.speakerTitle ? `, ${cleanItem.speakerTitle}` : '';
|
|
269
|
+
const pub = cleanItem.publication || 'Source';
|
|
270
|
+
if (url) {
|
|
271
|
+
cleanItem.formatted_citation = `"${title || 'Quote'}" — ${speaker}${titleSuffix} ([${pub}](${url}))`;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
cleanItem.formatted_citation = `"${title || 'Quote'}" — ${speaker}${titleSuffix} (${pub})`;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
else if (title && url) {
|
|
278
|
+
cleanItem.formatted_citation = `[${title}](${url})`;
|
|
279
|
+
}
|
|
280
|
+
else if (title) {
|
|
281
|
+
cleanItem.formatted_citation = `${title} (no link available)`;
|
|
282
|
+
}
|
|
283
|
+
else if (url) {
|
|
284
|
+
cleanItem.formatted_citation = `[Source](${url})`;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Clean and reconcile place metadata
|
|
288
|
+
if (cleanItem.place !== undefined) {
|
|
289
|
+
cleanItem.place = reconcilePlace(cleanItem.place, cleanItem.title, cleanItem.summary);
|
|
290
|
+
if (!cleanItem.place || isPlaceholderPlace(cleanItem.place)) {
|
|
291
|
+
delete cleanItem.place;
|
|
134
292
|
}
|
|
135
|
-
|
|
136
|
-
|
|
293
|
+
}
|
|
294
|
+
else if (cleanItem.title || cleanItem.summary) {
|
|
295
|
+
const detectedPlace = reconcilePlace(undefined, cleanItem.title, cleanItem.summary);
|
|
296
|
+
if (detectedPlace) {
|
|
297
|
+
cleanItem.place = detectedPlace;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
// Clean dead / null / empty / placeholder fields to prevent LLM context bloat
|
|
301
|
+
for (const k of ['imageUrl', 'speakerName', 'speakerTitle', 'publication', 'place']) {
|
|
302
|
+
if (cleanItem[k] === null || cleanItem[k] === undefined || cleanItem[k] === '' || (k === 'place' && isPlaceholderPlace(cleanItem[k]))) {
|
|
303
|
+
delete cleanItem[k];
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (cleanItem.id && cleanItem.node_id && String(cleanItem.id) === String(cleanItem.node_id)) {
|
|
307
|
+
delete cleanItem.id;
|
|
308
|
+
}
|
|
309
|
+
if (Array.isArray(cleanItem.brandNames) && cleanItem.brandNames.length === 0) {
|
|
310
|
+
delete cleanItem.brandNames;
|
|
311
|
+
}
|
|
312
|
+
return cleanItem;
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
// ---------------------------------------------------------------------------
|
|
316
|
+
// Market Tier & Category Vocabularies
|
|
317
|
+
// ---------------------------------------------------------------------------
|
|
318
|
+
export const LUXURY_KEYWORDS = new Set(['luxury', 'haute', 'couture', 'prestige', 'high-end', 'designer']);
|
|
319
|
+
export const LUXURY_BRANDS = new Set([
|
|
320
|
+
'dior', 'louis vuitton', 'chanel', 'gucci', 'hermès', 'hermes', 'prada', 'cartier',
|
|
321
|
+
'tiffany', 'saint laurent', 'balenciaga', 'bottega veneta', 'burberry', 'moncler',
|
|
322
|
+
'loewe', 'celine', 'fendi', 'versace', 'ferragamo', 'valentino', 'rolex', 'harrods',
|
|
323
|
+
'maison margiela', 'the macallan', 'hennessy', 'rh', 'nordstrom', 'saks', 'bergdorf',
|
|
324
|
+
'kering', 'lvmh', 'richemont', 'bulgari', 'bvlgari', 'chopard', 'patek philippe', 'audemars piguet',
|
|
325
|
+
"bloomingdale's", "bloomingdales", "harrods", "le bon marché", "la samaritaine",
|
|
326
|
+
"selfridges", "lane crawford", "neiman marcus", "galeries lafayette", "l’oréal travel retail",
|
|
327
|
+
"l'oréal travel retail", "l'oreal travel retail", "campari"
|
|
328
|
+
]);
|
|
329
|
+
export const MASS_BUDGET_KEYWORDS = new Set(['budget', 'discount', 'mass-market', 'value', 'cheap', 'fast-food', 'low-cost']);
|
|
330
|
+
export const MASS_BUDGET_BRANDS = new Set([
|
|
331
|
+
'miniso', 'kfc', 'mcdonald\'s', 'mcdonalds', 'taco bell', 'burger king', 'dollar general',
|
|
332
|
+
'dollar tree', 'five below', 'primark', 'shein', 'temu', 'walmart', 'popeyes', 'domino\'s'
|
|
333
|
+
]);
|
|
334
|
+
export const DIGITAL_OR_B2B_PATTERNS = [
|
|
335
|
+
/\btiktok shop\b/i,
|
|
336
|
+
/\bonline marketplace\b/i,
|
|
337
|
+
/\be-?commerce platform\b/i,
|
|
338
|
+
/\becommerce storefront\b/i,
|
|
339
|
+
/\bdigital storefront\b/i,
|
|
340
|
+
/\bsupply chain pilot\b/i,
|
|
341
|
+
/\benterprise-wide technology bundles\b/i,
|
|
342
|
+
/\bagentic shopping models\b/i,
|
|
343
|
+
/\bwarehouse logistics\b/i,
|
|
344
|
+
/\bcheckout api\b/i,
|
|
345
|
+
/\bquick delivery partnerships\b/i,
|
|
346
|
+
/\bconnected packaging\b/i,
|
|
347
|
+
/\bsoftware platform\b/i,
|
|
348
|
+
/\bcloud infrastructure\b/i,
|
|
349
|
+
];
|
|
350
|
+
export const PHYSICAL_SPATIAL_TERMS = new Set([
|
|
351
|
+
'pop-up', 'popup', 'pop up', 'pop-ups', 'popups', 'pop ups',
|
|
352
|
+
'temporary store', 'temporary space', 'temporary retail', 'temporary restaurant',
|
|
353
|
+
'ephemeral', 'kiosk', 'activation', 'experiential', 'installation', 'showcase',
|
|
354
|
+
'concept store', 'in-store', 'physical store', 'storefront', 'shop-in-shop',
|
|
355
|
+
'store-in-store', 'exhibition', 'retail space', 'boutique', 'resortcore',
|
|
356
|
+
'carousel', 'sampling', 'tasting', 'theater play', 'wellness hub', 'venue', 'hub',
|
|
357
|
+
'destination', 'physical experience', 'in-person'
|
|
358
|
+
]);
|
|
359
|
+
const GENERIC_QUERY_STOPWORDS = new Set([
|
|
360
|
+
'a', 'an', 'the', 'and', 'or', 'of', 'in', 'on', 'for', 'to', 'with', 'from', 'by', 'at',
|
|
361
|
+
'as', 'is', 'are', 'was', 'be', 'how', 'what', 'trend', 'trends', 'market', 'emerging',
|
|
362
|
+
'retail', 'consumer', 'report', 'insights', 'data'
|
|
363
|
+
]);
|
|
364
|
+
/**
|
|
365
|
+
* Filter and rank evidence items against query qualifiers and trend context.
|
|
366
|
+
* Strictly validates evidence against parent trend topic and medium (e.g. physical pop-ups
|
|
367
|
+
* vs digital e-commerce/supply chain) and filters counter-tier brands.
|
|
368
|
+
*/
|
|
369
|
+
export function rankAndFilterEvidence(items, query, trendContext, opts = {}) {
|
|
370
|
+
if (!Array.isArray(items) || items.length === 0)
|
|
371
|
+
return [];
|
|
372
|
+
const maxItems = opts.maxItems ?? 3;
|
|
373
|
+
const qLower = (query || '').toLowerCase();
|
|
374
|
+
const qWords = qLower.split(/[^a-z0-9]+/).filter(w => w.length > 2 && !GENERIC_QUERY_STOPWORDS.has(w));
|
|
375
|
+
const isFinancialQuery = /\b(revenue|ebitda|gross margin|earnings|quarterly|q[1-4]|financial|valuation|guidance|stock|dividend|probes)\b/i.test(qLower);
|
|
376
|
+
const hasLuxuryQuery = [...LUXURY_KEYWORDS].some(k => qLower.includes(k));
|
|
377
|
+
const hasBudgetQuery = [...MASS_BUDGET_KEYWORDS].some(k => qLower.includes(k));
|
|
378
|
+
const trendTitle = (trendContext?.trendName || trendContext?.title || trendContext?.label || '').toLowerCase();
|
|
379
|
+
const trendWords = trendTitle.split(/[^a-z0-9]+/).filter((w) => w.length > 2 && !GENERIC_QUERY_STOPWORDS.has(w));
|
|
380
|
+
const isPopUpTrend = /\b(pop-?ups?|temporary store|temporary retail)\b/i.test(trendTitle) || /\b(pop-?ups?)\b/i.test(qLower);
|
|
381
|
+
const scored = items.map((item, idx) => {
|
|
382
|
+
const title = (item.title || '').toLowerCase();
|
|
383
|
+
const summary = (item.summary || item.excerpt || '').toLowerCase();
|
|
384
|
+
const contentType = (item.contentType || '').toLowerCase();
|
|
385
|
+
const brands = Array.isArray(item.brandNames)
|
|
386
|
+
? item.brandNames.map((b) => String(b).toLowerCase())
|
|
387
|
+
: (typeof item.brandNames === 'string' ? item.brandNames.toLowerCase().split('|') : []);
|
|
388
|
+
const fullText = `${title} ${summary} ${brands.join(' ')}`;
|
|
389
|
+
// 1. Digital/B2B Disqualification for Physical Pop-Up / Spatial Trends
|
|
390
|
+
if (isPopUpTrend) {
|
|
391
|
+
const isDigitalOrB2B = DIGITAL_OR_B2B_PATTERNS.some(p => p.test(fullText));
|
|
392
|
+
const mentionsPhysical = [...PHYSICAL_SPATIAL_TERMS].some(term => fullText.includes(term));
|
|
393
|
+
if (isDigitalOrB2B && !mentionsPhysical) {
|
|
394
|
+
return { item, score: -999, originalIdx: idx, reason: 'digital-only/B2B mismatch for physical pop-up trend' };
|
|
395
|
+
}
|
|
396
|
+
if (!mentionsPhysical) {
|
|
397
|
+
return { item, score: -999, originalIdx: idx, reason: 'no physical pop-up/spatial keyword' };
|
|
137
398
|
}
|
|
138
399
|
}
|
|
139
|
-
|
|
140
|
-
|
|
400
|
+
// 2. Demote financial / earnings transcripts for qualitative queries
|
|
401
|
+
const isEarningsOrFinancial = /\b(revenue|ebitda|gross margin|earnings|quarterly|q[1-4]|probes|consolidated revenue|adjusted ebitda)\b/i.test(title) ||
|
|
402
|
+
/\b(investor relations|q[1-4] 202[0-9]|earnings call|quarterly results)\b/i.test(fullText);
|
|
403
|
+
if (isEarningsOrFinancial && !isFinancialQuery) {
|
|
404
|
+
return { item, score: -999, originalIdx: idx, reason: 'financial transcript on qualitative query' };
|
|
141
405
|
}
|
|
142
|
-
|
|
143
|
-
|
|
406
|
+
// 3. Category tier matching
|
|
407
|
+
if (hasLuxuryQuery) {
|
|
408
|
+
const mentionsMassBrand = brands.some((b) => MASS_BUDGET_BRANDS.has(b)) ||
|
|
409
|
+
[...MASS_BUDGET_BRANDS].some(b => fullText.includes(b));
|
|
410
|
+
if (mentionsMassBrand) {
|
|
411
|
+
return { item, score: -999, originalIdx: idx, reason: 'mass-market brand on luxury query' };
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// Trend validation baseline
|
|
415
|
+
let score = 5.0;
|
|
416
|
+
// Luxury boost
|
|
417
|
+
if (hasLuxuryQuery) {
|
|
418
|
+
const mentionsLuxuryBrand = brands.some((b) => LUXURY_BRANDS.has(b)) ||
|
|
419
|
+
[...LUXURY_BRANDS].some(b => fullText.includes(b));
|
|
420
|
+
const mentionsLuxuryKeyword = [...LUXURY_KEYWORDS].some(k => fullText.includes(k));
|
|
421
|
+
if (mentionsLuxuryBrand)
|
|
422
|
+
score += 20.0;
|
|
423
|
+
if (mentionsLuxuryKeyword)
|
|
424
|
+
score += 10.0;
|
|
425
|
+
}
|
|
426
|
+
else if (hasBudgetQuery) {
|
|
427
|
+
const mentionsMassBrand = brands.some((b) => MASS_BUDGET_BRANDS.has(b)) ||
|
|
428
|
+
[...MASS_BUDGET_BRANDS].some(b => fullText.includes(b));
|
|
429
|
+
if (mentionsMassBrand)
|
|
430
|
+
score += 15.0;
|
|
431
|
+
}
|
|
432
|
+
// Pop-up keyword boost
|
|
433
|
+
if (isPopUpTrend) {
|
|
434
|
+
if (/\bpop-?ups?\b/i.test(title))
|
|
435
|
+
score += 8.0;
|
|
436
|
+
else if (/\bpop-?ups?\b/i.test(summary))
|
|
437
|
+
score += 4.0;
|
|
438
|
+
}
|
|
439
|
+
// Query term overlap
|
|
440
|
+
for (const word of qWords) {
|
|
441
|
+
if (title.includes(word))
|
|
442
|
+
score += 4.0;
|
|
443
|
+
else if (summary.includes(word))
|
|
444
|
+
score += 2.0;
|
|
445
|
+
if (brands.some((b) => b.includes(word)))
|
|
446
|
+
score += 3.0;
|
|
447
|
+
}
|
|
448
|
+
// Trend topic overlap
|
|
449
|
+
for (const word of trendWords) {
|
|
450
|
+
if (title.includes(word))
|
|
451
|
+
score += 2.5;
|
|
452
|
+
else if (summary.includes(word))
|
|
453
|
+
score += 1.0;
|
|
454
|
+
}
|
|
455
|
+
// Content type preference (prioritize tangible proof/case studies)
|
|
456
|
+
if (contentType === 'signal' || contentType === 'case study' || contentType === 'case_study') {
|
|
457
|
+
score += 3.0;
|
|
144
458
|
}
|
|
145
|
-
else if (
|
|
146
|
-
|
|
459
|
+
else if (contentType === 'interpretation' || contentType === 'analysis') {
|
|
460
|
+
score += 1.5;
|
|
147
461
|
}
|
|
148
|
-
|
|
462
|
+
// Recency bonus
|
|
463
|
+
if (item.publishedAt) {
|
|
464
|
+
const daysAgo = (Date.now() - new Date(item.publishedAt).getTime()) / 864e5;
|
|
465
|
+
if (!isNaN(daysAgo) && daysAgo < 180)
|
|
466
|
+
score += 2.0;
|
|
467
|
+
}
|
|
468
|
+
return { item, score, originalIdx: idx, reason: 'ok' };
|
|
469
|
+
});
|
|
470
|
+
// Only allow positive-scoring, non-disqualified items
|
|
471
|
+
const positiveEligible = scored.filter(s => s.score >= 5.0);
|
|
472
|
+
positiveEligible.sort((a, b) => {
|
|
473
|
+
if (b.score !== a.score)
|
|
474
|
+
return b.score - a.score;
|
|
475
|
+
return a.originalIdx - b.originalIdx;
|
|
149
476
|
});
|
|
477
|
+
// If no items qualify, return [] — never fall back to off-topic / disqualified items!
|
|
478
|
+
return positiveEligible.slice(0, maxItems).map(s => s.item);
|
|
150
479
|
}
|
|
151
480
|
function extractCleanDomain(urlStr) {
|
|
152
481
|
try {
|
|
@@ -189,7 +518,7 @@ const GRAPH_COLOR_OVERRIDES = {
|
|
|
189
518
|
export function getFoddaTheme(graphId) {
|
|
190
519
|
const PSFK_DOMAIN_GRAPHS = getDomainGraphIds().size > 0
|
|
191
520
|
? getDomainGraphIds()
|
|
192
|
-
: new Set(['retail', 'beauty', 'fashion', 'sports', 'ce-design']); // fallback
|
|
521
|
+
: new Set(['food', 'retail', 'tech', 'travel', 'beauty', 'fashion', 'sports', 'ce-design']); // fallback
|
|
193
522
|
let graphTypeColor;
|
|
194
523
|
if (GRAPH_COLOR_OVERRIDES[graphId]) {
|
|
195
524
|
graphTypeColor = GRAPH_COLOR_OVERRIDES[graphId];
|
|
@@ -258,4 +587,38 @@ export function getSupplementalTheme() {
|
|
|
258
587
|
}
|
|
259
588
|
};
|
|
260
589
|
}
|
|
590
|
+
/**
|
|
591
|
+
* Truncates whyNow cleanly without mid-word or mid-sentence cuts.
|
|
592
|
+
* - Leaves text intact if <= maxLength (default 280 chars).
|
|
593
|
+
* - Prefers breaking at sentence boundaries (.!?) if available between minLength (140) and maxLength.
|
|
594
|
+
* - Otherwise breaks at the nearest word boundary before maxLength and appends '...'.
|
|
595
|
+
* - Trims any dangling punctuation before the ellipsis.
|
|
596
|
+
*/
|
|
597
|
+
export function cleanTruncateWhyNow(whyNow, maxLength = 280, minLength = 140) {
|
|
598
|
+
if (!whyNow || typeof whyNow !== 'string')
|
|
599
|
+
return whyNow;
|
|
600
|
+
const trimmed = whyNow.trim();
|
|
601
|
+
if (trimmed.length <= maxLength)
|
|
602
|
+
return trimmed;
|
|
603
|
+
const window = trimmed.slice(0, maxLength);
|
|
604
|
+
// Check for clean sentence ending within [minLength, maxLength]
|
|
605
|
+
// Matches period, exclamation, or question mark followed by whitespace or end of string
|
|
606
|
+
const sentenceMatches = [...window.matchAll(/([.!?])(?:\s+|$)/g)];
|
|
607
|
+
const validSentenceEnds = sentenceMatches
|
|
608
|
+
.map(m => (m.index ?? 0) + (m[1]?.length || 1))
|
|
609
|
+
.filter(idx => idx >= minLength && idx <= maxLength);
|
|
610
|
+
if (validSentenceEnds.length > 0) {
|
|
611
|
+
const bestEnd = validSentenceEnds[validSentenceEnds.length - 1];
|
|
612
|
+
return trimmed.slice(0, bestEnd).trim();
|
|
613
|
+
}
|
|
614
|
+
// Fall back to last word boundary
|
|
615
|
+
const lastSpace = window.lastIndexOf(' ');
|
|
616
|
+
if (lastSpace >= minLength) {
|
|
617
|
+
const cut = window.slice(0, lastSpace).replace(/[,;:—\-\.\s]+$/, '').trim();
|
|
618
|
+
return `${cut}...`;
|
|
619
|
+
}
|
|
620
|
+
// Fallback if no suitable word boundary found
|
|
621
|
+
const cut = window.replace(/[,;:—\-\.\s]+$/, '').trim();
|
|
622
|
+
return `${cut}...`;
|
|
623
|
+
}
|
|
261
624
|
//# sourceMappingURL=enrichment.js.map
|
package/dist/enrichment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrichment.js","sourceRoot":"","sources":["../src/enrichment.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"enrichment.js","sourceRoot":"","sources":["../src/enrichment.ts"],"names":[],"mappings":"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"}
|
package/dist/errorHandling.d.ts
CHANGED
|
@@ -14,13 +14,43 @@
|
|
|
14
14
|
* (new individual trial system, planCode 13).
|
|
15
15
|
*/
|
|
16
16
|
export declare function classifyAccessError(err: any): 'forbidden' | 'disabled' | 'credits' | 'legacy_retired' | null;
|
|
17
|
+
export interface UnifiedLimitErrorOptions {
|
|
18
|
+
code: 'DAILY_LIMIT_EXCEEDED' | 'PLAN_LIMIT_EXCEEDED' | 'CREDITS_EXHAUSTED' | 'TRIAL_EXHAUSTED';
|
|
19
|
+
setupUrl?: string | null;
|
|
20
|
+
topUpUrl?: string | null;
|
|
21
|
+
overageRateUsd?: number | null;
|
|
22
|
+
upgradeUrl?: string | null;
|
|
23
|
+
renewsAt?: string | null;
|
|
24
|
+
usage?: any;
|
|
25
|
+
payg?: any;
|
|
26
|
+
agentCheckout?: {
|
|
27
|
+
url?: string;
|
|
28
|
+
api_calls?: number;
|
|
29
|
+
price_usd?: number;
|
|
30
|
+
price?: number;
|
|
31
|
+
} | null;
|
|
32
|
+
}
|
|
33
|
+
export declare function buildChatGptQuotaExhausted(): {
|
|
34
|
+
isError: boolean;
|
|
35
|
+
content: {
|
|
36
|
+
type: 'text';
|
|
37
|
+
text: string;
|
|
38
|
+
}[];
|
|
39
|
+
};
|
|
40
|
+
export declare function buildUnifiedLimitError(options: UnifiedLimitErrorOptions): {
|
|
41
|
+
isError: boolean;
|
|
42
|
+
content: {
|
|
43
|
+
type: 'text';
|
|
44
|
+
text: string;
|
|
45
|
+
}[];
|
|
46
|
+
};
|
|
17
47
|
/**
|
|
18
48
|
* Build a user-friendly response for 403 errors on supplemental tools.
|
|
19
49
|
* FORBIDDEN → silent skip (return empty data, not an error)
|
|
20
50
|
* GRAPH_DISABLED → mention it so the user knows they opted out
|
|
21
51
|
* CREDITS → trial-aware handling (auto-upgrade or prompt for email)
|
|
22
52
|
*/
|
|
23
|
-
export declare function handleAccessError(err: any, toolName: string, userId?: string, apiKey?: string): Promise<{
|
|
53
|
+
export declare function handleAccessError(err: any, toolName: string, userId?: string, apiKey?: string, source?: string): Promise<{
|
|
24
54
|
isError: boolean;
|
|
25
55
|
content: {
|
|
26
56
|
type: 'text';
|
|
@@ -35,14 +65,12 @@ export declare function handleAccessError(err: any, toolName: string, userId?: s
|
|
|
35
65
|
* 2. Individual trial accounts — apiKey is `sk_live_` but backend returns
|
|
36
66
|
* planCode 13 / isTrial / TRIAL_EXHAUSTED in the error response.
|
|
37
67
|
*
|
|
38
|
-
* When a trial user hits their limit
|
|
39
|
-
*
|
|
40
|
-
* -
|
|
41
|
-
* - If no userId → show upgrade portal link
|
|
42
|
-
* - If not a trial key → standard credit exhaustion message
|
|
68
|
+
* When a trial user hits their limit:
|
|
69
|
+
* - If ChatGPT source → clean QUOTA_EXHAUSTED with zero commerce/pricing
|
|
70
|
+
* - Non-ChatGPT → unified limit error payload with verbatim next_action
|
|
43
71
|
* Falls through to generic error handling for non-credit errors.
|
|
44
72
|
*/
|
|
45
|
-
export declare function handleTrialCreditExhaustion(err: any, sessionApiKey: string, sessionUserId: string): Promise<{
|
|
73
|
+
export declare function handleTrialCreditExhaustion(err: any, sessionApiKey: string, sessionUserId: string, sessionSource?: string): Promise<{
|
|
46
74
|
isError: boolean;
|
|
47
75
|
content: {
|
|
48
76
|
type: 'text';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorHandling.d.ts","sourceRoot":"","sources":["../src/errorHandling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAwDH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"errorHandling.d.ts","sourceRoot":"","sources":["../src/errorHandling.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAwDH;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAgC5G;AAMD,MAAM,WAAW,wBAAwB;IACrC,IAAI,EAAE,sBAAsB,GAAG,qBAAqB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;IAC/F,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,aAAa,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACnG;AAED,wBAAgB,0BAA0B,IAAI;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAY5G;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,wBAAwB,GAAG;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C,CAqGA;AAiDD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,CAAC,CAmE/L;AAyCD;;;;;;;;;;;;GAYG;AACH,wBAAsB,2BAA2B,CAC7C,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CAsDjF"}
|