Commit graph

33 commits

Author SHA1 Message Date
mpstaton
0a016e2668 fix(marketplace): comply with ObsidianReviewBot recommended config — sentence-case, no-restricted-globals, async hygiene
Round 3 of the marketplace submission (#12513) flagged 73 errors + 6
warnings against the bot's recommended eslint config. This ships the
literal fixes the bot demanded so the rescan goes clean and the PR
moves to human review.

Sentence-case (66 errors). Applied the bot's exact "Expected: '...'"
rewrites across main.ts, the 8 modal files, and claudeService.ts. The
bot runs obsidianmd/ui/sentence-case with `enforceCamelCaseLower: true`
and no brand allowlist, so "Ask Perplexity" becomes "Ask perplexity",
"LM Studio" becomes "Lm studio", "PromptsService" becomes "promptsservice"
— UI text now reads as broken. Brand capitalization is to be restored
after marketplace acceptance, when we own the plugin entry on our own
update cadence. Local eslint.config.mjs's brand-allowlist override
also dropped so the local lint stops disagreeing with the bot.

Async without await (2 errors). main.ts:504 `callback: async () => {}`
reduced to `callback: () => {}` (the wrapped reinitializeServices() is
sync). directoryTemplateService.ts:195 listTemplates reduced from
`async function ... : Promise<TemplateFile[]>` to sync; the two callers
in main.ts updated to drop `await`.

no-restricted-globals (4 errors + 4 description-missing errors). All
four streaming fetch() sites (directoryTemplateService, lmStudioService,
perplexicaService, perplexityService) switched to `activeWindow.fetch`,
matching the precedent already used for `activeWindow.setTimeout`
elsewhere. The bare eslint-disable directives removed. SSE/streaming
rationale (Obsidian's requestUrl buffers) preserved in adjacent
comments.

Unused catch bindings (6 warnings). Three in main.ts, plus
lmStudioService:243, perplexicaService:255, logger.ts:47 — all
collapsed from `catch (e)` / `catch (error)` to `catch { ... }`.

Also included: changelog/2026-05-12_01.md documenting what the bot
flagged, the diff cost (brand names lowercased mid-string), the
non-sentence-case fixes, and verification.

Verification: both eslint configs (local + bot-mirror recommended)
exit 0; tsc -noEmit -skipLibCheck exit 0; production esbuild exit 0.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 06:58:09 -05:00
mpstaton
2fa52794ec fix(lint): drop async on methods with no await expression
ObsidianReviewBot's last scan (commit 4423052f, 2026-05-09) flagged
three `require-await` violations. The bodies of all three are fully
synchronous — promoting them to sync is the correct fix and removes
the false-positive shape for the marketplace scanner.

- main.ts#reinitializeServices: instantiates services synchronously
  inside try/catch blocks. Drop `async`/`Promise<void>`; drop the
  unnecessary `await` at the lone call site in the settings-saved
  callback.
- claudeService.ts#afterMessage: walks message content and writes
  to the editor via `replaceRange` — both sync. Drop `async`; drop
  the `await` at the two call sites in the Claude streaming flow.
- perplexityService.ts#processStreamingMetadata: post-processes the
  streaming response (think blocks, image placement, search-result
  footer). All operations are sync editor mutations and string
  processing. Drop `async`; drop the `await` at the lone call site.

`pnpm build` passes (eslint clean + tsc + esbuild). Local lint was
already clean against the obsidianmd recommended config — the bot
enforces `@typescript-eslint/require-await: "error"` while the
recommended config disables it, hence the divergence.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:06:27 -05:00
mpstaton
3349e36bd6 feat(seeder): auto-deploy shipped templates + README to user vault on first run
A freshly-installed perplexed has no templates folder, so the directory-template
commands have nothing to match. Users had to copy templates from the plugin
source by hand. Now the four shipped templates (concept-, vocabulary-, source-,
toolkit-profile) plus a README are inlined into main.js via esbuild's text
loader for .md files, and a seeder writes them into the configured templates
root on plugin load — but only if the folder is missing or contains no markdown,
so existing customizations are never touched.

A new "Re-seed templates" button in the Directory templates settings section
fills in any shipped file whose filename doesn't already exist (for pulling in
new templates after a plugin update).

Pieces:
- esbuild.config.mjs: register `.md` text loader so markdown imports work
- src/types/markdown.d.ts: TS shim for `*.md` imports
- src/services/templateSeederService.ts: seedTemplatesIfMissing +
  reSeedMissingFiles (idempotent, never overwrites)
- src/docs/templates/README.md: end-user docs for the template system
  (zone anatomy, interpolation tokens, commands, image markers, citation
  behavior, frontmatter stamps, writing a custom template)
- main.ts: seeder fires after settings load; settings tab gains a Re-seed
  button

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 23:34:41 -05:00
mpstaton
76046359a9 feat(find-images): selection-anchored image discovery with paragraph-level placement
New command "Find images for selection". Highlight a passage in any open file,
invoke the command, and the plugin:

1. Splits the selection into paragraphs and numbers them.
2. Reads the active file's frontmatter for url / site_name (entity context).
3. Sends a Perplexity request with return_images=true asking the model to:
   - Find N screenshot/product/feature images that illustrate the specific
     passage content.
   - Prefer images hosted on the entity's domain; fall back to other web
     sources only when on-domain images aren't available.
   - For each chosen image, output one line of the form
     `[AFTER {paragraph_number}] [IMAGE {n}: <description>]` so the model
     itself decides which paragraph each image belongs after.
4. Parses the placement markers, maps each image number to the corresponding
   entry in response.images, and rebuilds the selection with `\n\n`
   separators around each embed so images sit between paragraphs, never
   inside one.
5. Falls back to even-distribution domain-preferred ordering if the model
   emitted no placement markers.

Result is `![description](image_url)` embeds in standard CommonMark/GFM form,
inserted via editor.replaceSelection. Frontmatter and surrounding content
are untouched.

New setting `findImagesMaxImages` (default 3) caps the per-invocation count.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 16:46:24 -05:00
mpstaton
5e86570da9 feat(directory-templates): v0.2 — folder batch + append-below + arbitrary frontmatter interpolation
Three additions driven by real-vault use against ~1600 Tooling/ profile files:

1. Folder batch run. New command "Apply directory template to all files in
   folder" prompts for folder, then template, then a confirm modal showing
   total/fill/append counts before firing. Sequential execution with a
   live-updating progress notice. New "Stop directory template batch"
   command sets a cancel flag checked between files.

2. Append-below replaces abort-on-existing-body. If the target body is
   non-empty, the response is appended after a blank-line separator instead
   of skipping. Frontmatter still byte-identical. ApplyOutcome return type
   distinguishes fill / append / skip / error so batch can tally them.

3. Interpolation extended beyond {{title}} and {{frontmatter}}. Now supports
   {{frontmatter.X}} for explicit access and bare {{X}} as auto-fallback to
   frontmatter.X — so templates can use {{site_name}}, {{slug}}, etc.
   directly. Arrays render as comma-joined strings; nested objects as YAML.
   Also adds {{today}} → ISO date.

New files:
- src/modals/FolderPickerModal.ts — FuzzySuggestModal<TFolder>.
- src/modals/BatchConfirmModal.ts — confirm dialog showing batch counts.

Out of scope, still:
- v0.3: cf codefence in user notes.
- v0.4: section-aware writing + per-section output modes.
- v0.5: citation/backlink preservation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 15:58:22 -05:00
mpstaton
181a23e5e5 feat(directory-templates): v0.1 spike — apply Perplexity-driven profile templates per directory
Solves the immediate workload of populating ~1600 nearly-empty profile files
under Tooling/, Sources/, and Vocabulary/ with a consistent outline + body.

The user picks a template from a fuzzy palette (filtered by glob match against
the active file's path), and the plugin sends a single Perplexity Deep Research
request driven by the template's heading skeleton + per-section bullet
instructions. The response is buffered, then written into the empty body of the
target file. Frontmatter is byte-identical before and after.

Template anatomy (per context-v/specs/Per-Directory-Profile-Templates.md):
- Frontmatter — title, applies-to-paths globs, description.
- Pre-`cft` prose — explainer for humans, ignored at runtime.
- One `cft` codefence — YAML config + `system:` field. Config-only; no prompt
  body inside the fence.
- Post-`cft` skeleton — heading outline with model-facing bullet instructions.
  Sent as the user prompt with `{{title}}` and `{{frontmatter}}` interpolated.
- A `***` line below the skeleton terminates the user prompt; everything below
  is authoring scratch and never reaches the API.

New files:
- src/services/directoryTemplateService.ts — template loader, parser, glob
  matcher, frontmatter whitelist filter, prompt assembly, non-streaming
  Perplexity call, file writer.
- src/modals/DirectoryTemplatePickerModal.ts — FuzzySuggestModal wrapping the
  glob-matched template list.
- src/docs/templates/{tooling-profile,source-profile}.md — seed templates
  users can copy into their vault.

main.ts changes:
- New settings: directoryTemplatesRoot (default "zz-cf-lib/templates"),
  directoryTemplatesFrontmatterWhitelist (default ["title", "og_description",
  "tags", "og_image"]), directoryTemplatesRequestTimeoutMs (default 300000).
- New command: "Apply directory template to current file".
- New settings UI section under "Directory templates".

Out of scope for v0.1 — captured in the spec for later iterations:
- Folder-batch run with concurrency/progress/resume (v0.2).
- `cf` codefence runtime in user notes (v0.3).
- Section-aware writing + output modes (v0.4).
- Citation/backlink preservation (v0.5).
- Multi-provider, image generation, verb registry split (later).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 15:27:09 -05:00
mpstaton
7b17b3b6e7 chore(marketplace): pass ObsidianReviewBot lint cleanly
Applies all required fixes from the bot's review of PR #12513
(obsidianmd/obsidian-releases). ESLint now passes 0 errors with the
Obsidian community ruleset; tsc passes; production build is clean.

Lint setup:

- Adopted eslint-plugin-obsidianmd@^0.2.9 in eslint.config.mjs
- Mirrored the bot's rule surface locally so violations surface in
  `pnpm lint` instead of the marketplace PR thread
- Configured the ui/sentence-case rule with a brand allowlist
  (Perplexity, Perplexica, Vane, Claude, Anthropic, LM Studio, Imgur,
  ImageKit, OpenAI, Ollama, Sonar, Llama, GPT, YAML, JSON, URL, API)
  so legitimate proper nouns aren't lowercased

Code fixes (487 → 0):

- console.log/info → console.debug across all sources (~130 sites)
- UI strings normalized to sentence case (~150 sites)
- Command IDs and names cleaned up: dropped "command" suffix, dropped
  "perplexed" plugin-name prefix
- Settings tab section headers switched from createEl('h2') to
  new Setting().setHeading() (5 sites)
- Inline element.style.color/width/minHeight/fontFamily migrated to
  a new CSS class (.perplexed-json-textarea + .is-tall / .is-extra-tall)
  in src/styles/settings-tab.css (8 textarea sites, 32 style assignments)
- Async input handlers wrapped: addEventListener('input', () => void
  (async () => { ... })()) so the listener type matches (8 sites)
- forEach((opt) => dd.addOption(...)) blocks made void-returning to
  satisfy no-misused-promises (9 modal sites)
- JSON.parse results typed as unknown then narrowed
- throw <string> → throw new Error(<string>)
- ${unknown} interpolations narrowed via instanceof Error
- Removed dotenv runtime dependency: published plugins shouldn't read
  .env at runtime; user enters API keys via the settings tab
- Replaced builtin-modules dev-dependency with node:module's
  builtinModules — same data, no extra package
- Logger console-method dispatch rewritten as a switch instead of
  dynamic console[level] indexing (which the bot rejects)

Streaming exceptions:

- src/services/{perplexityService,lmStudioService,perplexicaService}.ts
  retain `fetch()` for SSE / chunked streaming because Obsidian's
  `requestUrl` buffers the whole body. Each site has an
  `eslint-disable-next-line no-restricted-globals` with the marketplace
  `/skip` justification inline. Plan to surface these on the PR with
  a `/skip` reply.

Reference docs:

- context-v/issues/Obsidian-Review-Bot-Feedback-on-Perplexed-Submission.md
  (issue log distilled into…)
- context-v/reminders/Obsidian-Marketplace-Compliance.md (the rules
  themselves, reusable for image-gin and cite-wide submissions)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 02:39:06 -05:00
mpstaton
49168823f1 docs(perplexica): rename to "Perplexica / Vane" across user-facing surfaces
Background: the open-source self-hosted repo (ItzCrazyKns/Perplexica)
was renamed to Vane on 2026-03-09 by its maintainer (commit
'feat(app): rename to vane'). The hosted service at perplexica.io
remains live under the Perplexica brand — that's a separate hosted
product, not what users self-install for this plugin. The local API
surface (/api/search, focus modes, optimization modes) is unchanged
across the rename.

Updates "Perplexica" to "Perplexica / Vane" wherever a user can see
the string — command palette, modals, notice toasts, editor-injected
callouts, settings tab, README. Internal references (class names,
method names, CSS classes, command IDs, settings field names) are
left bare to avoid breaking compatibility or requiring migration.

main.ts
- Command names: 'Ask Perplexica' / 'Update Perplexica URL' /
  'Show Perplexica Settings' all gain '/ Vane'.
- Notice toasts (service not initialized, failed to open modal,
  current URL display) updated.
- Settings tab section heading 'Perplexica (Self-Hosted)' →
  'Perplexica / Vane (self-hosted)'; all 9 endpoint/model/template/
  prompt/placeholder labels and descriptions in that section
  updated to read 'Perplexica / Vane'.
- URLUpdateModal config (title + label) for the Update URL command
  updated to match the new command name.
- Default Perplexica query placeholder updated.

src/modals/PerplexicaModal.ts
- Header title, subtitle, submit button all read 'Ask Perplexica / Vane'.

src/services/perplexicaService.ts
- Editor-injected callout '**Perplexica Query**' / '### **Response
  from Perplexica**' both updated.
- Error notice prefix 'Perplexica Error:' → 'Perplexica / Vane Error:'.

README.md
- Top blurb, features bullet, network-use table row, "Using" section
  heading + TOC anchor (slug regenerated), full Commands table.
- Install section rewrite: heading marks the local-install
  requirement explicit; new rename callout points users at
  github.com/ItzCrazyKns/Vane for docs while explaining what got
  renamed and what didn't (perplexica.io is still a separate
  hosted brand).

Intentionally bare (justified):
- Example JSON content '"What is Perplexica's architecture?"'
  (sample content, not a UI label).
- Internal Error throws + console logs (dev-only surface).
- Code comments.
- Lines 98-102 of README, inside the rename callout itself —
  those sentences distinguish the two names by design.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 21:27:40 -05:00
mpstaton
14962edde1 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>
2026-05-02 20:34:40 -05:00
mpstaton
46e4f24755 align(requirements): align Perplexed to Obsidian's plugin community
standards

 On branch development
 Your branch is up to date with 'origin/development'.
 Changes to be committed:
	new file:   LICENSE
	new file:   context-v/plans/20206-05-02_Assuring-Obsidian-Community-Plugin-Requirements.md
	modified:   eslint.config.mjs
	modified:   main.ts
	modified:   manifest.json
	modified:   package.json
	modified:   src/modals/ArticleGeneratorModal.ts
	modified:   src/modals/ClaudeModal.ts
	modified:   src/modals/LMStudioModal.ts
	modified:   src/modals/PerplexicaModal.ts
	modified:   src/modals/PerplexityModal.ts
	modified:   src/modals/TextEnhancementModal.ts
	modified:   src/modals/TextEnhancementWithImagesModal.ts
	modified:   src/modals/URLUpdateModal.ts
	modified:   src/services/lmStudioService.ts
	modified:   src/services/perplexicaService.ts
	modified:   src/services/perplexityService.ts
	modified:   src/types/obsidian.d.ts
	new file:   src/utils/coerce.ts
	modified:   src/utils/formatDate.ts
	modified:   src/utils/logger.ts
	modified:   styles.css
	modified:   versions.json
2026-05-02 14:46:59 -05:00
mpstaton
9d5bc80ecf progress(model-provider): attempt to add new model, claude. Struggling
with getting returned research objects.

 On branch development
 Your branch is up to date with 'origin/development'.
 Changes to be committed:
	new file:   context-v/reminders/Ideal-and-Overkill-Schema-for-Max-Flexibility.md
	modified:   main.ts
	modified:   package.json
	modified:   pnpm-lock.yaml
	new file:   src/modals/ClaudeModal.ts
	new file:   src/services/claudeService.ts
	new file:   src/styles/claude-modal.css
	modified:   src/styles/main.css
	modified:   styles.css
2026-05-02 03:18:11 -05:00
TanujKS
f0ef900a13 improve: Deep Research Streaming \nfeat: Enhance Text and Add Image from selection commands 2025-08-28 23:44:17 -07:00
Tanuj Siripurapu
70a2f31136 fixed image placement and added setting to position query at top or end of response 2025-08-11 23:47:14 -04:00
TanujKS
8b3149ee67 feat(prompts) All prompts can now be configured in settings 2025-07-23 13:19:10 -07:00
TanujKS
ef85565f19 improve(modal) All modals now inject the required prompt to place images THROUGHOUT a file 2025-07-22 13:37:21 -07:00
TanujKS
ee286d2330 feat: Refactor plugin architecture and enhance UI/UX
- Split monolithic main.ts into modular services and modals
- Created separate service classes: PerplexityService,
  PerplexicaService, LMStudioService
  - Created modular modal classes: PerplexityModal, PerplexicaModal,
    LMStudioModal, URLUpdateModal
    - Deleted unused legacy files: CitationModal.ts, citationService.ts,
      cleanReferencesSectionService.ts

      ## New Features
      - Added ArticleGeneratorModal for one-page article generation with
	predefined prompts
	- Implemented intelligent image placement with [IMAGE n:
	  description] markers
	  - Added auto-scrolling during streaming responses for better
	    UX
	    - Created full callout formatting for query blocks with
	      multi-line support

	      ## UI/UX Improvements
	      - Moved all inline styles to dedicated CSS files for
		better maintainability
		- Created modular CSS structure: perplexity-modal.css,
		  article-generator-modal.css, etc.
		  - Added proper spacing and padding to text inputs
		    across all modals
		    - Fixed sources placement to appear after last
		      non-empty line (no more huge gaps)
		      - Enhanced modal layouts with better visual
			hierarchy

			## Build System
			- Updated esbuild.config.mjs to properly bundle
			  CSS files
			  - Created src/styles/main.css as CSS entry
			    point
			    - Implemented proper CSS build process with
			      minification support

			      ## Bug Fixes
			      - Fixed TypeScript errors from unused
				imports and parameters
				- Resolved streaming scroll issues with
				  proper cursor tracking
				  - Fixed multi-line query formatting in
				    callout blocks
				    - Corrected sources insertion logic
				      for both streaming and
				      non-streaming responses

				      ## Code Quality
				      - Improved separation of concerns
					with service/modal architecture
					- Enhanced maintainability with
					  modular CSS structure
					  - Added comprehensive error
					    handling and logging
					    - Implemented consistent
					      coding patterns across all
					      services

					      ## Technical Details
					      - Services now handle API
						calls, streaming, and
						response processing
						- Modals focus purely on
						  UI and user
						  interaction
						  - CSS uses Obsidian's
						    design system
						    variables for
						    theming
						    - All modals support
						      both streaming and
						      non-streaming
						      modes
						      - Image placement
							supports both
							inline markers
							and fallback
							sections

							Breaking
							Changes: None
							Migration:
							Existing
							functionality
							preserved,
							enhanced with
							new features
2025-07-20 16:32:36 -07:00
mpstaton
15bbc0f565 improve(settings), new(api): add new LM Studio API, improve settings
On branch development
 Your branch is up to date with 'origin/development'.
 Changes to be committed:
	modified:   README.md
	modified:   main.ts
	modified:   styles.css
2025-07-20 01:48:39 +03:00
mpstaton
b01599a617 fix(typescript): fix typescript error
On branch development
 Your branch is up to date with 'origin/development'.
 Changes to be committed:
	modified:   main.ts
2025-07-19 23:11:01 +03:00
mpstaton
7b1364098e attempt(api-images): attempt to process API related image responses
On branch development
 Your branch is up to date with 'origin/development'.
 Changes to be committed:
	modified:   main.ts
2025-07-19 22:40:18 +03:00
mpstaton
880a442911 milestone(streaming): api-call to Perplexity as made through modal now
works and streams responses back.  Not perfect, but works!

 On branch development
 Your branch is up to date with 'origin/development'.
 Changes to be committed:
	modified:   main.ts
2025-07-19 21:33:08 +03:00
mpstaton
0e8b4ca114 milestone(settings): settings panel is better than good enough
On branch development
 Your branch is ahead of 'origin/development' by 1 commit.
   (use "git push" to publish your local commits)
 Changes to be committed:
	modified:   README.md
	modified:   main.ts
2025-07-19 21:13:34 +03:00
mpstaton
c81ca99aa8 improve(settings): improve settings UI
On branch development
 Your branch is up to date with 'origin/development'.
 Changes to be committed:
	modified:   main.ts
	new file:   package-lock.json
	modified:   package.json
	modified:   styles.css
2025-07-19 21:08:45 +03:00
mpstaton
cee8c2647c feat(move-citations): rearrange format by moving citations behind commas and periods.
- Move citations after punctuation (periods and commas) in document body
- Preserve reference section formatting
- Handle multiple citations before punctuation
- Add proper spacing between multiple citations
- Process entire document in one pass
- Add command to format citations via command palette

The command "Move Citations after Punctuation" is now available in the command palette (Ctrl/Cmd+P) to format citations throughout the document.
 On branch development
 Changes to be committed:
	modified:   main.ts
	modified:   src/services/citationService.ts
2025-07-08 20:12:25 +03:00
mpstaton
3d0eb2ac06 feat(clean-references): add reference cleanup service with colon formatting
- Implement cleanReferencesSectionService with addColonSyntaxWhereNone function
- Add command to format footnote references with consistent colon syntax
- Fix regex to handle various footnote reference formats
- Preserve leading whitespace and ensure single space after colon
- Add TypeScript type safety with proper null checks
- Integrate with main plugin command registry

The new command formats footnote references from:
  [^hexId] Text...
to:
  [^hexId]: Text...

This improves consistency in citation formatting throughout documents.
 On branch development
 Changes to be committed:
	modified:   main.ts
	new file:   src/services/cleanReferencesSectionService.ts
2025-07-08 19:24:11 +03:00
mpstaton
ad3303c0e8 iterate(modal): rebuild of modal code
- Fixed method name mismatch between convertCitation and convertCitations
- Made generateHexId private and added public getNewHexId method
- Improved type safety for CitationMatch interface with explicit URL handling
- Cleaned up unused imports and variables in CitationModal
- Fixed file handling to use correct Obsidian API types
- Updated citation conversion logic to handle multiple groups
- Added proper error handling for file operations
- Improved code documentation and type annotations
- Formatted styles.css for better readability
2025-07-08 01:55:44 +03:00
mpstaton
bc051168d1 feat(modal): milestone of modal feature displaying citations working
On branch development
 Changes to be committed:
	modified:   README.md
	modified:   esbuild.config.mjs
	modified:   main.ts
	modified:   manifest.json
	new file:   src/modals/CitationModal.ts
	new file:   src/services/citationService.ts
	new file:   src/styles/citations.css
	new file:   src/types/obsidian.d.ts
	new file:   src/utils/logger.ts
2025-07-06 18:41:26 +03:00
mpstaton
7388cb3912 fix(citations): fix inline hex citations
On branch development
 Changes to be committed:
	modified:   main.ts
2025-06-07 23:51:13 +03:00
mpstaton
ac92170d96 milestone(perplexica): write to file now works correctly
On branch development
 Changes to be committed:
	modified:   main.ts
2025-06-07 21:53:11 +03:00
mpstaton
e83d8f457e milestone(perplexica): now hitting perplexica
On branch development
 Changes to be committed:
	modified:   main.ts
2025-06-07 21:22:27 +03:00
mpstaton
f394ef7253 feat(hexCitations): added hex citations to functionality
On branch development
 Changes to be committed:
	modified:   main.ts
2025-06-07 20:09:33 +03:00
mpstaton
424b7871fc upgrade(packages): all packages are now up to date
On branch development
 Changes to be committed:
	modified:   .eslintrc
	modified:   esbuild.config.mjs
	modified:   main.ts
	modified:   package.json
	modified:   pnpm-lock.yaml
	modified:   tsconfig.json
2025-06-07 19:20:42 +03:00
mpstaton
0145a51fd7 switch(pnpm): add pnpm get rid of npm
On branch master
 Your branch is up to date with 'origin/master'.
 Changes to be committed:
	modified:   .npmrc
	deleted:    lcontent-farm.code-workspace
	modified:   main.ts
	deleted:    package-lock.json
	modified:   package.json
	new file:   pnpm-lock.yaml
	modified:   versions.json
2025-06-07 18:25:25 +03:00
mpstaton
fbfaa55bf7 start(project): initial setup from example Obsidian plugin with our developer preferences 2025-06-07 15:37:58 +03:00