ff54c07a3b
Closes #403. The SKILL.md templates instructed the model to invoke the engine with inline single-quoted JSON: `--plan '$JSON'` and `--competitors-plan '{...}'`. When any resolved field value contained an apostrophe (common in `context` strings like "McDonald's", "people's choice", or contracted forms like "don't", "won't"), the inner `'` closed the outer single-quote and broke shell parsing before the engine was even invoked. Observed during PR #400 testing: a Codex run hit the trap and self-healed by re-encoding, wasting one engine invocation and ~30s of latency. Fix: switch both templates to the heredoc + tmpfile pattern. The engine's `parse_plan()` and `parse_competitors_plan()` already check `os.path.isfile(plan_str)` and read from disk — only the SKILL.md prose needed to change. The quoted heredoc marker (<<'PLAN_EOF') is load-bearing: it suppresses shell interpolation so apostrophes, $, backticks, etc. pass through verbatim. A trap on EXIT cleans up the tmpfile after the engine call returns. LAW 7's "MUST contain --plan" self-check guidance and Step 1's invocation example both updated to reference the file form. Comparison-mode invocation block updated the same way for --competitors-plan. Version bump 3.2.2 -> 3.2.3 because this is a behavior change users running comparison-mode queries will notice (no more "shell quoting error, retrying" sequences on apostrophe-containing context strings).
15 lines
712 B
JSON
15 lines
712 B
JSON
{
|
|
"name": "last30days",
|
|
"version": "3.2.3",
|
|
"description": "Research any topic across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, GitHub, and 5+ more sources. AI agent scores by upvotes, likes, and real money - not editors.",
|
|
"author": {
|
|
"name": "Matt Van Horn",
|
|
"email": "mvanhorn@gmail.com",
|
|
"url": "https://github.com/mvanhorn"
|
|
},
|
|
"homepage": "https://github.com/mvanhorn/last30days-skill",
|
|
"repository": "https://github.com/mvanhorn/last30days-skill",
|
|
"license": "MIT",
|
|
"keywords": ["research", "reddit", "twitter", "youtube", "tiktok", "instagram", "trends", "prompts", "polymarket", "github", "perplexity", "threads", "pinterest", "eli5", "hacker-news"]
|
|
}
|