Skip to content

v0.7.0

Choose a tag to compare

@alterago alterago released this 29 May 02:55

Release v0.7.0

AI Craftery Bord — project workspace, releases overhaul, workspace-files
skill, file tree redesign, PDF export.

Project workspace (CRAFT-24)

Projects now have a full working environment:

  • Working folder — code directory, cwd for the agent in project chats.
  • Description folder — separate folder for AI context (description,
    rules, identity), default <Working folder>/description/, auto-created.
  • project.md — auto-created from template on first access, added to
    mandatory refs automatically.
  • Instructions — list of mandatory / recommendation file refs. Mandatory
    content is inlined into every task chat's system prompt (transitive:
    chat → task → project). Recommendation refs are passed as paths only.
  • Workspace folders — named working folders (deploy, specs, dev-infra)
    passed as path references in the system prompt.
  • Tasks panel groupingproject → phase → task with fold/unfold at
    both levels, persisted to localStorage.
  • Project chat — dedicated chat session bound to the project via
    projects.project_chat_sessions. cwd = description folder, auto-attaches
    instructions + recommendations + folders.
  • i18n — Projects tab fully translated across all 10 locales.

Releases overhaul (CRAFT-42)

Releases panel and release-chat reworked for multi-project setups:

  • Group-by-project rendering in the Releases panel (headings tinted with
    project.color, collapsed state persisted).
  • Inline pencil for the planned version, pre-filled from
    GET /api/releases/project/{id}/suggested-version (bumps the last shipped
    patch, strips -suffix).
  • Unified POST /api/releases/{bucket}/rename covering both Current
    planned-version edits and Upcoming bucket rename (folder + DB atomic).
    PUT /version retained as a deprecated alias.
  • Release chat — dedicated chat session per release, cwd = bucket folder,
    prompt includes project context + task list + overlay of the project's
    release.md.
  • GET /api/releases/project/{id}/release-md with filepath.Clean
    prefix-check, symlink-resolve re-check, 256 KiB size cap.
  • The aicraftery-releases skill rewritten under multi-project semantics
    (every call carries projectId).
  • 6 new i18n keys across 10 locales.

Workspace files skill (CRAFT-51)

Any agent in any chat can now see which files the user has open, which one
is in front, what's selected in the editor, and can refresh an open tab
after writing:

  • GET /api/workspace/open-files — list of tabs (path, kind,
    lastFocusedAt, isCurrentlyActive), optional ?kind=editor,viewer.
  • GET /api/workspace/selection — current Monaco selection (path, text
    capped at 8 KiB, 1-indexed range) or null.
  • POST /api/workspace/refresh-tab {path} — refreshes an open editor or
    viewer from disk without manual reload. Path must appear in the current
    snapshot, otherwise 404.
  • aicraftery-workspace-files skill — auto-installs as the 6th always-on
    bundled skill; RU + EN triggers for demonstrative phrases
    («этот файл», «current file», «selected text», «here»).
  • "Current file" means the file rendered in front of the workspace stack,
    not the one holding keyboard focus — so the agent still knows which file
    Pasha is looking at while typing in chat or terminal.

File tree redesign (CRAFT-53)

The file list and directory tree have been reworked end-to-end:

  • Single render path — the Files panel and card mini-trees now share
    one component (file-tree-row.js + file-tree-list.js) with injection
    seams (menuItems / decorateRow / buildCreateRow).
  • Scope switcher in the header: All tree / Current / Recent /
    Favorites
    . Current = tree rooted at the active chat's cwd (with a
    fallback to All tree). Recent / Favorites are flat lists. The selected
    scope lives in the GoldenLayout component state.
  • Favorites — pin / unpin from the context menu.
  • Recent — currently open editors plus history, deduplicated, capped
    at 50.
  • Favorites and Recent now live under global localStorage keys
    (bord.filetree.favorites / .recent) instead of per-root keys, which
    fixes pins disappearing when scope flipped between All tree and Current.
  • Locate — "find current file" button (PyCharm-style): expands the
    ancestors of the active file and scrolls it into view.
  • Reload — icon replacing the old text hint.
  • Drag-and-drop import fixed (dragDropEnabled: true in all four
    Tauri configs). The authorized import path
    (workspace_copy_external_paths) is unchanged.
  • files.js decomposed: 2456 → 300 lines (thin orchestrator) + 16 focused
    modules under panels/, all ≤300 LoC.
  • Decisive active-row states (open file vs session cwd), neutral icons
    re-tinted for the light theme.
  • 13 new workspace.file_tree.* keys across 10 locales.

PDF export (CRAFT-54)

PDF export from every viewer panel — markdown / mermaid / csv / image /
code-text / pdf-copy:

  • PDF button in every panel header + "Export to PDF…" entry in the file
    tree context menu (one file at a time).
  • Native Save-As dialog via rfd::FileDialog, pre-fills <basename>.pdf
    next to the source. Atomic write through tempfile + persist.
  • HTML panels (md / code / csv) — sanitized HTML clone → pdf-export-light
    CSS → html2canvas → A4 multi-page slice.
  • Mermaid (mmd) — re-rendered via loadEngine() in a light theme →
    svg2pdf.js fit-to-A4 (vector text).
  • Image viewer — offscreen canvas → jsPDF.addImage fit-to-A4, orientation
    picked automatically.
  • PDF reader — Rust fs::read + atomic copy.
  • PDF theme is always light, regardless of the active Bord theme.
  • After save: the result opens in a pdf-reader panel + a standard
    notification fires.
  • Cross-platform parity by design — no cfg(target_os) branches.
  • Bundle weight: jspdf 365 KB + html2canvas 199 KB + svg2pdf 87 KB
    = 651 KB (≤ 800 KB NFR).
  • 5 new panels.pdf_export.* keys across 10 locales.

Known limitations

  • HTML panels (md / code / csv) export as rasterized text (not selectable).
    Mermaid via svg2pdf produces vector text.
  • Non-Latin glyphs in SVG through svg2pdf — not verified for Cyrillic in
    large diagrams.
  • dragDropEnabled: true (Tauri) may break HTML5 drag of task cards on
    Windows — tracked as a follow-up.
  • Workspace-files skill assumes a single Bord window; all chats in that
    window share one snapshot.
  • File tree fingerprint-guard on full rerender on
    bord:workspace-sessions-changed is a deferred optimization, not
    shipped in this release.