rename: agent name Sage → Hecate (Cobb pick)
Greek goddess of magic, crossroads (decisions/planning), and herbs. Three-for-three thematic fit for a meal planner. Internal field names (sonnet_decision etc) unchanged — those are data, not user-facing.
This commit is contained in:
parent
a6a28ef6e4
commit
f2705e4dd5
6 changed files with 14 additions and 14 deletions
|
|
@ -67,7 +67,7 @@
|
|||
<h1>foods <span class="accent">consolidate</span></h1>
|
||||
<div class="lede">
|
||||
scan your mealie household foods, cluster lookalikes by similarity,
|
||||
let sage pick the survivor + the rest become aliases on it. mealie
|
||||
let hecate pick the survivor + the rest become aliases on it. mealie
|
||||
rewrites every recipe ingredient to point at the canonical row.
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -83,7 +83,7 @@
|
|||
<p>no run yet. kick one off?</p>
|
||||
<button class="btn btn-purple" id="start-btn" type="button" onclick="startRun()">🪄 scan + cluster mealie foods</button>
|
||||
<p class="muted" style="margin-top:8px;">
|
||||
walks your household catalog, clusters by name similarity, asks sage for the survivor of each cluster.
|
||||
walks your household catalog, clusters by name similarity, asks hecate for the survivor of each cluster.
|
||||
first run might take 5-15 min depending on cluster count.
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@
|
|||
<div class="crumb">// dedupe · find duplicate recipes</div>
|
||||
<h1>recipe <span class="accent">dedupe</span></h1>
|
||||
<div class="lede">
|
||||
scan your household recipes for duplicates by name similarity. sage
|
||||
scan your household recipes for duplicates by name similarity. hecate
|
||||
looks at ingredients + step counts + source URLs to decide whether
|
||||
similar-named recipes are actually the same dish. you confirm per
|
||||
cluster — DELETE in Mealie is permanent.
|
||||
|
|
@ -77,7 +77,7 @@
|
|||
<div id="empty-pane" style="display:none;">
|
||||
<p>no run yet. scan now?</p>
|
||||
<button class="btn btn-purple" id="start-btn" type="button" onclick="startRun()">🪄 scan recipes for duplicates</button>
|
||||
<p class="muted" style="margin-top:8px;">walks your household recipes, clusters by name similarity, asks sage which clusters are real dupes. apply path uses Mealie's DELETE endpoint — irreversible. user-confirms per cluster.</p>
|
||||
<p class="muted" style="margin-top:8px;">walks your household recipes, clusters by name similarity, asks hecate which clusters are real dupes. apply path uses Mealie's DELETE endpoint — irreversible. user-confirms per cluster.</p>
|
||||
</div>
|
||||
|
||||
<div id="progress-pane" style="display:none;">
|
||||
|
|
@ -244,7 +244,7 @@
|
|||
meta.className = 'cluster-meta';
|
||||
meta.textContent = dec.duplicates
|
||||
? `delete ${(dec.delete_slugs||[]).length}, keep 1`
|
||||
: `keep all ${cluster.length} (sage says distinct)`;
|
||||
: `keep all ${cluster.length} (hecate says distinct)`;
|
||||
left.appendChild(nm); left.appendChild(meta);
|
||||
|
||||
const tog = document.createElement('button');
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
<div class="crumb">// enrich · per-recipe metadata for smarter planning</div>
|
||||
<h1>recipe <span class="accent">enrich</span></h1>
|
||||
<div class="lede">
|
||||
walk every household recipe and have sage generate structured metadata —
|
||||
walk every household recipe and have hecate generate structured metadata —
|
||||
cuisine, complexity, macros, meal type, primary protein + carb,
|
||||
comfort tier, one-line summary. the plan generator uses this so
|
||||
"high protein week" actually filters the pool, not just biases the vibe.
|
||||
|
|
|
|||
|
|
@ -57,13 +57,13 @@
|
|||
</div>
|
||||
<p class="muted">mealie's parser is per-recipe; this kicks off a bulk pass over your whole library. review proposals, apply the good ones.</p>
|
||||
<p><a class="btn" href="/sterilize">🪄 bulk sterilize recipes →</a></p>
|
||||
<p class="muted" style="margin-top:14px;">scan your foods table for dupes, ask sage to pick canonicals, merge in mealie. one-time cleanup; aliases get attached to the survivors so the parser fuzzy-matches variants from now on.</p>
|
||||
<p class="muted" style="margin-top:14px;">scan your foods table for dupes, ask hecate to pick canonicals, merge in mealie. one-time cleanup; aliases get attached to the survivors so the parser fuzzy-matches variants from now on.</p>
|
||||
<p><a class="btn" href="/consolidate">🔮 consolidate foods table →</a></p>
|
||||
|
||||
<p class="muted" style="margin-top:14px;">find duplicate recipes by name + ingredient similarity. sage picks the canonical to keep; you confirm per cluster before mealie deletes the others. permanent — review carefully.</p>
|
||||
<p class="muted" style="margin-top:14px;">find duplicate recipes by name + ingredient similarity. hecate picks the canonical to keep; you confirm per cluster before mealie deletes the others. permanent — review carefully.</p>
|
||||
<p><a class="btn" href="/dedupe-recipes">🌀 dedupe recipes →</a></p>
|
||||
|
||||
<p class="muted" style="margin-top:14px;">have sage generate per-recipe metadata — cuisine, complexity, macros, primary protein/carb, comfort tier, summary. the plan generator reads this so "high protein week" is a real query, not just a vibe.</p>
|
||||
<p class="muted" style="margin-top:14px;">have hecate generate per-recipe metadata — cuisine, complexity, macros, primary protein/carb, comfort tier, summary. the plan generator reads this so "high protein week" is a real query, not just a vibe.</p>
|
||||
<p><a class="btn" href="/enrich-recipes">✨ enrich recipes →</a></p>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@
|
|||
<div class="pref-readout">excluding: <em>{{ plan.exclusions_label }}</em></div>
|
||||
{% endif %}
|
||||
{% elif not plan.slots %}
|
||||
<p>no plan yet. summon sage to build one from the {{ pick_count }} pinned pick{{ '' if pick_count == 1 else 's' }} + the rest of the grimoire.</p>
|
||||
<p>no plan yet. summon hecate to build one from the {{ pick_count }} pinned pick{{ '' if pick_count == 1 else 's' }} + the rest of the grimoire.</p>
|
||||
|
||||
<div class="pref-block">
|
||||
<label class="pref-label">meals to plan</label>
|
||||
|
|
@ -412,7 +412,7 @@
|
|||
</div>
|
||||
|
||||
<button class="gen-cta" type="button" id="gen-btn" onclick="generatePlan(this)">🪄 generate this week's plan</button>
|
||||
<div class="gen-meta" id="gen-meta">sage · ~30s</div>
|
||||
<div class="gen-meta" id="gen-meta">hecate · ~30s</div>
|
||||
{% else %}
|
||||
<p>plan's set.</p>
|
||||
{% if plan.preference_prompt %}
|
||||
|
|
@ -573,7 +573,7 @@ async function generatePlan(btn) {
|
|||
btn.disabled = true;
|
||||
btn.innerHTML = '🪄 summoning…';
|
||||
const meta = document.getElementById('gen-meta');
|
||||
if (meta) meta.textContent = 'sage building plan — hold tight';
|
||||
if (meta) meta.textContent = 'hecate building plan — hold tight';
|
||||
try {
|
||||
const r = await fetch('/api/plan/generate', {
|
||||
method: 'POST',
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@
|
|||
<h1>bulk <span class="accent">sterilize</span></h1>
|
||||
<div class="lede">
|
||||
walk every recipe in the household, send the unparsed ingredients to
|
||||
sage, review the proposals, apply the good ones. mealie's food
|
||||
hecate, review the proposals, apply the good ones. mealie's food
|
||||
table gets cleaner; the shopping list math gets sharper.
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -378,7 +378,7 @@
|
|||
<tbody>${rows}</tbody>`;
|
||||
card.appendChild(tbl);
|
||||
} else {
|
||||
// All rows were identity matches — sage thinks this recipe is
|
||||
// All rows were identity matches — hecate thinks this recipe is
|
||||
// already clean. Show a marker; user can still skip/approve as
|
||||
// a no-op apply (which will be cheap, just refreshes food.id
|
||||
// resolution if any food row got renamed in Mealie).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue