mirror of
https://github.com/lossless-group/perplexed-plugin.git
synced 2026-07-22 06:49:50 +00:00
meet(requirements): misc changes related to meeting Obsidian plugin community requirements
Six docs-derived blockers fixed in one pass; punch-list plan filed under context-v/plans/ for traceability. manifest.json - description rewritten: action-verb start (was "A plugin for Obsidian…", which the docs call out as an anti-pattern), all four providers named (Perplexity, Anthropic Claude, Perplexica, LM Studio), 144 chars, ends with period. - fundingUrl removed — was pointed at the company website, not a donation service. Docs: "If you don't accept donations, remove fundingUrl from your manifest." main.ts - Three command IDs un-prefixed: 'perplexed-debug-commands' → 'debug-commands', 'perplexed-reset-prompts' → 'reset-prompts', 'perplexed-reinitialize-services' → 'reinitialize-services'. Obsidian auto-prefixes commands with the plugin id, so the doubled form would have registered as 'perplexed.perplexed-…'. - Deleted the top-level <h2>Perplexed Plugin Settings</h2> from the settings tab. Docs: "Avoid adding a top-level heading in the settings tab, such as 'General', 'Settings', or the name of your plugin." README.md - Placeholder URLs replaced with the real lossless-group/perplexed-plugin repo (clone command, Issues link x2, Discussions link). - Stale "Version: 0.0.0.1" footer line deleted (manifest is the source of truth). - New "## Network use and accounts" section: per-provider table with endpoint, account requirement, and API-key requirement, plus an explicit no-telemetry / no-self-update statement. Required by Developer Policies (network-use disclosure + paid-account disclosure). Key Features bullet updated to mention Claude. context-v/plans/2026-05-02_Submission-Blockers-Punch-List.md - New plan documenting the audit findings: six blockers fixed here, four will-be-flagged items (7-10: settings <h3>/<h4> → setHeading, sentence case, console.log hygiene, vault.adapter.write in logger.ts) deferred to a separate pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b3bc7e2f5c
commit
14962edde1
4 changed files with 230 additions and 13 deletions
29
README.md
29
README.md
|
|
@ -15,12 +15,30 @@ ## 🎯 Key Features
|
|||
[2]: 2025, Jun 16. [Governance, risk and compliance (GRC): Definitions and resources](https://www.diligent.com/resources/guides/grc). Published: 2025-05-27 | Updated: 2025-06-16
|
||||
> ```
|
||||
|
||||
- **Multiple AI Providers**: Support for Perplexity (commercial) and Perplexica (self-hosted)
|
||||
- **Multiple AI Providers**: Support for Perplexity, Anthropic Claude, Perplexica (self-hosted), and LM Studio (local)
|
||||
- **Streaming Responses**: Real-time streaming of AI responses for better UX
|
||||
- **Flexible Configuration**: Customizable endpoints, models, and parameters
|
||||
- **Deep Research Mode**: Comprehensive research across hundreds of sources
|
||||
- **Local LLM Support**: Integration with LM Studio for local AI processing
|
||||
|
||||
## Network use and accounts
|
||||
|
||||
Perplexed contacts these remote services on your behalf when you invoke
|
||||
their respective commands. Nothing is sent automatically — only the
|
||||
prompts you submit through a command modal, and any text you have
|
||||
explicitly selected when invoking selection-based commands.
|
||||
|
||||
| Provider | Endpoint | Account | API key |
|
||||
|---|---|---|---|
|
||||
| Perplexity | `https://api.perplexity.ai/chat/completions` | Required | Required (paid) |
|
||||
| Anthropic Claude | `https://api.anthropic.com/v1/messages` | Required | Required (paid) |
|
||||
| Perplexica | `http://localhost:3030/api/search` (default; user-configurable) | Not required | Not required (self-hosted) |
|
||||
| LM Studio | `http://localhost:1234/v1/chat/completions` (default; user-configurable) | Not required | Not required (runs locally) |
|
||||
|
||||
The plugin does not collect telemetry, ship vault content anywhere else,
|
||||
or update itself — Obsidian handles plugin updates through the community
|
||||
plugin directory.
|
||||
|
||||
## 📋 Table of Contents
|
||||
|
||||
- [User Onboarding](#user-onboarding)
|
||||
|
|
@ -315,7 +333,7 @@ ### Installation
|
|||
|
||||
1. **Clone the Repository**:
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
git clone https://github.com/lossless-group/perplexed-plugin.git
|
||||
cd perplexed-plugin
|
||||
```
|
||||
|
||||
|
|
@ -604,8 +622,8 @@ ### Debug Mode
|
|||
|
||||
### Getting Help
|
||||
|
||||
- Check the [Issues](https://github.com/your-repo/issues) page
|
||||
- Review the [Discussions](https://github.com/your-repo/discussions) forum
|
||||
- Check the [Issues](https://github.com/lossless-group/perplexed-plugin/issues) page
|
||||
- Review the [Discussions](https://github.com/lossless-group/perplexed-plugin/discussions) forum
|
||||
- Contact the development team
|
||||
|
||||
---
|
||||
|
|
@ -619,6 +637,5 @@ ## About The Lossless Group
|
|||
---
|
||||
|
||||
**License**: MIT
|
||||
**Version**: 0.0.0.1
|
||||
**Author**: The Lossless Group
|
||||
**Support**: [GitHub Issues](https://github.com/your-repo/issues)
|
||||
**Support**: [GitHub Issues](https://github.com/lossless-group/perplexed-plugin/issues)
|
||||
|
|
|
|||
203
context-v/plans/2026-05-02_Submission-Blockers-Punch-List.md
Normal file
203
context-v/plans/2026-05-02_Submission-Blockers-Punch-List.md
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
---
|
||||
title: "Plan — Submission Blockers Punch List (from docs.obsidian.md re-read)"
|
||||
status: In-Progress
|
||||
created: 2026-05-02
|
||||
applies_to: perplexed Obsidian plugin
|
||||
authors:
|
||||
- Michael Staton
|
||||
augmented_with: Claude Code (Opus 4.7, 1M context)
|
||||
related_plan: ./20206-05-02_Assuring-Obsidian-Community-Plugin-Requirements.md
|
||||
source_audit: |
|
||||
Audit triggered by re-reading the canonical submission docs:
|
||||
- https://docs.obsidian.md/Plugins/Releasing/Submission+requirements+for+plugins
|
||||
- https://docs.obsidian.md/Plugins/Releasing/Submit+your+plugin
|
||||
- https://docs.obsidian.md/Plugins/Releasing/Plugin+guidelines
|
||||
- https://docs.obsidian.md/Reference/Manifest
|
||||
Raw markdown sourced from `obsidianmd/obsidian-developer-docs` via `gh api`.
|
||||
---
|
||||
|
||||
# Plan — Submission Blockers Punch List
|
||||
|
||||
## Context
|
||||
|
||||
Companion to `20206-05-02_Assuring-Obsidian-Community-Plugin-Requirements.md`
|
||||
(which covered type-safety + base metadata). This punch list was generated by
|
||||
re-reading the canonical Obsidian docs end-to-end and grepping current
|
||||
Perplexed source against every named requirement. The grep produced six
|
||||
items that will block (or near-certainly block) a community-plugin PR.
|
||||
|
||||
Three classes of issue showed up clean and need no work: HTML injection
|
||||
(`innerHTML`/`outerHTML`/`insertAdjacentHTML`), global app access
|
||||
(`window.app` / bare `app`), and sample-plugin remnants (`MyPlugin`,
|
||||
`SampleSettingTab`).
|
||||
|
||||
Scope of this plan: knock out the six docs-derived blockers (items 1-6 from
|
||||
the audit). Items 7-9 (settings `<h3>` → `setHeading()`, sentence-case
|
||||
headings, console.log hygiene) are will-be-flagged-by-reviewer items but
|
||||
not strict blockers; they're tracked as a separate phase below and held
|
||||
unless the user wants them in this pass.
|
||||
|
||||
## The six blockers
|
||||
|
||||
### 1. Command IDs prefixed with the plugin ID
|
||||
|
||||
**File:** `main.ts`
|
||||
|
||||
Three commands include `perplexed-` in their `id`. Obsidian auto-prefixes
|
||||
every command with the plugin ID, so these will register as
|
||||
`perplexed.perplexed-debug-commands` and friends — a doubled ID pattern
|
||||
the docs explicitly call out.
|
||||
|
||||
| Line | Current | Fix |
|
||||
|---|---|---|
|
||||
| 439 | `id: 'perplexed-debug-commands'` | `id: 'debug-commands'` |
|
||||
| 448 | `id: 'perplexed-reset-prompts'` | `id: 'reset-prompts'` |
|
||||
| 457 | `id: 'perplexed-reinitialize-services'` | `id: 'reinitialize-services'` |
|
||||
|
||||
Three single-token edits.
|
||||
|
||||
### 2. `manifest.json` description: anti-pattern start + missing provider
|
||||
|
||||
**File:** `manifest.json` (line 6)
|
||||
|
||||
Current:
|
||||
```json
|
||||
"description": "A plugin for Obsidian that allows you to generate source-cited content using AI using Perplexity and Perplexica."
|
||||
```
|
||||
|
||||
Two problems:
|
||||
- Starts with "A plugin for Obsidian" — the docs explicitly say *"Avoid
|
||||
starting your description with 'This is a plugin', because it'll be
|
||||
obvious to users in the context of the Community Plugins directory."*
|
||||
- Doesn't mention Anthropic Claude or LM Studio, both of which now ship
|
||||
as first-class providers.
|
||||
|
||||
Replace with an action-verb-led description, ≤250 chars, ends with period,
|
||||
all four providers named:
|
||||
```json
|
||||
"description": "Generate source-cited research content from Perplexity, Anthropic Claude, Perplexica, or local LM Studio — directly into your notes."
|
||||
```
|
||||
(Length: 132 chars.)
|
||||
|
||||
### 3. `fundingUrl` points at company website, not a donation service
|
||||
|
||||
**File:** `manifest.json` (line 9)
|
||||
|
||||
Current: `"fundingUrl": "https://lossless.group"`
|
||||
|
||||
Docs are explicit: *"If you don't accept donations, remove fundingUrl from
|
||||
your manifest."* lossless.group is the company site, not a donation
|
||||
endpoint (Buy Me a Coffee / GitHub Sponsors / Patreon / etc.).
|
||||
|
||||
**Decision needed at execution time** — default to **remove the field**
|
||||
unless the user wants a real donations link. Removing is the conservative
|
||||
choice and matches the doc's stated default. If the user later wants to
|
||||
accept donations, adding `fundingUrl` back is a one-line manifest edit.
|
||||
|
||||
### 4. Settings tab top-level heading
|
||||
|
||||
**File:** `main.ts` (line 1026)
|
||||
|
||||
Current:
|
||||
```ts
|
||||
containerEl.createEl('h2', { text: 'Perplexed Plugin Settings' });
|
||||
```
|
||||
|
||||
Docs: *"Avoid adding a top-level heading in the settings tab, such as
|
||||
'General', 'Settings', or the name of your plugin. If you have more than
|
||||
one section under settings, and one contains general settings, keep them
|
||||
at the top without adding a heading."*
|
||||
|
||||
This violates two rules at once: (a) it's a top-level heading, (b) it has
|
||||
"Settings" in it. **Delete the line entirely.**
|
||||
|
||||
### 5. README placeholders and stale version
|
||||
|
||||
**File:** `README.md`
|
||||
|
||||
| Line | Current | Fix |
|
||||
|---|---|---|
|
||||
| 318 | `git clone <repository-url>` | `git clone https://github.com/lossless-group/perplexed-plugin.git` |
|
||||
| 607 | `[Issues](https://github.com/your-repo/issues)` | `[Issues](https://github.com/lossless-group/perplexed-plugin/issues)` |
|
||||
| 622 | `**Version**: 0.0.0.1` | Either delete (the manifest is the source of truth) or update to `**Version**: 0.1.0`. Recommend **delete** — stale version footers rot. |
|
||||
| 624 | `**Support**: [GitHub Issues](https://github.com/your-repo/issues)` | `**Support**: [GitHub Issues](https://github.com/lossless-group/perplexed-plugin/issues)` |
|
||||
|
||||
### 6. README missing required network / account disclosures
|
||||
|
||||
**File:** `README.md` (insert section)
|
||||
|
||||
Per Developer Policies, two disclosures apply and are *required* in the
|
||||
README:
|
||||
- *"Network use. Clearly explain which remote services are used and why
|
||||
they're needed."*
|
||||
- *"An account is required for full access."* (Perplexity and Anthropic
|
||||
both require paid API keys.)
|
||||
|
||||
Currently the README walks through using each provider but never
|
||||
consolidates the network/account picture in one disclosed place, and
|
||||
**never mentions Anthropic Claude at all** — which got added after the
|
||||
README was last updated.
|
||||
|
||||
Add a `## Network use & accounts` section near the top of the README
|
||||
(after the Key Features list, before Table of Contents). Suggested copy:
|
||||
|
||||
```markdown
|
||||
## Network use and accounts
|
||||
|
||||
Perplexed contacts these remote services on your behalf when you invoke
|
||||
their respective commands. Nothing is sent automatically — only the
|
||||
prompts you submit through a command modal.
|
||||
|
||||
| Provider | Endpoint | Account | API key |
|
||||
|---|---|---|---|
|
||||
| Perplexity | `https://api.perplexity.ai/chat/completions` | Required | Required (paid) |
|
||||
| Anthropic Claude | `https://api.anthropic.com/v1/messages` | Required | Required (paid) |
|
||||
| Perplexica | `http://localhost:3030/api/search` (default; user-configurable) | Not required | Not required (self-hosted) |
|
||||
| LM Studio | `http://localhost:1234/v1/chat/completions` (default; user-configurable) | Not required | Not required (runs locally) |
|
||||
|
||||
The plugin sends only the contents of your query and any selected text
|
||||
that you explicitly include. It does not collect telemetry, ship vault
|
||||
content anywhere else, or update itself — Obsidian handles plugin
|
||||
updates through the community-plugin directory.
|
||||
```
|
||||
|
||||
## Verification
|
||||
|
||||
After all six fixes:
|
||||
|
||||
1. `pnpm run build` — must complete clean (eslint + tsc + esbuild).
|
||||
2. `cat manifest.json` — confirm description ≤250 chars, ends in `.`, no
|
||||
"A plugin for…", no `fundingUrl` (or a real donation URL).
|
||||
3. `grep -n "perplexed-" main.ts | grep "id:"` — must return zero matches.
|
||||
4. `grep -n "your-repo\|<repository-url>\|0.0.0.1" README.md` — zero
|
||||
matches.
|
||||
5. `grep -n "Network use" README.md` — at least one match.
|
||||
6. Open Obsidian → Settings → Perplexed → confirm no top-level "Perplexed
|
||||
Plugin Settings" heading at the top of the panel.
|
||||
|
||||
## Out of scope (next pass)
|
||||
|
||||
These are will-be-flagged-by-reviewer items, not strict blockers, and are
|
||||
held for a separate focused commit:
|
||||
|
||||
- **Item 7 — settings tab `<h3>`/`<h4>` → `setHeading()`** (11 sites in
|
||||
`main.ts`)
|
||||
- **Item 8 — sentence case in settings headings** (~9 strings)
|
||||
- **Item 9 — 112 `console.log` calls** — gate behind a debug flag or
|
||||
strip
|
||||
- **Item 10 — `vault.adapter.write` in `src/utils/logger.ts:64`** —
|
||||
verify whether the log file is inside or outside the vault, decide
|
||||
Vault-API switch vs adopting an "accesses files outside vault"
|
||||
disclosure
|
||||
|
||||
## Files Touched (when this plan executes)
|
||||
|
||||
```
|
||||
perplexed/
|
||||
├── manifest.json (description rewrite; remove fundingUrl)
|
||||
├── main.ts (3 command id renames; delete settings top-level h2)
|
||||
├── README.md (4 placeholder/stale fixes; insert Network use section)
|
||||
└── context-v/
|
||||
└── plans/
|
||||
└── 2026-05-02_Submission-Blockers-Punch-List.md (this file)
|
||||
```
|
||||
8
main.ts
8
main.ts
|
|
@ -436,7 +436,7 @@ export default class PerplexedPlugin extends Plugin {
|
|||
|
||||
// Add debug command to check command status
|
||||
this.addCommand({
|
||||
id: 'perplexed-debug-commands',
|
||||
id: 'debug-commands',
|
||||
name: 'Debug: Check Perplexed Commands',
|
||||
callback: () => {
|
||||
this.debugCommands();
|
||||
|
|
@ -445,7 +445,7 @@ export default class PerplexedPlugin extends Plugin {
|
|||
|
||||
// Add command to reset prompts to defaults
|
||||
this.addCommand({
|
||||
id: 'perplexed-reset-prompts',
|
||||
id: 'reset-prompts',
|
||||
name: 'Reset Prompts to Default',
|
||||
callback: async () => {
|
||||
await this.resetPromptsToDefault();
|
||||
|
|
@ -454,7 +454,7 @@ export default class PerplexedPlugin extends Plugin {
|
|||
|
||||
// Add command to reinitialize services
|
||||
this.addCommand({
|
||||
id: 'perplexed-reinitialize-services',
|
||||
id: 'reinitialize-services',
|
||||
name: 'Reinitialize Perplexed Services',
|
||||
callback: async () => {
|
||||
await this.reinitializeServices();
|
||||
|
|
@ -1023,8 +1023,6 @@ class PerplexedSettingTab extends PluginSettingTab {
|
|||
const { containerEl } = this;
|
||||
containerEl.empty();
|
||||
|
||||
containerEl.createEl('h2', { text: 'Perplexed Plugin Settings' });
|
||||
|
||||
// Perplexity Section
|
||||
const perplexityHeader = containerEl.createEl('h3', { text: 'Perplexity (Remote Service)' });
|
||||
perplexityHeader.style.color = 'var(--text-accent)';
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@
|
|||
"name": "Perplexed",
|
||||
"version": "0.1.0",
|
||||
"minAppVersion": "0.15.0",
|
||||
"description": "A plugin for Obsidian that allows you to generate source-cited content using AI using Perplexity and Perplexica.",
|
||||
"description": "Generate source-cited research content from Perplexity, Anthropic Claude, Perplexica, or local LM Studio — directly into your notes.",
|
||||
"author": "The Lossless Group",
|
||||
"authorUrl": "https://lossless.group",
|
||||
"fundingUrl": "https://lossless.group",
|
||||
"isDesktopOnly": true
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue