fodda-mcp 1.3.2 → 1.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +31 -0
- package/README.md +192 -20
- package/dist/a2aHandler.d.ts +20 -0
- package/dist/a2aHandler.d.ts.map +1 -0
- package/dist/a2aHandler.js +247 -0
- package/dist/a2aHandler.js.map +1 -0
- package/dist/agents/fodda-researcher/index.d.ts +35 -0
- package/dist/agents/fodda-researcher/index.d.ts.map +1 -0
- package/dist/agents/fodda-researcher/index.js +62 -0
- package/dist/agents/fodda-researcher/index.js.map +1 -0
- package/dist/agents/fodda-researcher/skills.d.ts +16 -0
- package/dist/agents/fodda-researcher/skills.d.ts.map +1 -0
- package/dist/agents/fodda-researcher/skills.js +163 -0
- package/dist/agents/fodda-researcher/skills.js.map +1 -0
- package/dist/brandTemplate.d.ts +14 -0
- package/dist/brandTemplate.d.ts.map +1 -0
- package/dist/brandTemplate.js +742 -0
- package/dist/brandTemplate.js.map +1 -0
- package/dist/catalogCache.d.ts +177 -0
- package/dist/catalogCache.d.ts.map +1 -0
- package/dist/catalogCache.js +708 -0
- package/dist/catalogCache.js.map +1 -0
- package/dist/editorialFill.d.ts +44 -0
- package/dist/editorialFill.d.ts.map +1 -0
- package/dist/editorialFill.js +377 -0
- package/dist/editorialFill.js.map +1 -0
- package/dist/enrichment.d.ts +74 -0
- package/dist/enrichment.d.ts.map +1 -0
- package/dist/enrichment.js +211 -0
- package/dist/enrichment.js.map +1 -0
- package/dist/errorHandling.d.ts +52 -0
- package/dist/errorHandling.d.ts.map +1 -0
- package/dist/errorHandling.js +327 -0
- package/dist/errorHandling.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +595 -410
- package/dist/index.js.map +1 -1
- package/dist/pricingCache.d.ts +99 -0
- package/dist/pricingCache.d.ts.map +1 -0
- package/dist/pricingCache.js +414 -0
- package/dist/pricingCache.js.map +1 -0
- package/dist/queryCache.d.ts +25 -0
- package/dist/queryCache.d.ts.map +1 -0
- package/dist/queryCache.js +194 -0
- package/dist/queryCache.js.map +1 -0
- package/dist/searchTemplate.d.ts +16 -0
- package/dist/searchTemplate.d.ts.map +1 -0
- package/dist/searchTemplate.js +318 -0
- package/dist/searchTemplate.js.map +1 -0
- package/dist/sessionTracker.d.ts +39 -0
- package/dist/sessionTracker.d.ts.map +1 -0
- package/dist/sessionTracker.js +187 -0
- package/dist/sessionTracker.js.map +1 -0
- package/dist/skillClient.d.ts +142 -0
- package/dist/skillClient.d.ts.map +1 -0
- package/dist/skillClient.js +256 -0
- package/dist/skillClient.js.map +1 -0
- package/dist/svgVisuals.d.ts +77 -0
- package/dist/svgVisuals.d.ts.map +1 -0
- package/dist/svgVisuals.js +323 -0
- package/dist/svgVisuals.js.map +1 -0
- package/dist/systemPrompt.d.ts +26 -0
- package/dist/systemPrompt.d.ts.map +1 -0
- package/dist/systemPrompt.js +546 -0
- package/dist/systemPrompt.js.map +1 -0
- package/dist/test-waverunner-response.d.ts +2 -0
- package/dist/test-waverunner-response.d.ts.map +1 -0
- package/dist/test-waverunner-response.js +20 -0
- package/dist/test-waverunner-response.js.map +1 -0
- package/dist/test_analyst.d.ts +2 -0
- package/dist/test_analyst.d.ts.map +1 -0
- package/dist/test_analyst.js +39 -0
- package/dist/test_analyst.js.map +1 -0
- package/dist/test_analyst_local.d.ts +2 -0
- package/dist/test_analyst_local.d.ts.map +1 -0
- package/dist/test_analyst_local.js +51 -0
- package/dist/test_analyst_local.js.map +1 -0
- package/dist/test_live_mcp.d.ts +2 -0
- package/dist/test_live_mcp.d.ts.map +1 -0
- package/dist/test_live_mcp.js +49 -0
- package/dist/test_live_mcp.js.map +1 -0
- package/dist/test_skills.d.ts +9 -0
- package/dist/test_skills.d.ts.map +1 -0
- package/dist/test_skills.js +267 -0
- package/dist/test_skills.js.map +1 -0
- package/dist/toolHandlers.d.ts +11 -0
- package/dist/toolHandlers.d.ts.map +1 -0
- package/dist/toolHandlers.js +2829 -0
- package/dist/toolHandlers.js.map +1 -0
- package/dist/tools.d.ts +80 -3
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +89 -186
- package/dist/tools.js.map +1 -1
- package/dist/trialTracker.d.ts +58 -0
- package/dist/trialTracker.d.ts.map +1 -0
- package/dist/trialTracker.js +179 -0
- package/dist/trialTracker.js.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/verify_hmac.js +1 -1
- package/dist/verify_hmac.js.map +1 -1
- package/dist/verify_tools_endpoint.js +5 -5
- package/dist/verify_tools_endpoint.js.map +1 -1
- package/dist/widgetShell.d.ts +15 -0
- package/dist/widgetShell.d.ts.map +1 -0
- package/dist/widgetShell.js +151 -0
- package/dist/widgetShell.js.map +1 -0
- package/package.json +10 -6
- package/server.json +12 -17
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fodda Research Agent — System Instruction Builder
|
|
3
|
+
*
|
|
4
|
+
* Loads the 5 skill files and assembles a system instruction for the
|
|
5
|
+
* Gemini Interactions API. This is the "agent" — a skill-injected system
|
|
6
|
+
* prompt that tells Gemini how to conduct Fodda-style research.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* import { buildResearcherInstruction } from './agents/fodda-researcher/index.js';
|
|
10
|
+
* const systemInstruction = buildResearcherInstruction(query, graphContext);
|
|
11
|
+
*/
|
|
12
|
+
import { SKILL_RESEARCH_METHODOLOGY, SKILL_EVIDENCE_CATEGORIES, SKILL_OUTPUT_FORMAT, SKILL_GRAPH_AWARENESS, SKILL_SOURCE_QUALITY, } from './skills.js';
|
|
13
|
+
/**
|
|
14
|
+
* Build the complete system instruction for the Fodda Research Agent.
|
|
15
|
+
*
|
|
16
|
+
* Concatenates all 5 skill files with a mission preamble and any
|
|
17
|
+
* graph context that was pre-fetched from Fodda's knowledge graphs.
|
|
18
|
+
*/
|
|
19
|
+
export function buildResearcherInstruction(query, context) {
|
|
20
|
+
const sections = [];
|
|
21
|
+
// ── Mission preamble ──
|
|
22
|
+
sections.push(`You are the Fodda Research Agent — an autonomous deep researcher that produces
|
|
23
|
+
editorial-quality intelligence reports by combining curated knowledge graph data
|
|
24
|
+
with web research.
|
|
25
|
+
|
|
26
|
+
Your research query is: "${query}"
|
|
27
|
+
${context?.focusGraphId ? `\nFocus graph: ${context.focusGraphId}` : 'Search all accessible knowledge graphs.'}
|
|
28
|
+
|
|
29
|
+
Follow the skills below precisely. They encode Fodda's research methodology,
|
|
30
|
+
evidence standards, output format, graph attribution rules, and source quality
|
|
31
|
+
requirements.
|
|
32
|
+
|
|
33
|
+
---`);
|
|
34
|
+
// ── Skills ──
|
|
35
|
+
sections.push(SKILL_RESEARCH_METHODOLOGY);
|
|
36
|
+
sections.push('---');
|
|
37
|
+
sections.push(SKILL_EVIDENCE_CATEGORIES);
|
|
38
|
+
sections.push('---');
|
|
39
|
+
sections.push(SKILL_OUTPUT_FORMAT);
|
|
40
|
+
sections.push('---');
|
|
41
|
+
sections.push(SKILL_GRAPH_AWARENESS);
|
|
42
|
+
sections.push('---');
|
|
43
|
+
sections.push(SKILL_SOURCE_QUALITY);
|
|
44
|
+
// ── Pre-fetched graph context ──
|
|
45
|
+
if (context?.graphResults) {
|
|
46
|
+
sections.push('---');
|
|
47
|
+
sections.push(`# Pre-Loaded Knowledge Graph Data
|
|
48
|
+
|
|
49
|
+
The following trends and evidence were pre-fetched from Fodda's knowledge graphs.
|
|
50
|
+
Use this as your PRIMARY source material. Supplement with Google Search only for
|
|
51
|
+
themes not covered here.
|
|
52
|
+
|
|
53
|
+
Graphs searched: ${context.graphsSearched?.join(', ') || 'unknown'}
|
|
54
|
+
Total trends found: ${context.totalTrends ?? 'unknown'}
|
|
55
|
+
Total evidence pieces: ${context.totalEvidence ?? 'unknown'}
|
|
56
|
+
|
|
57
|
+
## Graph Data
|
|
58
|
+
${context.graphResults}`);
|
|
59
|
+
}
|
|
60
|
+
return sections.join('\n\n');
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/fodda-researcher/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACH,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACvB,MAAM,aAAa,CAAC;AAmBrB;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACtC,KAAa,EACb,OAAsB;IAEtB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,yBAAyB;IACzB,QAAQ,CAAC,IAAI,CAAC;;;;2BAIS,KAAK;EAC9B,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,yCAAyC;;;;;;IAM1G,CAAC,CAAC;IAEF,eAAe;IACf,QAAQ,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAEpC,kCAAkC;IAClC,IAAI,OAAO,EAAE,YAAY,EAAE,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC;;;;;;mBAMH,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS;sBAC5C,OAAO,CAAC,WAAW,IAAI,SAAS;yBAC7B,OAAO,CAAC,aAAa,IAAI,SAAS;;;EAGzD,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fodda Research Agent — Skill Definitions
|
|
3
|
+
*
|
|
4
|
+
* These are static skill instruction files that encode the Fodda research
|
|
5
|
+
* methodology. The agent's system instruction is assembled from these skills
|
|
6
|
+
* at runtime.
|
|
7
|
+
* Converted to NLSpec v2 format.
|
|
8
|
+
*
|
|
9
|
+
* To modify a skill, edit the constant below and redeploy.
|
|
10
|
+
*/
|
|
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
|
+
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
|
+
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";
|
|
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- Recency: Prefer evidence less than 12 months old.\n- Note geographic concentration (e.g., US-only).\n- Trust the graph over web sources in case of conflicts.\n";
|
|
16
|
+
//# sourceMappingURL=skills.d.ts.map
|
|
@@ -0,0 +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,8qCAuBjC,CAAC;AAMF,eAAO,MAAM,oBAAoB,02CA4BhC,CAAC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fodda Research Agent — Skill Definitions
|
|
3
|
+
*
|
|
4
|
+
* These are static skill instruction files that encode the Fodda research
|
|
5
|
+
* methodology. The agent's system instruction is assembled from these skills
|
|
6
|
+
* at runtime.
|
|
7
|
+
* Converted to NLSpec v2 format.
|
|
8
|
+
*
|
|
9
|
+
* To modify a skill, edit the constant below and redeploy.
|
|
10
|
+
*/
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Skill 1: Research Methodology
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
export const SKILL_RESEARCH_METHODOLOGY = `---
|
|
15
|
+
id: FODDA-SKILL-METHODOLOGY-001
|
|
16
|
+
title: Fodda Research Methodology Skill
|
|
17
|
+
version: 2.0.0
|
|
18
|
+
compliance: RFC-2119
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
### SEQUENCE: DeepResearch
|
|
22
|
+
1. **Phase 1: PLAN** — seconds:
|
|
23
|
+
- Decompose the query into 2-4 research dimensions.
|
|
24
|
+
- Identify which knowledge graph verticals are most relevant.
|
|
25
|
+
- Determine if supplemental data sources (Google Trends, BLS, Census, OECD) are needed.
|
|
26
|
+
- Estimate research depth: light (3-4 sources) vs comprehensive (6+ sources).
|
|
27
|
+
2. **Phase 2: SEARCH** — primary:
|
|
28
|
+
- Analyze pre-loaded Fodda knowledge graph results.
|
|
29
|
+
- Identify convergence patterns across multiple graphs.
|
|
30
|
+
- Track which graphs yielded strong results and which were sparse.
|
|
31
|
+
- Note signal_score values: 80+ is strong, 60-79 is moderate, below 60 is weak.
|
|
32
|
+
3. **Phase 3: READ** — deepen:
|
|
33
|
+
- Examine evidence snippets and source URLs for key themes.
|
|
34
|
+
- Use Google Search to find additional context for high-signal trends.
|
|
35
|
+
- Use URL Context for primary source verification if external URLs are referenced.
|
|
36
|
+
- Flag conflicting evidence explicitly.
|
|
37
|
+
4. **Phase 4: SYNTHESIZE** — connect:
|
|
38
|
+
- Identify the 3-5 strongest themes.
|
|
39
|
+
- Rank by signal strength, evidence count, recency, and cross-graph convergence.
|
|
40
|
+
- Build narrative arc: What is happening -> Why it matters -> What comes next.
|
|
41
|
+
- Note gaps in coverage.
|
|
42
|
+
5. **Phase 5: CITE** — attribute:
|
|
43
|
+
- Every claim MUST reference its source graph and evidence.
|
|
44
|
+
- Attribute findings to source graph by name.
|
|
45
|
+
- Include source URLs as inline citations.
|
|
46
|
+
- Suggest 2-3 follow-up research questions.
|
|
47
|
+
`;
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// Skill 2: Evidence Categories
|
|
50
|
+
// ---------------------------------------------------------------------------
|
|
51
|
+
export const SKILL_EVIDENCE_CATEGORIES = `---
|
|
52
|
+
id: FODDA-SKILL-EVIDENCE-001
|
|
53
|
+
title: Fodda Evidence Categories Skill
|
|
54
|
+
version: 2.0.0
|
|
55
|
+
compliance: RFC-2119
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### TOKEN: EvidenceCategories
|
|
59
|
+
|
|
60
|
+
| Category | What it covers | When to use |
|
|
61
|
+
|----------|---------------|-------------|
|
|
62
|
+
| Case Study | Innovation, strategic moves, novel approaches | Must demonstrate innovation or strategic intent — NOT routine news |
|
|
63
|
+
| Statistic | Quantitative data — market sizes, growth rates, survey results | Numbers with clear methodology |
|
|
64
|
+
| Data Point | Factual brand/industry news without innovation | Routine business activity, personnel changes, earnings, regulatory |
|
|
65
|
+
| Analysis | Expert interpretation, industry reports, competitive assessments | Qualitative expert judgment |
|
|
66
|
+
| Interview | Direct quotes from practitioners, executives, researchers | Verbatim attributed speech |
|
|
67
|
+
|
|
68
|
+
### RULE: EvidenceClassification
|
|
69
|
+
- Case Study REQUIRES demonstrated innovation or strategic intent.
|
|
70
|
+
- Routine brand news (store openings, executive hires) MUST map to Data Point.
|
|
71
|
+
- If an article contains both a stat and analysis, classify by PRIMARY value.
|
|
72
|
+
- "Report" MUST map to Analysis.
|
|
73
|
+
- The agent MUST NOT invent a 6th category; all evidence must fit into these 5.
|
|
74
|
+
- A finding MAY cite multiple evidence pieces of different types.
|
|
75
|
+
`;
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Skill 3: Output Format
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
export const SKILL_OUTPUT_FORMAT = `---
|
|
80
|
+
id: FODDA-SKILL-OUTPUT-001
|
|
81
|
+
title: Fodda Output Format Skill
|
|
82
|
+
version: 2.0.0
|
|
83
|
+
compliance: RFC-2119
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### RECORD: ResearchReport
|
|
87
|
+
- executive_summary: String — 2-3 sentences. The single most important finding, stated as a provocative editorial claim.
|
|
88
|
+
- thematic_sections: List[ThematicSection] — 3-5 thematic narrative sections.
|
|
89
|
+
- strategic_agenda: List[Implication] — 2-3 concrete moves.
|
|
90
|
+
- source_landscape: List[SourceLink] — bulleted list of all source URLs referenced.
|
|
91
|
+
|
|
92
|
+
### RULE: OutputFormat
|
|
93
|
+
- Thematic sections MUST:
|
|
94
|
+
- Open with a declarative statement.
|
|
95
|
+
- Use flowing paragraphs with embedded data points (no bullet lists).
|
|
96
|
+
- Weave in source citations inline: "Sephora's AI Color Match drove a 28% conversion lift (PSFK Retail Graph)".
|
|
97
|
+
- Close with a practical implication: what this means for the practitioner.
|
|
98
|
+
- Tone MUST read like a senior strategist briefing a CMO, not a consultant deck. Strongest findings first.
|
|
99
|
+
- 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...").
|
|
100
|
+
- 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.
|
|
101
|
+
- If a trend lacks recent statistics, the agent SHOULD use the google_search tool to find recent (2025-2026) statistics.
|
|
102
|
+
- Prefer Fodda graph stats over web stats. Cite Fodda stats as: "According to research tracked in the [Graph/Expert Name] graph...".
|
|
103
|
+
`;
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// Skill 4: Graph Awareness
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
export const SKILL_GRAPH_AWARENESS = `---
|
|
108
|
+
id: FODDA-SKILL-AWARENESS-001
|
|
109
|
+
title: Fodda Graph Awareness Skill
|
|
110
|
+
version: 2.0.0
|
|
111
|
+
compliance: RFC-2119
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
### RULE: GraphAwareness
|
|
115
|
+
- Each graph is a curated knowledge graph representing an editorial viewpoint with evidence, not a generic database.
|
|
116
|
+
- Multi-graph convergence (same theme in 2+ graphs) indicates a high-confidence finding.
|
|
117
|
+
- Contradicting graphs MUST be noted explicitly as a tension.
|
|
118
|
+
- Match expert graph terminology on concepts, not labels.
|
|
119
|
+
- Industry report graphs are deep but narrow; excellent for specific verticals.
|
|
120
|
+
|
|
121
|
+
### TOKEN: GraphTypes
|
|
122
|
+
- PSFK curated graphs: retail, beauty, fashion, sports, sic, ce-design, pew.
|
|
123
|
+
- Expert graphs: individual specialist perspectives (e.g., ezra-eeman-wayfinder, alyson-stevens-macro).
|
|
124
|
+
- Industry report graphs: single-report deep dives (e.g., pwc/sxsw-2026-key-insights, delta/the-connection-index).
|
|
125
|
+
|
|
126
|
+
### RULE: GraphAttribution
|
|
127
|
+
- The agent MUST NEVER say "the Fodda graph" or "according to Fodda". Fodda is the platform; graphs are created by named experts.
|
|
128
|
+
- Format: "According to PSFK's Retail Graph..." or "Ezra Eeman's Wayfinder Graph identifies...".
|
|
129
|
+
- Include graph_id for programmatic reference.
|
|
130
|
+
`;
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
// Skill 5: Source Quality
|
|
133
|
+
// ---------------------------------------------------------------------------
|
|
134
|
+
export const SKILL_SOURCE_QUALITY = `---
|
|
135
|
+
id: FODDA-SKILL-QUALITY-001
|
|
136
|
+
title: Fodda Source Quality Skill
|
|
137
|
+
version: 2.0.0
|
|
138
|
+
compliance: RFC-2119
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### TOKEN: SourceCredibilityTiers
|
|
142
|
+
- Tier 5 (Primary Research): Earnings reports, PubMed, OECD, Census, BLS, government filings.
|
|
143
|
+
- Tier 4 (Expert Analysis): PSFK original research, McKinsey, Deloitte, named expert graphs.
|
|
144
|
+
- Tier 3 (Quality Journalism): Financial Times, Bloomberg, Business of Fashion, Wired.
|
|
145
|
+
- Tier 2 (Industry Sources): Trade publications, brand press releases, industry blogs.
|
|
146
|
+
- Tier 1 (Unverified): Social media posts, individual opinions, unattributed claims.
|
|
147
|
+
|
|
148
|
+
### RULE: SourcePreferenceHierarchy
|
|
149
|
+
- The agent MUST follow this preference order:
|
|
150
|
+
1. Fodda knowledge graph evidence (pre-vetted, always prefer).
|
|
151
|
+
2. Supplemental structured data (BLS, Census, Google Trends, OECD).
|
|
152
|
+
3. Google Search results (web-sourced context for themes not covered).
|
|
153
|
+
4. URL-fetched primary sources (for deep verification).
|
|
154
|
+
|
|
155
|
+
### RULE: SourceQualityGate
|
|
156
|
+
- At least 60% of cited evidence SHOULD be tier 3 or above.
|
|
157
|
+
- The agent MUST NOT present a tier 1-2 source without qualification ("industry reports suggest...").
|
|
158
|
+
- Acknowledge explicitly if a finding relies on a single source.
|
|
159
|
+
- Recency: Prefer evidence less than 12 months old.
|
|
160
|
+
- Note geographic concentration (e.g., US-only).
|
|
161
|
+
- Trust the graph over web sources in case of conflicts.
|
|
162
|
+
`;
|
|
163
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/agents/fodda-researcher/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCzC,CAAC;AAEF,8EAA8E;AAC9E,+BAA+B;AAC/B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBxC,CAAC;AAEF,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;CAwBlC,CAAC;AAEF,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;CAuBpC,CAAC;AAEF,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BnC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brand Intelligence Widget Template Engine
|
|
3
|
+
*
|
|
4
|
+
* Server-side slot filling for the Fodda brand intelligence widget.
|
|
5
|
+
* Fills ~90% of slots mechanically. Returns near-complete HTML with
|
|
6
|
+
* only editorial slots open for Claude to fill (~200 tokens).
|
|
7
|
+
*/
|
|
8
|
+
export declare function renderBrandWidget(profile: any): Promise<{
|
|
9
|
+
widget_html: string;
|
|
10
|
+
editorial_context: any;
|
|
11
|
+
open_slots: string[];
|
|
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>";
|
|
14
|
+
//# sourceMappingURL=brandTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brandTemplate.d.ts","sourceRoot":"","sources":["../src/brandTemplate.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA6PH,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,CA8WpI;AAGD,eAAO,MAAM,QAAQ,6iYAiKd,CAAC"}
|