obsidian-dev-skills 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,29 +12,28 @@ Update frequency: Review periodically for AI agent-specific guidance
12
12
  - **DO NOT** create a `.ref` subfolder inside the plugins/themes folder - clone the repo directly there
13
13
  - Then create symlink in project's `.ref/` folder pointing to the global location
14
14
  - For local projects, symlink directly in project's `.ref/` (don't clone to global)
15
- - See [ref-instructions.md](ref-instructions.md) for details.
15
+ - See [ref-instructions.md](../../obsidian-ref/references/ref-instructions.md) for details.
16
16
  - Add commands with stable IDs (don't rename once released).
17
17
  - Provide defaults and validation in settings.
18
18
  - Write idempotent code paths so reload/unload doesn't leak listeners or intervals.
19
19
  - Use `this.register*` helpers for everything that needs cleanup.
20
- - **Always run `pnpm build` after making changes** to catch build errors early. Only check for pnpm installation if the build fails. See [build-workflow.md](build-workflow.md) for details.
21
- - **Summarize commands**: When user requests "Summarize" or "Summarize for release", follow the workflow in [summarize-commands.md](summarize-commands.md). Always read actual file changes, not just chat history.
22
- - **Release preparation**: When user asks "is my plugin ready for release?" or similar, use [release-readiness.md](release-readiness.md) checklist. Run automated checks where possible, ask user interactively for items requiring their input (like platform testing).
20
+ - **Always run `pnpm build` after making changes** to catch build errors early. Only check for pnpm installation if the build fails. See [build-workflow.md](../../obsidian-ops/references/build-workflow.md) for details.
21
+ - **Summarize commands**: When user requests "Summarize" or "Summarize for release", follow the workflow in [summarize-commands.md](../../obsidian-ops/references/summarize-commands.md). Always read actual file changes, not just chat history.
22
+ - **Release preparation**: When user asks "is my plugin ready for release?" or similar, use [release-readiness.md](../../obsidian-ops/references/release-readiness.md) checklist. Run automated checks where possible, ask user interactively for items requiring their input (like platform testing).
23
23
 
24
24
  ## Don't
25
25
  - Introduce network calls without an obvious user-facing reason and documentation.
26
26
  - Ship features that require cloud services without clear disclosure and explicit opt-in.
27
27
  - Store or transmit vault contents unless essential and consented.
28
- - **File structure**: Never have `main.ts` in both root AND `src/` - this causes build confusion. For simple plugins, `main.ts` in root is acceptable. For plugins with multiple files, place `main.ts` in `src/` (recommended). See [file-conventions.md](file-conventions.md) and [common-pitfalls.md](common-pitfalls.md#maints-file-location).
28
+ - **File structure**: Never have `main.ts` in both root AND `src/` - this causes build confusion. For simple plugins, `main.ts` in root is acceptable. For plugins with multiple files, place `main.ts` in `src/` (recommended). See [file-conventions.md](../../obsidian-ref/references/file-conventions.md) for standard structure and common pitfalls.
29
29
  - **Git operations**: Never automatically commit, push, or perform any git operations. All git operations must be left to the user.
30
- - **Git updates**: When checking for updates to repos in `.ref`, you can use read-only commands like `git fetch` and `git log` to check what's new, but **never automatically pull** - always ask the user first. See [ref-instructions.md](ref-instructions.md) for how to check for updates.
30
+ - **Git updates**: When checking for updates to repos in `.ref`, you can use read-only commands like `git fetch` and `git log` to check what's new, but **never automatically pull** - always ask the user first. See [ref-instructions.md](../../obsidian-ref/references/ref-instructions.md) for how to check for updates.
31
31
 
32
32
  ## Fixing Linting Errors
33
33
 
34
34
  **DO**:
35
35
  - Read the error message carefully - note the exact line and column
36
36
  - Understand what the error is actually complaining about
37
- - Check the [linting-fixes-guide.md](linting-fixes-guide.md) for the specific error type
38
37
  - Fix the root cause, not the symptom
39
38
  - Test with `pnpm lint` after each fix
40
39
  - Verify `pnpm build` still works
@@ -49,9 +48,8 @@ Update frequency: Review periodically for AI agent-specific guidance
49
48
 
50
49
  **When Stuck**:
51
50
  1. Read the error message - what line/column is it complaining about?
52
- 2. Check [linting-fixes-guide.md](linting-fixes-guide.md) for that specific error type
53
- 3. Understand the type signature - what does the function expect?
54
- 4. Fix the actual type mismatch, not just suppress the warning
55
- 5. If you've tried the same thing 3 times, stop and re-read the error message
51
+ 2. Understand the type signature - what does the function expect?
52
+ 3. Fix the actual type mismatch, not just suppress the warning
53
+ 4. If you've tried the same thing 3 times, stop and re-read the error message
56
54
 
57
55
 
@@ -12,7 +12,7 @@ Update frequency: Check Obsidian Sample Plugin repo for updates
12
12
  - **common-tasks.md**: Quick snippets and basic patterns for common operations
13
13
  - **code-patterns.md**: Complete, production-ready examples with full context and error handling
14
14
 
15
- > **Note**: If user asks "what does the Obsidian API say about X?" or similar, check `.ref/obsidian-api/obsidian.d.ts` first. See [ref-instructions.md](ref-instructions.md) for when to check `.ref` setup.
15
+ > **Note**: If user asks "what does the Obsidian API say about X?" or similar, check `.ref/obsidian-api/obsidian.d.ts` first. See [ref-instructions.md](../../obsidian-ref/references/ref-instructions.md) for when to check `.ref` setup.
16
16
 
17
17
  ## Organize code across multiple files
18
18
 
@@ -221,7 +221,7 @@ const value = this.app.secretStorage.getSecret("my-api-key");
221
221
 
222
222
  **Important**: Secret IDs must be lowercase alphanumeric with optional dashes (e.g., `my-plugin-api-key`). Invalid IDs will throw an error.
223
223
 
224
- See [security-privacy.md](security-privacy.md) for security best practices and [code-patterns.md](code-patterns.md) for comprehensive examples with error handling.
224
+ See [security-privacy.md](../../obsidian-ops/references/security-privacy.md) for security best practices and [code-patterns.md](code-patterns.md) for comprehensive examples with error handling.
225
225
 
226
226
  ## Modal Patterns
227
227
 
@@ -34,7 +34,7 @@ One-page cheat sheet for common Obsidian theme development tasks.
34
34
  - `add ref ../my-local-plugin` → Creates symlink to local project
35
35
  - `check API [feature]` → Searches obsidian.d.ts for feature (for theme CSS variables, etc.)
36
36
 
37
- **Note**: These commands are interpreted by AI agents and execute the corresponding workflows automatically. See detailed documentation in [AGENTS.md](../../AGENTS.md) for full workflows.
37
+ **Note**: These commands are interpreted by AI agents and execute the corresponding workflows automatically.
38
38
 
39
39
  ## Build Commands
40
40
 
@@ -165,5 +165,5 @@ package.json
165
165
  Gruntfile.js # Build configuration (if using Grunt)
166
166
  ```
167
167
 
168
- See [file-conventions.md](file-conventions.md) for details.
168
+ See [file-conventions.md](../../obsidian-ref/references/file-conventions.md) for details.
169
169
 
@@ -202,9 +202,9 @@ When user asks "is my theme ready for release?" or similar:
202
202
 
203
203
  - [versioning-releases.md](versioning-releases.md) - Release process and versioning
204
204
  - [security-privacy.md](security-privacy.md) - Security and privacy guidelines
205
- - [manifest.md](manifest.md) - Manifest requirements and validation
205
+ - [manifest.md](../../obsidian-ref/references/manifest.md) - Manifest requirements and validation
206
206
  - [testing.md](testing.md) - Testing procedures and platform testing
207
- - [ux-copy.md](ux-copy.md) - UI text conventions (for theme names and descriptions)
207
+ - [ux-copy.md](../../obsidian-ref/references/ux-copy.md) - UI text conventions (for theme names and descriptions)
208
208
  - [build-workflow.md](build-workflow.md) - Build commands (if using build tools)
209
209
  - [performance.md](performance.md) - Performance optimization best practices
210
210
 
@@ -54,7 +54,7 @@ Themes are CSS-only and have minimal security surface area, but still follow pri
54
54
  ## Related Documentation
55
55
 
56
56
  - [release-readiness.md](release-readiness.md) - Comprehensive release checklist including policy adherence
57
- - [manifest.md](manifest.md) - Manifest requirements (includes security-related fields)
57
+ - [manifest.md](../../obsidian-ref/references/manifest.md) - Manifest requirements (includes security-related fields)
58
58
  - [Developer Policies](https://docs.obsidian.md/Developer+policies) - Official Obsidian Developer Policies
59
59
  - [Theme Guidelines](https://docs.obsidian.md/Themes/Releasing/Theme+guidelines) - Official Theme Guidelines
60
60
 
@@ -1,13 +1,13 @@
1
1
  <!--
2
2
  Source: Project-specific procedure
3
- Last synced: See sync-status.json for authoritative sync dates
3
+ Last synced: 2026-02-08
4
4
  Update frequency: Update as sync process evolves
5
5
  Applicability: Both
6
6
  -->
7
7
 
8
8
  # Sync Procedure: Keeping .agents Up to Date
9
9
 
10
- **Sync Tracking**: All sync dates are tracked centrally in [sync-status.json](sync-status.json). Always update this file with the actual current date when syncing (use `Get-Date -Format "yyyy-MM-dd"` to get the date - never use placeholder dates).
10
+ **Sync Tracking**: Keep track of sync dates manually in the documentation file headers to ensure traceability.
11
11
 
12
12
  This document outlines the standard procedure for keeping the `.agents` directory content synchronized with the latest updates from the 6 core Obsidian repositories:
13
13
  - [Obsidian API](https://github.com/obsidianmd/obsidian-api) - Official API documentation and type definitions
@@ -19,7 +19,7 @@ This document outlines the standard procedure for keeping the `.agents` director
19
19
 
20
20
  ## Prerequisites
21
21
 
22
- 1. **Set up reference repositories** (see [ref-instructions.md](ref-instructions.md)):
22
+ 1. **Set up reference repositories** (see [ref-instructions.md](../../obsidian-ref/references/ref-instructions.md)):
23
23
  - The 6 core Obsidian projects should be available in `.ref/` (either as symlinks to a central location or as local clones):
24
24
  - `obsidian-api/` - API documentation
25
25
  - `obsidian-sample-plugin/` - Sample plugin template
@@ -284,7 +284,7 @@ For each file that needs updating:
284
284
 
285
285
  **Important**: Always use the actual current date from `Get-Date -Format "yyyy-MM-dd"`, never use placeholder dates.
286
286
 
287
- 4. **Note**: Individual file headers still have "Last synced" dates, but the authoritative source is `.agent/sync-status.json`. When syncing, update the central file rather than individual file headers.
287
+ 4. **Note**: Individual file headers have "Last synced" dates. When syncing, update these dates to reflect the actual sync time.
288
288
 
289
289
  ### Step 6: Verify and Test
290
290
 
@@ -309,7 +309,7 @@ For each file that needs updating:
309
309
  - [ ] Review developer docs for policy/guideline updates
310
310
  - [ ] Review plugin docs for best practices
311
311
  - [ ] Update relevant `.agent/skills/**/*.md` files
312
- - [ ] **Update `.agent/sync-status.json` with actual current date** (use `Get-Date -Format "yyyy-MM-dd"` - never use placeholder dates)
312
+ - [ ] **Update sync dates** in file headers
313
313
  - [ ] Review and commit changes
314
314
 
315
315
  ## Troubleshooting
@@ -354,39 +354,25 @@ ls -la .ref/obsidian-api
354
354
  - **When starting new features**: Verify current best practices
355
355
  - **Before releases**: Ensure guidelines are current
356
356
 
357
- ## Automation Ideas (Future)
358
357
 
359
- Consider creating a script to:
360
- - Automatically check for updates in reference repos
361
- - Compare `AGENTS.md` from sample plugin with current `.agents` structure
362
- - Generate a diff report of what changed
363
- - Remind to update "Last synced" dates
364
358
 
365
359
  ## Updating Sync Status
366
360
 
367
- After completing a sync, update `.agent/sync-status.json`:
368
-
369
- **Easy way** (recommended): Use the helper script:
370
- ```bash
371
- node scripts/update-sync-status.mjs "Description of what was synced"
372
- ```
361
+ After completing a sync, update the "Last synced" dates in the documentation file headers.
373
362
 
374
363
  **Manual way**: Edit the file directly:
375
364
  ```powershell
376
365
  # Get actual current date (CRITICAL: never use placeholder!)
377
366
  $syncDate = Get-Date -Format "yyyy-MM-dd"
378
367
 
379
- # Update sync-status.json with:
380
- # - "lastFullSync": "$syncDate"
381
- # - "lastSyncSource": "Description of what was synced"
382
- # - Update relevant dates in "sourceRepos" section for repos that were checked/synced
368
+ # Update the file header with the actual sync date
383
369
  ```
384
370
 
385
- **Critical**: Always use the actual date from `Get-Date -Format "yyyy-MM-dd"`. Never use placeholder dates like "YYYY-MM-DD" or hardcoded dates. The sync-status.json file is the authoritative source for all sync dates.
371
+ **Critical**: Always use the actual date from `Get-Date -Format "yyyy-MM-dd"`. Never use placeholder dates like "YYYY-MM-DD" or hardcoded dates.
386
372
 
387
373
  ## Notes
388
374
 
389
375
  - Not all changes need to be synced immediately - focus on breaking changes and new best practices
390
376
  - Some content may be project-specific and shouldn't be overwritten
391
377
  - Always review changes before committing to ensure they make sense for your project
392
- - **Always update sync-status.json with the actual current date** - this is the authoritative source for sync dates
378
+ - **Always update sync dates** to reflect when the information was last verified
@@ -44,7 +44,7 @@ package.json
44
44
 
45
45
  - Source files in `src/scss/` are compiled to `theme.css`
46
46
  - Build tools (Grunt, npm scripts, etc.) handle compilation
47
- - Run build command after making changes (see [build-workflow.md](build-workflow.md))
47
+ - Run build command after making changes (see [build-workflow.md](../../obsidian-ops/references/build-workflow.md))
48
48
  - **Example**: The `obsidian-oxygen` theme uses this pattern with Grunt
49
49
 
50
50
  ## Wrong Structure (Common Mistakes)
@@ -102,7 +102,7 @@ If you cannot find `.ref` initially, try:
102
102
  3. **Report findings**:
103
103
  - If updates are available, show what changed (use `git log` or `git diff`)
104
104
  - Ask if the user wants to pull the updates
105
- - **Never automatically pull** - always ask first (see [agent-dos-donts.md](agent-dos-donts.md))
105
+ - **Never automatically pull** - always ask first (see [agent-dos-donts.md](../../obsidian-dev/references/agent-dos-donts.md))
106
106
 
107
107
  4. **If repo not found**:
108
108
  - List what's available in `.ref/plugins/` or `.ref/themes/`
@@ -264,7 +264,7 @@ ln -s ../../.ref/obsidian-dev/plugins/plugin-name .ref/plugins/plugin-name
264
264
  ln -s ../../.ref/obsidian-dev/themes/theme-name .ref/themes/theme-name
265
265
  ```
266
266
 
267
- **Note**: See [sync-procedure.md](sync-procedure.md) for the standard procedure to keep `.agents` content synchronized with updates from these repositories.
267
+ **Note**: See [sync-procedure.md](../../obsidian-ops/references/sync-procedure.md) for the standard procedure to keep `.agents` content synchronized with updates from these repositories.
268
268
 
269
269
  ## Adding Additional References
270
270
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "obsidian-dev-skills",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "Agent skills for Obsidian plugin and theme development",
5
5
  "keywords": [
6
6
  "obsidian",
@@ -0,0 +1,40 @@
1
+ import { execSync } from 'child_process';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+ const initScript = path.join(__dirname, 'init.mjs');
8
+
9
+ const projects = [
10
+ "C:\\Users\\david\\Development\\obsidian-alias-filename-history",
11
+ "C:\\Users\\david\\Development\\obsidian-astro-composer",
12
+ "C:\\Users\\david\\Development\\obsidian-astro-modular-settings",
13
+ "C:\\Users\\david\\Development\\obsidian-bases-cms",
14
+ "C:\\Users\\david\\Development\\obsidian-custom-slides",
15
+ "C:\\Users\\david\\Development\\obsidian-disable-tabs",
16
+ "C:\\Users\\david\\Development\\obsidian-explorer-focus",
17
+ "C:\\Users\\david\\Development\\obsidian-home-base",
18
+ "C:\\Users\\david\\Development\\obsidian-image-manager",
19
+ "C:\\Users\\david\\Development\\obsidian-oxygen-settings",
20
+ "C:\\Users\\david\\Development\\obsidian-periodic-links",
21
+ "C:\\Users\\david\\Development\\obsidian-property-over-file-name",
22
+ "C:\\Users\\david\\Development\\obsidian-seo",
23
+ "C:\\Users\\david\\Development\\obsidian-ui-tweaker",
24
+ "C:\\Users\\david\\Development\\obsidian-vault-cms",
25
+ "C:\\Users\\david\\Development\\obsidian-zenmode"
26
+ ];
27
+
28
+ for (const project of projects) {
29
+ console.log(`\n🔄 Updating skills for: ${path.basename(project)}`);
30
+ try {
31
+ execSync(`node "${initScript}"`, {
32
+ cwd: project,
33
+ stdio: 'inherit',
34
+ env: { ...process.env, INIT_CWD: project }
35
+ });
36
+ console.log(`✅ Success: ${path.basename(project)}`);
37
+ } catch (error) {
38
+ console.error(`❌ Failed: ${path.basename(project)} - ${error.message}`);
39
+ }
40
+ }
@@ -0,0 +1,45 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+
4
+ const projects = [
5
+ "C:\\Users\\david\\Development\\obsidian-alias-filename-history",
6
+ "C:\\Users\\david\\Development\\obsidian-astro-composer",
7
+ "C:\\Users\\david\\Development\\obsidian-astro-modular-settings",
8
+ "C:\\Users\\david\\Development\\obsidian-bases-cms",
9
+ "C:\\Users\\david\\Development\\obsidian-custom-slides",
10
+ "C:\\Users\\david\\Development\\obsidian-disable-tabs",
11
+ "C:\\Users\\david\\Development\\obsidian-explorer-focus",
12
+ "C:\\Users\\david\\Development\\obsidian-home-base",
13
+ "C:\\Users\\david\\Development\\obsidian-image-manager",
14
+ "C:\\Users\\david\\Development\\obsidian-oxygen-settings",
15
+ "C:\\Users\\david\\Development\\obsidian-periodic-links",
16
+ "C:\\Users\\david\\Development\\obsidian-property-over-file-name",
17
+ "C:\\Users\\david\\Development\\obsidian-seo",
18
+ "C:\\Users\\david\\Development\\obsidian-ui-tweaker",
19
+ "C:\\Users\\david\\Development\\obsidian-vault-cms",
20
+ "C:\\Users\\david\\Development\\obsidian-zenmode"
21
+ ];
22
+
23
+ console.log('| Project | Status | Last Sync | Source |');
24
+ console.log('| --- | --- | --- | --- |');
25
+
26
+ for (const project of projects) {
27
+ const name = path.basename(project);
28
+ let agentDir = path.join(project, '.agent');
29
+ if (!fs.existsSync(agentDir) && fs.existsSync(path.join(project, '.agents'))) {
30
+ agentDir = path.join(project, '.agents');
31
+ }
32
+
33
+ const syncStatusPath = path.join(agentDir, 'sync-status.json');
34
+
35
+ if (fs.existsSync(syncStatusPath)) {
36
+ try {
37
+ const status = JSON.parse(fs.readFileSync(syncStatusPath, 'utf8'));
38
+ console.log(`| ${name} | ✅ Found | ${status.lastFullSync || 'Unknown'} | ${status.lastSyncSource || 'Unknown'} |`);
39
+ } catch (e) {
40
+ console.log(`| ${name} | ⚠️ Parse Error | - | - |`);
41
+ }
42
+ } else {
43
+ console.log(`| ${name} | ❌ Missing | - | - |`);
44
+ }
45
+ }