fodda-mcp 1.38.0 → 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 -91
- 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 +278 -83
- package/dist/brandTemplate.js.map +1 -1
- package/dist/catalogCache.d.ts +39 -0
- package/dist/catalogCache.d.ts.map +1 -1
- package/dist/catalogCache.js +293 -22
- package/dist/catalogCache.js.map +1 -1
- package/dist/coverageRelevance.d.ts +251 -0
- package/dist/coverageRelevance.d.ts.map +1 -0
- package/dist/coverageRelevance.js +1857 -0
- package/dist/coverageRelevance.js.map +1 -0
- 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 +442 -29
- 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 +411 -106
- package/dist/index.js.map +1 -1
- package/dist/pricingCache.d.ts.map +1 -1
- package/dist/pricingCache.js +55 -3
- 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 +2 -2
- package/dist/services/notifications.js +3 -3
- package/dist/services/notifications.js.map +1 -1
- package/dist/sessionTracker.d.ts +42 -3
- package/dist/sessionTracker.d.ts.map +1 -1
- package/dist/sessionTracker.js +261 -14
- 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 +153 -81
- 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.d.ts +2 -0
- package/dist/test_book_a_call_live.d.ts.map +1 -0
- package/dist/test_book_a_call_live.js +161 -0
- package/dist/test_book_a_call_live.js.map +1 -0
- package/dist/test_brand_intelligence_endpoint.js +2 -2
- 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.d.ts +12 -0
- package/dist/test_coverage_relevance.d.ts.map +1 -0
- package/dist/test_coverage_relevance.js +162 -0
- package/dist/test_coverage_relevance.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/test_dcr_and_legacy_deprecation.d.ts.map +1 -0
- package/dist/test_dcr_and_legacy_deprecation.js +143 -0
- package/dist/test_dcr_and_legacy_deprecation.js.map +1 -0
- 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_financial_snapshot_render.d.ts +2 -0
- package/dist/test_financial_snapshot_render.d.ts.map +1 -0
- package/dist/test_financial_snapshot_render.js +167 -0
- package/dist/test_financial_snapshot_render.js.map +1 -0
- package/dist/test_gap_alert.d.ts +12 -0
- package/dist/test_gap_alert.d.ts.map +1 -0
- package/dist/test_gap_alert.js +51 -0
- package/dist/test_gap_alert.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/test_next_moves.d.ts.map +1 -0
- package/dist/test_next_moves.js +714 -0
- package/dist/test_next_moves.js.map +1 -0
- package/dist/test_next_moves_transcripts.d.ts +2 -0
- package/dist/test_next_moves_transcripts.d.ts.map +1 -0
- package/dist/test_next_moves_transcripts.js +495 -0
- package/dist/test_next_moves_transcripts.js.map +1 -0
- 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_session_next_moves_telemetry.d.ts +2 -0
- package/dist/test_session_next_moves_telemetry.d.ts.map +1 -0
- package/dist/test_session_next_moves_telemetry.js +100 -0
- package/dist/test_session_next_moves_telemetry.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 +4290 -711
- package/dist/toolHandlers.js.map +1 -1
- package/dist/tools.d.ts +22 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +29 -4
- package/dist/tools.js.map +1 -1
- package/dist/verify_tools_endpoint.js +19 -5
- 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 +3 -31
- package/dist/debug_tools.d.ts +0 -2
- package/dist/debug_tools.d.ts.map +0 -1
- package/dist/debug_tools.js +0 -19
- package/dist/debug_tools.js.map +0 -1
- package/dist/inspect_list_graphs.d.ts +0 -2
- package/dist/inspect_list_graphs.d.ts.map +0 -1
- package/dist/inspect_list_graphs.js +0 -25
- package/dist/inspect_list_graphs.js.map +0 -1
- package/dist/scratch_test.d.ts.map +0 -1
- package/dist/scripts/simulate_gemini.d.ts +0 -2
- package/dist/scripts/simulate_gemini.d.ts.map +0 -1
- package/dist/scripts/simulate_gemini.js +0 -100
- package/dist/scripts/simulate_gemini.js.map +0 -1
- package/dist/scripts/verify_registry.d.ts +0 -2
- package/dist/scripts/verify_registry.d.ts.map +0 -1
- package/dist/scripts/verify_registry.js +0 -77
- package/dist/scripts/verify_registry.js.map +0 -1
- package/dist/src/index.d.ts +0 -2
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -332
- package/dist/src/index.js.map +0 -1
- package/dist/src/tools.d.ts +0 -12
- package/dist/src/tools.d.ts.map +0 -1
- package/dist/src/tools.js +0 -104
- package/dist/src/tools.js.map +0 -1
- package/dist/src/types.d.ts +0 -44
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -2
- package/dist/src/types.js.map +0 -1
- package/dist/src/verify.d.ts +0 -2
- package/dist/src/verify.d.ts.map +0 -1
- package/dist/src/verify.js +0 -47
- package/dist/src/verify.js.map +0 -1
- package/dist/src/verify_hmac.d.ts +0 -2
- package/dist/src/verify_hmac.d.ts.map +0 -1
- package/dist/src/verify_hmac.js +0 -106
- package/dist/src/verify_hmac.js.map +0 -1
- package/dist/src/verify_tools_endpoint.d.ts +0 -2
- package/dist/src/verify_tools_endpoint.d.ts.map +0 -1
- package/dist/src/verify_tools_endpoint.js +0 -40
- package/dist/src/verify_tools_endpoint.js.map +0 -1
- package/dist/test-waverunner-response.d.ts +0 -2
- package/dist/test-waverunner-response.d.ts.map +0 -1
- package/dist/test-waverunner-response.js +0 -20
- package/dist/test-waverunner-response.js.map +0 -1
- package/dist/test_coverage_r2.d.ts +0 -2
- package/dist/test_coverage_r2.d.ts.map +0 -1
- package/dist/test_coverage_scratch.d.ts +0 -2
- package/dist/test_coverage_scratch.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
[](https://registry.modelcontextprotocol.io/v0.1/servers?search=ai.fodda/mcp-server)
|
|
9
9
|
[](https://www.npmjs.com/package/fodda-mcp)
|
|
10
|
-
[](./CHANGELOG.md)
|
|
11
11
|
[](https://fodda.ai)
|
|
12
12
|
|
|
13
13
|
</div>
|
|
@@ -18,94 +18,26 @@
|
|
|
18
18
|
|
|
19
19
|
### Claude (Web — Pro, Max, Team, Enterprise)
|
|
20
20
|
|
|
21
|
-
1. Get your personal MCP URL at [app.fodda.ai](https://app.fodda.ai) →
|
|
21
|
+
1. Get your personal MCP URL at [app.fodda.ai](https://app.fodda.ai) → Connections (format: `https://mcp.fodda.ai/c/<your-token>`)
|
|
22
22
|
2. In Claude, go to **Settings → Connectors → Add custom connector**, paste the URL, and click **Add**
|
|
23
23
|
3. Start chatting with your Fodda knowledge graphs
|
|
24
24
|
|
|
25
|
-
> **Note:**
|
|
25
|
+
> **Note:** Legacy URL query-string parameter authentication is deprecated and returns HTTP 401 with instructions. Get your fresh MCP URL or connect via OAuth at [app.fodda.ai](https://app.fodda.ai).
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
### Claude Code (CLI — SSE)
|
|
27
|
+
### Claude Code (CLI)
|
|
29
28
|
|
|
30
29
|
```bash
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
### Claude Enterprise
|
|
36
|
-
|
|
37
|
-
For Claude Enterprise with admin-managed connectors, your workspace admin can register the Fodda MCP server using the same Streamable HTTP endpoint (`https://mcp.fodda.ai/mcp`) via the Admin Console. See [Enterprise MCP Setup](./Enterprise_MCP_Setup.md) for full details.
|
|
38
|
-
|
|
39
|
-
### OpenAI (Responses API — Recommended)
|
|
40
|
-
|
|
41
|
-
Use OpenAI's native MCP support — no function definitions needed:
|
|
30
|
+
# Connect via OAuth:
|
|
31
|
+
claude mcp add --transport http fodda https://mcp.fodda.ai/mcp
|
|
42
32
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
resp = client.responses.create(
|
|
48
|
-
model="gpt-5",
|
|
49
|
-
tools=[{
|
|
50
|
-
"type": "mcp",
|
|
51
|
-
"server_label": "fodda",
|
|
52
|
-
"server_description": "Expert-curated knowledge graphs for retail, beauty, sports trends and earnings intelligence.",
|
|
53
|
-
"server_url": "https://mcp.fodda.ai/mcp",
|
|
54
|
-
"authorization": "Bearer YOUR_API_KEY",
|
|
55
|
-
"require_approval": "never",
|
|
56
|
-
}],
|
|
57
|
-
input="What are the top emerging retail trends?",
|
|
58
|
-
)
|
|
59
|
-
print(resp.output_text)
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
```javascript
|
|
63
|
-
import OpenAI from "openai";
|
|
64
|
-
const client = new OpenAI();
|
|
65
|
-
|
|
66
|
-
const resp = await client.responses.create({
|
|
67
|
-
model: "gpt-5",
|
|
68
|
-
tools: [{
|
|
69
|
-
type: "mcp",
|
|
70
|
-
server_label: "fodda",
|
|
71
|
-
server_description: "Expert-curated knowledge graphs for retail, beauty, sports trends and earnings intelligence.",
|
|
72
|
-
server_url: "https://mcp.fodda.ai/mcp",
|
|
73
|
-
authorization: "Bearer YOUR_API_KEY",
|
|
74
|
-
require_approval: "never",
|
|
75
|
-
}],
|
|
76
|
-
input: "What are the top emerging retail trends?",
|
|
77
|
-
});
|
|
78
|
-
console.log(resp.output_text);
|
|
33
|
+
# Or with an API key:
|
|
34
|
+
claude mcp add --transport http fodda https://mcp.fodda.ai/mcp \
|
|
35
|
+
--header "Authorization: Bearer sk_live_..."
|
|
79
36
|
```
|
|
80
37
|
|
|
81
|
-
|
|
82
|
-
> `"allowed_tools": ["search_graph", "search_statistics", "brand_tracker"]`
|
|
38
|
+
### Client Setup Guides
|
|
83
39
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
### Generic Streamable HTTP Client
|
|
87
|
-
|
|
88
|
-
Connect to the `/mcp` endpoint using HTTP `POST` (Streamable HTTP) with `Authorization: Bearer YOUR_API_KEY`:
|
|
89
|
-
```
|
|
90
|
-
https://mcp.fodda.ai/mcp
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### Gemini CLI
|
|
94
|
-
|
|
95
|
-
```json
|
|
96
|
-
{
|
|
97
|
-
"tools": [{
|
|
98
|
-
"type": "mcp",
|
|
99
|
-
"name": "fodda",
|
|
100
|
-
"url": "https://mcp.fodda.ai/sse",
|
|
101
|
-
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
|
|
102
|
-
}]
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Generic SSE Client
|
|
107
|
-
|
|
108
|
-
Connect to `https://mcp.fodda.ai/sse` with an `Authorization: Bearer YOUR_API_KEY` header.
|
|
40
|
+
For complete setup guides across all supported clients — Claude Web, Claude Code, Claude Enterprise, ChatGPT, OpenAI Responses API, Cursor, Gemini, and custom agents — visit **[https://www.fodda.ai/connect](https://www.fodda.ai/connect)**.
|
|
109
41
|
|
|
110
42
|
---
|
|
111
43
|
|
|
@@ -194,11 +126,7 @@ In MCP request `_meta`:
|
|
|
194
126
|
{ "_meta": { "authorization": "Bearer sk_live_..." } }
|
|
195
127
|
```
|
|
196
128
|
|
|
197
|
-
**
|
|
198
|
-
connector* UI) cannot set custom request headers. For those, the key may be passed as
|
|
199
|
-
`?api_key=...`. This is provided only for compatibility; prefer header-based auth
|
|
200
|
-
wherever the client supports it, since URLs are more likely to be logged by
|
|
201
|
-
intermediaries. The server never returns your API key in tool output.
|
|
129
|
+
**Connection URLs.** Web connector clients use personal tokenized connection URLs (`https://mcp.fodda.ai/c/<token>`) generated in your [Connections dashboard](https://app.fodda.ai/connections). Raw keys in URLs are not accepted.
|
|
202
130
|
|
|
203
131
|
---
|
|
204
132
|
|
|
@@ -206,7 +134,7 @@ intermediaries. The server never returns your API key in tool output.
|
|
|
206
134
|
|
|
207
135
|
| Variable | Description | Default |
|
|
208
136
|
|----------|-------------|---------|
|
|
209
|
-
| `PORT` | HTTP server port
|
|
137
|
+
| `PORT` | HTTP server port | `8080` |
|
|
210
138
|
| `FODDA_API_URL` | Upstream API base URL | `https://api.fodda.ai` |
|
|
211
139
|
| `FODDA_MCP_SECRET` | HMAC signing secret for API requests | — |
|
|
212
140
|
| `NODE_ENV` | Environment (`development` / `production`) | `production` |
|
|
@@ -218,12 +146,7 @@ intermediaries. The server never returns your API key in tool output.
|
|
|
218
146
|
```bash
|
|
219
147
|
npm install
|
|
220
148
|
npm run build
|
|
221
|
-
|
|
222
|
-
# Stdio mode
|
|
223
149
|
npm start
|
|
224
|
-
|
|
225
|
-
# SSE mode
|
|
226
|
-
PORT=8080 npm start
|
|
227
150
|
```
|
|
228
151
|
|
|
229
152
|
## Self-Hosting
|
|
@@ -280,7 +203,7 @@ June 16, 2026) for the complete, authoritative terms.
|
|
|
280
203
|
## Support
|
|
281
204
|
|
|
282
205
|
- **Email:** [hello@fodda.ai](mailto:hello@fodda.ai)
|
|
283
|
-
- **Account & API keys:** [app.fodda.ai](https://app.fodda.ai) →
|
|
206
|
+
- **Account & API keys:** [app.fodda.ai](https://app.fodda.ai) → Connections
|
|
284
207
|
- **Documentation:** [fodda.ai](https://www.fodda.ai)
|
|
285
208
|
|
|
286
209
|
To report a security issue, email **[hello@fodda.ai](mailto:hello@fodda.ai)** with
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
export declare const SKILL_RESEARCH_METHODOLOGY = "---\nid: FODDA-SKILL-METHODOLOGY-001\ntitle: Fodda Research Methodology Skill\nversion: 2.0.0\ncompliance: RFC-2119\n---\n\n### SEQUENCE: DeepResearch\n1. **Phase 1: PLAN** \u2014 seconds:\n - Decompose the query into 2-4 research dimensions.\n - Identify which knowledge graph verticals are most relevant.\n - Determine if supplemental data sources (Google Trends, BLS, Census, OECD) are needed.\n - Estimate research depth: light (3-4 sources) vs comprehensive (6+ sources).\n2. **Phase 2: SEARCH** \u2014 primary:\n - Analyze pre-loaded Fodda knowledge graph results.\n - Identify convergence patterns across multiple graphs.\n - Track which graphs yielded strong results and which were sparse.\n - Note signal_score values: 80+ is strong, 60-79 is moderate, below 60 is weak.\n3. **Phase 3: READ** \u2014 deepen:\n - Examine evidence snippets and source URLs for key themes.\n - Use Google Search to find additional context for high-signal trends.\n - Use URL Context for primary source verification if external URLs are referenced.\n - Flag conflicting evidence explicitly.\n4. **Phase 4: SYNTHESIZE** \u2014 connect:\n - Identify the 3-5 strongest themes.\n - Rank by signal strength, evidence count, recency, and cross-graph convergence.\n - Build narrative arc: What is happening -> Why it matters -> What comes next.\n - Note gaps in coverage.\n5. **Phase 5: CITE** \u2014 attribute:\n - Every claim MUST reference its source graph and evidence.\n - Attribute findings to source graph by name.\n - Include source URLs as inline citations.\n - Suggest 2-3 follow-up research questions.\n";
|
|
12
12
|
export declare const SKILL_EVIDENCE_CATEGORIES = "---\nid: FODDA-SKILL-EVIDENCE-001\ntitle: Fodda Evidence Categories Skill\nversion: 2.0.0\ncompliance: RFC-2119\n---\n\n### TOKEN: EvidenceCategories\n\n| Category | What it covers | When to use |\n|----------|---------------|-------------|\n| Case Study | Innovation, strategic moves, novel approaches | Must demonstrate innovation or strategic intent \u2014 NOT routine news |\n| Statistic | Quantitative data \u2014 market sizes, growth rates, survey results | Numbers with clear methodology |\n| Data Point | Factual brand/industry news without innovation | Routine business activity, personnel changes, earnings, regulatory |\n| Analysis | Expert interpretation, industry reports, competitive assessments | Qualitative expert judgment |\n| Interview | Direct quotes from practitioners, executives, researchers | Verbatim attributed speech |\n\n### RULE: EvidenceClassification\n- Case Study REQUIRES demonstrated innovation or strategic intent.\n- Routine brand news (store openings, executive hires) MUST map to Data Point.\n- If an article contains both a stat and analysis, classify by PRIMARY value.\n- \"Report\" MUST map to Analysis.\n- The agent MUST NOT invent a 6th category; all evidence must fit into these 5.\n- A finding MAY cite multiple evidence pieces of different types.\n";
|
|
13
13
|
export declare const SKILL_OUTPUT_FORMAT = "---\nid: FODDA-SKILL-OUTPUT-001\ntitle: Fodda Output Format Skill\nversion: 2.0.0\ncompliance: RFC-2119\n---\n\n### RECORD: ResearchReport\n- executive_summary: String \u2014 2-3 sentences. The single most important finding, stated as a provocative editorial claim.\n- thematic_sections: List[ThematicSection] \u2014 3-5 thematic narrative sections.\n- strategic_agenda: List[Implication] \u2014 2-3 concrete moves.\n- source_landscape: List[SourceLink] \u2014 bulleted list of all source URLs referenced.\n\n### RULE: OutputFormat\n- Thematic sections MUST:\n - Open with a declarative statement.\n - Use flowing paragraphs with embedded data points (no bullet lists).\n - Weave in source citations inline: \"Sephora's AI Color Match drove a 28% conversion lift (PSFK Retail Graph)\".\n - Close with a practical implication: what this means for the practitioner.\n- Tone MUST read like a senior strategist briefing a CMO, not a consultant deck. Strongest findings first.\n- The agent MUST NOT use italicized terms followed by parenthetical attribution for trends. Instead, weave attribution into the narrative sentence as the subject (e.g. \"One trend, [Trend Name] from [Graph/Expert], highlights how...\").\n- Ground every trend in a named example ONLY IF one is provided in the graph evidence. Do NOT hunt via Google Search for missing examples.\n- If a trend lacks recent statistics, the agent SHOULD use the google_search tool to find recent (2025-2026) statistics.\n- Prefer Fodda graph stats over web stats. Cite Fodda stats as: \"According to research tracked in the [Graph/Expert Name] graph...\".\n";
|
|
14
|
-
export declare const SKILL_GRAPH_AWARENESS = "---\nid: FODDA-SKILL-AWARENESS-001\ntitle: Fodda Graph Awareness Skill\nversion: 2.0.0\ncompliance: RFC-2119\n---\n\n### RULE: GraphAwareness\n- Each graph is a curated knowledge graph representing an editorial viewpoint with evidence, not a generic database.\n- Multi-graph convergence (same theme in 2+ graphs) indicates a high-confidence finding.\n- Contradicting graphs MUST be noted explicitly as a tension.\n- Match expert graph terminology on concepts, not labels.\n- Industry report graphs are deep but narrow; excellent for specific verticals.\n\n### TOKEN: GraphTypes\n- PSFK curated graphs: retail, beauty, fashion, sports, sic, ce-design, pew.\n- Expert graphs: individual specialist perspectives (e.g., ezra-eeman-wayfinder, alyson-stevens-macro).\n- Industry report graphs: single-report deep dives (e.g., pwc/sxsw-2026-key-insights, delta/the-connection-index).\n\n### RULE: GraphAttribution\n- The agent MUST NEVER say \"the Fodda graph\" or \"according to Fodda\". Fodda is the platform; graphs are created by named experts.\n- Format: \"According to PSFK's Retail Graph...\" or \"Ezra Eeman's Wayfinder Graph identifies...\".\n- Include graph_id for programmatic reference.\n";
|
|
14
|
+
export declare const SKILL_GRAPH_AWARENESS = "---\nid: FODDA-SKILL-AWARENESS-001\ntitle: Fodda Graph Awareness Skill\nversion: 2.0.0\ncompliance: RFC-2119\n---\n\n### RULE: GraphAwareness\n- Each graph is a curated knowledge graph representing an editorial viewpoint with evidence, not a generic database.\n- Multi-graph convergence (same theme in 2+ graphs) indicates a high-confidence finding.\n- Contradicting graphs MUST be noted explicitly as a tension.\n- Match expert graph terminology on concepts, not labels.\n- Industry report graphs are deep but narrow; excellent for specific verticals.\n\n### TOKEN: GraphTypes\n- PSFK curated graphs: food, retail, tech, travel, beauty, fashion, sports, sic, ce-design, pew.\n- Expert graphs: individual specialist perspectives (e.g., ezra-eeman-wayfinder, alyson-stevens-macro).\n- Industry report graphs: single-report deep dives (e.g., pwc/sxsw-2026-key-insights, delta/the-connection-index).\n\n### RULE: GraphAttribution\n- The agent MUST NEVER say \"the Fodda graph\" or \"according to Fodda\". Fodda is the platform; graphs are created by named experts.\n- Format: \"According to PSFK's Retail Graph...\" or \"Ezra Eeman's Wayfinder Graph identifies...\".\n- Include graph_id for programmatic reference.\n";
|
|
15
15
|
export declare const SKILL_SOURCE_QUALITY = "---\nid: FODDA-SKILL-QUALITY-001\ntitle: Fodda Source Quality Skill\nversion: 2.0.0\ncompliance: RFC-2119\n---\n\n### TOKEN: SourceCredibilityTiers\n- Tier 5 (Primary Research): Earnings reports, PubMed, OECD, Census, BLS, government filings.\n- Tier 4 (Expert Analysis): PSFK original research, McKinsey, Deloitte, named expert graphs.\n- Tier 3 (Quality Journalism): Financial Times, Bloomberg, Business of Fashion, Wired.\n- Tier 2 (Industry Sources): Trade publications, brand press releases, industry blogs.\n- Tier 1 (Unverified): Social media posts, individual opinions, unattributed claims.\n\n### RULE: SourcePreferenceHierarchy\n- The agent MUST follow this preference order:\n 1. Fodda knowledge graph evidence (pre-vetted, always prefer).\n 2. Supplemental structured data (BLS, Census, Google Trends, OECD).\n 3. Google Search results (web-sourced context for themes not covered).\n 4. URL-fetched primary sources (for deep verification).\n\n### RULE: SourceQualityGate\n- At least 60% of cited evidence SHOULD be tier 3 or above.\n- The agent MUST NOT present a tier 1-2 source without qualification (\"industry reports suggest...\").\n- Acknowledge explicitly if a finding relies on a single source.\n### RULE: ConflictingEstimates\n- When multiple sources provide conflicting quantitative estimates for the same metric (e.g. market size, growth rate, CAGR), the agent MUST surface ALL estimates with their sources rather than silently selecting one.\n- Present conflicting data as: \"Estimates range from $X (Source A) to $Y (Source B), reflecting [methodological, scope, or forecast horizon differences].\"\n- Never present a subset figure (e.g. built-in cabinets) as smaller than a total figure if the source numbers contradict; explicitly flag and reconcile the divergence.\n\n### RULE: OutlierOrderOfMagnitudeGuardrail\n- When reported market size figures for a specific product category differ by an order of magnitude or more from the general consensus cluster (e.g. $430 billion vs $1.5-$3.5 billion for wine fridges/coolers), ALWAYS treat the extreme outlier as a data or unit annotation error (e.g. millions mistranslated as billions) and DISCARD it.\n- NEVER present, include, or hedge an impossible outlier number (e.g. claiming a single niche appliance sub-category is worth hundreds of billions).\n";
|
|
16
16
|
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/agents/fodda-researcher/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,eAAO,MAAM,0BAA0B,wmDAiCtC,CAAC;AAMF,eAAO,MAAM,yBAAyB,mxCAwBrC,CAAC;AAMF,eAAO,MAAM,mBAAmB,klDAwB/B,CAAC;AAMF,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../src/agents/fodda-researcher/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,eAAO,MAAM,0BAA0B,wmDAiCtC,CAAC;AAMF,eAAO,MAAM,yBAAyB,mxCAwBrC,CAAC;AAMF,eAAO,MAAM,mBAAmB,klDAwB/B,CAAC;AAMF,eAAO,MAAM,qBAAqB,ksCAuBjC,CAAC;AAMF,eAAO,MAAM,oBAAoB,gyEAiChC,CAAC"}
|
|
@@ -119,7 +119,7 @@ compliance: RFC-2119
|
|
|
119
119
|
- Industry report graphs are deep but narrow; excellent for specific verticals.
|
|
120
120
|
|
|
121
121
|
### TOKEN: GraphTypes
|
|
122
|
-
- PSFK curated graphs: retail, beauty, fashion, sports, sic, ce-design, pew.
|
|
122
|
+
- PSFK curated graphs: food, retail, tech, travel, beauty, fashion, sports, sic, ce-design, pew.
|
|
123
123
|
- Expert graphs: individual specialist perspectives (e.g., ezra-eeman-wayfinder, alyson-stevens-macro).
|
|
124
124
|
- Industry report graphs: single-report deep dives (e.g., pwc/sxsw-2026-key-insights, delta/the-connection-index).
|
|
125
125
|
|
package/dist/brandTemplate.d.ts
CHANGED
|
@@ -10,5 +10,5 @@ export declare function renderBrandWidget(profile: any): Promise<{
|
|
|
10
10
|
editorial_context: any;
|
|
11
11
|
open_slots: string[];
|
|
12
12
|
}>;
|
|
13
|
-
export declare const TEMPLATE = "\n<style>\n:root{--p:#663399;--pl:#F5F0FF;--pm:#9B72CC;--pl-on:#663399;}\n@media(prefers-color-scheme:dark){:root{--p:#9B72CC;--pl:rgba(155,114,204,0.14);--pm:#663399;--pl-on:#C4A7E8;}}\n.w{border:1px solid var(--p);border-top:3px solid var(--p);border-radius:6px;padding:1.25rem;font-family:var(--font-mono);}\n.hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem;padding-bottom:1rem;border-bottom:.5px solid var(--color-border-tertiary);}\n.logo{display:flex;align-items:center;gap:10px;}\n.logo img{height:24px;width:auto;display:block;}\n.lt{font-size:13px;font-weight:500;}.ls{font-size:10px;color:var(--color-text-secondary);}\n.bfolio{font-family:var(--font-mono);font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--color-text-secondary);}\n.bh{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;}\n.bn{font-family:var(--font-serif);font-style:italic;font-weight:400;font-size:22px;letter-spacing:-0.01em;}\n.vc{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;font-family:var(--font-mono);}\n.vc-up{color:var(--color-text-success);}\n.vc-build{color:var(--color-text-info);}\n.vc-steady{color:var(--color-text-secondary);}\n.vc-slow{color:var(--color-text-warning);}\n.pv{font-size:14px;font-family:var(--font-serif);font-style:italic;font-weight:400;line-height:1.65;padding:14px 16px;background:var(--pl);border:1px solid var(--p);border-left-width:3px;border-radius:4px;margin-bottom:1.25rem;color:var(--color-text-primary);}\n.lcb{display:flex;height:8px;border-radius:4px;overflow:hidden;margin-bottom:.75rem;gap:2px;}\n.lcl{display:flex;gap:12px;margin-bottom:1.25rem;flex-wrap:wrap;}\n.lci{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--color-text-secondary);}\n.lcd{width:8px;height:8px;border-radius:2px;}\n.card{background:var(--color-background-primary);border:1px solid var(--color-border-tertiary);border-radius:4px;padding:1rem 1.25rem;margin-bottom:8px;transition:border-color .15s,background .15s;}\n.card:hover{border-color:var(--p);background:var(--pl);}\n.th{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:6px;gap:8px;}\n.tn{font-size:13px;font-weight:500;}\n.ta{display:flex;align-items:center;gap:4px;flex-shrink:0;}\n.td{font-size:12px;color:var(--color-text-secondary);margin-bottom:5px;line-height:1.5;}\n.lb{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;white-space:nowrap;font-family:var(--font-mono);background:transparent;}\n.lb-b{color:var(--color-text-info);}\n.lb-e{color:var(--color-text-success);}\n.lb-m{color:var(--color-text-secondary);}\n.lb-f{color:var(--color-text-warning);}\n.bd{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;background:transparent;color:var(--color-text-secondary);font-family:var(--font-mono);}\n.bd-fast{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;background:transparent;color:#7A4000;font-family:var(--font-mono);}\n.bdp{font-size:10px;padding:2px 8px;border-radius:20px;background:var(--pl);color:var(--pl-on);font-family:var(--font-mono);}\n.brow{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;}\n.wl{font-size:11px;color:var(--color-text-secondary);margin:1.25rem 0 8px;display:flex;align-items:center;gap:6px;}\n.wd{width:6px;height:6px;border-radius:50%;background:var(--color-text-warning);display:inline-block;}\n.ec{border:1px dashed var(--color-border-tertiary);border-radius:4px;margin-bottom:8px;padding:1rem 1.25rem;}\n.et a{color:var(--color-text-info);text-decoration:none;font-size:13px;font-weight:500;}.et a:hover{text-decoration:underline;}\n.ex{font-size:12px;color:var(--color-text-secondary);line-height:1.5;margin:6px 0 8px;}\n.em{display:flex;gap:6px;flex-wrap:wrap;}\n.cit{font-size:10px;color:var(--color-text-secondary);margin-top:8px;padding-top:8px;border-top:.5px solid var(--color-border-tertiary);}\n.cit a{color:var(--color-text-info);text-decoration:none;}\n.cat-cs{background:var(--color-background-info);color:var(--color-text-info);}\n.cat-si{background:var(--pl);color:var(--p);}\n.cat-me{background:var(--color-background-success);color:var(--color-text-success);}\n.cat-qu{background:var(--color-background-warning);color:var(--color-text-warning);}\n.cat-in{background:var(--color-background-secondary);color:var(--color-text-secondary);}\n.cc{background:var(--color-background-primary);border:1px solid var(--color-border-tertiary);border-radius:4px;padding:.875rem 1.25rem;margin-bottom:6px;display:flex;justify-content:space-between;align-items:center;}\n.cn{font-size:13px;font-weight:500;margin-bottom:3px;}\n.cd{font-size:11px;color:var(--color-text-secondary);}\n.ca{display:flex;flex-direction:column;align-items:flex-end;gap:6px;}\n.pb{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;font-family:var(--font-mono);background:transparent;}\n.sl2, .sec{font-size:13px;font-weight:500;color:var(--color-text-primary);margin:1.25rem 0 8px;}.sl2:first-child, .sec:first-child{margin-top:0;}\n.br{display:flex;align-items:center;gap:8px;margin-bottom:5px;font-size:12px;}\n.brl{width:120px;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0;}\n.brt{flex:1;height:4px;background:var(--color-background-secondary);border-radius:3px;overflow:hidden;}\n.brf{height:100%;background:var(--p);border-radius:3px;}\n.brc{min-width:44px;text-align:right;color:var(--color-text-secondary);font-size:11px;}\n.sg{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:1rem;}\n.sk{background:var(--color-background-secondary);border-radius:8px;padding:10px 12px;}\n.skl{font-size:10px;color:var(--color-text-secondary);margin-bottom:3px;}\n.skv{font-family:var(--font-serif);font-style:italic;font-size:22px;font-weight:400;}.sks{font-size:10px;color:var(--color-text-secondary);margin-top:2px;}\n.rq{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:.75rem;}\n.rqp{font-size:10px;padding:3px 9px;border-radius:20px;background:var(--color-background-secondary);color:var(--color-text-secondary);border:.5px solid var(--color-border-tertiary);}\n.xb{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--color-background-secondary);border:.5px solid var(--color-border-tertiary);border-radius:8px;cursor:pointer;text-align:left;width:100%;margin-bottom:8px;font-family:var(--font-mono);transition:all .15s;}\n.xb:hover{background:var(--pl);border-color:var(--pm);}\n.xi{font-size:11px;width:28px;font-weight:500;flex-shrink:0;color:var(--color-text-secondary);}\n.xd{font-size:11px;color:var(--color-text-secondary);margin-top:2px;}\n.xbl{font-weight:500;font-size:12px;}\n.gf{display:flex;gap:5px;flex-wrap:wrap;margin-top:1.5rem;padding-top:1rem;border-top:.5px solid var(--color-border-tertiary);align-items:center;}\n.gfl{font-size:10px;color:var(--color-text-secondary);margin-right:2px;}\n.gp{font-size:10px;padding:2px 9px;border-radius:20px;background:var(--pl);color:var(--pl-on);border:.5px solid var(--pm);}\n.ap{background:var(--color-background-secondary);border-radius:8px;margin-bottom:6px;padding:.75rem 1rem;display:flex;justify-content:space-between;align-items:center;}\n.an2{font-size:12px;font-weight:500;}\n.am2{font-size:11px;color:var(--color-text-secondary);margin-top:2px;}\n.astar{font-size:11px;color:var(--p);}\n.note{font-size:10px;color:var(--color-text-secondary);margin-bottom:1.25rem;}\n.btn-out{font-size:9px;padding:2px 7px;cursor:pointer;border:.5px solid var(--pm);border-radius:20px;background:var(--pl);color:var(--pl-on);font-family:var(--font-mono);}\n.btn-out:hover{background:var(--p);color:#fff;border-color:var(--p);}\n.cp{font-size:11px;background:var(--pl);color:var(--pl-on);border:.5px solid var(--pm);border-radius:20px;padding:3px 10px;cursor:pointer;font-family:var(--font-mono);transition:all .15s;}\n.cp:hover{background:var(--p);color:#fff;}\n.cv{font-size:10px;background:var(--pl);color:var(--pl-on);border:.5px solid var(--pm);border-radius:20px;padding:2px 8px;cursor:pointer;font-family:var(--font-mono);transition:all .15s;}\n.cv:hover{background:var(--p);color:#fff;}\n.an{font-size:13px;line-height:1.7;color:var(--color-text-primary);}\n.an p{margin:0 0 .75rem;}\n.an strong{font-weight:500;}\n.si{font-size:12px;line-height:1.65;color:var(--color-text-secondary);font-style:italic;margin:0 0 1rem;}\n</style>\n\n<div class=\"w\">\n <div class=\"hd\">\n <div class=\"logo\">\n <img src=\"https://cdn.jsdelivr.net/gh/piers-fawkes/fodda-demo@main/public/fodda-mini-logo-claude.png\" alt=\"Fodda\" style=\"height:24px;width:24px;\"/>\n <div><div class=\"lt\">Fodda</div><div class=\"ls\">Brand Intelligence</div></div>\n </div>\n <div class=\"bfolio\">{{FOLIO}}</div>\n </div>\n\n <div class=\"bh\">\n <div class=\"bn\">{{BRAND_NAME}}</div>\n <span class=\"vc {{VELOCITY_CLASS}}\">{{VELOCITY_LABEL}}</span>\n </div>\n\n <div class=\"pv\">{{ONE_LINER}}</div>\n\n <div class=\"sec\">Case Studies</div>\n {{EVIDENCE_HTML}}\n\n {{EARNINGS_SECTION_HTML}}\n\n <div class=\"sec\">Relevant trends</div>\n {{TREND_FOOTPRINT_INTRO}}\n <div class=\"lcb\">{{LIFECYCLE_BAR}}</div>\n <div class=\"lcl\">{{LIFECYCLE_LEGEND}}</div>\n {{TRENDS_HTML}}\n {{WEAK_SIGNALS_HTML}}\n\n <div class=\"sec\">Competitive</div>\n {{COMPETITOR_LIST_HTML}}\n\n <div class=\"sec\">Market data</div>\n {{MARKET_DATA_INTRO}}\n <div class=\"sl2\">US retail sales \u2014 Census Bureau</div>\n <div class=\"sg\">\n <div class=\"sk\"><div class=\"skl\">{{BEA_STAT_1_LABEL}}</div><div class=\"skv\">{{BEA_STAT_1_VALUE}}</div><div class=\"sks\">{{BEA_STAT_1_SUB}}</div></div>\n <div class=\"sk\"><div class=\"skl\">{{BEA_STAT_2_LABEL}}</div><div class=\"skv\">{{BEA_STAT_2_VALUE}}</div><div class=\"sks\">{{BEA_STAT_2_SUB}}</div></div>\n </div>\n\n {{GT_SECTION_HTML}}\n {{GT_COMPARISON_SECTION_HTML}}\n {{RELATED_QUERIES_SECTION_HTML}}\n\n <div class=\"sl2\">Wikipedia \u2014 avg daily pageviews</div>\n {{WIKI_BARS_HTML}}\n <p class=\"note\">{{WIKI_NOTE}}</p>\n\n <div class=\"sl2\">Amazon footprint</div>\n <div class=\"sg\">\n <div class=\"sk\"><div class=\"skl\">{{AMAZON_STAT_1_LABEL}}</div><div class=\"skv\">{{AMAZON_STAT_1_VALUE}}</div><div class=\"sks\">{{AMAZON_STAT_1_SUB}}</div></div>\n <div class=\"sk\"><div class=\"skl\">{{AMAZON_STAT_2_LABEL}}</div><div class=\"skv\">{{AMAZON_STAT_2_VALUE}}</div><div class=\"sks\">{{AMAZON_STAT_2_SUB}}</div></div>\n <div class=\"sk\"><div class=\"skl\">{{AMAZON_STAT_3_LABEL}}</div><div class=\"skv\">{{AMAZON_STAT_3_VALUE}}</div><div class=\"sks\">{{AMAZON_STAT_3_SUB}}</div></div>\n <div class=\"sk\"><div class=\"skl\">{{AMAZON_STAT_4_LABEL}}</div><div class=\"skv\">{{AMAZON_STAT_4_VALUE}}</div><div class=\"sks\">{{AMAZON_STAT_4_SUB}}</div></div>\n </div>\n {{AMAZON_PRODUCTS_HTML}}\n <p class=\"note\">{{AMAZON_CAPTION}}</p>\n\n {{GEO_SECTION_HTML}}\n\n <div class=\"sec\">Explore further</div>\n {{SUGGESTED_NEXT_HTML}}\n <button class=\"xb\" onclick=\"sendPrompt('{{EXPORT_1_PROMPT}}')\"><span class=\"xi\">\u2197</span><div><div class=\"xbl\">{{EXPORT_1_LABEL}}</div><div class=\"xd\">{{EXPORT_1_DESC}}</div></div></button>\n <button class=\"xb\" onclick=\"sendPrompt('{{EXPORT_2_PROMPT}}')\"><span class=\"xi\">\u2197</span><div><div class=\"xbl\">{{EXPORT_2_LABEL}}</div><div class=\"xd\">{{EXPORT_2_DESC}}</div></div></button>\n <button class=\"xb\" onclick=\"sendPrompt('{{EXPORT_3_PROMPT}}')\"><span class=\"xi\">\u2197</span><div><div class=\"xbl\">{{EXPORT_3_LABEL}}</div><div class=\"xd\">{{EXPORT_3_DESC}}</div></div></button>\n <button class=\"xb\" onclick=\"sendPrompt('{{EXPORT_4_PROMPT}}')\"><span class=\"xi\">\u2197</span><div><div class=\"xbl\">{{EXPORT_4_LABEL}}</div><div class=\"xd\">{{EXPORT_4_DESC}}</div></div></button>\n\n <div class=\"gf\">\n <span class=\"gfl\">Sources:</span>\n {{SOURCE_PILLS_HTML}}\n</div>";
|
|
13
|
+
export declare const TEMPLATE = "\n<style>\n.fodda-brand-widget, .w {\n --fodda-bg: #ffffff;\n --fodda-bg-secondary: #f8fafc;\n --fodda-text: #18181b;\n --fodda-muted: #71717a;\n --fodda-line: #e4e4e7;\n --fodda-accent: #663399;\n --fodda-accent-light: #f5f0ff;\n --p: var(--fodda-accent);\n --pl: var(--fodda-accent-light);\n --pm: var(--fodda-line);\n --pl-on: var(--fodda-accent);\n --color-text-primary: var(--fodda-text);\n --color-text-secondary: var(--fodda-muted);\n --color-border-tertiary: var(--fodda-line);\n --color-background-primary: var(--fodda-bg);\n --color-background-secondary: var(--fodda-bg-secondary);\n --color-text-info: #2563eb;\n --color-text-success: #16a34a;\n --color-text-warning: #d97706;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n color: var(--fodda-text);\n background: var(--fodda-bg);\n border: 1px solid var(--fodda-line);\n border-top: 3px solid var(--fodda-accent);\n border-radius: 6px;\n padding: 1.25rem;\n}\n@media (prefers-color-scheme: dark) {\n .fodda-brand-widget, .w {\n --fodda-bg: #18181b;\n --fodda-bg-secondary: #27272a;\n --fodda-text: #f4f4f5;\n --fodda-muted: #a1a1aa;\n --fodda-line: #3f3f46;\n --fodda-accent: #9d65d4;\n --fodda-accent-light: rgba(157, 101, 212, 0.15);\n --p: var(--fodda-accent);\n --pl: var(--fodda-accent-light);\n --pm: var(--fodda-line);\n --pl-on: #c4a7e8;\n --color-text-info: #60a5fa;\n --color-text-success: #4ade80;\n --color-text-warning: #fbbf24;\n }\n}\n.hd{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.25rem;padding-bottom:1rem;border-bottom:.5px solid var(--color-border-tertiary);}\n.logo{display:flex;align-items:center;gap:10px;}\n.lt{font-size:13px;font-weight:600;}.ls{font-size:10px;color:var(--color-text-secondary);}\n.bfolio{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:10px;letter-spacing:0.18em;text-transform:uppercase;color:var(--color-text-secondary);}\n.bh{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:.75rem;}\n.bn{font-family:Georgia,serif;font-style:italic;font-weight:400;font-size:22px;letter-spacing:-0.01em;}\n.vc{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}\n.vc-up{color:var(--color-text-success);}\n.vc-build{color:var(--color-text-info);}\n.vc-steady{color:var(--color-text-secondary);}\n.vc-slow{color:var(--color-text-warning);}\n.pv{font-size:14px;font-family:Georgia,serif;font-style:italic;font-weight:400;line-height:1.65;padding:14px 16px;background:var(--pl);border:1px solid var(--p);border-left-width:3px;border-radius:4px;margin-bottom:1.25rem;color:var(--color-text-primary);}\n.lcb{display:flex;height:8px;border-radius:4px;overflow:hidden;margin-bottom:.75rem;gap:2px;}\n.lcl{display:flex;gap:12px;margin-bottom:1.25rem;flex-wrap:wrap;}\n.lci{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--color-text-secondary);}\n.lcd{width:8px;height:8px;border-radius:2px;}\n.card{background:var(--color-background-primary);border:1px solid var(--color-border-tertiary);border-radius:4px;padding:1rem 1.25rem;margin-bottom:8px;transition:border-color .15s,background .15s;}\n.card:hover{border-color:var(--p);background:var(--pl);}\n.th{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:6px;gap:8px;}\n.tn{font-size:13px;font-weight:600;}\n.ta{display:flex;align-items:center;gap:4px;flex-shrink:0;}\n.td{font-size:12px;color:var(--color-text-secondary);margin-bottom:5px;line-height:1.5;}\n.lb{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:transparent;}\n.lb-b{color:var(--color-text-info);}\n.lb-e{color:var(--color-text-success);}\n.lb-m{color:var(--color-text-secondary);}\n.lb-f{color:var(--color-text-warning);}\n.bd{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;background:transparent;color:var(--color-text-secondary);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}\n.bd-fast{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;background:transparent;color:#7A4000;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}\n.bdp{font-size:10px;padding:2px 8px;border-radius:20px;background:var(--pl);color:var(--pl-on);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}\n.brow{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px;}\n.wl{font-size:11px;color:var(--color-text-secondary);margin:1.25rem 0 8px;display:flex;align-items:center;gap:6px;}\n.wd{width:6px;height:6px;border-radius:50%;background:var(--color-text-warning);display:inline-block;}\n.ec{border:1px dashed var(--color-border-tertiary);border-radius:4px;margin-bottom:8px;padding:1rem 1.25rem;}\n.et a{color:var(--color-text-info);text-decoration:none;font-size:13px;font-weight:600;}.et a:hover{text-decoration:underline;}\n.ex{font-size:12px;color:var(--color-text-secondary);line-height:1.5;margin:6px 0 8px;}\n.em{display:flex;gap:6px;flex-wrap:wrap;}\n.cit{font-size:10px;color:var(--color-text-secondary);margin-top:8px;padding-top:8px;border-top:.5px solid var(--color-border-tertiary);}\n.cit a{color:var(--color-text-info);text-decoration:none;}\n.cat-cs{background:var(--color-background-secondary);color:var(--color-text-info);}\n.cat-si{background:var(--pl);color:var(--p);}\n.cat-me{background:var(--color-background-secondary);color:var(--color-text-success);}\n.cat-qu{background:var(--color-background-secondary);color:var(--color-text-warning);}\n.cat-in{background:var(--color-background-secondary);color:var(--color-text-secondary);}\n.cc{background:var(--color-background-primary);border:1px solid var(--color-border-tertiary);border-radius:4px;padding:.875rem 1.25rem;margin-bottom:6px;display:flex;justify-content:space-between;align-items:center;}\n.cn{font-size:13px;font-weight:600;margin-bottom:3px;}\n.cd{font-size:11px;color:var(--color-text-secondary);}\n.ca{display:flex;flex-direction:column;align-items:flex-end;gap:6px;}\n.pb{font-size:9px;font-weight:700;letter-spacing:0.18em;text-transform:uppercase;padding:3px 8px;border:1px solid currentColor;border-radius:2px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:transparent;}\n.sl2, .sec{font-size:13px;font-weight:600;color:var(--color-text-primary);margin:1.25rem 0 8px;}.sl2:first-child, .sec:first-child{margin-top:0;}\n.br{display:flex;align-items:center;gap:8px;margin-bottom:5px;font-size:12px;}\n.brl{width:120px;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex-shrink:0;}\n.brt{flex:1;height:4px;background:var(--color-background-secondary);border-radius:3px;overflow:hidden;}\n.brf{height:100%;background:var(--p);border-radius:3px;}\n.brc{min-width:44px;text-align:right;color:var(--color-text-secondary);font-size:11px;}\n.sg{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:1rem;}\n.sk{background:var(--color-background-secondary);border-radius:8px;padding:10px 12px;}\n.skl{font-size:10px;color:var(--color-text-secondary);margin-bottom:3px;}\n.skv{font-family:Georgia,serif;font-style:italic;font-size:22px;font-weight:400;}.sks{font-size:10px;color:var(--color-text-secondary);margin-top:2px;}\n.rq{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:.75rem;}\n.rqp{font-size:10px;padding:3px 9px;border-radius:20px;background:var(--color-background-secondary);color:var(--color-text-secondary);border:.5px solid var(--color-border-tertiary);}\n.xb{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--color-background-secondary);border:.5px solid var(--color-border-tertiary);border-radius:8px;cursor:pointer;text-align:left;width:100%;margin-bottom:8px;font-family:inherit;transition:all .15s;}\n.xb:hover{background:var(--pl);border-color:var(--pm);}\n.xi{font-size:11px;width:28px;font-weight:600;flex-shrink:0;color:var(--color-text-secondary);}\n.xd{font-size:11px;color:var(--color-text-secondary);margin-top:2px;}\n.xbl{font-weight:600;font-size:12px;}\n.gf{display:flex;gap:5px;flex-wrap:wrap;margin-top:1.5rem;padding-top:1rem;border-top:.5px solid var(--color-border-tertiary);align-items:center;}\n.gfl{font-size:10px;color:var(--color-text-secondary);margin-right:2px;}\n.gp{font-size:10px;padding:2px 9px;border-radius:20px;background:var(--pl);color:var(--pl-on);border:.5px solid var(--pm);}\n.ap{background:var(--color-background-secondary);border-radius:8px;margin-bottom:6px;padding:.75rem 1rem;display:flex;justify-content:space-between;align-items:center;}\n.an2{font-size:12px;font-weight:600;}\n.am2{font-size:11px;color:var(--color-text-secondary);margin-top:2px;}\n.astar{font-size:11px;color:var(--p);}\n.note{font-size:10px;color:var(--color-text-secondary);margin-bottom:1.25rem;}\n.btn-out{font-size:9px;padding:2px 7px;cursor:pointer;border:.5px solid var(--pm);border-radius:20px;background:var(--pl);color:var(--pl-on);font-family:inherit;}\n.btn-out:hover{background:var(--p);color:#fff;border-color:var(--p);}\n.cp{font-size:11px;background:var(--pl);color:var(--pl-on);border:.5px solid var(--pm);border-radius:20px;padding:3px 10px;cursor:pointer;font-family:inherit;transition:all .15s;}\n.cp:hover{background:var(--p);color:#fff;}\n.cv{font-size:10px;background:var(--pl);color:var(--pl-on);border:.5px solid var(--pm);border-radius:20px;padding:2px 8px;cursor:pointer;font-family:inherit;transition:all .15s;}\n.cv:hover{background:var(--p);color:#fff;}\n.an{font-size:13px;line-height:1.7;color:var(--color-text-primary);}\n.an p{margin:0 0 .75rem;}\n.an strong{font-weight:600;}\n.si{font-size:12px;line-height:1.65;color:var(--color-text-secondary);font-style:italic;margin:0 0 1rem;}\n</style>\n\n<div class=\"fodda-brand-widget w\">\n <div class=\"hd\">\n <div class=\"logo\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"height:24px;width:24px;flex-shrink:0;\">\n <rect width=\"24\" height=\"24\" rx=\"6\" fill=\"var(--fodda-accent)\"/>\n <circle cx=\"12\" cy=\"12\" r=\"5\" fill=\"#ffffff\"/>\n </svg>\n <div><div class=\"lt\">Fodda</div><div class=\"ls\">Brand Intelligence</div></div>\n </div>\n <div class=\"bfolio\">{{FOLIO}}</div>\n </div>\n\n <div class=\"bh\">\n <div class=\"bn\">{{BRAND_NAME}}</div>\n <span class=\"vc {{VELOCITY_CLASS}}\">{{VELOCITY_LABEL}}</span>\n </div>\n\n <div class=\"pv\">{{ONE_LINER}}</div>\n\n <div class=\"sec\">Case Studies</div>\n {{EVIDENCE_HTML}}\n\n {{EARNINGS_SECTION_HTML}}\n {{FINANCIAL_SNAPSHOT_SECTION_HTML}}\n\n <div class=\"sec\">Relevant trends</div>\n {{TREND_FOOTPRINT_INTRO}}\n <div class=\"lcb\">{{LIFECYCLE_BAR}}</div>\n <div class=\"lcl\">{{LIFECYCLE_LEGEND}}</div>\n {{TRENDS_HTML}}\n {{WEAK_SIGNALS_HTML}}\n\n {{COMPETITIVE_SECTION_HTML}}\n\n <div class=\"sec\">Market data</div>\n {{MARKET_DATA_INTRO}}\n <div class=\"sl2\">US retail sales \u2014 Census Bureau</div>\n <div class=\"sg\">\n <div class=\"sk\"><div class=\"skl\">{{BEA_STAT_1_LABEL}}</div><div class=\"skv\">{{BEA_STAT_1_VALUE}}</div><div class=\"sks\">{{BEA_STAT_1_SUB}}</div></div>\n <div class=\"sk\"><div class=\"skl\">{{BEA_STAT_2_LABEL}}</div><div class=\"skv\">{{BEA_STAT_2_VALUE}}</div><div class=\"sks\">{{BEA_STAT_2_SUB}}</div></div>\n </div>\n\n {{GT_SECTION_HTML}}\n {{GT_COMPARISON_SECTION_HTML}}\n {{RELATED_QUERIES_SECTION_HTML}}\n\n <div class=\"sl2\">Wikipedia \u2014 avg daily pageviews</div>\n {{WIKI_BARS_HTML}}\n <p class=\"note\">{{WIKI_NOTE}}</p>\n\n <div class=\"sl2\">Amazon footprint</div>\n <div class=\"sg\">\n <div class=\"sk\"><div class=\"skl\">{{AMAZON_STAT_1_LABEL}}</div><div class=\"skv\">{{AMAZON_STAT_1_VALUE}}</div><div class=\"sks\">{{AMAZON_STAT_1_SUB}}</div></div>\n <div class=\"sk\"><div class=\"skl\">{{AMAZON_STAT_2_LABEL}}</div><div class=\"skv\">{{AMAZON_STAT_2_VALUE}}</div><div class=\"sks\">{{AMAZON_STAT_2_SUB}}</div></div>\n <div class=\"sk\"><div class=\"skl\">{{AMAZON_STAT_3_LABEL}}</div><div class=\"skv\">{{AMAZON_STAT_3_VALUE}}</div><div class=\"sks\">{{AMAZON_STAT_3_SUB}}</div></div>\n <div class=\"sk\"><div class=\"skl\">{{AMAZON_STAT_4_LABEL}}</div><div class=\"skv\">{{AMAZON_STAT_4_VALUE}}</div><div class=\"sks\">{{AMAZON_STAT_4_SUB}}</div></div>\n </div>\n {{AMAZON_PRODUCTS_HTML}}\n <p class=\"note\">{{AMAZON_CAPTION}}</p>\n\n {{GEO_SECTION_HTML}}\n\n <div class=\"sec\">Explore further</div>\n {{SUGGESTED_NEXT_HTML}}\n <button class=\"xb\" onclick=\"sendPrompt('{{EXPORT_1_PROMPT}}')\"><span class=\"xi\">\u2197</span><div><div class=\"xbl\">{{EXPORT_1_LABEL}}</div><div class=\"xd\">{{EXPORT_1_DESC}}</div></div></button>\n <button class=\"xb\" onclick=\"sendPrompt('{{EXPORT_2_PROMPT}}')\"><span class=\"xi\">\u2197</span><div><div class=\"xbl\">{{EXPORT_2_LABEL}}</div><div class=\"xd\">{{EXPORT_2_DESC}}</div></div></button>\n <button class=\"xb\" onclick=\"sendPrompt('{{EXPORT_3_PROMPT}}')\"><span class=\"xi\">\u2197</span><div><div class=\"xbl\">{{EXPORT_3_LABEL}}</div><div class=\"xd\">{{EXPORT_3_DESC}}</div></div></button>\n <button class=\"xb\" onclick=\"sendPrompt('{{EXPORT_4_PROMPT}}')\"><span class=\"xi\">\u2197</span><div><div class=\"xbl\">{{EXPORT_4_LABEL}}</div><div class=\"xd\">{{EXPORT_4_DESC}}</div></div></button>\n\n <div class=\"gf\">\n <span class=\"gfl\">Sources:</span>\n {{SOURCE_PILLS_HTML}}\n </div>\n</div>";
|
|
14
14
|
//# sourceMappingURL=brandTemplate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brandTemplate.d.ts","sourceRoot":"","sources":["../src/brandTemplate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"brandTemplate.d.ts","sourceRoot":"","sources":["../src/brandTemplate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmTH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA+gBpI;AAED,eAAO,MAAM,QAAQ,ombA+Md,CAAC"}
|