The community bot still flagged two sentence-case violations after
0.1.38. Both sit in the manifest.json description: the plural acronym
"CLIs" and the multi-word product name "Claude Code" — neither is in
the linter's known-acronym / proper-noun lists, so they get flagged
mid-sentence.
Reworded the description to "Run AI coding tools like Claude or Codex
from a right sidebar terminal panel." in both manifest.json (the field
the bot actually scans) and package.json (kept in sync for npm
metadata). Also switched the local ESLint config from `recommended` to
`recommendedWithLocalesEn` so future runs match the bot's severity,
and added explicit ignores for non-source JSON / lockfiles.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Install the official Obsidian ESLint plugin (with eslint v9 and
@typescript-eslint/parser) and add an eslint.config.mjs flat config
that wires the recommended ruleset to TS files only, with a small
override turning off hardcoded-config-path for the tests directory
(those literal `.obsidian` strings are unit-test fixtures, not real
Obsidian configuration usage). Add an `npm run lint` script and call
it from the CI workflow before tests so guideline violations surface
on every push and PR.
Resolved every reported violation:
- UI text sentence case: button labels @Active file/@Active folder ->
@active file/@active folder; "(no runtime configured)" placeholder
capitalised; ribbon tooltip "Open Any AI CLI" -> "Open AI CLI panel";
command-list placeholders, descriptions, and the runtimes-section
empty state reworded to drop ambiguous mid-sentence acronyms (PTY,
CLIs, Node) and quoted button names.
- commands/no-plugin-name-in-command-name: command palette name
"Open Any AI CLI" -> "Open panel" (Obsidian shows the plugin name
next to the command, repeating it is redundant).
- prefer-active-doc on globalThis: replace the inline crypto fallback
in runtime-utils.ts with `import { randomUUID } from "node:crypto"`.
- no-unsupported-api on Workspace.revealLeaf: bump manifest.json
minAppVersion to 1.7.2 (the version that introduced revealLeaf) and
await the call. versions.json maps 0.1.38 -> 1.7.2 while older
entries stay at 1.5.0 so existing downloads keep resolving.
Lint, build, tsc and the 27 vitest cases are all clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Audit-driven fixes from the bot's automated review:
- Replace every require() in main.ts with top-level ES imports
(child_process.spawn, fs, os, path) so the
@typescript-eslint/no-require-imports rule passes.
- Drop unnecessary `async` on onOpen, onClose, onunload, and
startClaudeProcess: none of them used `await`, and onunload is
declared `void` on the Plugin base class so a Promise return was
flagged as a type mismatch. onOpen and onClose now return
Promise.resolve() to keep matching the ItemView interface.
- Replace the async ribbon-icon and command callbacks with sync
callbacks that explicitly `void` the activateView promise — fixes
the "Promise returned in function argument where a void return was
expected" warning without losing fire-and-forget semantics.
- Rename UI labels to sentence case (the docs guideline only allows
capitals on the first word and on acronyms / proper nouns):
- View display text: "CLI AI Assistant" -> "Any AI CLI".
- Ribbon tooltip and command name: "Open CLI AI Assistant"
-> "Open Any AI CLI".
- Auto-start hint message: "Click Start" -> "Click start".
- Drop the redundant plugin prefix on the command id ("open-claude-
code-panel" -> "open-panel") since Obsidian auto-prefixes command
ids with the plugin id.
- Tighten activateView to bail out cleanly when getRightLeaf(false)
returns null, removing the only remaining strict-mode TS error.
Validated with `npm run build`, `npx tsc --noEmit` (clean) and the
27 vitest cases.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The Obsidian submission bot rejected obsidian-any-ai-cli because the
guideline asks plugins not to include "obsidian" in their id (the id
becomes the plugin folder name; brevity helps sorting). Verified
any-ai-cli is free in the public community-plugins.json, then renamed
the id everywhere it surfaces:
- manifest.json (id) and bumped to 0.1.36
- versions.json (added 0.1.36 entry)
- package.json (npm name) and package-lock.json (re-synced)
- .github/workflows/release.yml (PLUGIN_ID env var → release zip name)
- README.md install paths and zip filename references
Existing personal installs must rename their plugin folder to
.obsidian/plugins/any-ai-cli before this version.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The plugin was rebranded to "Any AI CLI" earlier in this branch, but
the manifest id remained obsidian-any-ai-code from the original name.
Aligning the id ahead of the community-store submission so the
community-plugins.json entry, the manifest id, the plugin folder name
and the release zip filename all match.
Updated:
- manifest.json id and version
- versions.json (added 0.1.35)
- package.json name and version
- package-lock.json (re-synced)
- .github/workflows/release.yml PLUGIN_ID env var
- README.md install paths and release-zip filename references
GitHub repo URLs (blamouche/obsidian-any-ai-code) are intentionally
unchanged — the repo itself is not being renamed at this time.
Existing local installs must rename their plugin folder from
.obsidian/plugins/obsidian-any-ai-code to .obsidian/plugins/obsidian-any-ai-cli
to keep the plugin discoverable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Aligns manifest.json, versions.json, package.json, and package-lock.json
with the Prompt Hub version so the 0.1.34 release tag ships a manifest
matching the tag — covers the Obsidian community-store compliance pass
(LICENSE, settings setHeading, no leaf detach on unload, draft release).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Aligns manifest.json, versions.json, package.json, and package-lock.json
with the Prompt Hub version so the upcoming 0.1.33 release tag ships a
manifest matching the tag (covers the customizable runtime list, the
two-row sidebar reorg, the polished button styling with green Start /
red Stop / blue file-context highlights, and the new @Active folder
button).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Aligns manifest.json, versions.json, package.json, and package-lock.json
with the Prompt Hub version so the 0.1.26 release zip ships a manifest
matching the tag name (and uses the new zero-command install flow in
the release notes template).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The plugin advertises a fallback chain (PTY → Python bridge → direct
pipe → script), but a missing node-pty native module killed the proxy
at top-level require before any fallback could run. Wrap require in
try/catch and surface a clear unavailable error from spawnWithFallback,
so users who haven't run npm install --omit=dev (or whose node-pty
build failed) still get a working terminal via the Python bridge.
Bumps plugin manifest + package metadata to 0.1.25.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Aligns manifest.json, versions.json, package.json, and package-lock.json
with the Prompt Hub version so the upcoming 0.1.24 release tag matches
the manifest published in the release zip and on Obsidian's update path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>