Commit Graph

21 Commits

Author SHA1 Message Date
fb5d11dd6a feat: unified, editable frontmatter editor in publish modal
All checks were successful
CI / test (push) Successful in 16s
- Preset fields (from settings) are now seeded as editable/deletable rows in
  the modal alongside custom ones, using one consistent row style.
- The note's own merged frontmatter is shown as read-only (disabled) rows at
  the top of the list (only when 'Merge document frontmatter' is on, and only
  for keys not overridden by an editable row).
- Drops the separate read-only 'resolved' text preview; the rows are the
  WYSIWYG result.

Adds pure, unit-tested composeFrontmatter()/docFrontmatterToPairs() and removes
the superseded resolveFrontmatter(). Editable rows are authoritative: on a key
collision they override the merged document field. Presets are deep-copied so
editing rows never mutates saved settings.

Co-Authored-By: Claude
2026-06-19 03:21:04 +00:00
github-actions[bot]
f2a4040ae8 chore: release 0.1.1 0.1.1 2026-06-19 03:04:07 +00:00
61910acac3 fix: remove non-portable askpass bridge; rely on native git credentials
All checks were successful
CI / test (push) Successful in 17s
The askpass bridge bound a Unix-domain socket to a vault filesystem path
(net.createServer().listen(...sock)). That is invalid on Windows, where
Node's listen() expects a named pipe, so publish aborted with
'listen EACCES: permission denied ...askpass.sock' before git ever ran —
even when the user's git could authenticate. The bridge was non-portable in
general (Windows named pipes; the helper script needs a node binary on PATH).

Remove the bridge and let the user's system git handle credentials via its
native helpers (Git Credential Manager / osxkeychain / libsecret) for https
and ssh-agent for ssh — the 'store nothing' model we already chose.
GIT_TERMINAL_PROMPT=0 stays so git fails fast instead of hanging, and
publish errors now include a credential/identity hint. Deletes askpass.ts
and its test (3 tests); suite 32/32, tsc clean, build OK.

Co-Authored-By: Claude
2026-06-19 03:02:28 +00:00
f7c2b863f3 ci: add push/PR workflow (typecheck, unit tests, build)
All checks were successful
CI / test (push) Successful in 17s
Co-Authored-By: Claude
0.1.0
2026-06-19 02:41:35 +00:00
b051193186 fix: make git integration test self-contained for CI
The 'fetch+reset path' test called commitAndPush without author args and
relied on an ambient git identity. A bare CI runner has none, so 'git commit'
failed with 'Author identity unknown'. Pass an explicit author like the
sibling tests so the suite is deterministic regardless of runner git config.

Co-Authored-By: Claude
2026-06-19 02:40:52 +00:00
c6f28474e4 fix: escape rewrite replacement, diagnostic no-op commit, doc + askpass hardening
- Use function replacer in rewriteBody to prevent $& / $$ / $` / $' pattern
  corruption when alt text or siteUrl contains dollar-sign sequences
- Detect empty staged index after `git add -A` and throw a clear
  "No changes to publish" error instead of a cryptic git failure
- Correct README flat-slug description: single image → <slug>.<ext>,
  multiple → <slug>-1.<ext>, <slug>-2.<ext> (original filename discarded)
- Harden askpass dir resolution: show a Notice and return early if
  getFullPath is absent (desktop-only guard), rather than passing a bad path

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 02:32:02 +00:00
ee56f8c9a2 test: e2e smoke; docs: README; ci: release workflow
Co-Authored-By: Claude
2026-06-19 02:22:57 +00:00
53c2550097 feat: publish modal, settings tab, plugin entry
Co-Authored-By: Claude
2026-06-19 02:16:48 +00:00
62ae955044 feat: publish orchestrator wiring transforms to GitClient
Co-Authored-By: Claude
2026-06-19 02:12:58 +00:00
d0aafa1aa0 fix: askpass handles onPrompt rejection, listen errors, and cleanup
- Wrap onPrompt in try/catch in connection handler; on rejection send
  empty reply ("\n") so the git/ssh helper exits promptly instead of
  hanging indefinitely.
- Reject the start() promise on server 'error' events (e.g. EADDRINUSE)
  so callers get a fast failure rather than an eternal hang.
- stop() now unlinks the socket file and helper script to prevent stale-
  socket errors on subsequent start() calls with the same dir.
- start() best-effort unlinks a pre-existing stale socket before listen().
- Tests: added onPrompt-rejection (with 3s timeout guard) and restart
  (stop then start on same dir) test cases.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 02:10:44 +00:00
9987e21739 feat: askpass bridge from git prompts to a callback
Co-Authored-By: Claude
2026-06-19 02:05:25 +00:00
32263df062 feat: GitClient shell-out with temp clone + integration test
Co-Authored-By: Claude
2026-06-19 02:00:21 +00:00
d41cbc467e feat: settings type and defaults
Co-Authored-By: Claude
2026-06-19 01:58:14 +00:00
bf7f993026 feat: assemble final post text
Co-Authored-By: Claude
2026-06-19 01:56:20 +00:00
55faa84f29 feat: image detection, naming strategies, body rewrite
Co-Authored-By: Claude
2026-06-19 01:53:40 +00:00
0816e1d5db feat: slug and date derivation
Co-Authored-By: Claude
2026-06-19 01:50:58 +00:00
c24a7e2a11 fix: quote YAML-special and numeric frontmatter values
formatValue now detects YAML-special tokens (true/false/null/yes/no/on/off/y/n/~)
and numeric-looking strings, quoting them via JSON.stringify so YAML parsers
cannot misread them as booleans or numbers. ISO date strings (YYYY-MM-DD) are
exempt and remain bare for readability. Adds four covering tests.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-19 01:49:33 +00:00
f2edd9b0ab feat: frontmatter parse/resolve/serialize
Co-Authored-By: Claude
2026-06-19 01:44:24 +00:00
b321633421 chore: scaffold obsidian-jekyll-publish
Co-Authored-By: Claude
2026-06-19 01:41:57 +00:00
530a897f18 docs: implementation plan for obsidian-jekyll-publish
Co-Authored-By: Claude
2026-06-19 01:37:29 +00:00
2f6d83860f docs: design spec for obsidian-jekyll-publish
Co-Authored-By: Claude
2026-06-19 01:28:11 +00:00