Commit Graph
149 Commits
Author SHA1 Message Date
DumiFlex 1d62923923 feat(ai): draw item names, variables and item lists in chat replies like the editors
A name the model puts in backticks (`Hair Color` or `[[Hair Color]]`)
is now a chip like any other mention. Variables read the way the editors
draw them: accessors in amber, .neg in red, and the variables the run
sets ($iteration, $model_family and the other WP Model Info ones)
marked read-only. A list of three or more items shows as an item list
with each item's kind, name and category chip.
2026-10-27 04:43:40 +00:00
Dumitru Picalau 507ddc6a51 Merge pull request #131 from DumiFlex/feat/chat-cards-registry
feat(ai): draw chat change cards the way each editor shows the item
2026-10-27 02:54:00 +01:00
DumiFlex f59a69c60c fix(ai): read negations and consent in the safety guard, keep ratings in step
The minor guard cut "adult woman, no children, no minors" and let
non-consent wording through. It now masks negated phrases (NegEx-style,
comparatives excluded, sexual words still read raw), adds a non-consent
line, knows minor words in nine more languages, and leaves adult body
words like "petite" alone. Ratings: chat-made items tagged #nsfw are
rated NSFW, chat and Organize no longer lower NSFW or drop #nsfw unasked,
chat search filters by rating, packs spell rating tags one way and flag
a prompt with two. A template draft asked for a youth negative gets one.

Bench critiques #30 and #38.
2026-10-27 02:48:10 +01:00
DumiFlex cf8428547a feat(ai): draw chat change cards the way each editor shows the item
Change cards were server text lines ("light rain ×3 → ×1"). The client now
draws them from the op's own before/after data through a per-kind view
registry (composables/card-views), with the server lines kept as the
fallback for anything a builder can't read.

- Wildcard edits: an option diff like the editor's list, + new, removed
  struck through, old → new for text, share of the draw, tags, negative
  and fallback; untouched options fold into "N unchanged" (the magnifier
  lists them). Add-only cards keep their tick list and say how many
  existing options stay.
- Name, description, tags, category and rating changes: old → new, the
  category as its CategoryChip (new ones marked).
- Categories, tag renames/merges and bulk changes as library chips.
- A merged card draws its op and names the changes it holds; it keeps
  the numbered steps only when nothing can be drawn.
