Skip to content

Releases: makkr-studio/pattern

Pattern v0.4.0

Choose a tag to compare

@benoit-at-makkr benoit-at-makkr released this 15 Jul 11:10
f8ef342

Pattern 0.4.0 turns the framework's introspection — a self-describing op catalog, a validator with located errors, event-sourced run traces — into things that author and explain workflows for you.

✦ Meet Buddy

A chat dock inside the editor: describe what you want, and Buddy drafts the workflow — grounded in your app's own handbook and op catalog, validated before you ever see it — then applies it to your open canvas as an ordinary, undoable edit. It debugs failed runs straight from their traces (one-click "why did this fail?"), remembers the conversation per workflow, and — naturally — Buddy's own pipeline is a Pattern workflow you can open and reshape.

🔌 The control plane goes public

Buddy's ten pattern_* tools (search ops & docs, read/validate/save workflows, deploy, inspect runs) are ordinary tool workflows — served over MCP. HTTP mode is guarded by scoped, revocable API tokens (author ≠ deploy); pattern mcp serves stdio for local dev, so Claude Code or Cursor become Pattern authors the moment they open your project (.mcp.json ships in the scaffolds).

🧠 Vector search — and a chat that remembers you

@pattern-js/mod-vectors: embedding collections that declare their model alias and filterable fields, hybrid search (vector + keyword, RRF-fused), a driver SPI, and an admin page that is the whole RAG loop — paste, search, read the scores. On top of it, mod-chat grows cross-conversation, per-user memory with receipts: a visible remember tool, write-time reconciliation (contradictions supersede instead of piling up), and every memory linking to the exact run where it was learned — browsable, forgettable, admin → Chat → Memories.

📬 Inbound email

email.inbound triggers workflows per received message (svix-verified Resend webhook, attachments as blobs), and email.reply answers in-thread. Email your app; a three-node workflow answers.

🛠 And throughout

  • Real user administration: invites as records (statuses, next path, revocation), disable/delete with last-admin guards, role editing, PATTERN_PUBLIC_URL so emailed links are absolute anywhere.
  • Scaffolder DX: provider picks seed working model aliases — a fresh app answers /rag/ask the moment your key lands in .env.
  • Core: any mod can ship trigger ops; mod load order can no longer break seeded workflows.

343 ops across the first-party mods (175 in core), one command to start:

npm create pattern@latest

Pattern v0.3.0

Choose a tag to compare

@benoit-at-makkr benoit-at-makkr released this 02 Jul 10:45
4a77893

Pattern 0.3.0 — Agents, voice, sign-in & email. The whole loop, on the canvas.

This is the biggest Pattern release yet. 0.2 gave the framework its handbook; 0.3 gives it its superpowers: a native AI capability layer over 40+ providers, an agent loop that is Pattern code all the way down, a chat app that listens and talks back, real login methods, and transactional email — all of it visible, traceable, and rewireable in the admin, because in Pattern everything is a workflow.

Five new packages ship today: @pattern-js/mod-ai, @pattern-js/mod-auth-oidc, @pattern-js/mod-email, @pattern-js/mod-email-resend, and @pattern-js/mod-email-smtp.

To taste what that means in practice: an agent that calls a live weather tool, writes a Markdown email about it, and delivers it through Resend is nine nodes on one canvas — request → brief → agent → run → send → response, with the tool call showing up as a linked sub-run in the trace viewer.


🧠 mod-ai — every AI modality as an op

