Commit graph

164 commits

Author SHA1 Message Date
Mike Thicke
cc387825f7 Automate release process 2026-05-14 16:50:06 -04:00
Mike Thicke
3aa38db57b Update available models to current option set 2026-05-14 16:27:28 -04:00
Mike Thicke
86960b51d7 Remove worklog 2026-05-14 14:18:33 -04:00
Mike Thicke
0f6c1e582f Release fixes 2026-05-12 20:35:49 -04:00
Mike Thicke
34f15e16bd Add explicit codemirror dependencies to address lint issues 2026-05-12 19:27:15 -04:00
Mike Thicke
0c2865ac6e
Merge pull request #16 from Epistemic-Technology/fixes-may-2026
Fix lint issues from community plugin review
2026-05-12 16:45:01 -04:00
Mike Thicke
ebccc7cf5e Fix lint issues from community plugin review
Address the source-code issues flagged by the Obsidian community plugin
review tool (https://community.obsidian.md/account/plugins/co-intelligence):

- Add `App.commands` module augmentation so `executeCommandById` is typed
  rather than an unsafe-any call.
- Cast `processFrontMatter` callbacks to `CoiNoteFrontmatter` (with
  `linked-tags` added to the type) instead of indexing `any` frontmatter.
- Derive provider name in model-service from the registered `Model.provider`
  rather than introspecting the SDK's `LanguageModel.provider`, and type the
  `generateText` params via `Parameters<typeof generateText>[0]`.
- Type the regex `replace` callback args in ChatInterface and notes.ts.
- Drop the dead `triggerChange` prop from UserInput and its call site.
- Rename unused params with `_` prefix and configure
  `@typescript-eslint/no-unused-vars` with `argsIgnorePattern: "^_"`.
- Replace `document.createElementNS`/`createElement` and `el.createEl("div")`
  with Obsidian's `createSvg`, `createDiv`, `createSpan` helpers in settings
  and the suggestion modals.
- Narrow `state.state?.file` from `any` before passing to a string parameter,
  and capture `this.app` outside the monkey-patched closure.
2026-05-12 16:10:25 -04:00
Mike Thicke
594ca29ec2 worklog 2026-05-12 15:10:42 -04:00
Mike Thicke
baca21a8d1
Merge pull request #15 from Epistemic-Technology/review-fixes-april-2026
Address plugin review feedback
2026-04-30 14:56:09 -04:00
Mike Thicke
7d9190a9fb Use Vault.process in serializeCoiNote
Replaces the read-then-modify pair in serializeCoiNote with a single
Vault.process call so the read and write happen atomically and won't
clobber concurrent edits to the note. The chat-marker guard now runs
inside the process callback, with an outer flag gating the downstream
frontmatter updates. Addresses the plugin reviewer feedback on PR
obsidianmd/obsidian-releases#6690.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 01:54:13 +00:00
Mike Thicke
3b5449c199 Store API keys in SecretStorage instead of plugin data
API keys for OpenAI, Anthropic, Google, and Perplexity now live in
app.secretStorage rather than the unencrypted plugin data file.
loadSettings runs a one-shot migration that copies any pre-existing
*ApiKey values into SecretStorage and strips them from saved data, so
upgrading users keep their keys without leaving an unencrypted copy
behind. Bumps minAppVersion to 1.11.4 (required by SecretStorage) and
the obsidian devDep to match. Addresses the plugin reviewer feedback
on PR obsidianmd/obsidian-releases#6690.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:56:38 +00:00
Mike Thicke
2e0036fe6a Use AbstractInputSuggest for folder/file path settings
Replaces the plain text input on "Default folder" and "System prompt
folder" with a folder autocomplete, and converts "Default system
prompt" from a fixed dropdown to a text input with file autocomplete
scoped to the configured prompt folder. Addresses the plugin reviewer
feedback on PR obsidianmd/obsidian-releases#6690.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 20:40:49 +00:00
Mike Thicke
aba1ad821c Fix lint issues from plugin review bot
Remove disallowed eslint-disable for sentence-case rule, remove unused
ModelId import, and remove unused doingReasoning variable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 21:55:18 -05:00
Mike Thicke
fc666d35af Version 1.0.10
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 09:15:28 -05:00
Mike Thicke
25f0f02c90
Merge pull request #14 from Epistemic-Technology/coding-style-fixes
Address Obsidian plugin review feedback and fix coding style issues
2026-02-15 08:40:33 -05:00
Mike Thicke
5666bc51c4 Merge main into coding-style-fixes, resolving conflicts
Resolved conflicts in favor of main's nullish coalescing (??) and
AI SDK v6 reasoning-start/reasoning-end streaming approach.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 08:36:52 -05:00
Mike Thicke
375865baa2 Remove Claude Code Review workflow
The automated PR review workflow was failing due to insufficient API credits on the associated Anthropic account.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 20:33:52 -05:00
Mike Thicke
a0ad2b25b7 Ingnore test vault 2026-02-14 18:02:09 -05:00
Mike Thicke
309d15e0a7 Fix streaming for AI SDK v6 fullStream API changes
The fullStream TextStreamPart type uses `text` property and
`reasoning-delta` chunk type, not the old `textDelta` property and
`reasoning` type. Also guard against undefined message content in
BotMessage rendering and note serialization.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 18:00:01 -05:00
Mike Thicke
65224029ea Fix lint issues from Obsidian plugin review bot
Address all Required and Optional lint violations flagged by the
eslint-plugin-obsidianmd automated review:

- Fix `any` types (ChatView.dispose, monkey patch typing)
- Remove unnecessary async/await from non-async functions
- Add `void` operator for intentionally unhandled promises
- Fix promise-returning callbacks where void expected
- Use String() in template literals for error objects
- Fix sentence case in UI text (Notice, setName, setDesc, setTitle)
- Replace console.log with console.error
- Remove unused imports and variables
- Remove unnecessary type assertions and escape characters
- Simplify union type override in onPaneMenu
- Add eslint-plugin-obsidianmd and ESLint config for local validation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 16:15:21 -05:00
Mike Thicke
1b3fef2290
Merge pull request #11 from Epistemic-Technology/settings-ui
Fix settings panel focus-stealing on API key input
2026-02-13 11:19:51 -05:00
Mike Thicke
6fb8bb5677
Merge pull request #7 from Epistemic-Technology/feedback-issues
Address Obsidian plugin review feedback
2026-02-13 11:19:34 -05:00
Mike Thicke
6efdc72ce7 Fix settings panel focus-stealing on API key input
The root cause was ChatView.refresh() — triggered by the
co-intelligence:settings-changed event — tearing down and rebuilding
the entire Solid.js chat app on every settings save. This stole focus
from the active input field.

Changes:
- Remove the settings-changed listener from ChatView that called
  refresh(). The Solid.js components already read from the shared
  plugin object and don't need re-mounting on settings changes.
  SystemPromptSelector has its own listener for prompt reloading.
- Replace the debounce/pendingChanges system with direct saves
  following the standard Obsidian pattern (save in onChange).
- Update model dropdowns in-place on API key blur instead of
  rebuilding the entire settings DOM.
- Remove displayWithFocusPreservation() hack.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 17:11:20 -05:00
Mike Thicke
518d8d25cb Remove FolderSuggest typeahead from folder settings
This feature was not part of the Obsidian plugin review feedback and
was added unnecessarily.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 16:31:02 -05:00
Mike Thicke
7b37b9feee
Merge pull request #10 from Epistemic-Technology/fix-ai-sdk-types
Fix streaming broken by AI SDK v6 chunk type changes
2026-02-11 11:17:46 -05:00
Mike Thicke
6891a13b03 Fix streaming broken by AI SDK v6 chunk type changes
AI SDK v6 renamed fullStream chunk properties: `textDelta` → `text`,
and split `reasoning` into `reasoning-start`/`reasoning-delta`/`reasoning-end`.
The old property names returned undefined, causing TypeError crashes in
message rendering and serialization.

Also adds nullish coalescing fallbacks on unsafe `content as string` casts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 11:12:34 -05:00
Mike Thicke
876bdf38c4
Merge pull request #9 from Epistemic-Technology/dependabot-fixes
Fix Dependabot security vulnerabilities
2026-02-11 10:51:46 -05:00
Mike Thicke
8fc80efcb9 Fix Dependabot security vulnerabilities
Update AI SDK packages (ai, @ai-sdk/anthropic, google, openai, perplexity)
and add pnpm overrides for seroval (>=1.4.1) and jsondiffpatch (>=0.7.2) to
address 5 high, 3 medium, and 3 low severity vulnerabilities.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 09:20:35 -05:00
Mike Thicke
0a56e6af9b Gitignore test vault chat files and update dev scripts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 12:19:44 -05:00
Mike Thicke
e3377004a2 Add test vault and development docs
Add a test vault with sample content and a script to build and open it
in Obsidian for manual plugin testing. Add development section to README.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 13:20:35 -05:00
Mike Thicke
4da7fee481 Address Obsidian plugin review feedback
Fix issues raised in obsidianmd/obsidian-releases#6690:
- Update copyright year to 2025-2026
- Namespace generic CSS classes (sr-only, model-selector, etc.) with coi- prefix
- Add FolderSuggest (AbstractInputSuggest) for folder setting inputs
- Fix MarkdownRenderChild memory leak by tracking and unloading instances

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 13:02:32 -05:00
Mike Thicke
638d33dc7f
Merge pull request #6 from Epistemic-Technology/testing-improvements
Add test infrastructure and 106 unit tests
2026-02-06 12:43:27 -05:00
Mike Thicke
09f31c05d3 Add test infrastructure and 106 unit tests
Create Obsidian API mock (test/mocks/obsidian.ts) and test setup with
String.prototype.contains polyfill. Add tests for all utility functions
and core services: notes serialization/deserialization, URL helpers,
model context, model registry, and model service.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 12:40:46 -05:00
Mike Thicke
07beb4692f
Merge pull request #5 from Epistemic-Technology/dependabot-fixes
Fix dependabot security alerts
2026-02-06 12:07:22 -05:00
Mike Thicke
65a3ae7cf8 Dependabot fixes 2026-02-06 12:01:52 -05:00
Mike Thicke
1cbd9d41a6 Add auto-generated release notes to GitHub releases
Enable --generate-notes on gh release create and add .github/release.yml
config to categorize PRs by label (enhancement, bug). Also update CLAUDE.md
with more detailed architecture and conventions documentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 14:27:37 -05:00
Mike Thicke
488a2eae86 Update manifest to match description in PR 2025-10-23 09:49:24 -04:00
Mike Thicke
5a6b97eeeb Version 1.0.9 2025-08-31 11:18:49 -04:00
Mike Thicke
c7fa2e956d Remove tests 2025-08-31 11:09:57 -04:00
Mike Thicke
117cbba7b1 Version bump to 1.0.8 2025-08-30 08:15:40 -04:00
Mike Thicke
d35d74b07a Working obsidian native menu, no icons 2025-08-29 16:03:23 -04:00
Mike Thicke
2f121ad836 Stripped down menu 2025-08-29 15:35:26 -04:00
Mike Thicke
b7c38856d6 Version bump to 1.0.7 2025-08-26 11:44:12 -04:00
Mike Thicke
ec7415aeb5
Merge pull request #4 from Epistemic-Technology/review-fixes
Review fixes
2025-08-20 15:40:50 -04:00
Mike Thicke
7d10d08959 Use MarkDownRenderChild instead of plugin as component passed to MarkdownRenderer 2025-08-08 09:59:14 -04:00
Mike Thicke
31e42b6f06 Unit testing setup complete 2025-08-08 09:34:46 -04:00
Mike Thicke
d5879c035a Unit testing setup complete 2025-08-08 09:19:41 -04:00
Mike Thicke
73022a71dd Testing phase 3 2025-08-07 15:02:42 -04:00
Mike Thicke
eedc0c8e80 Testing phase 2 2025-08-07 14:52:13 -04:00
Mike Thicke
62f81c20ba Initial testing infrastructure and tests 2025-08-07 14:14:09 -04:00