- Shared old → new colours in components/ai/views/card-diff.css.
2026-10-27 01:45:34 +00:00
Dumitru Picalau 378b14b3d8 fix(ai): hold Draft with AI and chat edits to what the request asks (#128)
Fixes from the 9B manual bench: How many follows the request (panel and chat draft_options); drafts see existing tags and drop every-option, label and name tags plus unasked negatives; "half as likely" halves the current weight and wrong-way weights are refused; retag that adds keeps tags (chat add_tags, constraint tag warning); partial "every" edits are asked once more.
2026-10-26 18:34:51 +01:00
Claude c7936d289b feat(ai): keep Try again and Refine apart in Draft with AI
Both used to add to one 'Answer n of m' pager. The answers now form a
tree: each request is a step listed above the answer, Try again adds a
try to the shown step (try k of t), different refines of one answer are
sibling steps (refine k of n), and refining any try branches from it.
Flipping a step shows that answer and the steps under it follow its
branch; clicking an earlier step shows its answer. What Try again sends
is unchanged.
2026-10-26 15:43:47 +01:00
Claude 26c20a2bde docs: note the shared controls in the release notes 2026-10-26 14:02:35 +01:00
Claude bd215eb260 fix(import-export): use the shared controls on the Wildcard packs tab
The pack converter, the Import tab and the import-as-new rename row drew
their own buttons and inputs and used the browser's checkboxes and
selects (blue in Chrome). They now use the manager's Button, Checkbox,
Select, Field, Input and PickerSearch, and the global .wp-input /
.wp-textarea looks, so they match the rest of the manager in both
themes. The role cards use a wrapping flex row, so the fidelity card
no longer drops to its own row once the Stack card shows.
2026-10-26 14:02:35 +01:00
Dumitru Picalau a2af632b07 fix(ai): keep the AI working line's words whole (#124)
The working line clipped the end of its words ("Writing · 3 token", "Reading the promp", "Rolling the d…"). Its words box animated its width, so after every change it was narrower than the word for 0.4s, and its width was rounded down, so a box up to a pixel short stayed that way. One pixel short is enough for the browser to drop the last letter and the "…" for its own ellipsis, which Firefox draws invisibly on the gradient text.

The box now widens at once and narrows only after the old word has faded, is rounded up with a pixel to spare, refits when the font loads late, and a number ticking up in the chat's status no longer crossfades.
2026-10-26 11:38:35 +01:00
Dumitru Picalau d691358132 fix(ai): keep model-tied AI settings per provider and model (#123)
Thinking, Model size, Most context to use, Tool format, Sampling, Choose
the tool first and Short tool list now live in the provider's slot, and
each model keeps its own copy, restored on switch. A model with nothing
saved starts Thinking and Model size at auto. Unload after is kept per
provider. Old files keep their values for the provider in use; other
providers inherit them except Thinking.
2026-10-26 10:37:56 +01:00
Dumitru Picalau 9f8a965b67 feat(ai): debug log of every AI request with Copy debug (#122)
Settings › AI assistant › Advanced › Debug log (off by default) gives every AI request an X-WP-Debug id. The server records each model call it makes (prompt as sent, reply, thinking, tool calls, tokens, errors), keeps the last 30 in memory and writes one file per request to ai-debug/ in the data folder (newest 300). Images, embedding vectors and keys are left out. A Debug button in the top bar lists the requests with Copy debug (Markdown) and JSON. WP_AI_DEBUG=1 records every request, for evals.
2026-10-26 09:56:13 +01:00
Dumitru Picalau 4dcb6153f0 feat(ai): recommended pack settings, Open in Pack builder, pack 11/15 and Fixed values fixes (#121)
- The chat's plan card fills the Describe step and waits, so images and settings can be set first.
- Recommended pack settings (no model call) with a Use recommended button on the Settings step.
- Pack 11: model-rolling slots, family-named fixed values, writing-style slots and Pony tags on non-Pony packs are dropped; quality rules join into one; strip_repeats keeps rules on $model_*.
- Pack 15: folded slots are never a self axis; rule words become options after a fill.
- Fixed values panel sends fewer library variables (12-19 s on the 9B, was up to 113 s).
2026-10-26 09:55:58 +01:00
Dumitru PicalauandClaude bfa5c43083 fix(ai): fold slots split by their own axis, drop self-appends, check rules the way they run (#120)
Pack 7's 25 Hat.type rules fired but the check read ctx['hat.type'], which
is never set (the engine keeps rolled axes in __wp_axes__), and a rule
appending a hat's own type to $hat printed 'capcap'. Pack 15 split Outfit
into Casual Outfit and Formal Outfit: both printed and their only-rows on
Footwear left no shoe, so the fallback was taken every run. A rule text
reading a variable is checked with its value filled in, and 'a hat 30% of
the time' lands on the hat only, flips an inverted share and drops a
multi-pick.

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-25 00:53:35 +02:00
Dumitru PicalauandClaude 941b012f51 fix(ai): capped answer strings, long axes grouped, no second colour in front of a colour wildcard (#119)
The Template panel on an empty library and the pack planner could write one
string on to the output limit; every string in their schemas is capped now.
A slot axis of up to 10 values is grouped, with at least one option per
value kept, so a rule on a value never misses its options. A draw puts no
pick in front of a drawer whose options already name the list's values,
and a drawn or internal list is no longer reported missing from prompts.
The pack eval counts a rule that never fired apart instead of as a break.

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-24 23:06:28 +02:00
Dumitru PicalauandClaude dc32cb52f2 feat(ai): pack plans draft again only when needed; slot options come grouped by tag value (#118)
Plan drafts gets When needed (auto, the new default): after the first
draft, one more is asked only when score_plan finds a serious problem
(a relation that named nothing, a review fix other than request words,
a stated rule with no relation, too few prompt slots), and the better
draft is kept. Request gaps also match -ves plurals (elves → elf).

A slot's content call asks its options grouped by one axis (group_axis:
the one a rule narrows on, else one the slot offers, else the first),
at least two per value when the count allows, so every value is covered
by the first call. compile_slot flattens the groups; fill calls stay flat.

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-24 21:06:34 +02:00
Dumitru PicalauandClaude a141bbddae fix(ai): pack rules reach the drawn pick and follow "only with"; glued options are split (#117)
Co-authored-by: Claude <noreply@anthropic.com>
2026-10-24 12:59:45 +02:00
Dumitru Picalau 72b47fbcd1 fix(ai): the pack plan check holds a plan to its request (#116)
The code lands a share, hold and shown subject itself; a missing rule goes back to the planner once; a cut-off plan is asked again shorter; draw relations are never constraint cells; rules written as text, $$ leads and unasked multi-picks between rules are fixed at compile; the check catches a $name printed as written.
2026-10-24 10:42:10 +02:00
Dumitru Picalau b23241ff7a fix(ai): pack builder settings reach the graph build, rules on drawn lists hold, honest feature scores (#115)
Graph planner settings lines, an accepts-aware dead-end tidy, constraints on drawn lists before their drawers (checked on drawn picks), a repair loop that skips unchanged problems, slot calls with style examples, and a pack eval smoke set. 9B smoke run: 12/15 clean packs vs 6/15 on dev, 15/15 plans compile.
2026-10-24 08:26:57 +02:00
Dumitru Picalau 9aa32718b1 fix(ai): Draft with AI panels answer in seconds on local models, with a panel eval set (#114)
Panels send the thinking off switch on Auto with sized output limits and a thinking watchdog. They list only the variables a request is about. They name wildcard names that two items share, recheck Add for a second concept, stop looping text answers early and ask again for a variable the request names. New scripts/ai_panel_evals.py; the 9B goes from 31/36 to 35/36 checks at 2.4x the speed.
2026-10-24 07:11:15 +02:00
Dumitru Picalau ecb158e4cf feat(ai): short tool list for small models, and drop a 1$$ pick around a lone ref (#112)
Short tool list (Settings › AI assistant › Advanced, off by default): a small model in typed JSON steps gets one line per tool in its instructions, and each tool's arguments and example in the tail of the step that first offers it, once while visible. It is fixed per chat (meta tool_index), so the prompt prefix stays stable. The eval takes --lean.

9B A/B: content tied (55 vs 55 over three pairs) with about 14% fewer prompt tokens per step, so the switch stays off by default for now.

Also drop "{1$$@{…}}" around a lone ref, like the bare braces.
2026-10-24 00:27:52 +02:00
Dumitru Picalau 712c4a301e fix(ai): after a claim nudge, the next step offers only the change tools (#110)
On an empty library the 9B read the item twice, wrote "I've proposed
adding negatives…" with no call, and met the claim nudge with the same
text again (smoke s-negatives, both builds). The step after the nudge
now offers only the change tools it had plus the test tools, and the
repeat-read refusal points at the next call.
2026-10-23 18:31:45 +02:00
Dumitru Picalau 13d5f819b4 fix(ai): after the request check, offer only the fix; mark claims no card backs (#108)
On an empty library the 9B met the request check's note with more_tools,
opened its own card twice and then claimed the fallback or the
@{Palette:warm} options it never proposed (13 of 20 smoke checks, 17 on
a full library). The step after the note now offers only the cards' own
tools and the ones that add what is missing (request_check.fix_tools),
and a reply that talks about a missing feature anyway says no card has
it yet (request_check.claimed; "no fallback is needed" doesn't count).
A repeated refusal that forces the answer no longer skips the note.
The chat eval's --empty runs every scenario on a migrated empty
library, a new user's first chat.
2026-10-23 13:06:01 +02:00
Dumitru Picalau 98bd3d1fc3 fix(manager): keep library pages live after deletes, undos and chat edits (#107)
A cascade delete already removes the row on the server, but the Categories page and the six module/bundle editors then called store.remove(), which sent a second DELETE that 404'd before the row left the list. Stores gain removeLocal(); a cascade apply or undo bumps libraryVersion; AppLayout refetches every loaded library list when it moves; the Dashboard refreshes; Recently opened drops deleted rows and is pruned against each fresh catalog.
2026-10-23 09:29:01 +02:00
Dumitru Picalau 9ec21566f3 feat(ai): optional samplers for local and OpenAI-compatible servers (#105)
Settings › AI › Advanced › Sampling sets top_p, top_k, min_p and repeat/presence penalties per provider slot (empty keeps the server's default). They go only to local and OpenAI-compatible servers. The chat eval gains --seed for a fixed sampling seed per scenario and run.
2026-10-23 09:00:47 +02:00
Dumitru Picalau 7ddc7ac1a3 feat(ai): check the cards against the request; close a looping tool (#103)
The request check (engine/ai/request_check.py) nudges once when the answer's cards lack a constraint, only rule, fallback, negatives or tag-filtered ref the request names. A tool repeated MAX_LOOPS times leaves the grammar for the rest of the answer. Page tools come to a task only on page words, and option tags in a wildcard ask no longer load the list tools.
2026-10-23 08:15:28 +02:00
Dumitru Picalau 76e895cf7a feat(ai): narrow small models' grammars; questions get no change tools (#102)
- Typed JSON step grammars name only real items: ids limited to what the edit guard allows, read/run_test/open to what exists, and the tools that usually come next join the shortlist; a server that refuses the enums gets the plain grammar.
- A question or chat gets the reading, page and docs tools but nothing that changes or drafts; a follow-up in a chat that already proposed cards counts as a task.
- The shortlist core is search, read, ask and more_tools; docs, react, variables and run_test join only when the message or the answer calls for them, so first steps offer about ten tools.
- Traces record the message kind; eval runs keep each run's library and card ops, and the smoke checks read compiled refs.
2026-10-23 05:49:47 +02:00
Dumitru Picalau 59ab97f547 feat(ai): feature cards for small models, Type out replies and live thinking (#101)
- Send small and medium models feature cards with the message that needs them, and offer the tools a card names.
- Suggest local models by name only.
- Optional Type out replies (off by default), JSON steps included; the Thinking box streams live and the drawer says when the model sends nothing.
- Let the chat change an item its own card made.
- Evals start from a fresh library; traces record step time, thinking tokens and timeouts.
2026-10-23 04:57:35 +02:00
Dumitru Picalau bee35bc48f feat(ai): fit the Thinking setting to what each model takes (#98)
Each provider and model takes different thinking values: LM Studio's
Qwen 3.x take only off and on (and LM Studio never hands a level to the
chat template, so Qwen 3.8 always ran at its xhigh default), Claude,
OpenAI and OpenRouter models each have their own effort levels, and
some can't turn thinking off.

- wp_api/_ai_thinking.py asks the server what the chosen model takes
  (LM Studio /api/v1/models, Claude's Models API, OpenRouter /models,
  Ollama /api/show, llama.cpp's chat template), else goes by the model's
  name, and fits the saved setting before it is sent: a level on an
  on/off model is On, Off on a model that must think is its lowest
  level, a missing level is the nearest one.
- A refused value is asked again without it and remembered for the
  model; a 4xx about thinking no longer marks the server as refusing
  streams.
- A reply cut off with nothing but thinking is asked once more with
  thinking off, and the model stays off until Thinking changes.
- llama.cpp gets the level as the template's reasoning_effort.
- New choices On, Extra high and Max; POST /wp/api/ai/thinking; Settings
  and the chat header list only the model's choices with a line saying
  what it takes.
2026-10-23 01:44:06 +02:00
Dumitru Picalau dac183c8f1 fix(ai-chat): hide leaked step fields, live @ chips, reply times (#97)
- A JSON-mode reply that writes the rest of its step into the message
  ("calls: []", "**calls**: []", '"calls": []}', the calls list itself)
  no longer shows it: engine/ai/step_fields.py cleans new answers and
  utils/chat-step-fields.ts cleans stored chats and live text, kept in step
  by tests/fixtures/step-fields-corpus.json.
- Items picked from the @ menu show as chips in the box while typing
  (ChatInputMarks overlays tinted pills on the textarea text), in the chat,
  the Draft with AI panels and the Pack builder.
- A picked wildcard's note tells the model to write @{Name} in options,
  and a new wildcard that leaves out a reference the user asked for gets a
  warning back so the model fixes it in the same answer.
- @{...} references in a chat reply stay coloured text; chips are for cards.
- Each reply shows how long it took beside Copy (elapsed_ms, kept with the
  chat; time paused on the user is left out). Reopened chats keep their
  format and tool-use badges too.
- The chat's model menu reloads when the provider or server changes.
- Docs: Ask about this page is pinned to the top right of the page, and it
  and the docs starters name the page, so a question sent after moving on
  still asks about it. The pipeline diagram stacks when narrow (docs beside
  an open chat) instead of running off the side.
- Docs: AI chat page.
2026-10-23 00:49:11 +02:00
Dumitru Picalau 0ffc9b99bc feat(import): carry wildcard pack logic over as stacks, read Umi AI packs and installed folders (#96)
Dynamic Prompts and PPP variables, template arguments and PPP if blocks become stacks: setter wildcards, derivations for defaults, constraints from conditions and a Combine that renders the line. Model checks (_is_sdxl, _is_pony, ...) become a stack that reads WP Model Info. PPP stn and Umi negatives go to the option negative; PPP LoRA commands become <lora:...> text.

Umi AI YAML packs keep their tags, tag queries become weighted filtered references and Yaml Tags.txt names the tag groups. Subfolders that repeat list names become one table wildcard per name; template copies that differ by one tag fold into one steered wildcard.

The review lists installed extensions' wildcard folders, has a Bundles mode (stacks only by default), tag group renames, stack details and sample rolls from the real engine. Lists a condition reads stay out of merges, and folder reads skip symlinked files.
2026-10-22 22:58:14 +02:00
Dumitru Picalau 0368201dc8 docs: rewrite the user docs in plain words (#94)
Every built-in docs page, node help panel and the README is shorter and
plainer, with new screenshots of the current nodes. The AI assistant page
is split into short pages, a new How to group covers variations, making
picks agree, keeping something steady, sharing and troubleshooting, and
wildcard import has its own page. The warnings reference uses WP Debug's
labels, the AI image descriptions match the new screenshots, and the
release notes are rewritten in plain words. Local models need at least
16k of context; 32k is recommended.
2026-10-22 06:26:44 +02:00
Dumitru Picalau 8d0fa337b2 chore: fixes from the 2026-10-21 review (#93)
Shorter release notes, SeedList help, small-model docs; _chat_turn split and pyright in CI; ESLint a11y ratchet and Modal focus trap; tags/models/Image Filter tests; AI LAN warning, web allow expiry, one thinking setting per answer on local models, recommended hints and Reset to recommended (16k context minimum, 32k recommended); Assembler Clear template clears the negative; Vue 3.5.44, SECURITY and Dependabot.
2026-10-22 06:15:13 +02:00
Dumitru Picalau 109b5e8678 feat(chat): small models get worked examples, recipes, a progress note and a choose-first switch (#91)
Applied cards become (request, call) examples for small and medium models; common asks carry short steps; later steps say what the answer did; act asks run with thinking off; small chats compact sooner; a one-call explain docs tool; Test connection tries a small-model tool step; a struggling local answer offers the cloud provider already set up, once per chat; Advanced "Choose the tool first" names the tool before filling its arguments.
2026-10-22 01:16:47 +02:00
Dumitru Picalau 90881da5a5 feat(chat): small models plan multi-item asks, get a tool shortlist and use-when lines (#90)
A multi-item ask on a split JSON chat is planned once (plan_items) and made one item per step with code keeping count; each step's grammar offers a shortlist of the chat's tools (more_tools widens it); confusable tools carry use-when lines and a sample call in the prompt and native descriptions.
2026-10-22 00:56:16 +02:00
Dumitru Picalau 6f1f8dc925 fix(chat): an answer sent back is written again whole, not as an apology (#89)
The claim check and the made-up-names check ask for the whole answer again with only the wrong part changed, keeping lists, tables and Warning lines.
2026-10-22 00:06:05 +02:00
Dumitru PicalauandClaude bc855b51e0 fix(chat): fixes from the format and group-card probe (#87)
* fix(chat): fixes from the Sonnet probe

- An empty answer after a failed page step, or on the last step, gets one
  more step in words only; if still empty, the reply says the page step
  didn't work.
- A change call sent again unchanged in one answer is answered "already
  proposed, go on" instead of being made again, so five asked are five made.
- Keys and $variables that the docs, the library and the chat never mention
  are sent back once to check or drop.
- Prompt: steps to do are a checklist, a risk is a Warning.
- A stray pipe on a note under a table is dropped.

* fix(chat): a link asked for is written in the answer, not pointed at

Sonnet probe: "link the guide back to me" made the model highlight the
guide, which failed.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-21 23:51:52 +02:00
Dumitru Picalau 833b02e27a feat(chat): many cards of one kind in an answer are one group card (#86)
Three or more cards of one kind in an answer show as one group card. A row opens its card in place, one at a time; Apply takes the ticked rows and "Dismiss the other N" the rest. The model hears one line per status for many cards.
2026-10-21 23:08:31 +02:00
Dumitru Picalau b942b95c00 fix(ai): ask runs beside page calls, repeat page reads answer at once, scope fix trims (#84)
An ask sent with open / read_page in one step runs and the page calls wait; a repeated read_page or an open of a card already on screen counts as a repeat; "Remove clothing words" trims inside a phrase instead of dropping the option.
2026-10-21 22:32:43 +02:00
Dumitru Picalau 5056722e1a fix(ai): Claude walkthrough fixes, chat polish and a search results card (#82)
Pack builder: Fix all and updates say why nothing went out while the web search card waits; page follow-up lines are not request words; Only rows narrow only the tag groups they rule on; answers are not request gaps; code-wired story beats skip the lookup lint; left-out rules read plainly and get Fix with AI; a rule overwriting a pick becomes an append; model labels read "For Illustrious"; roomier plan head.

Chat: same-name edits refused with the shown item named; search by category for organizing; empty edit answers carry a note; prompt syntax coloured inside cards; every chat format named in the prompt; pointer captions avoid each other; one shared working line.

Search: what an allowed search found shows as a card in the Pack builder and the Draft with AI panels; Use what fits sends all results for the model to keep what fits, ticking sends only those, None of these sends nothing.
2026-10-21 22:05:41 +02:00
Dumitru Picalau 61baff389f feat(ai): pack rules that choose, a draw relation, picks and model families read off the request (#81)
The pack-sheet round on the graph planner: agree/only sources roll an
accepts axis, fallback counting and tight-rule tips, the draw relation,
picks and model families read off the request, Quality and Negative
slots wired as fixed values and the template negative, Plan drafts best
of three, Danbooru respelling, thinking-off retry for all-reasoning JSON
answers, Reuse what fits on a graph plan, negative-ish names out of the
order, numeric derive text as weights, fills for missing axis values,
one derivation rule per axis, multi-pick rules dropped, request gaps
asked once, overlaps filed on the borrowing pick, the chat claim / defer
nudges, the empty-retag re-ask, and the adult-pack safety pass on every
wired item (request refusal, young-person words, tags and keyed rules
dropped, "mature" out of every negative).
2026-10-21 14:43:44 +02:00
Dumitru Picalau 8bec450749 feat(ai): Pack builder plans a graph and the code wires the pack (#80)
A new Planner setting, Pack graph (the default), has the model write a
small typed graph (slots, axes, relations, template order) and the code
compiles every constraint, derivation, fixed value and the template from
it. Run and settings needs are wired by the code (story beats, sweep axes,
per-family quality, caps, style, rating, one bundle), hand edits are
locked, the plan review stops looping (typed findings, code questions,
narrow per-item Change with AI calls), and the chat gets the 9B fixes
(Tool format Automatic picks JSON steps for small models, XML calls run,
frame tests take numbers, written-out calls still run).
2026-10-21 14:42:39 +02:00
Dumitru Picalau dbcf48a6b5 fix(ai): chat assistant eval and fixes (#79)
One card per idea, run_test finds items however the model names them, small-model rule and constraint shapes are cleaned up, Draft with AI panels use integer-enum ids with a catch-all repair call, Pack builder Fix all no longer loops, and scripts/ai_chat_evals.py runs scripted chats against a real model.
2026-10-19 03:15:23 +02:00
Dumitru Picalau aa5cc4605c fix(import): refuse malformed packs in the manager before install; enforce coverage gates (#76)
Every install path parses with parseCheckedPayload, which checks module payloads and bundle children against the strict validators (loaded lazily) before /import/commit. Validators accept the engine's defaults. CI now evaluates the pytest coverage floor (88) and css-isolation; vitest thresholds ratcheted to 80/66/77/80; js budget 496 KB.
2026-10-17 19:30:00 +02:00
Claude 2d6a7b5654 chore: merge main (2.20.0 release) into dev 2026-10-17 03:24:48 +00:00
Dumitru Picalau 8f2682893d feat(community): load the Community tab in a sandboxed iframe (#73)
Community.vue frames the community site's /embed-frame.html in a sandboxed iframe. frameBridge.ts serves install and markPublished over postMessage (only from the frame and community origin, every field checked) via hostRuntime.ts, and forwards route changes, theme and the publish hash. Old wpc.embed.* tokens move to the frame once and are wiped. The remote import and window.__wpcRuntime are gone.
2026-10-17 05:03:44 +02:00
Dumitru Picalau 26df88216f feat(ai): chat round, node negatives, pack builder quality fixes (#69)
Chat round (explain on selection, page starters, reactions, streamed notes, thinking), negatives on node fixed values and combines, Pack builder quality fixes from 31 real-model eval rounds, and small-model support (scoped tools, checked tool arguments on local servers, two-phase steps, fixed prefix shown in Test connection).
2026-10-17 01:23:58 +02:00
Dumitru Picalau df9a19a624 fix: engine rng keying, widget teardown, import validation and connection leak (#72)
Derivation and fixed values modules roll on their own rng stream (seeds through their alternations can resolve differently). DOM widgets tear down when their node is removed (effect scope, cleanups, shared onConnectionsChange wrapper, seed state in WeakMaps, capped topbar rAF loop). /import/commit validates module and bundle child payloads. WP_Context and preview close their library connection; the node path migrates once. Pinned option missing warns. CLAUDE.md says which parts of the schema machine are wired; js budget 473 KB.
2026-10-17 01:07:34 +02:00
Dumitru Picalau f8f49bca7c feat(ai): the assistant knows the nodes, tags and loras; page reading, danbooru lookup and new pack settings (#71)
Node knowledge and canvas variables for every AI feature, local tag/LoRA/embedding lookup, read_result page reading (built in, Crawl4AI or Firecrawl), opt-in Danbooru lookup, dismissable web warnings and "don't ask before web calls". Pack builder reads run style, subject and LoRA inputs from the request into the plan (Runs as), settings keep only pack-wide preferences plus Model; plan review checks stories, LoRA inputs and the model setting; anchor finding fixed; Fix with AI / Explain buttons; docs figure descriptions.
2026-10-14 23:13:55 +02:00
Dumitru Picalau 460c2ad30e feat(editor): coloured $variables, derivation value switch, accent tags, @ completion in AI boxes (#70)
Variables are coloured text with hover cards instead of green chips on every surface (canvas included); nested @ refs keep their chips, and $name in a wildcard option is plain text. The derivation any / is empty / has value switch has room and is hidden under NOT exists. Tags use the accent colour. The AI pointer caption has a gap. Every AI box completes @ items, $ variables, tags, LoRAs and embeddings, and picked items reach the model with the message.
2026-10-14 21:53:20 +02:00
Dumitru Picalau d25c2e4558 feat(manager): split loading mark replaces the plain spinners (#68)
The logo rings slide apart and back while the star dips and turns. Used for busy buttons, the database and maintenance panels, pack builder rows, template, tags and impact loading text, the Community tab while the embed opens, the canvas Load template and Push to library modals, and a boot splash in manager.html. js/ budget raised 468 -> 472 KB.
2026-10-14 20:32:00 +02:00