feat: Add trading-journal-coach kit#273
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughChangesTrading Journal Coach
Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
:robot_face: AgentKit Structural ValidationNew Contributions Detected
Check Results
🎉 All checks passed! This contribution follows the AgentKit structure. |
There was a problem hiding this comment.
Actionable comments posted: 12
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
kits/trading-journal-coach/constitutions/default.md (1)
1-32: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueMD022 blanks-around-headings warnings noted, decoding station standing by.
Static analysis flags missing blank lines around headings at Lines 3, 6, 12, 17, 20, 25, and 30. Based on learnings, this file is templated/auto-generated across kits, so don't patch just this checked-in copy — route the formatting fix to the template/source level so future kits inherit it.
Based on learnings, "treat this default.md as a templated/auto-generated file... don't propose fixing only the checked-in default.md; instead, request that the correction be made at the template/source level".
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@kits/trading-journal-coach/constitutions/default.md` around lines 1 - 32, Fix the MD022 heading-spacing violations in the template/source that generates the Trading Journal Coach constitution, adding blank lines around the affected headings so future generated default.md files inherit the correction; do not patch only this checked-in copy.Source: Learnings
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/trading-journal-coach/apps/components/ChatPanel.tsx`:
- Around line 56-61: Update the chat input in ChatPanel to include an accessible
name, such as an aria-label or associated label element, while preserving its
existing value, onChange, placeholder, and disabled behavior.
In `@kits/trading-journal-coach/apps/components/FindingsList.tsx`:
- Around line 20-26: Update the findings rendering in FindingsList around
disciplineScore and headline to also surface c.scoreRationale, using concise
subtext or a tooltip attached to the score area. Preserve the existing score and
headline presentation while ensuring the rationale is visible to the trader.
In `@kits/trading-journal-coach/apps/components/MetricsCards.tsx`:
- Around line 24-31: Replace the custom layout and styling in MetricsCards.tsx
lines 24-31 by using Tailwind utility classes and/or existing shadcn/ui
components instead of the cards, card, label, and value classes, while
preserving the current card content and conditional value styling. In
EquityCurve.tsx lines 28-52, remove the panel class and inline dimensions,
replacing them with equivalent Tailwind utilities such as w-full and h-[200px],
using existing UI components where appropriate.
- Line 20: Update the score display in MetricsCards to guard against an
undefined score when analysis.coaching is unavailable. Preserve the em dash for
mock analyses, and use the existing safe placeholder instead of rendering
“undefined/100” for missing scores.
In `@kits/trading-journal-coach/apps/components/UploadDropzone.tsx`:
- Around line 15-31: Update readFile to handle FileReader failures via its
onerror callback and surface a clear error without calling onCsv with invalid
data. Update useSample to validate the fetch response with res.ok before reading
the body, and surface a clear error when the sample request fails; only pass the
response text to onCsv after a successful fetch.
In `@kits/trading-journal-coach/apps/lib/metrics.ts`:
- Around line 85-297: The inferred return shape of computeMetrics is not
exported, causing orchestrate to bypass type checking with any. In
kits/trading-journal-coach/apps/lib/metrics.ts lines 85-297, export a Metrics
type and annotate computeMetrics with it; in
kits/trading-journal-coach/apps/actions/orchestrate.ts lines 53-96, import
Metrics and remove the as any cast from the computeMetrics(trades) result.
- Around line 71-78: Update todBucket so "open_0915_1000" is returned only for
times from 09:15 through 10:00, adding a lower-bound check for tod while
preserving the existing subsequent bucket ranges and close-window behavior.
Ensure pre-market values are assigned to an appropriate non-primary bucket
rather than the open window.
- Around line 174-198: Update the revenge-detection loop around lossSeen in the
dayEntries processing to track the actual most recent loss trade/index, rather
than relying on idxs[pos - 1]. Use that loss trade for afterTradeIndex,
gapMinutes, qtyRatio, and withinCooldown calculations, and preserve the intended
behavior of evaluating only the immediate re-entry after each loss rather than
every subsequent trade.
In `@kits/trading-journal-coach/apps/lib/types.ts`:
- Line 60: Update the coaching property in the relevant type definition from
required to optional, so consumers such as MetricsCards and FindingsList can
safely handle absent coaching data while preserving the existing Coaching type.
In `@kits/trading-journal-coach/prompts/analyze-journal_llmnode-301_system_0.md`:
- Line 30: Append exactly one final newline character to each affected prompt
file: kits/trading-journal-coach/prompts/analyze-journal_llmnode-301_system_0.md
(line 30),
kits/trading-journal-coach/prompts/analyze-journal_llmnode-301_user_1.md (line
3), kits/trading-journal-coach/prompts/analyze-journal_llmnode-629_system_0.md
(line 24), and
kits/trading-journal-coach/prompts/analyze-journal_llmnode-629_user_1.md (line
3); do not alter their prompt content.
In
`@kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_system_0.md`:
- Around line 1-25: Leave the prompt text unchanged in
kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_system_0.md:1-25,
kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_user_1.md:1-8,
kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_system_0.md:1-11,
and
kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_user_1.md:1-2.
Update the repository-level markdownlint configuration to ignore
kits/**/prompts/**/*.md, covering these files and future prompt files without
adding headings or trailing newlines.
In
`@kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_system_0.md`:
- Line 10: Update the weekly discipline report template to place each section on
its own line, including the title, metrics, biggest leak, next-week rule,
positive result, and weekly focus. Preserve all existing placeholders and
wording while restoring the intended scannable report structure.
---
Outside diff comments:
In `@kits/trading-journal-coach/constitutions/default.md`:
- Around line 1-32: Fix the MD022 heading-spacing violations in the
template/source that generates the Trading Journal Coach constitution, adding
blank lines around the affected headings so future generated default.md files
inherit the correction; do not patch only this checked-in copy.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: cd141b42-b9b1-4349-8f89-67461e1224b5
⛔ Files ignored due to path filters (2)
kits/trading-journal-coach/apps/public/sample-trades.csvis excluded by!**/*.csvkits/trading-journal-coach/assets/sample-trades.csvis excluded by!**/*.csv
📒 Files selected for processing (39)
kits/trading-journal-coach/.gitignorekits/trading-journal-coach/README.mdkits/trading-journal-coach/agent.mdkits/trading-journal-coach/apps/.env.examplekits/trading-journal-coach/apps/.gitignorekits/trading-journal-coach/apps/actions/orchestrate.tskits/trading-journal-coach/apps/app/globals.csskits/trading-journal-coach/apps/app/layout.tsxkits/trading-journal-coach/apps/app/page.tsxkits/trading-journal-coach/apps/components/ChatPanel.tsxkits/trading-journal-coach/apps/components/EquityCurve.tsxkits/trading-journal-coach/apps/components/FindingsList.tsxkits/trading-journal-coach/apps/components/MetricsCards.tsxkits/trading-journal-coach/apps/components/UploadDropzone.tsxkits/trading-journal-coach/apps/lib/csv.tskits/trading-journal-coach/apps/lib/lamatic-client.tskits/trading-journal-coach/apps/lib/metrics.tskits/trading-journal-coach/apps/lib/types.tskits/trading-journal-coach/apps/next.config.mjskits/trading-journal-coach/apps/orchestrate.tskits/trading-journal-coach/apps/package.jsonkits/trading-journal-coach/apps/tsconfig.jsonkits/trading-journal-coach/constitutions/default.mdkits/trading-journal-coach/flows/analyze-journal.tskits/trading-journal-coach/flows/chat-with-journal.tskits/trading-journal-coach/flows/weekly-discipline-report.tskits/trading-journal-coach/lamatic.config.tskits/trading-journal-coach/model-configs/analyze-journal_llmnode-301_generative-model-name.tskits/trading-journal-coach/model-configs/analyze-journal_llmnode-629_generative-model-name.tskits/trading-journal-coach/model-configs/chat-with-journal_llmnode-277_generative-model-name.tskits/trading-journal-coach/model-configs/weekly-discipline-report_llmnode-679_generative-model-name.tskits/trading-journal-coach/prompts/analyze-journal_llmnode-301_system_0.mdkits/trading-journal-coach/prompts/analyze-journal_llmnode-301_user_1.mdkits/trading-journal-coach/prompts/analyze-journal_llmnode-629_system_0.mdkits/trading-journal-coach/prompts/analyze-journal_llmnode-629_user_1.mdkits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_system_0.mdkits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_user_1.mdkits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_system_0.mdkits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_user_1.md
| <div className="cards"> | ||
| {cards.map((c) => ( | ||
| <div className="card" key={c.label}> | ||
| <div className="label">{c.label}</div> | ||
| <div className={`value ${c.cls || ""}`}>{c.value}</div> | ||
| </div> | ||
| ))} | ||
| </div> |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy lift
Directive: Deploy standard Tailwind CSS and shadcn/ui disguises.
Agent, HQ surveillance has flagged a deviation from our Next.js visual protocol. Your mission, should you choose to accept it, is to infiltrate these sectors and replace the rogue custom CSS classes (like cards, card, panel) and inline styles with our officially sanctioned Tailwind CSS utilities and shadcn/ui components. Keeping our codebase strictly uniform according to guidelines is critical to the mission's success!
kits/trading-journal-coach/apps/components/MetricsCards.tsx#L24-L31: Swap out the rawdivtags and custom classes (cards,card,label,value) for Tailwind utilities and/or shadcn/ui components.kits/trading-journal-coach/apps/components/EquityCurve.tsx#L28-L52: Eradicate thepanelclass and inline styles (e.g.,style={{ width: "100%", height: 200 }}), replacing them with Tailwind equivalents likew-full h-[200px]and proper UI components.
📍 Affects 2 files
kits/trading-journal-coach/apps/components/MetricsCards.tsx#L24-L31(this comment)kits/trading-journal-coach/apps/components/EquityCurve.tsx#L28-L52
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/apps/components/MetricsCards.tsx` around lines 24
- 31, Replace the custom layout and styling in MetricsCards.tsx lines 24-31 by
using Tailwind utility classes and/or existing shadcn/ui components instead of
the cards, card, label, and value classes, while preserving the current card
content and conditional value styling. In EquityCurve.tsx lines 28-52, remove
the panel class and inline dimensions, replacing them with equivalent Tailwind
utilities such as w-full and h-[200px], using existing UI components where
appropriate.
Source: Coding guidelines
| message?: string; | ||
| metrics: Metrics; | ||
| patterns: Pattern[]; | ||
| coaching: Coaching; |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Directive: Align intel on the coaching payload.
Agent, our reconnaissance reveals a discrepancy in the field reports. The coaching property is currently marked as mandatory, yet operatives in downstream components like MetricsCards and FindingsList are using defensive maneuvers (analysis.coaching?.) to approach it. If this payload can be absent in action, we must officially classify it as optional to prevent any false assumptions in the field. This message will self-destruct in five seconds.
🕵️ Proposed covert fix
- coaching: Coaching;
+ coaching?: Coaching;📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| coaching: Coaching; | |
| coaching?: Coaching; |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/apps/lib/types.ts` at line 60, Update the coaching
property in the relevant type definition from required to optional, so consumers
such as MetricsCards and FindingsList can safely handle absent coaching data
while preserving the existing Coaching type.
| You are the trader's **journal chat coach**. You answer questions about **their own** trading using their stored analysis and any retrieved context. You are a discipline coach, not a financial adviser. | ||
|
|
||
| ## Rules | ||
| 1. Answer **only** from the provided analysis/context (metrics, patterns, coaching brief) and the trader's saved goals/rules (memory). **Cite only numbers that appear there** — never invent figures. | ||
| 2. If the answer isn't in their data, say so plainly and suggest what to log or re-run (e.g. "re-run the analysis after your next 20 trades"). Do not guess. | ||
| 3. Stay in the **behaviour/process** lane. No security/strike/entry/exit recommendations, no market predictions. If asked "what should I buy" → redirect to a discipline rule. | ||
| 4. Be concise and direct. Lead with the answer, then the one number that supports it. Coach tone: honest, specific, encouraging where earned. | ||
| 5. Respect saved goals/rules: if they set a rule (e.g. "max 4 trades/day"), measure them against it using their data. | ||
|
|
||
| ## Grounding you receive | ||
| - `ANALYSIS`: the latest stored analysis for this trader (metrics + patterns + coaching). | ||
| - `CONTEXT`: retrieved snippets relevant to the question (may be empty). | ||
| - `GOALS`: the trader's saved goals/rules from memory (may be empty). | ||
|
|
||
| ## Examples | ||
| Q: "What's my worst habit?" | ||
| A: "Holding losers and cutting winners — your average loser is held 2.74× longer than your average winner. That single asymmetry is inverting your reward:risk. Your coaching brief's top priority is a 15-minute post-loss cooldown." | ||
|
|
||
| Q: "Am I improving?" | ||
| A (when only one analysis exists): "I only have one analysis stored, so I can't trend you yet. Re-run after your next block of trades and I'll compare win rate, expectancy, and revenge episodes over time." | ||
|
|
||
| Q: "Which strike should I buy tomorrow?" | ||
| A: "That's outside what I coach — I work on your behaviour, not trade calls. What I can do: your morning window (10:00–11:30) is net -4500, so a useful rule is to halve size there until the bleed stops." | ||
|
|
||
| Answer in plain text (no JSON, no code fences). |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
Don't let markdownlint rewrite the mission briefing. All four prompt files trip MD041 (missing top-level heading) and/or MD022/MD047, but this text is sent verbatim to the LLM as instructions — adding cosmetic headings or trailing newlines for lint compliance would change what the model actually reads.
kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_system_0.md#L1-L25: leave prompt text as-is; exclude this path from markdownlint instead.kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_user_1.md#L1-L8: same — exclude via config, don't add a heading.kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_system_0.md#L1-L11: same — exclude via config, don't force a trailing heading/newline for MD041/MD047.kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_user_1.md#L1-L2: same — exclude via config, don't force a trailing newline for MD047.
Add a repo-level .markdownlint.json/.markdownlint-cli2.jsonc ignore glob such as kits/**/prompts/**/*.md so this stops recurring per kit.
Based on learnings, "Prompt Markdown files under kits//prompts/ should be passed to the LLM as system/user instruction content... exclude these prompt files via a repo-level markdownlint config... rather than altering the prompt text for lint satisfaction."
🧰 Tools
🪛 LanguageTool
[style] ~1-~1: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...red analysis and any retrieved context. You are a discipline coach, not a financial...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
🪛 markdownlint-cli2 (0.23.0)
[warning] 1-1: First line in a file should be a top-level heading
(MD041, first-line-heading, first-line-h1)
[warning] 3-3: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 10-10: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 15-15: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
📍 Affects 4 files
kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_system_0.md#L1-L25(this comment)kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_user_1.md#L1-L8kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_system_0.md#L1-L11kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_user_1.md#L1-L2
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_system_0.md`
around lines 1 - 25, Leave the prompt text unchanged in
kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_system_0.md:1-25,
kits/trading-journal-coach/prompts/chat-with-journal_llmnode-277_user_1.md:1-8,
kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_system_0.md:1-11,
and
kits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_user_1.md:1-2.
Update the repository-level markdownlint configuration to ignore
kits/**/prompts/**/*.md, covering these files and future prompt files without
adding headings or trailing newlines.
Source: Learnings
|
Hi @VaibhavYDev! 👋 Before this PR can be reviewed by maintainers, please resolve all comments and requested changes from the CodeRabbit automated review. Steps to follow:
This helps keep the review process efficient for everyone. Thank you! 🙏 |
… a11y, upload errors, prompt formatting)
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
kits/trading-journal-coach/apps/components/UploadDropzone.tsx (1)
22-26: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winDisable drop handling while analysis is running.
loadingdisables the buttons but not the drop zone. A second dropped file can callonCsvduring an existing analysis, creating overlapping requests and stale-result races. Guard the handlers whenloadingis true.Also applies to: 35-44
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@kits/trading-journal-coach/apps/components/UploadDropzone.tsx` around lines 22 - 26, Update the UploadDropzone drop handlers, including onDrop and the related drag handlers, to return immediately when loading is true. Ensure dropped files cannot call readFile or onCsv during analysis, while preserving the existing behavior when loading is false.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/trading-journal-coach/apps/components/FindingsList.tsx`:
- Around line 27-29: Move the inline margin styling from the scoreRationale div
in FindingsList to a dedicated score-rationale class in globals.css, using the
kit’s CSS-variable convention for its spacing values. Apply that class to the
rationale element and remove the inline style.
In `@kits/trading-journal-coach/apps/components/UploadDropzone.tsx`:
- Around line 29-32: Update useSample to wrap the fetch and response-text flow
in try/catch, routing rejected requests through the same onCsv("") validation
path currently used when res.ok is false. Preserve the existing successful CSV
handling and non-OK response behavior.
---
Outside diff comments:
In `@kits/trading-journal-coach/apps/components/UploadDropzone.tsx`:
- Around line 22-26: Update the UploadDropzone drop handlers, including onDrop
and the related drag handlers, to return immediately when loading is true.
Ensure dropped files cannot call readFile or onCsv during analysis, while
preserving the existing behavior when loading is false.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: f6dcef95-6d44-461d-8cc4-4369189969c5
📒 Files selected for processing (13)
kits/trading-journal-coach/.env.examplekits/trading-journal-coach/apps/components/ChatPanel.tsxkits/trading-journal-coach/apps/components/FindingsList.tsxkits/trading-journal-coach/apps/components/MetricsCards.tsxkits/trading-journal-coach/apps/components/UploadDropzone.tsxkits/trading-journal-coach/apps/lib/metrics.tskits/trading-journal-coach/constitutions/default.mdkits/trading-journal-coach/prompts/analyze-journal_llmnode-301_system_0.mdkits/trading-journal-coach/prompts/analyze-journal_llmnode-301_user_1.mdkits/trading-journal-coach/prompts/analyze-journal_llmnode-629_system_0.mdkits/trading-journal-coach/prompts/analyze-journal_llmnode-629_user_1.mdkits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_system_0.mdkits/trading-journal-coach/prompts/weekly-discipline-report_llmnode-679_user_1.md
| {c.scoreRationale && ( | ||
| <div className="ev" style={{ marginTop: -4, marginBottom: 12 }}>{c.scoreRationale}</div> | ||
| )} |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
Move rationale spacing into CSS.
The new inline margins conflict with the kit’s CSS-variable styling convention. Add a dedicated class such as score-rationale in globals.css and apply the spacing there.
As per coding guidelines, use CSS variables for styling in Next.js app components.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/apps/components/FindingsList.tsx` around lines 27
- 29, Move the inline margin styling from the scoreRationale div in FindingsList
to a dedicated score-rationale class in globals.css, using the kit’s
CSS-variable convention for its spacing values. Apply that class to the
rationale element and remove the inline style.
Source: Coding guidelines
…catch sample fetch, rationale spacing to CSS)
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/trading-journal-coach/apps/components/UploadDropzone.tsx`:
- Around line 25-38: Update UploadDropzone’s useSample and input handlers to
track a local in-flight busy state, guard file drops, sample requests, and
file-input onChange with loading or busy, and set busy for the entire fetch
lifecycle including failures. Bind busy to both controls’ disabled state,
clearing it only after the sample response has been passed to onCsv.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 0469ebb7-2fb1-435d-b090-5890443e573b
📒 Files selected for processing (3)
kits/trading-journal-coach/apps/app/globals.csskits/trading-journal-coach/apps/components/FindingsList.tsxkits/trading-journal-coach/apps/components/UploadDropzone.tsx
|
Heads-up for maintainers: the "Validate PR — Studio runtime check (Phase 2, testing)" check is failing at its Checkout PR head step — actions/checkout refuses to check out fork PR code from a workflow_run workflow (the "pwn request" guard; it needs allow-unsafe-pr-checkout: true on the checkout step in the base workflow, which only maintainers can set). It fails before reaching any of my kit's code, so this looks like an infra issue on the experimental check rather than anything in this PR. Structural validation is green and all CodeRabbit comments are addressed — happy to adjust if there's anything on my side. |
…neratedResponse fallback
There was a problem hiding this comment.
Actionable comments posted: 8
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@kits/trading-journal-coach/actions/orchestrate.ts`:
- Around line 9-18: The initial request in runFlow currently awaits
client.executeFlow without a submission timeout. Add a local timeout around
executeFlow using an AbortController or promise race, unless the Lamatic SDK
already provides an equivalent request-timeout option; preserve the existing
checkStatus polling and fallback response behavior.
In `@kits/trading-journal-coach/app/page.tsx`:
- Around line 21-22: Ensure both action flows always settle their loading state:
in kits/trading-journal-coach/app/page.tsx lines 21-22, wrap analyzeJournal in
try/catch/finally and move setLoading(false) into finally; in
kits/trading-journal-coach/components/ChatPanel.tsx lines 15-23, wrap
chatWithJournal similarly, append a failure message in catch, and move
setBusy(false) into finally.
- Line 20: Remove the unconditional setError(null) from the current flow and
reset the error only at the start of handleCsv, preserving validation warnings
produced for discarded CSV rows through render and coaching.
In `@kits/trading-journal-coach/components/UploadDropzone.tsx`:
- Around line 12-21: Update UploadDropzone’s readFile function and busy state to
track fileBusy from immediately before readAsText until either onload or onerror
completes. Include fileBusy in the existing busy guard so drops and file
selections are blocked while reading, while preserving the current onCsv
behavior for successful and failed reads.
In `@kits/trading-journal-coach/lib/csv.ts`:
- Around line 28-39: Update the CSV parsing flow around Papa.parse and the
existing missing-header validation to inspect parsed.errors and append each Papa
row-parse error to errors with its row/code/message details. Ensure malformed
rows produce clear validation errors and are not silently accepted, while
preserving the existing missing-column early return behavior.
In `@kits/trading-journal-coach/lib/metrics.ts`:
- Around line 45-70: Update istParts to accept every date shape accepted by
csv.ts via Date.parse, including valid non-ISO and no-timezone inputs, before
falling back to unknown. For parsed values without an explicit timezone, derive
the IST wall-clock fields and dateKey from the parsed date rather than treating
the local wall-clock as UTC; preserve the existing explicit-offset handling and
return structure.
In `@kits/trading-journal-coach/package.json`:
- Line 12: Update the lamatic dependency in package.json from the mutable latest
tag to the tested fixed SDK version, then generate and commit the package
lockfile for this kit so installations resolve the same version consistently.
In `@kits/trading-journal-coach/tsconfig.tsbuildinfo`:
- Line 1: Remove the generated tsconfig.tsbuildinfo artifact from the kit, then
update the kit’s .gitignore to ignore *.tsbuildinfo files. Do not modify or
preserve the generated build metadata.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: d8165ca3-2426-4eb1-88c1-285da3109ac7
⛔ Files ignored due to path filters (1)
kits/trading-journal-coach/public/sample-trades.csvis excluded by!**/*.csv
📒 Files selected for processing (20)
kits/trading-journal-coach/.gitignorekits/trading-journal-coach/actions/orchestrate.tskits/trading-journal-coach/app/globals.csskits/trading-journal-coach/app/layout.tsxkits/trading-journal-coach/app/page.tsxkits/trading-journal-coach/apps/components/UploadDropzone.tsxkits/trading-journal-coach/components/ChatPanel.tsxkits/trading-journal-coach/components/EquityCurve.tsxkits/trading-journal-coach/components/FindingsList.tsxkits/trading-journal-coach/components/MetricsCards.tsxkits/trading-journal-coach/components/UploadDropzone.tsxkits/trading-journal-coach/lib/csv.tskits/trading-journal-coach/lib/lamatic-client.tskits/trading-journal-coach/lib/metrics.tskits/trading-journal-coach/lib/types.tskits/trading-journal-coach/next.config.mjskits/trading-journal-coach/orchestrate.tskits/trading-journal-coach/package.jsonkits/trading-journal-coach/tsconfig.jsonkits/trading-journal-coach/tsconfig.tsbuildinfo
| async function runFlow(flow: FlowKey, payload: Record<string, any>): Promise<any> { | ||
| const client: any = getLamaticClient(); | ||
| const res: any = await client.executeFlow(config.flows[flow].workflowId, payload); | ||
| const requestId = | ||
| res?.result?.requestId ?? res?.requestId ?? res?.data?.requestId ?? res?.result?.result?.requestId; | ||
| if (requestId && typeof client.checkStatus === "function") { | ||
| return await client.checkStatus(requestId, 3, 180); // poll every 3s, up to 3 minutes | ||
| } | ||
| return res; | ||
| } |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== locate file and package references =="
git ls-files | rg '(^|/)orchestrate\.ts$|package.json|package-lock.json|pnpm-lock.yaml|yarn.lock' || true
echo "== examine target file =="
wc -l kits/trading-journal-coach/actions/orchestrate.ts 2>/dev/null || true
sed -n '1,80p' kits/trading-journal-coach/actions/orchestrate.ts 2>/dev/null || true
echo "== package lamatic references =="
rg -n '"lamatic"|lamatic' package.json kits/trading-journal-coach/package.json kits/trading-journal-coach 2>/dev/null || trueRepository: Lamatic/AgentKit
Length of output: 50375
🌐 Web query:
Lamatic SDK executeFlow checkStatus timeout documentation
💡 Result:
The Lamatic SDK provides a checkStatus method designed to monitor the status of asynchronous requests, such as long-running workflows or agents [1]. The signature for the checkStatus method is as follows: checkStatus(requestId: string, pollInterval?: number, pollTimeout?: number): Promise Parameters: - requestId (string): The unique identifier of the request you wish to track [1]. - pollInterval (number, optional): The time interval (in milliseconds or seconds, depending on implementation specifics) between consecutive status checks [1]. - pollTimeout (number, optional): The maximum time to wait for the request to complete before timing out [1]. This method is specifically useful for workflows that execute asynchronously, allowing you to implement a polling mechanism to retrieve results once the processing is finished [1]. Top results: [1]
Citations:
🌐 Web query:
GitHub lamatic-js executeFlow checkStatus client-side timeout AbortController
💡 Result:
Based on the available documentation for the Lamatic.ai SDK, the lamatic JavaScript/TypeScript library provides methods to interact with the platform, specifically executeFlow and checkStatus [1]. The executeFlow method is used to trigger workflows, while checkStatus(requestId: string, pollInterval?: number, pollTimeout?: number) is provided to handle asynchronous status checking via polling [1]. Regarding your query about AbortController and client-side timeouts: 1. Standard Client-Side Timeouts: The checkStatus method accepts a pollTimeout parameter [1]. You can use this parameter to limit the duration of the polling operation, which serves as a mechanism to handle timeouts at the SDK level [1]. 2. AbortController: The official Lamatic SDK documentation does not explicitly detail native support for AbortController as an argument to executeFlow or checkStatus [2][1]. Because the SDK interacts with platform GraphQL endpoints [3][4], standard JavaScript fetch requests (which typically underpin such SDKs) can often be controlled by passing an AbortSignal via custom fetch options if the underlying implementation exposes a way to pass custom request configurations. If the SDK does not provide an explicit signal option, you may need to implement client-side timeout logic by wrapping your calls in a promise that races the SDK method against a timeout or an AbortController trigger [1]. For precise implementation details, you may wish to inspect the lamatic-sdk source code directly on GitHub, as it is a TypeScript-based library [2].
Citations:
- 1: https://lamatic.ai/docs/api-integration/sdk
- 2: https://github.com/Lamatic/lamatic-sdk
- 3: https://github.com/lamatic/docs/blob/main/pages/docs/sdk/integration-guide.mdx
- 4: https://lamatic.ai/docs/api-integration/integration-guide
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== lamatic package metadata =="
if [ -f node_modules/lamatic/package.json ]; then
cat node_modules/lamatic/package.json
else
echo "node_modules/lamatic/package.json not found"
fi
echo "== lamatic declarations around executeFlow/checkStatus =="
rg -n "executeFlow|checkStatus|fetch\\(|signal|AbortController|pollTimeout|timeout" node_modules/lamatic/dist node_modules/lamatic 2>/dev/null | head -n 200 || true
echo "== installed lamatic source references =="
find node_modules/lamatic -type f \( -name "*.js" -o -name "*.ts" -o -name "*.d.ts" \) -maxdepth 3 2>/dev/null | head -n 80Repository: Lamatic/AgentKit
Length of output: 329
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== package manifests =="
for f in kits/trading-journal-coach/package.json package.json kits/trading-journal-coach/apps/package.json; do
echo "--- $f"
[ -f "$f" ] && cat "$f"
done
echo "== lockfile lamatic entries =="
rg -n '"lamatic"|lamatic@|lamatic' package-lock.json pnpm-lock.yaml yarn.lock kits/trading-journal-coach/package-lock.json kits/trading-journal-coach/pnpm-lock.yaml kits/trading-journal-coach/yarn.lock 2>/dev/null | head -n 120 || true
echo "== source files with lamatic client executeFlow =="
rg -n "executeFlow|checkStatus|requestId|pollTimeout" kits/trading-journal-coach lib . --glob '!node_modules' --glob '!dist' --glob '!build' --glob '!tsbuildinfo' --glob '!*.map' 2>/dev/null | head -n 200 || trueRepository: Lamatic/AgentKit
Length of output: 26911
Mission incomplete: guard the initial Lamatic execution. checkStatus already has the 3s poll / 180s timeout, but client.executeFlow() awaits the submission request with no local timeout shown. Wrap it with an AbortController/promise race if the SDK doesn’t expose its own request timeout.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/actions/orchestrate.ts` around lines 9 - 18, The
initial request in runFlow currently awaits client.executeFlow without a
submission timeout. Add a local timeout around executeFlow using an
AbortController or promise race, unless the Lamatic SDK already provides an
equivalent request-timeout option; preserve the existing checkStatus polling and
fallback response behavior.
|
|
||
| async function run(trades: Trade[]) { | ||
| setLoading(true); | ||
| setError(null); |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Mission brief: preserve partial-CSV warnings.
handleCsv sets validation errors for discarded rows, then this clears them before render. Users can receive coaching calculated from only a subset of their journal without knowing it. Move the reset to handleCsv only, or retain parse warnings separately.
Proposed fix
async function run(trades: Trade[]) {
setLoading(true);
- setError(null);
const res = await analyzeJournal(trades);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| setError(null); |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/app/page.tsx` at line 20, Remove the unconditional
setError(null) from the current flow and reset the error only at the start of
handleCsv, preserving validation warnings produced for discarded CSV rows
through render and coaching.
| const [drag, setDrag] = useState(false); | ||
| const [sampleBusy, setSampleBusy] = useState(false); | ||
| const inputRef = useRef<HTMLInputElement>(null); | ||
| const busy = loading || sampleBusy; // in-flight guard: analysis running OR a sample fetch pending | ||
|
|
||
| function readFile(f: File) { | ||
| const r = new FileReader(); | ||
| r.onload = () => onCsv(String(r.result || "")); | ||
| r.onerror = () => onCsv(""); // surfaces a parse/validation error rather than failing silently | ||
| r.readAsText(f); |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Mission brief: reserve the dropzone while a file is reading.
busy remains false until FileReader finishes, so multiple drops/selections can start concurrent reads and analyses. Track a fileBusy state from readAsText until onload/onerror.
Proposed fix
const [drag, setDrag] = useState(false);
const [sampleBusy, setSampleBusy] = useState(false);
+ const [fileBusy, setFileBusy] = useState(false);
const inputRef = useRef<HTMLInputElement>(null);
- const busy = loading || sampleBusy;
+ const busy = loading || sampleBusy || fileBusy;
function readFile(f: File) {
+ setFileBusy(true);
const r = new FileReader();
- r.onload = () => onCsv(String(r.result || ""));
- r.onerror = () => onCsv("");
+ r.onload = () => {
+ setFileBusy(false);
+ onCsv(String(r.result || ""));
+ };
+ r.onerror = () => {
+ setFileBusy(false);
+ onCsv("");
+ };
r.readAsText(f);
}Also applies to: 24-30, 74-78
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/components/UploadDropzone.tsx` around lines 12 -
21, Update UploadDropzone’s readFile function and busy state to track fileBusy
from immediately before readAsText until either onload or onerror completes.
Include fileBusy in the existing busy guard so drops and file selections are
blocked while reading, while preserving the current onCsv behavior for
successful and failed reads.
| const parsed = Papa.parse<Record<string, string>>(text, { | ||
| header: true, | ||
| skipEmptyLines: true, | ||
| transformHeader: (h) => h.trim().toLowerCase(), | ||
| }); | ||
|
|
||
| const headers = parsed.meta.fields || []; | ||
| const missing = REQUIRED.filter((r) => !headers.includes(r)); | ||
| if (missing.length) { | ||
| errors.push(`Missing required column(s): ${missing.join(", ")}. Expected header: ${REQUIRED.join(", ")}.`); | ||
| return { trades: [], errors, rowCount: 0 }; | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Papa's own row-parse errors vanish into the void — bring them back in.
Papa.parse can report row-shape errors (e.g. mismatched field counts) via parsed.errors, but this result is never inspected. A structurally malformed CSV could shift values across columns silently instead of surfacing a clear per-row error.
🕵️ Suggested fix
const parsed = Papa.parse<Record<string, string>>(text, {
header: true,
skipEmptyLines: true,
transformHeader: (h) => h.trim().toLowerCase(),
});
+ if (parsed.errors?.length) {
+ for (const e of parsed.errors.slice(0, 5)) errors.push(`CSV parse warning (row ${e.row}): ${e.message}`);
+ }📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const parsed = Papa.parse<Record<string, string>>(text, { | |
| header: true, | |
| skipEmptyLines: true, | |
| transformHeader: (h) => h.trim().toLowerCase(), | |
| }); | |
| const headers = parsed.meta.fields || []; | |
| const missing = REQUIRED.filter((r) => !headers.includes(r)); | |
| if (missing.length) { | |
| errors.push(`Missing required column(s): ${missing.join(", ")}. Expected header: ${REQUIRED.join(", ")}.`); | |
| return { trades: [], errors, rowCount: 0 }; | |
| } | |
| const parsed = Papa.parse<Record<string, string>>(text, { | |
| header: true, | |
| skipEmptyLines: true, | |
| transformHeader: (h) => h.trim().toLowerCase(), | |
| }); | |
| if (parsed.errors?.length) { | |
| for (const e of parsed.errors.slice(0, 5)) errors.push(`CSV parse warning (row ${e.row}): ${e.message}`); | |
| } | |
| const headers = parsed.meta.fields || []; | |
| const missing = REQUIRED.filter((r) => !headers.includes(r)); | |
| if (missing.length) { | |
| errors.push(`Missing required column(s): ${missing.join(", ")}. Expected header: ${REQUIRED.join(", ")}.`); | |
| return { trades: [], errors, rowCount: 0 }; | |
| } |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/lib/csv.ts` around lines 28 - 39, Update the CSV
parsing flow around Papa.parse and the existing missing-header validation to
inspect parsed.errors and append each Papa row-parse error to errors with its
row/code/message details. Ensure malformed rows produce clear validation errors
and are not silently accepted, while preserving the existing missing-column
early return behavior.
| function hasTZ(iso: string): boolean { | ||
| return /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim()); | ||
| } | ||
| function istParts(iso: string) { | ||
| let epoch: number, h: number, min: number, dow: number, dateKey: string; | ||
| if (hasTZ(iso)) { | ||
| const d = new Date(iso); | ||
| epoch = d.getTime(); | ||
| const ist = new Date(epoch + 330 * 60000); // shift so getUTC* reads IST wall clock | ||
| h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay(); | ||
| dateKey = ist.toISOString().slice(0, 10); | ||
| } else { | ||
| const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/); | ||
| if (m) { | ||
| const [, Y, Mo, D, H, Mi] = m; | ||
| h = +H; min = +Mi; dateKey = `${Y}-${Mo}-${D}`; | ||
| dow = new Date(Date.UTC(+Y, +Mo - 1, +D)).getUTCDay(); | ||
| epoch = Date.UTC(+Y, +Mo - 1, +D, +H, +Mi); | ||
| } else { | ||
| const d = new Date(iso); | ||
| epoch = isNaN(d.getTime()) ? 0 : d.getTime(); | ||
| h = 0; min = 0; dow = 0; dateKey = "unknown"; | ||
| } | ||
| } | ||
| return { epoch, hour: h, minute: min, dow, dateKey, tod: h * 60 + min }; | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== locate files =="
fd -a 'metrics\.ts$|csv\.ts$' . | sed 's#^\./##' | head -100
echo
echo "== metrics outline =="
ast-grep outline kits/trading-journal-coach/lib/metrics.ts --view expanded || true
echo
echo "== relevant metrics lines =="
cat -n kits/trading-journal-coach/lib/metrics.ts | sed -n '1,140p'
echo
echo "== date parsing references in kits/trading-journal-coach/lib =="
rg -n "Date\.parse|new Date\(|Date\.UTC|date:|exitDate|hasTZ|istParts|validate|csv" kits/trading-journal-coach/lib -SRepository: Lamatic/AgentKit
Length of output: 10935
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== lib/csv.ts =="
cat -n kits/trading-journal-coach/lib/csv.ts | sed -n '1,180p'
echo
echo "== metric usages of istParts dateKey/epoch/gap/hold =="
cat -n kits/trading-journal-coach/lib/metrics.ts | sed -n '135,242p'
echo
echo "== deterministic Date parsing probes =="
node - <<'JS'
const samples = [
"2026-06-03T09:45:00+05:30",
"2026-06-03 09:45:00+05:30",
"2026-06-03 09:45",
"2026-06-03 9:45",
"2026-6-03 09:45",
"2026-06-3 09:45",
"2026/06/03 09:45",
"06/03/2026 09:45",
"Jun 03 2026 09:45",
"Jun 3, 2026 09:45",
"03 Jun 2026 09:45",
];
for (const iso of samples) {
const d = new Date(iso);
const hasTz = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
let h,min,dow,dateKey,epoch;
if (hasTz) {
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.toISOString().slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
if (m) {
const [, Y, Mo, D, H, Mi] = m;
h = +H; min = +Mi; dateKey = `${Y}-${Mo}-${D}`;
dow = new Date(Date.UTC(+Y, +Mo - 1, +D)).getUTCDay();
epoch = Date.UTC(+Y, +Mo - 1, +D, +H, +Mi);
} else {
const d2 = new Date(iso);
epoch = isNaN(d2.getTime()) ? 0 : d2.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
console.log(JSON.stringify({
input: iso,
dateParseInvalid: isNaN(d.getTime()),
dateParseValue: d.getTime(),
parsedUTC: d.getUTCFullYear(), d.getUTCMonth()+1, d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes(),
hasTz,
istPartsEpoch: epoch,
istPartsUnknown: dateKey === "unknown",
istPartsHour: h,
istPartsMinute: min,
istPartsDow: dow,
istPartsDateKey: dateKey,
}, null, 2));
}
JSRepository: Lamatic/AgentKit
Length of output: 10380
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== deterministic Date parsing probes =="
node - <<'JS'
const samples = [
["2026-06-03T09:45:00+05:30", true],
["2026-06-03 09:45:00+05:30", true],
["2026-06-03 09:45", false],
["2026-06-03 9:45", false],
["2026-6-03 09:45", false],
["2026-06-3 09:45", false],
["2026/06/03 09:45", false],
["06/03/2026 09:45", false],
["Jun 03 2026 09:45", false],
["Jun 3, 2026 09:45", false],
["03 Jun 2026 09:45", false],
];
for (const [iso, onlyValidInIsoBranch] of samples) {
const d = new Date(iso);
const hasTz = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
let h,min,dow,dateKey,epoch;
if (hasTz) {
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.toISOString().slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
if (m) {
const [, Y, Mo, D, H, Mi] = m;
h = +H; min = +Mi; dateKey = `${Y}-${Mo}-${D}`;
dow = new Date(Date.UTC(+Y, +Mo - 1, +D)).getUTCDay();
epoch = Date.UTC(+Y, +Mo - 1, +D, +H, +Mi);
} else {
const d2 = new Date(iso);
epoch = isNaN(d2.getTime()) ? 0 : d2.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
console.log(JSON.stringify({
input: iso,
dateParseInvalid: isNaN(d.getTime()),
dateParseValue: d.getTime(),
parsedUTC: [d.getUTCFullYear(), d.getUTCMonth()+1, d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes()].join("T"),
hasTz,
regexMatch: !!iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/),
istPartsEpoch: epoch,
istPartsUnknown: dateKey === "unknown",
istPartsHour: h,
istPartsMinute: min,
istPartsDow: dow,
istPartsDateKey: dateKey,
matchesStrictRegexInNoTzBranch: !!(!hasTz && iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/)),
}), null, 2));
}
function istParts(iso) {
let epoch, h, min, dow, dateKey;
const hasTZ = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
if (hasTZ) {
const d = new Date(iso);
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.toISOString().slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}:?\d{2}):?(\d{2})?/s);
if (m) {
const [, Y, Mo, D, H, Mi, _S] = m;
h = +H; min = Mi ? +Mi : 0; dateKey = `${Y}-${Mo}-${D}`;
dow = new Date(Date.UTC(+Y, parseInt(Mo, 10) - 1, +D)).getUTCDay();
epoch = Date.UTC(+Y, parseInt(Mo, 10) - 1, +D, +H, Mi ? +Mi : 0);
} else {
const d = new Date(iso);
epoch = isNaN(d.getTime()) ? 0 : d.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
return { epoch, hour: h, minute: min, dow, dateKey, tod: h * 60 + min };
}
const mixed = [
{date: "2026-06-03T09:45:00+05:30", exitDate: "2026-06-03t10:30:00+05:30"},
{date: "2026-06-03 11:00", exitDate: "2026-06-03 11:30"},
{date: "2026-06-03T09:45:00+05:30", exitDate: "2026-06-03 10:30"},
];
for (const t of mixed) {
const entry = istParts(t.date);
const exit = istParts(t.exitDate);
const hold = Math.round((exit.epoch - entry.epoch) / 60000);
console.log(JSON.stringify({
input: t,
entry: entry,
exit: exit,
holdMin: hold,
sameDayKey: entry.dateKey === exit.dateKey,
unknownPairs: [entry.dateKey, exit.dateKey].includes("unknown"),
}), null, 2);
}
JSRepository: Lamatic/AgentKit
Length of output: 790
🏁 Script executed:
#!/bin/bash
set -euo pipefail
node> /tmp/ist-probe.js <<'JS'
const samples = [
["2026-06-03T09:45:00+05:30", true],
["2026-06-03 09:45:00+05:30", true],
["2026-06-03 09:45", false],
["2026-06-03 9:45", false],
["2026-6-03 09:45", false],
["2026-06-3 09:45", false],
["2026/06/03 09:45", false],
["06/03/2026 09:45", false],
["Jun 03 2026 09:45", false],
["Jun 3, 2026 09:45", false],
["03 Jun 2026 09:45", false],
];
for (const [iso, onlyValidInIsoBranch] of samples) {
const d = new Date(iso);
const parsedUTC = [d.getUTCFullYear(), d.getUTCMonth()+1, d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes()].join("T");
const hasTz = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
let h,min,dow,dateKey,epoch;
if (hasTz) {
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.toISOString().slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
if (m) {
const [, Y, Mo, D, H, Mi] = m;
h = parseInt(H, 10); min = parseInt(Mi, 10); dateKey = `${Y}-${Mo}-${D}`;
dow = new Date(Date.UTC(parseInt(Y, 10), parseInt(Mo, 10) - 1, parseInt(D, 10))).getUTCDay();
epoch = Date.UTC(parseInt(Y, 10), parseInt(Mo, 10) - 1, parseInt(D, 10), parseInt(H, 10), parseInt(Mi, 10));
} else {
const d2 = new Date(iso);
epoch = isNaN(d2.getTime()) ? 0 : d2.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
console.log(JSON.stringify({
input: iso,
dateParseInvalid: isNaN(d.getTime()),
dateParseValue: d.getTime(),
parsedUTC: parsedUTC,
hasTz,
regexMatch: !!iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/),
istPartsEpoch: epoch,
istPartsUnknown: dateKey === "unknown",
istPartsHour: h,
istPartsMinute: min,
istPartsDow: dow,
istPartsDateKe y: dateKey,
matchesStrictRegexInNoTzBranch: !!(!hasTz && iso.match(/(\d{4})-(\д{2})-(\d{2})[T ](\d{2}):(\d{2})/)),
}), null, 2);
}
function istParts(iso) {
let epoch, h, min, dow, dateKey;
const hasTZ = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
if (hasTZ) {
const d = new Date(iso);
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.toISOString().slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
if (m) {
const [, Y, Mo, D, H, Mi] = m;
h = parseInt(H, 10); min = parseInt(Mi, 10); dateKey = Y + "-" + Mo + "-" + D;
dow = new Date(Date.UTC(parseInt(Y, 10), parseInt(Mo, 10) - 1, parseInt(D, 10))).getUTCDay();
epoch = Date.UTC(parseInt(Y, 10), parseInt(Mo, 10) - 1, parseInt(D, 10), parseInt(H, 10), parseInt(Mi, 10));
} else {
const d = new Date(iso);
epoch = isNaN(d.getTime()) ? 0 : d.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
return { epoch, hour: h, minute: min, dow, dateKey, tod: h * 60 + min };
}
const mixed = [
{date: "2026-06-03T09:45:00+05:30", exitDate: "2026-06-03t10:30:00+05:30"},
{date: "2026-06-03 11:00", exitDate: "2026-06-03 11:30"},
{date: "2026-06-03T09:45:00+05:30", exitDate: "2026-06-03 10:30"},
];
for (const t of mixed) {
const entry = istParts(t.date);
const exit = istParts(t.exitDate);
const hold = Math.round((exit.epoch - entry.epoch) / 60000);
console.log(JSON.stringify({
input: t,
entry: entry,
exit: exit,
holdMin: hold,
sameDayKey: entry.dateKey === exit.dateKey,
unknownPairs: [entry.dateKey, exit.dateKey].includes("unknown"),
}), null, 2);
}
JS
# syntax won't run if invalid; provide a working alternative
tmpdir="$(mktemp -d)"
cat> "$tmpdir/ist-probe.js" <<'JS'
const samples = [
["2026-06-03T09:45:00+05:30", true],
["2026-06-03 09:45:00+05:30", true],
["2026-06-03 09:45", false],
["2026-06-03 9:45", false],
["2026-6-03 09:45", false],
["2026-06-3 09:45", false],
["2026/06/03 09:45", false],
["06/03/2026 09:45", false],
["Jun 03 2026 09:45", false],
];
for (const [iso, onlyValidInIsoBranch] of samples) {
const d = new Date(iso);
const parsedUTC = [d.getUTCFullYear(), d.getUTCMonth()+1, d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes()].join("T");
const hasTz = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
let h, min, dow, dateKey, epoch;
if (hasTz) {
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.toISOString().slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
if (m) {
const Y = parseInt(m[1], 10), Mo = parseInt(m[2], 10), D = parseInt(m[3], 10), H = parseInt(m[4], 10), Mi = parseInt(m[5], 10);
h = H; min = Mi; dateKey = Y + "-" + Mo + "-" + D;
dow = new Date(Date.UTC(Y, Mo - 1, D)).getUTCDay();
epoch = Date.UTC(Y, Mo - 1, D, H, Mi);
} else {
const d2 = new Date(iso);
epoch = isNaN(d2.getTime()) ? 0 : d2.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
console.log(JSON.stringify({
input: iso,
dateParseInvalid: isNaN(d.getTime()),
dateParseValue: d.getTime(),
parsedUTC: parsedUTC,
hasTz,
regexMatch: !!iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/),
istPartsEpoch: epoch,
istPartsUnknown: dateKey === "unknown",
istPartsHour: h,
istPartsMinute: min,
istPartsDow: dow,
istPartsDateKey: dateKey,
}), null, 2);
}
function istParts(iso) {
let epoch, h, min, dow, dateKey;
const hasTZ = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
if (hasTZ) {
const d = new Date(iso);
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.utcString.slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
if (m) {
const Y = parseInt(m[1], 10), Mo = parseInt(m[2], 10), D = parseInt(m[3], 10), H = parseInt(m[4], 10), Mi = parseInt(m[5], 10);
h = H; min = Mi; dateKey = Y + "-" + Mo + "-" + D;
dow = new Date(Date.UTC(Y, Mo - 1, D)).getUTCDay();
epoch = Date.UTC(Y, Mo - 1, D, H, Mi);
} else {
const d = new Date(iso);
epoch = isNaN(d.getTime()) ? 0 : d.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
return { epoch, hour: h, minute: min, dow, dateKey, tod: h * 60 + min };
}
const mixed = [
{date: "2026-06-03T09:45:00+05:30", exitDate: "2026-06-03T10:30:00+05:30"},
{date: "2026-06-03 11:00", exitDate: "2026-06-03 11:30"},
{date: "2026-06-03T09:45:00+05:30", exitDate: "2026-06-03 10:30"},
];
for (const t of mixed) {
const entry = istParts(t.date);
const exit = istParts(t.exitDate);
const hold = Math.round((exit.epoch - entry.epoch) / 60000);
console.log(JSON.stringify({
input: t,
entry: entry,
exit: exit,
holdMin: hold,
sameDayKey: entry.dateKey === exit.dateKey,
unknownPairs: [entry.dateKey, exit.dateKey].includes("unknown"),
}), null, 2);
}
JS
node "$tmpdir/ist-probe.js"Repository: Lamatic/AgentKit
Length of output: 871
🏁 Script executed:
#!/bin/bash
set -euo pipefail
tmpdir="$(mktemp -d)"
cat> "$tmpdir/ist-probe.js" <<'JS'
const samples = [
["2026-06-03T09:45:00+05:30", true],
["2026-06-03 09:45:00+05:30", true],
["2026-06-03 09:45", false],
["2026-06-03 9:45", false],
["2026-6-03 09:45", false],
["2026-06-3 09:45", false],
["2026/06/03 09:45", false],
["06/03/2026 09:45", false],
["Jun 03 2026 09:45", false],
];
for (const [iso, onlyValidInIsoBranch] of samples) {
const d = new Date(iso);
const parsedUTC = [d.getUTCFullYear(), d.getUTCMonth()+1, d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes()].join("T");
const hasTz = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
let h, min, dow, dateKey, epoch;
if (hasTz) {
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.toISOString().slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
if (m) {
const Y = parseInt(m[1], 10), Mo = parseInt(m[2], 10), D = parseInt(m[3], 10), H = parseInt(m[4], 10), Mi = parseInt(m[5], 10);
h = H; min = Mi; dateKey = [Y, Mo, D].join("-");
dow = new Date(Date.UTC(Y, Mo - 1, D)).getUTCDay();
epoch = Date.UTC(Y, Mo - 1, D, H, Mi);
} else {
const d2 = new Date(iso);
epoch = isNaN(d2.getTime()) ? 0 : d2.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
console.log(JSON.stringify({
input: iso,
dateParseInvalid: isNaN(d.getTime()),
dateParseValue: d.getTime(),
parsedUTC: parsedUTC,
hasTz,
regexMatch: !!iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/),
istPartsEpoch: epoch,
istPartsUnknown: dateKey === "unknown",
istPartsHour: h,
istPartsMinute: min,
istPartsDow: dow,
istPartsDateKey: dateKey,
}), null, 2);
}
function istPartsLegacy(iso) {
let epoch, h, min, dow, dateKey;
const hasTZ = /[zZ]|[+-]\d{2}:?\d{2}$/.test(iso.trim());
if (hasTZ) {
const d = new Date(iso);
epoch = d.getTime();
const ist = new Date(epoch + 330 * 60000);
h = ist.getUTCHours(); min = ist.getUTCMinutes(); dow = ist.getUTCDay();
dateKey = ist.toISOString().slice(0, 10);
} else {
const m = iso.match(/(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2})/);
if (m) {
const Y = parseInt(m[1], 10), Mo = parseInt(m[2], 10), D = parseInt(m[3], 10), H = parseInt(m[4], 10), Mi = parseInt(m[5], 10);
h = H; min = Mi; dateKey = [Y, Mo, D].join("-");
dow = new Date(Date.UTC(Y, Mo - 1, D)).getUTCDay();
epoch = Date.UTC(Y, Mo - 1, D, H, Mi);
} else {
const d = new Date(iso);
epoch = isNaN(d.getTime()) ? 0 : d2.getTime();
h = 0; min = 0; dow = 0; dateKey = "unknown";
}
}
return { epoch, hour: h, minute: min, dow, dateKey, tod: h * 60 + min };
}
const mixed = [
{entry: "2026-06-03T09:45:00+05:30", exit: "2026-06-03T10:30:00+05:30"},
{entry: "2026-06-03 11:00", exit: "2026-06-03 11:30"},
{entry: "2026-06-03T09:45:00+05:30", exit: "2026-06-03 10:30"},
];
for (const t of mixed) {
const entry = istPartsLegacy(t.entry);
const exit = istPartsLegacy(t.exit);
const hold = Math.round((exit.epoch - entry.epoch) / 60000);
console.log(JSON.stringify({
input: t,
entry: entry,
exit: exit,
holdMin: hold,
sameDayKey: entry.dateKey === exit.dateKey,
unknownEntries: [entry.dateKey, exit.dateKey].includes("unknown"),
}), null, 2);
}
const mixedWithNoMinutes = [
{entry: "2026-06-03 11", exit: "2026-06-03 11:30"},
];
for (const t of mixedWithNoMinutes) {
try {
const result = { dateKey: istPartsLegacy(t.entry).dateKey };
console.log("mixedWithNoMinutes_success", JSON.stringify({input: t, result}));
} catch (e) {
console.log("mixedWithNoMinutes_error", JSON.stringify({input: t, message: String(e.message), name: e.name}));
}
}
JS
node "$tmpdir/ist-probe.js"Repository: Lamatic/AgentKit
Length of output: 3837
Mission: make istParts handle the date shapes csv.ts already accepts.
csv.ts accepts any Date.parse(row.date) value, but istParts hard-rejects non-ISO no-offset dates into "unknown" and uses Date.UTC(wall-clock-as-UTC) for strict no-TZ shapes. Mixed date formats can therefore sort/hold-order trades incorrectly and mash valid trades into the same dateKey, silencing overtrading/revenge signals. Match the CSV parser’s date tolerance here before extracting IST wall-clock values.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/lib/metrics.ts` around lines 45 - 70, Update
istParts to accept every date shape accepted by csv.ts via Date.parse, including
valid non-ISO and no-timezone inputs, before falling back to unknown. For parsed
values without an explicit timezone, derive the IST wall-clock fields and
dateKey from the parsed date rather than treating the local wall-clock as UTC;
preserve the existing explicit-offset handling and return structure.
| "lint": "next lint" | ||
| }, | ||
| "dependencies": { | ||
| "lamatic": "latest", |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/sh
npm view lamatic dist-tags --json
npm view lamatic versions --jsonRepository: Lamatic/AgentKit
Length of output: 860
🏁 Script executed:
#!/bin/sh
set -euo pipefail
printf '--- package declarations ---\n'
cat -n kits/trading-journal-coach/package.json | sed -n '1,80p'
printf '\n--- lockfile/package manager files ---\n'
git ls-files | rg '(^|/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb?)$' || true
printf '\n--- lamatic usages ---\n'
rg -n "lamatic|Lamatic" kits/trading-journal-coach || trueRepository: Lamatic/AgentKit
Length of output: 245
🏁 Script executed:
#!/bin/sh
set -eu或uо
EOFRepository: Lamatic/AgentKit
Length of output: 308
🏁 Script executed:
#!/bin/sh
set -e
printf '%s\n' '--- package declarations ---'
cat -n kits/trading-journal-coach/package.json | sed -n '1,120p'
printf '%s\n' ''
printf '%s\n' '--- lockfile/package manager files ---'
git ls-files | rg '(^|/)(package-lock\.json|pnpm-lock\.yaml|yarn\.lock|bun\.lockb?)$' || true
printf '%s\n' ''
printf '%s\n' '--- lamatic usages ---'
rg -n "lamatic|Lamatic" kits/trading-journal-coach || trueRepository: Lamatic/AgentKit
Length of output: 50372
Pin the Lamatic SDK version.
"lamatic": "latest" resolves to a mutable dist-tag and there is no kit lockfile fixing that dependency, so installs can get a different SDK version over time. Pin the tested Lamatic release and commit the package lockfile for this kit.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/package.json` at line 12, Update the lamatic
dependency in package.json from the mutable latest tag to the tested fixed SDK
version, then generate and commit the package lockfile for this kit so
installations resolve the same version consistently.
| @@ -0,0 +1 @@ | |||
| {"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/prop-types/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/future/route-kind.d.ts","./node_modules/next/dist/server/future/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/server/lib/revalidate.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/future/helpers/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/font-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/future/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage-instance.d.ts","./node_modules/next/dist/client/components/static-generation-async-storage.external.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/client/components/request-async-storage-instance.d.ts","./node_modules/next/dist/client/components/request-async-storage.external.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/amp-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.compiled.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/router-reducer/create-initial-router-state.d.ts","./node_modules/next/dist/client/components/app-router.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/action-async-storage-instance.d.ts","./node_modules/next/dist/client/components/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/search-params.d.ts","./node_modules/next/dist/client/components/not-found-boundary.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/future/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/future/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/server/future/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/future/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/future/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/future/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/future/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/future/normalizers/normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/future/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/future/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/prefix.d.ts","./node_modules/next/dist/server/future/normalizers/request/postponed.d.ts","./node_modules/next/dist/server/future/normalizers/request/action.d.ts","./node_modules/next/dist/server/future/normalizers/request/prefetch-rsc.d.ts","./node_modules/next/dist/server/future/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/webpack/plugins/define-env-plugin.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/types/index.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/shared/lib/runtime-config.external.d.ts","./node_modules/next/config.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/client/components/draft-mode.d.ts","./node_modules/next/dist/client/components/headers.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./orchestrate.ts","./lib/metrics.ts","./lib/types.ts","./node_modules/lamatic/dist/types.d.ts","./node_modules/lamatic/dist/index.d.ts","./lib/lamatic-client.ts","./actions/orchestrate.ts","./node_modules/@types/papaparse/index.d.ts","./lib/csv.ts","./app/layout.tsx","./components/UploadDropzone.tsx","./components/MetricsCards.tsx","./node_modules/recharts/types/container/Surface.d.ts","./node_modules/recharts/types/container/Layer.d.ts","./node_modules/@types/d3-time/index.d.ts","./node_modules/@types/d3-scale/index.d.ts","./node_modules/victory-vendor/d3-scale.d.ts","./node_modules/recharts/types/cartesian/XAxis.d.ts","./node_modules/recharts/types/cartesian/YAxis.d.ts","./node_modules/recharts/types/util/types.d.ts","./node_modules/recharts/types/component/DefaultLegendContent.d.ts","./node_modules/recharts/types/util/payload/getUniqPayload.d.ts","./node_modules/recharts/types/component/Legend.d.ts","./node_modules/recharts/types/component/DefaultTooltipContent.d.ts","./node_modules/recharts/types/component/Tooltip.d.ts","./node_modules/recharts/types/component/ResponsiveContainer.d.ts","./node_modules/recharts/types/component/Cell.d.ts","./node_modules/recharts/types/component/Text.d.ts","./node_modules/recharts/types/component/Label.d.ts","./node_modules/recharts/types/component/LabelList.d.ts","./node_modules/recharts/types/component/Customized.d.ts","./node_modules/recharts/types/shape/Sector.d.ts","./node_modules/@types/d3-path/index.d.ts","./node_modules/@types/d3-shape/index.d.ts","./node_modules/victory-vendor/d3-shape.d.ts","./node_modules/recharts/types/shape/Curve.d.ts","./node_modules/recharts/types/shape/Rectangle.d.ts","./node_modules/recharts/types/shape/Polygon.d.ts","./node_modules/recharts/types/shape/Dot.d.ts","./node_modules/recharts/types/shape/Cross.d.ts","./node_modules/recharts/types/shape/Symbols.d.ts","./node_modules/recharts/types/polar/PolarGrid.d.ts","./node_modules/recharts/types/polar/PolarRadiusAxis.d.ts","./node_modules/recharts/types/polar/PolarAngleAxis.d.ts","./node_modules/recharts/types/polar/Pie.d.ts","./node_modules/recharts/types/polar/Radar.d.ts","./node_modules/recharts/types/polar/RadialBar.d.ts","./node_modules/recharts/types/cartesian/Brush.d.ts","./node_modules/recharts/types/util/IfOverflowMatches.d.ts","./node_modules/recharts/types/cartesian/ReferenceLine.d.ts","./node_modules/recharts/types/cartesian/ReferenceDot.d.ts","./node_modules/recharts/types/cartesian/ReferenceArea.d.ts","./node_modules/recharts/types/cartesian/CartesianAxis.d.ts","./node_modules/recharts/types/cartesian/CartesianGrid.d.ts","./node_modules/recharts/types/cartesian/Line.d.ts","./node_modules/recharts/types/cartesian/Area.d.ts","./node_modules/recharts/types/util/BarUtils.d.ts","./node_modules/recharts/types/cartesian/Bar.d.ts","./node_modules/recharts/types/cartesian/ZAxis.d.ts","./node_modules/recharts/types/cartesian/ErrorBar.d.ts","./node_modules/recharts/types/cartesian/Scatter.d.ts","./node_modules/recharts/types/util/getLegendProps.d.ts","./node_modules/recharts/types/util/ChartUtils.d.ts","./node_modules/recharts/types/chart/AccessibilityManager.d.ts","./node_modules/recharts/types/chart/types.d.ts","./node_modules/recharts/types/chart/generateCategoricalChart.d.ts","./node_modules/recharts/types/chart/LineChart.d.ts","./node_modules/recharts/types/chart/BarChart.d.ts","./node_modules/recharts/types/chart/PieChart.d.ts","./node_modules/recharts/types/chart/Treemap.d.ts","./node_modules/recharts/types/chart/Sankey.d.ts","./node_modules/recharts/types/chart/RadarChart.d.ts","./node_modules/recharts/types/chart/ScatterChart.d.ts","./node_modules/recharts/types/chart/AreaChart.d.ts","./node_modules/recharts/types/chart/RadialBarChart.d.ts","./node_modules/recharts/types/chart/ComposedChart.d.ts","./node_modules/recharts/types/chart/SunburstChart.d.ts","./node_modules/recharts/types/shape/Trapezoid.d.ts","./node_modules/recharts/types/numberAxis/Funnel.d.ts","./node_modules/recharts/types/chart/FunnelChart.d.ts","./node_modules/recharts/types/util/Global.d.ts","./node_modules/recharts/types/index.d.ts","./components/EquityCurve.tsx","./components/FindingsList.tsx","./components/ChatPanel.tsx","./app/page.tsx","./.next/types/app/layout.ts","./.next/types/app/page.ts","./node_modules/@types/d3-array/index.d.ts","./node_modules/@types/d3-color/index.d.ts","./node_modules/@types/d3-ease/index.d.ts","./node_modules/@types/d3-interpolate/index.d.ts","./node_modules/@types/d3-timer/index.d.ts","./node_modules/@types/json5/index.d.ts"],"fileIdsList":[[99,145,358,418],[99,145,358,494],[99,145,409,410,411,414],[99,145,406],[87,99,145,411,415,417,419,420,491,492,493],[87,99,145,411,415],[99,145,411,490],[99,145,411],[87,99,145],[99,145,410,416],[99,145,409,413],[99,145],[99,145,410],[99,145,406,407],[99,145,498],[99,145,423],[99,145,441],[99,142,145],[99,144,145],[145],[99,145,150,178],[99,145,146,151,156,164,175,186],[99,145,146,147,156,164],[94,95,96,99,145],[99,145,148,187],[99,145,149,150,157,165],[99,145,150,175,183],[99,145,151,153,156,164],[99,144,145,152],[99,145,153,154],[99,145,155,156],[99,144,145,156],[99,145,156,157,158,175,186],[99,145,156,157,158,171,175,178],[99,145,153,156,159,164,175,186],[99,145,156,157,159,160,164,175,183,186],[99,145,159,161,175,183,186],[97,98,99,100,101,102,103,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[99,145,156,162],[99,145,163,186,191],[99,145,153,156,164,175],[99,145,165],[99,145,166],[99,144,145,167],[99,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[99,145,169],[99,145,170],[99,145,156,171,172],[99,145,171,173,187,189],[99,145,156,175,176,178],[99,145,177,178],[99,145,175,176],[99,145,178],[99,145,179],[99,142,145,175,180],[99,145,156,181,182],[99,145,181,182],[99,145,150,164,175,183],[99,145,184],[99,145,164,185],[99,145,159,170,186],[99,145,150,187],[99,145,175,188],[99,145,163,189],[99,145,190],[99,140,145],[99,140,145,156,158,167,175,178,186,189,191],[99,145,175,192],[99,145,175,193],[87,99,145,197,198,199],[87,99,145,197,198],[87,91,99,145,196,359,402],[87,91,99,145,195,359,402],[84,85,86,99,145],[99,145,412],[92,99,145],[99,145,363],[99,145,365,366,367],[99,145,369],[99,145,202,212,218,220,359],[99,145,202,209,211,214,232],[99,145,212],[99,145,212,337],[99,145,266,284,299,405],[99,145,307],[99,145,202,212,219,252,262,334,335,405],[99,145,219,405],[99,145,212,262,263,264,405],[99,145,212,219,252,405],[99,145,405],[99,145,202,219,220,405],[99,145,292],[99,144,145,193,291],[87,99,145,285,286,287,304,305],[87,99,145,285],[99,145,275],[99,145,274,276,379],[87,99,145,285,286,302],[99,145,281,305,391],[99,145,389,390],[99,145,226,388],[99,145,278],[99,144,145,193,226,274,275,276,277],[87,99,145,302,304,305],[99,145,302,304],[99,145,302,303,305],[99,145,170,193],[99,145,273],[99,144,145,193,211,213,269,270,271,272],[87,99,145,203,382],[87,99,145,186,193],[87,99,145,219,250],[87,99,145,219],[99,145,248,253],[87,99,145,249,362],[87,91,99,145,159,193,195,196,359,400,401],[99,145,359],[99,145,201],[99,145,352,353,354,355,356,357],[99,145,354],[87,99,145,249,285,362],[87,99,145,285,360,362],[87,99,145,285,362],[99,145,159,193,213,362],[99,145,159,193,210,211,222,240,273,278,279,301,302],[99,145,270,273,278,286,288,289,290,292,293,294,295,296,297,298,405],[99,145,271],[87,99,145,170,193,211,212,240,242,244,269,301,305,359,405],[99,145,159,193,213,214,226,227,274],[99,145,159,193,212,214],[99,145,159,175,193,210,213,214],[99,145,159,170,186,193,210,211,212,213,214,219,222,223,233,234,236,239,240,242,243,244,268,269,302,310,312,315,317,320,322,323,324,325],[99,145,159,175,193],[99,145,202,203,204,210,211,359,362,405],[99,145,159,175,186,193,207,336,338,339,405],[99,145,170,186,193,207,210,213,230,234,236,237,238,242,269,315,326,328,334,348,349],[99,145,212,216,269],[99,145,210,212],[99,145,223,316],[99,145,318,319],[99,145,318],[99,145,316],[99,145,318,321],[99,145,206,207],[99,145,206,245],[99,145,206],[99,145,208,223,314],[99,145,313],[99,145,207,208],[99,145,208,311],[99,145,207],[99,145,301],[99,145,159,193,210,222,241,260,266,280,283,300,302],[99,145,254,255,256,257,258,259,281,282,305,360],[99,145,309],[99,145,159,193,210,222,241,246,306,308,310,359,362],[99,145,159,186,193,203,210,212,268],[99,145,265],[99,145,159,193,342,347],[99,145,233,268,362],[99,145,330,334,348,351],[99,145,159,216,334,342,343,351],[99,145,202,212,233,243,345],[99,145,159,193,212,219,243,329,330,340,341,344,346],[99,145,194,240,241,359,362],[99,145,159,170,186,193,208,210,211,213,216,221,222,230,233,234,236,237,238,239,242,244,268,269,312,326,327,362],[99,145,159,193,210,212,216,328,350],[99,145,159,193,211,213],[87,99,145,159,170,193,201,203,210,211,214,222,239,240,242,244,309,359,362],[99,145,159,170,186,193,205,208,209,213],[99,145,206,267],[99,145,159,193,206,211,222],[99,145,159,193,212,223],[99,145,159,193],[99,145,226],[99,145,225],[99,145,227],[99,145,212,224,226,230],[99,145,212,224,226],[99,145,159,193,205,212,213,219,227,228,229],[87,99,145,302,303,304],[99,145,261],[87,99,145,203],[87,99,145,236],[87,99,145,194,239,244,359,362],[99,145,203,382,383],[87,99,145,253],[87,99,145,170,186,193,201,247,249,251,252,362],[99,145,213,219,236],[99,145,235],[87,99,145,157,159,170,193,201,253,262,359,360,361],[83,87,88,89,90,99,145,195,196,359,402],[99,145,150],[99,145,331,332,333],[99,145,331],[99,145,371],[99,145,373],[99,145,375],[99,145,377],[99,145,380],[99,145,384],[91,93,99,145,359,364,368,370,372,374,376,378,381,385,387,393,394,396,403,404,405],[99,145,386],[99,145,392],[99,145,249],[99,145,395],[99,144,145,227,228,229,230,397,398,399,402],[99,145,193],[87,91,99,145,159,161,170,193,195,196,197,199,201,214,351,358,362,402],[87,99,145,426,427,428,444,447],[87,99,145,426,427,428,437,445,465],[87,99,145,425,428],[87,99,145,428],[87,99,145,426,427,428],[87,99,145,426,427,428,463,466,469],[87,99,145,426,427,428,437,444,447],[87,99,145,426,427,428,437,445,457],[87,99,145,426,427,428,437,447,457],[87,99,145,426,427,428,437,457],[87,99,145,426,427,428,432,438,444,449,467,468],[99,145,428],[87,99,145,428,472,473,474],[87,99,145,428,445],[87,99,145,428,471,472,473],[87,99,145,428,471],[87,99,145,428,437],[87,99,145,428,429,430],[87,99,145,428,430,432],[99,145,421,422,426,427,428,429,431,432,433,434,435,436,437,438,439,440,444,445,446,447,448,449,450,451,452,453,454,455,456,458,459,460,461,462,463,464,466,467,468,469,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489],[87,99,145,428,486],[87,99,145,428,440],[87,99,145,428,447,451,452],[87,99,145,428,438,440],[87,99,145,428,443],[87,99,145,428,466],[87,99,145,428,443,470],[87,99,145,431,471],[87,99,145,425,426,427],[99,112,116,145,186],[99,112,145,175,186],[99,107,145],[99,109,112,145,183,186],[99,145,164,183],[99,107,145,193],[99,109,112,145,164,186],[99,104,105,108,111,145,156,175,186],[99,112,119,145],[99,104,110,145],[99,112,133,134,145],[99,108,112,145,178,186,193],[99,133,145,193],[99,106,107,145,193],[99,112,145],[99,106,107,108,109,110,111,112,113,114,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,134,135,136,137,138,139,145],[99,112,127,145],[99,112,119,120,145],[99,110,112,120,121,145],[99,111,145],[99,104,107,112,145],[99,112,116,120,121,145],[99,116,145],[99,110,112,115,145,186],[99,104,109,112,119,145],[99,145,175],[99,107,112,133,145,191,193],[99,145,424],[99,145,442]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0990a7576222f248f0a3b888adcb7389f957928ce2afb1cd5128169086ff4d29","impliedFormat":1},{"version":"eb5b19b86227ace1d29ea4cf81387279d04bb34051e944bc53df69f58914b788","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"87d9d29dbc745f182683f63187bf3d53fd8673e5fca38ad5eaab69798ed29fbc","impliedFormat":1},{"version":"09ddcfcfbe77a8232d155ca1030005106b1328f6210df43629d0be750da07c16","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc69795d9954ee4ad57545b10c7bf1a7260d990231b1685c147ea71a6faa265c","impliedFormat":1},{"version":"8bc6c94ff4f2af1f4023b7bb2379b08d3d7dd80c698c9f0b07431ea16101f05f","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"57194e1f007f3f2cbef26fa299d4c6b21f4623a2eddc63dfeef79e38e187a36e","impliedFormat":1},{"version":"0f6666b58e9276ac3a38fdc80993d19208442d6027ab885580d93aec76b4ef00","impliedFormat":1},{"version":"05fd364b8ef02fb1e174fbac8b825bdb1e5a36a016997c8e421f5fab0a6da0a0","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"1123a83f35cf56c97de746f0a7250012153c61a167e4a61668bf50e558162d14","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"8caa5c86be1b793cd5f599e27ecb34252c41e011980f7d61ae4989a149ff6ccc","impliedFormat":1},{"version":"f9fd93190acb1ffe0bc0fb395df979452f8d625071e9ffc8636e4dfb86ab2508","impliedFormat":1},{"version":"5f41fd8732a89e940c58ce22206e3df85745feb8983e2b4c6257fb8cbb118493","impliedFormat":1},{"version":"17ed71200119e86ccef2d96b73b02ce8854b76ad6bd21b5021d4269bec527b5f","impliedFormat":1},{"version":"1cfa8647d7d71cb03847d616bd79320abfc01ddea082a49569fda71ac5ece66b","impliedFormat":1},{"version":"bb7a61dd55dc4b9422d13da3a6bb9cc5e89be888ef23bbcf6558aa9726b89a1c","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"cfe4ef4710c3786b6e23dae7c086c70b4f4835a2e4d77b75d39f9046106e83d3","impliedFormat":1},{"version":"cbea99888785d49bb630dcbb1613c73727f2b5a2cf02e1abcaab7bcf8d6bf3c5","impliedFormat":1},{"version":"98817124fd6c4f60e0b935978c207309459fb71ab112cf514f26f333bf30830e","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"2dad084c67e649f0f354739ec7df7c7df0779a28a4f55c97c6b6883ae850d1ce","impliedFormat":1},{"version":"fa5bbc7ab4130dd8cdc55ea294ec39f76f2bc507a0f75f4f873e38631a836ca7","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"cf86de1054b843e484a3c9300d62fbc8c97e77f168bbffb131d560ca0474d4a8","impliedFormat":1},{"version":"196c960b12253fde69b204aa4fbf69470b26daf7a430855d7f94107a16495ab0","impliedFormat":1},{"version":"fb760b3dded1fadb56c3dde1992b6068bb64d65c4d60d65dc93659f5f44ccddf","impliedFormat":1},{"version":"bf24f6d35f7318e246010ffe9924395893c4e96d34324cde77151a73f078b9ad","impliedFormat":1},{"version":"596ccf4070268c4f5a8c459d762d8a934fa9b9317c7bf7a953e921bc9d78ce3c","impliedFormat":1},{"version":"10595c7ff5094dd5b6a959ccb1c00e6a06441b4e10a87bc09c15f23755d34439","impliedFormat":1},{"version":"9620c1ff645afb4a9ab4044c85c26676f0a93e8c0e4b593aea03a89ccb47b6d0","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"a9af0e608929aaf9ce96bd7a7b99c9360636c31d73670e4af09a09950df97841","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"08ed0b3f0166787f84a6606f80aa3b1388c7518d78912571b203817406e471da","impliedFormat":1},{"version":"47e5af2a841356a961f815e7c55d72554db0c11b4cba4d0caab91f8717846a94","impliedFormat":1},{"version":"9a1a0dc84fecc111e83281743f003e1ae9048e0f83c2ae2028d17bc58fd93cc7","impliedFormat":1},{"version":"f5f541902bf7ae0512a177295de9b6bcd6809ea38307a2c0a18bfca72212f368","impliedFormat":1},{"version":"e8da637cbd6ed1cf6c36e9424f6bcee4515ca2c677534d4006cbd9a05f930f0c","impliedFormat":1},{"version":"ca1b882a105a1972f82cc58e3be491e7d750a1eb074ffd13b198269f57ed9e1b","impliedFormat":1},{"version":"fc3e1c87b39e5ba1142f27ec089d1966da168c04a859a4f6aab64dceae162c2b","impliedFormat":1},{"version":"3867ca0e9757cc41e04248574f4f07b8f9e3c0c2a796a5eb091c65bfd2fc8bdb","impliedFormat":1},{"version":"61888522cec948102eba94d831c873200aa97d00d8989fdfd2a3e0ee75ec65a2","impliedFormat":1},{"version":"4e10622f89fea7b05dd9b52fb65e1e2b5cbd96d4cca3d9e1a60bb7f8a9cb86a1","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"59bf32919de37809e101acffc120596a9e45fdbab1a99de5087f31fdc36e2f11","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"3df3abb3e7c1a74ab419f95500a998b55dd9bc985e295de96ff315dd94c7446f","impliedFormat":1},{"version":"c40c848daad198266370c1c72a7a8c3d18d2f50727c7859fcfefd3ff69a7f288","impliedFormat":1},{"version":"ac60bbee0d4235643cc52b57768b22de8c257c12bd8c2039860540cab1fa1d82","impliedFormat":1},{"version":"973b59a17aaa817eb205baf6c132b83475a5c0a44e8294a472af7793b1817e89","impliedFormat":1},{"version":"ada39cbb2748ab2873b7835c90c8d4620723aedf323550e8489f08220e477c7f","impliedFormat":1},{"version":"6e5f5cee603d67ee1ba6120815497909b73399842254fc1e77a0d5cdc51d8c9c","impliedFormat":1},{"version":"8dba67056cbb27628e9b9a1cba8e57036d359dceded0725c72a3abe4b6c79cd4","impliedFormat":1},{"version":"70f3814c457f54a7efe2d9ce9d2686de9250bb42eb7f4c539bd2280a42e52d33","impliedFormat":1},{"version":"5cbd32af037805215112472e35773bad9d4e03f0e72b1129a0d0c12d9cd63cc7","impliedFormat":1},{"version":"ef61792acbfa8c27c9bd113f02731e66229f7d3a169e3c1993b508134f1a58e0","impliedFormat":1},{"version":"afcb759e8e3ad6549d5798820697002bc07bdd039899fad0bf522e7e8a9f5866","impliedFormat":1},{"version":"f6404e7837b96da3ea4d38c4f1a3812c96c9dcdf264e93d5bdb199f983a3ef4b","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"566e5fb812082f8cf929c6727d40924843246cf19ee4e8b9437a6315c4792b03","affectsGlobalScope":true,"impliedFormat":1},{"version":"db01d18853469bcb5601b9fc9826931cc84cc1a1944b33cad76fd6f1e3d8c544","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"903e299a28282fa7b714586e28409ed73c3b63f5365519776bf78e8cf173db36","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"dd3900b24a6a8745efeb7ad27629c0f8a626470ac229c1d73f1fe29d67e44dca","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ec29be0737d39268696edcec4f5e97ce26f449fa9b7afc2f0f99a86def34a418","impliedFormat":1},{"version":"68a06fb972b2c7e671bf090dc5a5328d22ba07d771376c3d9acd9e7ed786a9db","impliedFormat":1},{"version":"ec6cba1c02c675e4dd173251b156792e8d3b0c816af6d6ad93f1a55d674591aa","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"d729408dfde75b451530bcae944cf89ee8277e2a9df04d1f62f2abfd8b03c1e1","impliedFormat":1},{"version":"e15d3c84d5077bb4a3adee4c791022967b764dc41cb8fa3cfa44d4379b2c95f5","impliedFormat":1},{"version":"78244a2a8ab1080e0dd8fc3633c204c9a4be61611d19912f4b157f7ef7367049","impliedFormat":1},{"version":"e1fc1a1045db5aa09366be2b330e4ce391550041fc3e925f60998ca0b647aa97","impliedFormat":1},{"version":"73636e5e138db738b0e1e00c17bcd688c45eead3798d0d585e0bd9ff98262ebe","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"31fb49ef3aa3d76f0beb644984e01eab0ea222372ea9b49bb6533be5722d756c","impliedFormat":1},{"version":"33cd131e1461157e3e06b06916b5176e7a8ec3fce15a5cfe145e56de744e07d2","impliedFormat":1},{"version":"889ef863f90f4917221703781d9723278db4122d75596b01c429f7c363562b86","impliedFormat":1},{"version":"3556cfbab7b43da96d15a442ddbb970e1f2fc97876d055b6555d86d7ac57dae5","impliedFormat":1},{"version":"437751e0352c6e924ddf30e90849f1d9eb00ca78c94d58d6a37202ec84eb8393","impliedFormat":1},{"version":"48e8af7fdb2677a44522fd185d8c87deff4d36ee701ea003c6c780b1407a1397","impliedFormat":1},{"version":"d11308de5a36c7015bb73adb5ad1c1bdaac2baede4cc831a05cf85efa3cc7f2f","impliedFormat":1},{"version":"8c9f19c480c747b6d8067c53fcc3cef641619029afb0a903672daed3f5acaed2","impliedFormat":1},{"version":"f9812cfc220ecf7557183379531fa409acd249b9e5b9a145d0d52b76c20862de","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b068371563d0396a065ed64b049cffeb4eed89ad433ae7730fc31fb1e00ebf3","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"13283350547389802aa35d9f2188effaeac805499169a06ef5cd77ce2a0bd63f","impliedFormat":1},{"version":"680793958f6a70a44c8d9ae7d46b7a385361c69ac29dcab3ed761edce1c14ab8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b838d4c72740eb0afd284bf7575b74c624b105eff2e8c7b4aeead57e7ac320ff","impliedFormat":1},{"version":"913ddbba170240070bd5921b8f33ea780021bdf42fbdfcd4fcb2691b1884ddde","impliedFormat":1},{"version":"74c105214ddd747037d2a75da6588ec8aa1882f914e1f8a312c528f86feca2b9","impliedFormat":1},{"version":"5fe23bd829e6be57d41929ac374ee9551ccc3c44cee893167b7b5b77be708014","impliedFormat":1},{"version":"4d85f80132e24d9a5b5c5e0734e4ecd6878d8c657cc990ecc70845ef384ca96f","impliedFormat":1},{"version":"438c7513b1df91dcef49b13cd7a1c4720f91a36e88c1df731661608b7c055f10","impliedFormat":1},{"version":"cf185cc4a9a6d397f416dd28cca95c227b29f0f27b160060a95c0e5e36cda865","impliedFormat":1},{"version":"0086f3e4ad898fd7ca56bb223098acfacf3fa065595182aaf0f6c4a6a95e6fbd","impliedFormat":1},{"version":"efaa078e392f9abda3ee8ade3f3762ab77f9c50b184e6883063a911742a4c96a","impliedFormat":1},{"version":"54a8bb487e1dc04591a280e7a673cdfb272c83f61e28d8a64cf1ac2e63c35c51","impliedFormat":1},{"version":"021a9498000497497fd693dd315325484c58a71b5929e2bbb91f419b04b24cea","impliedFormat":1},{"version":"9385cdc09850950bc9b59cca445a3ceb6fcca32b54e7b626e746912e489e535e","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"84124384abae2f6f66b7fbfc03862d0c2c0b71b826f7dbf42c8085d31f1d3f95","impliedFormat":1},{"version":"63a8e96f65a22604eae82737e409d1536e69a467bb738bec505f4f97cce9d878","impliedFormat":1},{"version":"3fd78152a7031315478f159c6a5872c712ece6f01212c78ea82aef21cb0726e2","impliedFormat":1},{"version":"3a6ed8e1d630cfa1f7edf0dc46a6e20ca6c714dbe754409699008571dfe473a6","impliedFormat":1},{"version":"512fc15cca3a35b8dbbf6e23fe9d07e6f87ad03c895acffd3087ce09f352aad0","impliedFormat":1},{"version":"9a0946d15a005832e432ea0cd4da71b57797efb25b755cc07f32274296d62355","impliedFormat":1},{"version":"a52ff6c0a149e9f370372fc3c715d7f2beee1f3bab7980e271a7ab7d313ec677","impliedFormat":1},{"version":"fd933f824347f9edd919618a76cdb6a0c0085c538115d9a287fa0c7f59957ab3","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"6a1aa3e55bdc50503956c5cd09ae4cd72e3072692d742816f65c66ca14f4dfdd","impliedFormat":1},{"version":"ab75cfd9c4f93ffd601f7ca1753d6a9d953bbedfbd7a5b3f0436ac8a1de60dfa","impliedFormat":1},{"version":"59c68235df3905989afa0399381c1198313aaaf1ed387f57937eb616625dff15","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"1364f64d2fb03bbb514edc42224abd576c064f89be6a990136774ecdd881a1da","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"950fb67a59be4c2dbe69a5786292e60a5cb0e8612e0e223537784c731af55db1","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"07ca44e8d8288e69afdec7a31fa408ce6ab90d4f3d620006701d5544646da6aa","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"4e4475fba4ed93a72f167b061cd94a2e171b82695c56de9899275e880e06ba41","impliedFormat":1},{"version":"97c5f5d580ab2e4decd0a3135204050f9b97cd7908c5a8fbc041eadede79b2fa","impliedFormat":1},{"version":"c99a3a5f2215d5b9d735aa04cec6e61ed079d8c0263248e298ffe4604d4d0624","impliedFormat":1},{"version":"49b2375c586882c3ac7f57eba86680ff9742a8d8cb2fe25fe54d1b9673690d41","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b98ce74c2bc49a9b79408f049c49909190c747b0462e78f91c09618da86bae53","impliedFormat":1},{"version":"3ecfccf916fea7c6c34394413b55eb70e817a73e39b4417d6573e523784e3f8e","impliedFormat":1},{"version":"c05bc82af01e673afc99bdffd4ebafde22ab027d63e45be9e1f1db3bc39e2fc0","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"f416c9c3eee9d47ff49132c34f96b9180e50485d435d5748f0e8b72521d28d2e","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"14e5cdec6f8ae82dfd0694e64903a0a54abdfe37e1d966de3d4128362acbf35f","impliedFormat":1},{"version":"bbc183d2d69f4b59fd4dd8799ffdf4eb91173d1c4ad71cce91a3811c021bf80c","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"8dbc4134a4b3623fc476be5f36de35c40f2768e2e3d9ed437e0d5f1c4cd850f6","impliedFormat":1},{"version":"4e06330a84dec7287f7ebdd64978f41a9f70a668d3b5edc69d5d4a50b9b376bb","impliedFormat":1},{"version":"65bfa72967fbe9fc33353e1ac03f0480aa2e2ea346d61ff3ea997dfd850f641a","impliedFormat":1},{"version":"8f88c6be9803fe5aaa80b00b27f230c824d4b8a33856b865bea5793cb52bb797","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"872caaa31423f4345983d643e4649fb30f548e9883a334d6d1c5fff68ede22d4","impliedFormat":1},{"version":"94404c4a878fe291e7578a2a80264c6f18e9f1933fbb57e48f0eb368672e389c","impliedFormat":1},{"version":"5c1b7f03aa88be854bc15810bfd5bd5a1943c5a7620e1c53eddd2a013996343e","impliedFormat":1},{"version":"09dfc64fcd6a2785867f2368419859a6cc5a8d4e73cbe2538f205b1642eb0f51","impliedFormat":1},{"version":"bcf6f0a323653e72199105a9316d91463ad4744c546d1271310818b8cef7c608","impliedFormat":1},{"version":"01aa917531e116485beca44a14970834687b857757159769c16b228eb1e49c5f","impliedFormat":1},{"version":"351475f9c874c62f9b45b1f0dc7e2704e80dfd5f1af83a3a9f841f9dfe5b2912","impliedFormat":1},{"version":"ac457ad39e531b7649e7b40ee5847606eac64e236efd76c5d12db95bf4eacd17","impliedFormat":1},{"version":"187a6fdbdecb972510b7555f3caacb44b58415da8d5825d03a583c4b73fde4cf","impliedFormat":1},{"version":"d4c3250105a612202289b3a266bb7e323db144f6b9414f9dea85c531c098b811","impliedFormat":1},{"version":"95b444b8c311f2084f0fb51c616163f950fb2e35f4eaa07878f313a2d36c98a4","impliedFormat":1},{"version":"741067675daa6d4334a2dc80a4452ca3850e89d5852e330db7cb2b5f867173b1","impliedFormat":1},{"version":"f8acecec1114f11690956e007d920044799aefeb3cece9e7f4b1f8a1d542b2c9","impliedFormat":1},{"version":"131b1475d2045f20fb9f43b7aa6b7cb51f25250b5e4c6a1d4aa3cf4dd1a68793","impliedFormat":1},{"version":"3a17f09634c50cce884721f54fd9e7b98e03ac505889c560876291fcf8a09e90","impliedFormat":1},{"version":"32531dfbb0cdc4525296648f53b2b5c39b64282791e2a8c765712e49e6461046","impliedFormat":1},{"version":"0ce1b2237c1c3df49748d61568160d780d7b26693bd9feb3acb0744a152cd86d","impliedFormat":1},{"version":"e489985388e2c71d3542612685b4a7db326922b57ac880f299da7026a4e8a117","impliedFormat":1},{"version":"e1437c5f191edb7a494f7bbbc033b97d72d42e054d521402ee194ac5b6b7bf49","impliedFormat":1},{"version":"04d3aad777b6af5bd000bfc409907a159fe77e190b9d368da4ba649cdc28d39e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fd1b9d883b9446f1e1da1e1033a6a98995c25fbf3c10818a78960e2f2917d10c","impliedFormat":1},{"version":"19252079538942a69be1645e153f7dbbc1ef56b4f983c633bf31fe26aeac32cd","impliedFormat":1},{"version":"bc11f3ac00ac060462597add171220aed628c393f2782ac75dd29ff1e0db871c","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"3b0b1d352b8d2e47f1c4df4fb0678702aee071155b12ef0185fce9eb4fa4af1e","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"a344403e7a7384e0e7093942533d309194ad0a53eca2a3100c0b0ab4d3932773","impliedFormat":1},{"version":"b7fff2d004c5879cae335db8f954eb1d61242d9f2d28515e67902032723caeab","impliedFormat":1},{"version":"5f3dc10ae646f375776b4e028d2bed039a93eebbba105694d8b910feebbe8b9c","impliedFormat":1},{"version":"bb18bf4a61a17b4a6199eb3938ecfa4a59eb7c40843ad4a82b975ab6f7e3d925","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"e9b6fc05f536dfddcdc65dbcf04e09391b1c968ab967382e48924f5cb90d88e1","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"2b664c3cc544d0e35276e1fb2d4989f7d4b4027ffc64da34ec83a6ccf2e5c528","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"3cd8f0464e0939b47bfccbb9bb474a6d87d57210e304029cd8eb59c63a81935d","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"3026abd48e5e312f2328629ede6e0f770d21c3cd32cee705c450e589d015ee09","impliedFormat":1},{"version":"8b140b398a6afbd17cc97c38aea5274b2f7f39b1ae5b62952cfe65bf493e3e75","impliedFormat":1},{"version":"7663d2c19ce5ef8288c790edba3d45af54e58c84f1b37b1249f6d49d962f3d91","impliedFormat":1},{"version":"30112425b2cf042fca1c79c19e35f88f44bfb2e97454527528cd639dd1a460ca","impliedFormat":1},{"version":"00bd6ebe607246b45296aa2b805bd6a58c859acecda154bfa91f5334d7c175c6","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"504f37ba38bfea8394ec4f397c9a2ade7c78055e41ef5a600073b515c4fd0fc9","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"87ac2fb61e629e777f4d161dff534c2023ee15afd9cb3b1589b9b1f014e75c58","impliedFormat":1},{"version":"13c8b4348db91e2f7d694adc17e7438e6776bc506d5c8f5de9ad9989707fa3fe","impliedFormat":1},{"version":"3c1051617aa50b38e9efaabce25e10a5dd9b1f42e372ef0e8a674076a68742ed","impliedFormat":1},{"version":"07a3e20cdcb0f1182f452c0410606711fbea922ca76929a41aacb01104bc0d27","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"4cd4b6b1279e9d744a3825cbd7757bbefe7f0708f3f1069179ad535f19e8ed2c","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"c0eeaaa67c85c3bb6c52b629ebbfd3b2292dc67e8c0ffda2fc6cd2f78dc471e6","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"b95a6f019095dd1d48fd04965b50dfd63e5743a6e75478343c46d2582a5132bf","impliedFormat":99},{"version":"c2008605e78208cfa9cd70bd29856b72dda7ad89df5dc895920f8e10bcb9cd0a","impliedFormat":99},{"version":"b97cb5616d2ab82a98ec9ada7b9e9cabb1f5da880ec50ea2b8dc5baa4cbf3c16","impliedFormat":99},{"version":"d23df9ff06ae8bf1dcb7cc933e97ae7da418ac77749fecee758bb43a8d69f840","affectsGlobalScope":true,"impliedFormat":1},{"version":"040c71dde2c406f869ad2f41e8d4ce579cc60c8dbe5aa0dd8962ac943b846572","affectsGlobalScope":true,"impliedFormat":1},{"version":"3586f5ea3cc27083a17bd5c9059ede9421d587286d5a47f4341a4c2d00e4fa91","impliedFormat":1},{"version":"a6df929821e62f4719551f7955b9f42c0cd53c1370aec2dd322e24196a7dfe33","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"8964d295a9047c3a222af813b7d37deb57b835fd0942d89222e7def0aed136cc","ac195c2e6dc3f63d53a8f926fcc4910fca575a7a27ca6d7439de9bc7f5f72073","c209d37556556fb43c721b5ad07ba76c8e9dfeba8573e500c06f69d05d7d46d7","f20db83f9824344a2ab6196e1eb1843ed30d3c763d614a4732dd5a9a4c4d5a93",{"version":"cf68945047775226824487dbfe71ccd5dbf2a2f919f9c826cceddb84e9c5ebe9","impliedFormat":99},{"version":"d130b23ba1d4d36a59ec9fab7ff581a496bfc13defdcfd994cfd1118a0207a85","impliedFormat":99},"f4278b3731d2af946d2b1c2a3cab1e96a53fa130238ea762e8b1e7ee822f96ba",{"version":"a25c1a8e117477bc7865ad1503429966d2f769ecd18599fdaedc435e3f7a0627","signature":"313a0e0f7d124551a00a3cb5100b5d0d01be3b93ad6ffc0857e489df7e270b4c"},{"version":"fa8dbed00530fb4114906cd93f7fb55512c8eb9551d2f2e9796c69a4da4b594f","impliedFormat":1},"8539bc1718b4d7175c7cee244c2d242fea4f7703321fc8ac090761ce8901af8c","cb4d6d7a7e49deea4dfbb25ecd5b0d5c299e00db2a33700f9be559a349f90580","5dcaf7f13bf4ea41bd90c0f36eae6ef0bf1a3fe7d7c32477d94c46fbdf05575a","c18d11f73c38f8eea53588928b7f35b378a64efff690974d5442fff6a7f9a158",{"version":"7e3373dde2bba74076250204bd2af3aa44225717435e46396ef076b1954d2729","impliedFormat":1},{"version":"1c3dfad66ff0ba98b41c98c6f41af096fc56e959150bc3f44b2141fb278082fd","impliedFormat":1},{"version":"56208c500dcb5f42be7e18e8cb578f257a1a89b94b3280c506818fed06391805","impliedFormat":1},{"version":"0c94c2e497e1b9bcfda66aea239d5d36cd980d12a6d9d59e66f4be1fa3da5d5a","impliedFormat":1},{"version":"eb9271b3c585ea9dc7b19b906a921bf93f30f22330408ffec6df6a22057f3296","impliedFormat":1},{"version":"0205ee059bd2c4e12dcadc8e2cbd0132e27aeba84082a632681bd6c6c61db710","impliedFormat":1},{"version":"a694d38afadc2f7c20a8b1d150c68ac44d1d6c0229195c4d52947a89980126bc","impliedFormat":1},{"version":"9f1e00eab512de990ba27afa8634ca07362192063315be1f8166bc3dcc7f0e0f","impliedFormat":1},{"version":"9674788d4c5fcbd55c938e6719177ac932c304c94e0906551cc57a7942d2b53b","impliedFormat":1},{"version":"86dac6ce3fcd0a069b67a1ac9abdbce28588ea547fd2b42d73c1a2b7841cf182","impliedFormat":1},{"version":"4d34fbeadba0009ed3a1a5e77c99a1feedec65d88c4d9640910ff905e4e679f7","impliedFormat":1},{"version":"9d90361f495ed7057462bcaa9ae8d8dbad441147c27716d53b3dfeaea5bb7fc8","impliedFormat":1},{"version":"8fcc5571404796a8fe56e5c4d05049acdeac9c7a72205ac15b35cb463916d614","impliedFormat":1},{"version":"a3b3a1712610260c7ab96e270aad82bd7b28a53e5776f25a9a538831057ff44c","impliedFormat":1},{"version":"33a2af54111b3888415e1d81a7a803d37fada1ed2f419c427413742de3948ff5","impliedFormat":1},{"version":"d5a4fca3b69f2f740e447efb9565eecdbbe4e13f170b74dd4a829c5c9a5b8ebf","impliedFormat":1},{"version":"56f1e1a0c56efce87b94501a354729d0a0898508197cb50ab3e18322eb822199","impliedFormat":1},{"version":"8960e8c1730aa7efb87fcf1c02886865229fdbf3a8120dd08bb2305d2241bd7e","impliedFormat":1},{"version":"27bf82d1d38ea76a590cbe56873846103958cae2b6f4023dc59dd8282b66a38a","impliedFormat":1},{"version":"0daaab2afb95d5e1b75f87f59ee26f85a5f8d3005a799ac48b38976b9b521e69","impliedFormat":1},{"version":"2c378d9368abcd2eba8c29b294d40909845f68557bc0b38117e4f04fc56e5f9c","impliedFormat":1},{"version":"9b048390bcffe88c023a4cd742a720b41d4cd7df83bc9270e6f2339bf38de278","affectsGlobalScope":true,"impliedFormat":1},{"version":"c60b14c297cc569c648ddaea70bc1540903b7f4da416edd46687e88a543515a1","impliedFormat":1},{"version":"94a802503ca276212549e04e4c6b11c4c14f4fa78722f90f7f0682e8847af434","impliedFormat":1},{"version":"9c0217750253e3bf9c7e3821e51cff04551c00e63258d5e190cf8bd3181d5d4a","impliedFormat":1},{"version":"5c2e7f800b757863f3ddf1a98d7521b8da892a95c1b2eafb48d652a782891677","impliedFormat":1},{"version":"21317aac25f94069dbcaa54492c014574c7e4d680b3b99423510b51c4e36035f","impliedFormat":1},{"version":"c61d8275c35a76cb12c271b5fa8707bb46b1e5778a370fd6037c244c4df6a725","impliedFormat":1},{"version":"c7793cb5cd2bef461059ca340fbcd19d7ddac7ab3dcc6cd1c90432fca260a6ae","impliedFormat":1},{"version":"fd3bf6d545e796ebd31acc33c3b20255a5bc61d963787fc8473035ea1c09d870","impliedFormat":1},{"version":"c7af51101b509721c540c86bb5fc952094404d22e8a18ced30c38a79619916fa","impliedFormat":1},{"version":"59c8f7d68f79c6e3015f8aee218282d47d3f15b85e5defc2d9d1961b6ffed7a0","impliedFormat":1},{"version":"93a2049cbc80c66aa33582ec2648e1df2df59d2b353d6b4a97c9afcbb111ccab","impliedFormat":1},{"version":"d04d359e40db3ae8a8c23d0f096ad3f9f73a9ef980f7cb252a1fdc1e7b3a2fb9","impliedFormat":1},{"version":"84aa4f0c33c729557185805aae6e0df3bd084e311da67a10972bbcf400321ff0","impliedFormat":1},{"version":"cf6cbe50e3f87b2f4fd1f39c0dc746b452d7ce41b48aadfdb724f44da5b6f6ed","impliedFormat":1},{"version":"3cf494506a50b60bf506175dead23f43716a088c031d3aa00f7220b3fbcd56c9","impliedFormat":1},{"version":"f2d47126f1544c40f2b16fc82a66f97a97beac2085053cf89b49730a0e34d231","impliedFormat":1},{"version":"724ac138ba41e752ae562072920ddee03ba69fe4de5dafb812e0a35ef7fb2c7e","impliedFormat":1},{"version":"e4eb3f8a4e2728c3f2c3cb8e6b60cadeb9a189605ee53184d02d265e2820865c","impliedFormat":1},{"version":"f16cb1b503f1a64b371d80a0018949135fbe06fb4c5f78d4f637b17921a49ee8","impliedFormat":1},{"version":"f4808c828723e236a4b35a1415f8f550ff5dec621f81deea79bf3a051a84ffd0","impliedFormat":1},{"version":"3b810aa3410a680b1850ab478d479c2f03ed4318d1e5bf7972b49c4d82bacd8d","impliedFormat":1},{"version":"0ce7166bff5669fcb826bc6b54b246b1cf559837ea9cc87c3414cc70858e6097","impliedFormat":1},{"version":"6ea095c807bc7cc36bc1774bc2a0ef7174bf1c6f7a4f6b499170b802ce214bfe","impliedFormat":1},{"version":"3549400d56ee2625bb5cc51074d3237702f1f9ffa984d61d9a2db2a116786c22","impliedFormat":1},{"version":"5327f9a620d003b202eff5db6be0b44e22079793c9a926e0a7a251b1dbbdd33f","impliedFormat":1},{"version":"b60f6734309d20efb9b0e0c7e6e68282ee451592b9c079dd1a988bb7a5eeb5e7","impliedFormat":1},{"version":"f4187a4e2973251fd9655598aa7e6e8bba879939a73188ee3290bb090cc46b15","impliedFormat":1},{"version":"44c1a26f578277f8ccef3215a4bd642a0a4fbbaf187cf9ae3053591c891fdc9c","impliedFormat":1},{"version":"a5989cd5e1e4ca9b327d2f93f43e7c981f25ee12a81c2ebde85ec7eb30f34213","impliedFormat":1},{"version":"f65b8fa1532dfe0ef2c261d63e72c46fe5f089b28edcd35b3526328d42b412b8","impliedFormat":1},{"version":"1060083aacfc46e7b7b766557bff5dafb99de3128e7bab772240877e5bfe849d","impliedFormat":1},{"version":"d61a3fa4243c8795139e7352694102315f7a6d815ad0aeb29074cfea1eb67e93","impliedFormat":1},{"version":"1f66b80bad5fa29d9597276821375ddf482c84cfb12e8adb718dc893ffce79e0","impliedFormat":1},{"version":"1ed8606c7b3612e15ff2b6541e5a926985cbb4d028813e969c1976b7f4133d73","impliedFormat":1},{"version":"c086ab778e9ba4b8dbb2829f42ef78e2b28204fc1a483e42f54e45d7a96e5737","impliedFormat":1},{"version":"dd0b9b00a39436c1d9f7358be8b1f32571b327c05b5ed0e88cc91f9d6b6bc3c9","impliedFormat":1},{"version":"a951a7b2224a4e48963762f155f5ad44ca1145f23655dde623ae312d8faeb2f2","impliedFormat":1},{"version":"cd960c347c006ace9a821d0a3cffb1d3fbc2518a4630fb3d77fe95f7fd0758b8","impliedFormat":1},{"version":"fe1f3b21a6cc1a6bc37276453bd2ac85910a8bdc16842dc49b711588e89b1b77","impliedFormat":1},{"version":"1a6a21ff41d509ab631dbe1ea14397c518b8551f040e78819f9718ef80f13975","impliedFormat":1},{"version":"0a55c554e9e858e243f714ce25caebb089e5cc7468d5fd022c1e8fa3d8e8173d","impliedFormat":1},{"version":"3a5e0fe9dcd4b1a9af657c487519a3c39b92a67b1b21073ff20e37f7d7852e32","impliedFormat":1},{"version":"977aeb024f773799d20985c6817a4c0db8fed3f601982a52d4093e0c60aba85f","impliedFormat":1},{"version":"d59cf5116848e162c7d3d954694f215b276ad10047c2854ed2ee6d14a481411f","impliedFormat":1},{"version":"50098be78e7cbfc324dfc04983571c80539e55e11a0428f83a090c13c41824a2","impliedFormat":1},{"version":"08e767d9d3a7e704a9ea5f057b0f020fd5880bc63fbb4aa6ffee73be36690014","impliedFormat":1},{"version":"dd6051c7b02af0d521857069c49897adb8595d1f0e94487d53ebc157294ef864","impliedFormat":1},{"version":"79c6a11f75a62151848da39f6098549af0dd13b22206244961048326f451b2a8","impliedFormat":1},"b42318b067e06b304c327c5662058756a77e4b458bd9f885a9da034d83d69a9c","eb9b6d72f78d9820644ecc4290683130a9ba36dad6c663961221126c30c5c447","f95eab88197eff6059d23a5480b432a5a5a49b1328824aead6389640d9e6cd9d","e96c25f638ffdda8ed8dd5cffa777fa8404200f6fd194472634cb49f2cc80579","918e56cc43ef3b499cfc79d6f130f2dcae6b799755d7e1d572a15af281be56c1","fb728bd485aaa3cd41863c30205b0bc1b86bba1db640dfad9f64132786aea60d",{"version":"b1538a92b9bae8d230267210c5db38c2eb6bdb352128a3ce3aa8c6acf9fc9622","impliedFormat":1},{"version":"6fc1a4f64372593767a9b7b774e9b3b92bf04e8785c3f9ea98973aa9f4bbe490","impliedFormat":1},{"version":"ff09b6fbdcf74d8af4e131b8866925c5e18d225540b9b19ce9485ca93e574d84","impliedFormat":1},{"version":"d5895252efa27a50f134a9b580aa61f7def5ab73d0a8071f9b5bf9a317c01c2d","impliedFormat":1},{"version":"1f366bde16e0513fa7b64f87f86689c4d36efd85afce7eb24753e9c99b91c319","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1}],"root":[[408,411],414,415,[417,420],[491,496]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":7},"referencedMap":[[495,1],[496,2],[415,3],[418,4],[494,5],[493,6],[491,7],[492,8],[420,8],[419,9],[417,10],[414,11],[410,12],[411,13],[408,14],[361,12],[497,12],[498,12],[499,12],[500,15],[441,12],[424,16],[442,17],[423,12],[501,12],[502,12],[142,18],[143,18],[144,19],[99,20],[145,21],[146,22],[147,23],[94,12],[97,24],[95,12],[96,12],[148,25],[149,26],[150,27],[151,28],[152,29],[153,30],[154,30],[155,31],[156,32],[157,33],[158,34],[100,12],[98,12],[159,35],[160,36],[161,37],[193,38],[162,39],[163,40],[164,41],[165,42],[166,43],[167,44],[168,45],[169,46],[170,47],[171,48],[172,48],[173,49],[174,12],[175,50],[177,51],[176,52],[178,53],[179,54],[180,55],[181,56],[182,57],[183,58],[184,59],[185,60],[186,61],[187,62],[188,63],[189,64],[190,65],[101,12],[102,12],[103,12],[141,66],[191,67],[192,68],[416,69],[86,12],[198,70],[199,71],[197,9],[195,72],[196,73],[84,12],[87,74],[285,9],[85,12],[413,75],[412,12],[93,76],[364,77],[368,78],[370,79],[219,80],[233,81],[335,82],[264,12],[338,83],[300,84],[308,85],[336,86],[220,87],[263,12],[265,88],[337,89],[240,90],[221,91],[244,90],[234,90],[204,90],[291,92],[292,93],[209,12],[288,94],[293,95],[379,96],[286,95],[380,97],[270,12],[289,98],[392,99],[391,100],[295,95],[390,12],[388,12],[389,101],[290,9],[277,102],[278,103],[287,104],[303,105],[304,106],[294,107],[272,108],[273,109],[383,110],[386,111],[251,112],[250,113],[249,114],[395,9],[248,115],[225,12],[398,12],[401,12],[400,9],[402,116],[200,12],[329,12],[232,117],[202,118],[352,12],[353,12],[355,12],[358,119],[354,12],[356,120],[357,120],[218,12],[231,12],[363,121],[371,122],[375,123],[214,124],[280,125],[279,12],[271,108],[299,126],[297,127],[296,12],[298,12],[302,128],[275,129],[213,130],[238,131],[326,132],[205,133],[212,134],[201,82],[340,135],[350,136],[339,12],[349,137],[239,12],[223,138],[317,139],[316,12],[323,140],[325,141],[318,142],[322,143],[324,140],[321,142],[320,140],[319,142],[260,144],[245,144],[311,145],[246,145],[207,146],[206,12],[315,147],[314,148],[313,149],[312,150],[208,151],[284,152],[301,153],[283,154],[307,155],[309,156],[306,154],[241,151],[194,12],[327,157],[266,158],[348,159],[269,160],[343,161],[211,12],[344,162],[346,163],[347,164],[330,12],[342,133],[242,165],[328,166],[351,167],[215,12],[217,12],[222,168],[310,169],[210,170],[216,12],[268,171],[267,172],[224,173],[276,174],[274,175],[226,176],[228,177],[399,12],[227,178],[229,179],[366,12],[365,12],[367,12],[397,12],[230,180],[282,9],[92,12],[305,181],[252,12],[262,182],[373,9],[382,183],[259,9],[377,95],[258,184],[360,185],[257,183],[203,12],[384,186],[255,9],[256,9],[247,12],[261,12],[254,187],[253,188],[243,189],[237,107],[345,12],[236,190],[235,12],[369,12],[281,9],[362,191],[83,12],[91,192],[88,9],[89,12],[90,12],[341,193],[334,194],[333,12],[332,195],[331,12],[372,196],[374,197],[376,198],[378,199],[381,200],[407,201],[385,201],[406,202],[387,203],[393,204],[394,205],[396,206],[403,207],[405,12],[404,208],[359,209],[464,210],[466,211],[456,212],[461,213],[462,214],[468,215],[463,216],[460,217],[459,218],[458,219],[469,220],[426,213],[427,213],[467,213],[472,221],[482,222],[476,222],[484,222],[488,222],[475,222],[477,222],[480,222],[483,222],[479,223],[481,222],[485,9],[478,213],[474,224],[473,225],[435,9],[439,9],[429,213],[432,9],[437,213],[438,226],[431,227],[434,9],[436,9],[433,228],[422,9],[421,9],[490,229],[487,230],[453,231],[452,213],[450,9],[451,213],[454,232],[455,233],[448,9],[444,234],[447,213],[446,213],[445,213],[440,213],[449,234],[486,213],[465,235],[471,236],[489,12],[457,12],[470,237],[430,12],[428,238],[81,12],[82,12],[13,12],[14,12],[16,12],[15,12],[2,12],[17,12],[18,12],[19,12],[20,12],[21,12],[22,12],[23,12],[24,12],[3,12],[25,12],[26,12],[4,12],[27,12],[31,12],[28,12],[29,12],[30,12],[32,12],[33,12],[34,12],[5,12],[35,12],[36,12],[37,12],[38,12],[6,12],[42,12],[39,12],[40,12],[41,12],[43,12],[7,12],[44,12],[49,12],[50,12],[45,12],[46,12],[47,12],[48,12],[8,12],[54,12],[51,12],[52,12],[53,12],[55,12],[9,12],[56,12],[57,12],[58,12],[60,12],[59,12],[61,12],[62,12],[10,12],[63,12],[64,12],[65,12],[11,12],[66,12],[67,12],[68,12],[69,12],[70,12],[1,12],[71,12],[72,12],[12,12],[76,12],[74,12],[79,12],[78,12],[73,12],[77,12],[75,12],[80,12],[119,239],[129,240],[118,239],[139,241],[110,242],[109,243],[138,208],[132,244],[137,245],[112,246],[126,247],[111,248],[135,249],[107,250],[106,208],[136,251],[108,252],[113,253],[114,12],[117,253],[104,12],[140,254],[130,255],[121,256],[122,257],[124,258],[120,259],[123,260],[133,208],[115,261],[116,262],[125,263],[105,264],[128,255],[127,253],[131,12],[134,265],[425,266],[443,267],[409,12]],"affectedFilesPendingEmit":[495,496,415,418,494,493,491,492,420,419,417,414,410,411,409],"version":"5.9.3"} No newline at end of file | |||
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Do not commit generated TypeScript build metadata.
tsconfig.tsbuildinfo captures dependency snapshots and compiler-version state, so it can become stale as dependencies change. Remove it from the kit and add *.tsbuildinfo to kits/trading-journal-coach/.gitignore.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@kits/trading-journal-coach/tsconfig.tsbuildinfo` at line 1, Remove the
generated tsconfig.tsbuildinfo artifact from the kit, then update the kit’s
.gitignore to ignore *.tsbuildinfo files. Do not modify or preserve the
generated build metadata.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
kits/trading-journal-coach/apps/actions/orchestrate.ts (1)
1-7: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winMission: resolve workflows from the parent kit configuration.
These execution paths only resolve IDs through
apps/orchestrate.ts’s environment-backedconfig.flows; no parent-kit step-definition lookup is used. Import and use../../lamatic.configwhen resolving or validating these workflows so runtime execution cannot drift from the kit’s declared steps.As per coding guidelines,
kits/*/apps/actions/orchestrate.ts: Kit Next.js apps must import and use../../lamatic.configto read step definitions from the parent kit.Also applies to: 83-84, 127-128
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@kits/trading-journal-coach/apps/actions/orchestrate.ts` around lines 1 - 7, Update the workflow resolution and validation in the actions orchestrator, using its existing symbols such as config, isConfigured, and FlowKey, to import and consult ../../lamatic.config for the parent kit’s declared step definitions. Replace environment-only config.flows lookups where workflows are resolved, including the referenced sections, while preserving existing execution behavior and validation semantics.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@kits/trading-journal-coach/apps/actions/orchestrate.ts`:
- Around line 1-7: Update the workflow resolution and validation in the actions
orchestrator, using its existing symbols such as config, isConfigured, and
FlowKey, to import and consult ../../lamatic.config for the parent kit’s
declared step definitions. Replace environment-only config.flows lookups where
workflows are resolved, including the referenced sections, while preserving
existing execution behavior and validation semantics.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI (base), Organization UI (inherited)
Review profile: ASSERTIVE
Plan: Pro
Run ID: 5d2b4e73-4ad7-42f2-bddd-844aa8a015fa
📒 Files selected for processing (2)
kits/trading-journal-coach/.gitignorekits/trading-journal-coach/apps/actions/orchestrate.ts
PR Checklist
1. Select Contribution Type
kits/<category>/<kit-name>/)bundles/<bundle-name>/)templates/<template-name>/)2. General Requirements
kebab-caseand matches the flow IDREADME.md(purpose, setup, usage)3. File Structure (Check what applies)
config.jsonpresent with valid metadata (name, description, tags, steps, author, env keys)flows/<flow-name>/(where applicable) include:config.json(Lamatic flow export)inputs.jsonmeta.jsonREADME.md.env.examplewith placeholder values only (kits only)config.jsonnode graphs (changes via Lamatic Studio export)4. Validation
npm install && npm run devworks locally (kits: UI runs; bundles/templates: flows are valid)[kit] Add <name> for <use case>)trading-journal-coachkit with documentation, constitution, environment templates, metadata, and setup guidance.apps/with:analyze-journal: API trigger → code metrics calculation → pattern-detection LLM → coaching LLM → API response.chat-with-journal: API trigger → grounded LLM response → API response.weekly-discipline-report: weekly cron trigger → stored-analysis preparation → report LLM → persistence node.workflow_runconfiguration.