The new AI capability layer, built on the Vercel AI SDK's full provider catalog (40+ providers, lazy-loaded, the AI Gateway built in):

  • Ops for every modality: ai.text.generate / ai.text.stream, ai.object.generate (schema-validated structured output), ai.embed / ai.embed.many, ai.image.generate, ai.speech.generate, ai.transcribe, and ai.video.generate.
  • Models are aliases, not hardcodes. An alias is an admin-configured instance — provider + model id + a vault- or env-sourced key — resolved by name at run time. Re-point default in Settings → AI Providers and every workflow that uses it retargets instantly. No redeploys, no config hunts.
  • An AI Providers settings page in the admin: define aliases per modality, keys stay in the encrypted vault and are masked out of run samples.
  • MCP in both directions: ai.mcp.client pulls tools from any remote MCP server (HTTP or stdio — paste a whole command line, it's tokenized for you) into a toolset value; the ai.mcp.server route exposes your tool workflows to any MCP client. Your workflows become tools; other people's tools become nodes.

🤖 mod-agents — the agent loop is now Pattern code

The agent runtime was rebuilt from the ground up as a native loop — no external agents SDK underneath:

  • agents.agent / agents.run / agents.run.resume, on any provider via mod-ai. No model wired = the configured default alias.
  • Tools are workflows. A tool starts with boundary.tool (name, description, JSON-Schema params — validated by the engine before your graph runs, so a hallucinated argument never reaches it) and ends with boundary.tool.return. Every call is a linked sub-run with sampled I/O in the admin.
  • Guardrails, human-in-the-loop approvals, history compaction — all graph nodes, all visible. Agent name and instructions are runtime inputs, so one agent definition can vary per request.
  • @pattern-js/mod-agents-openai is retired: mod-agents + mod-ai replace it on every provider (see Breaking changes).

🎙️ Chat learns to listen and talk

The bundled chat app (mod-chat) had a full experience overhaul:

  • Voice input — in-browser speech-to-text with Silero VAD and locally-served Whisper assets (no audio leaves the machine until you send), and spoken-style agent instructions on voice turns so replies read like speech.
  • Voice output — text-to-speech playback, and a fullscreen WebGPU particle voice avatar (with a Canvas2D fallback) that breathes with the conversation.
  • Per-turn model switcher backed by language-model aliases: pick a model for this message, the pinned default stays put.
  • Multi-instance serving: one shared chat backend, many branded SPA instances — per-namespace agents by forking the turn pipeline alone; the most specific route wins.
  • A three-way theme (light / dark / system), lucide icons, avatar polish, and image / transcribe / speech tools with conventional aliases.

🔐 Real sign-in: OIDC joins magic links

@pattern-js/mod-auth-oidc — authorization-code + PKCE against any OpenID Connect issuer (Google, Microsoft, Keycloak, …):

  • ID tokens verified with jose; sessions minted by mod-identity, same as magic links.
  • Several providers side by side — each gets its own routes, its own login button, its own state cookie (concurrent flows don't collide).
  • Account linking is by verified email only (configurable), so an IdP can't take over an existing account with an unverified claim.
  • Configured in code via a small app-local wrapper mod (mods/oidc.mjs) — your providers are versioned with your app; only the client secret lives as a vault/env reference.
  • The login page renders every registered method, and every OIDC failure surfaces as a human-readable message.

✉️ Transactional email, in the box

@pattern-js/mod-email is the email contract; drivers plug into it:

  • Accounts (provider + from + secret refs) managed under System → Email, with a real-send Test button. Driver field lists auto-generate the account form.
  • email.send — write the body once in Markdown and it renders to inline-styled HTML plus a plain-text alternative (a paragraph that is exactly one link becomes a button). Attachments from blobs, in-memory media, or literal files.
  • email.deliver-token — the packaged delivery workflow: create the default account and identity's sign-in links send themselves. Console fallback until then and on any failure — you are never locked out of your own app.
  • Two drivers ship today: Resend (plain fetch) and SMTP (nodemailer, pooled digest-keyed transports). Writing a third is a small package.

🧰 create-pattern — more choices, zero staleness

  • Sign-in methods multiselect: magic link, OIDC, or both (--oidc, --magic-link / --no-magic-link). OIDC scaffolds the wrapper mod + .env hints.
  • Sign-in link delivery choice: console, Resend, or SMTP (--email).
  • New studio-ai modpack — the visual studio + the full AI op catalog, no agent loop — and a --providers picker for the AI packs.
  • --help, validated flag values, and notes instead of silence when a flag doesn't apply to your selection.
  • Version-proof scaffolds: every generated project derives its @pattern-js/* ranges from the CLI's own version, so a fresh app always resolves the mods published alongside the create-pattern that made it. Templates can never go stale across a minor again.

📚 Docs, admin & site

  • Four new chapters (OIDC login, Email, Resend, SMTP), identity docs covering both login methods and packaged delivery, and getting-started documenting every scaffold dimension.
  • A focused catalog: plumbing routes can mark themselves internal — chat's CRUD rows now hide behind the "show internal" toggle, so the flagship pipelines stand out. The approval pipeline and MCP server gained descriptions and hand-laid layouts.
  • Honest numbers on the README and the site: 175 base ops (every single one with "when to use" prose) — over 300 with the first-party mods.

⚠️ Breaking changes

  • @pattern-js/mod-agents-openai is retired. Replace it with @pattern-js/mod-agents + @pattern-js/mod-ai: the agent ops keep their shape, and models now come from an ai.model node or a configured alias — on any provider, not just OpenAI.
  • 0.2.x scaffolds pin ^0.2.0, which semver-excludes 0.3.0. Bump your app's @pattern-js/* ranges to ^0.3.0 when upgrading (new scaffolds handle this automatically, forever).

🚀 Get started

npm create pattern@latest my-app
# pick a modpack — try `agent-chat` for the full agent + voice chat experience,
# or `studio-ai` for the visual studio + AI ops

Upgrading an existing app: set every @pattern-js/* dependency to ^0.3.0, then npm install.

The full story, per area, is in the CHANGELOG.


By the numbers: 17 published packages (5 new) · 175 base ops, 300+ with first-party mods, 100% documented · 7 scaffold templates · 456 tests · one canvas.

Pattern v0.2.2

Choose a tag to compare

@benoit-at-makkr benoit-at-makkr released this 24 Jun 00:09
b9393c1

A pipeline and polish release. No functional changes to the published packages.

Changed

  • The marketing site now deploys to Cloudflare Pages from CI: main → staging,
    a release tag → production. This is the first tag to ship the production site
    alongside the npm packages.
  • A more playful easter egg on the site, for anyone who remembers a certain
    arcade button sequence.

Install

```
npm create pattern@latest
```

Pattern v0.2.1

Choose a tag to compare

@benoit-at-makkr benoit-at-makkr released this 23 Jun 18:04
f1cc267

A small maintenance release on top of the 0.2.0 public launch.

Fixes

  • Docs handbook rooted at its mount. Handbook pages now resolve at the
    intuitive /docs/getting-started instead of the doubled /docs/docs/....
    Other mods' chapters keep their slug prefix.
  • LICENSE copyright corrected to Makkr Studio.

Install

npm create pattern@latest

Existing projects: bump @pattern-js/* (and create-pattern) to ^0.2.1.
Full notes: see CHANGELOG.md.