@jakkrichm/create-nexus-devflow 2.0.1 → 2.0.2

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.
Files changed (72) hide show
  1. package/package.json +1 -1
  2. package/template/.agents/skills/9arm-skills/README.md +3 -3
  3. package/template/.agents/skills/intelligent-routing/SKILL.md +1 -1
  4. package/template/.claude/skills/9arm-skills/README.md +3 -3
  5. package/template/.claude/skills/intelligent-routing/SKILL.md +1 -1
  6. package/template/.nexus/nexus-devflow.json +1 -1
  7. package/template/AGENTS.md +3 -3
  8. package/template/devflow/context/project_index.json +108 -0
  9. package/template/.agents/skills/check-for-updates/SKILL.md +0 -117
  10. package/template/.agents/skills/devflow-concept-intake/SKILL.md +0 -150
  11. package/template/.agents/skills/devflow-concept-intake/agents/openai.yaml +0 -4
  12. package/template/.agents/skills/devflow-concept-intake/references/adoption-proposal-template.md +0 -60
  13. package/template/.agents/skills/devflow-concept-intake/references/concept-report-template.md +0 -47
  14. package/template/.agents/skills/devflow-concept-intake/references/upstream-tracking-template.md +0 -51
  15. package/template/.agents/skills/devflow-wiki/SKILL.md +0 -75
  16. package/template/.agents/skills/english-to-thai-translator/SKILL.md +0 -125
  17. package/template/.agents/skills/obsidian-bases/SKILL.md +0 -506
  18. package/template/.agents/skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -173
  19. package/template/.agents/skills/obsidian-cli/SKILL.md +0 -115
  20. package/template/.agents/skills/obsidian-clipper-template-creator/SKILL.md +0 -73
  21. package/template/.agents/skills/obsidian-clipper-template-creator/assets/clipping-template.json +0 -51
  22. package/template/.agents/skills/obsidian-clipper-template-creator/assets/recipe-template.json +0 -48
  23. package/template/.agents/skills/obsidian-clipper-template-creator/references/analysis-workflow.md +0 -79
  24. package/template/.agents/skills/obsidian-clipper-template-creator/references/bases-workflow.md +0 -44
  25. package/template/.agents/skills/obsidian-clipper-template-creator/references/filters.md +0 -51
  26. package/template/.agents/skills/obsidian-clipper-template-creator/references/json-schema.md +0 -77
  27. package/template/.agents/skills/obsidian-clipper-template-creator/references/logic.md +0 -67
  28. package/template/.agents/skills/obsidian-clipper-template-creator/references/variables.md +0 -64
  29. package/template/.agents/skills/obsidian-markdown/SKILL.md +0 -205
  30. package/template/.agents/skills/obsidian-markdown/references/CALLOUTS.md +0 -58
  31. package/template/.agents/skills/obsidian-markdown/references/EMBEDS.md +0 -63
  32. package/template/.agents/skills/obsidian-markdown/references/PROPERTIES.md +0 -61
  33. package/template/.agents/skills/prompt-addons/SKILL.md +0 -99
  34. package/template/.agents/skills/prp-dev-fastapi/SKILL.md +0 -114
  35. package/template/.agents/skills/prp-dev-multiplatform/SKILL.md +0 -36
  36. package/template/.agents/skills/prp-dev-odoo/SKILL.md +0 -71
  37. package/template/.agents/skills/prp-dev-php/SKILL.md +0 -63
  38. package/template/.agents/skills/prp-sa-ba/SKILL.md +0 -52
  39. package/template/.agents/skills/red-team-tactics/SKILL.md +0 -199
  40. package/template/.agents/skills/writing-great-skills/SKILL.md +0 -65
  41. package/template/.claude/skills/check-for-updates/SKILL.md +0 -117
  42. package/template/.claude/skills/devflow-concept-intake/SKILL.md +0 -150
  43. package/template/.claude/skills/devflow-concept-intake/agents/openai.yaml +0 -4
  44. package/template/.claude/skills/devflow-concept-intake/references/adoption-proposal-template.md +0 -60
  45. package/template/.claude/skills/devflow-concept-intake/references/concept-report-template.md +0 -47
  46. package/template/.claude/skills/devflow-concept-intake/references/upstream-tracking-template.md +0 -51
  47. package/template/.claude/skills/devflow-wiki/SKILL.md +0 -75
  48. package/template/.claude/skills/english-to-thai-translator/SKILL.md +0 -125
  49. package/template/.claude/skills/obsidian-bases/SKILL.md +0 -506
  50. package/template/.claude/skills/obsidian-bases/references/FUNCTIONS_REFERENCE.md +0 -173
  51. package/template/.claude/skills/obsidian-cli/SKILL.md +0 -115
  52. package/template/.claude/skills/obsidian-clipper-template-creator/SKILL.md +0 -73
  53. package/template/.claude/skills/obsidian-clipper-template-creator/assets/clipping-template.json +0 -51
  54. package/template/.claude/skills/obsidian-clipper-template-creator/assets/recipe-template.json +0 -48
  55. package/template/.claude/skills/obsidian-clipper-template-creator/references/analysis-workflow.md +0 -79
  56. package/template/.claude/skills/obsidian-clipper-template-creator/references/bases-workflow.md +0 -44
  57. package/template/.claude/skills/obsidian-clipper-template-creator/references/filters.md +0 -51
  58. package/template/.claude/skills/obsidian-clipper-template-creator/references/json-schema.md +0 -77
  59. package/template/.claude/skills/obsidian-clipper-template-creator/references/logic.md +0 -67
  60. package/template/.claude/skills/obsidian-clipper-template-creator/references/variables.md +0 -64
  61. package/template/.claude/skills/obsidian-markdown/SKILL.md +0 -205
  62. package/template/.claude/skills/obsidian-markdown/references/CALLOUTS.md +0 -58
  63. package/template/.claude/skills/obsidian-markdown/references/EMBEDS.md +0 -63
  64. package/template/.claude/skills/obsidian-markdown/references/PROPERTIES.md +0 -61
  65. package/template/.claude/skills/prompt-addons/SKILL.md +0 -99
  66. package/template/.claude/skills/prp-dev-fastapi/SKILL.md +0 -114
  67. package/template/.claude/skills/prp-dev-multiplatform/SKILL.md +0 -36
  68. package/template/.claude/skills/prp-dev-odoo/SKILL.md +0 -71
  69. package/template/.claude/skills/prp-dev-php/SKILL.md +0 -63
  70. package/template/.claude/skills/prp-sa-ba/SKILL.md +0 -52
  71. package/template/.claude/skills/red-team-tactics/SKILL.md +0 -199
  72. package/template/.claude/skills/writing-great-skills/SKILL.md +0 -65
@@ -1,173 +0,0 @@
1
- # Functions Reference
2
-
3
- ## Global Functions
4
-
5
- | Function | Signature | Description |
6
- |----------|-----------|-------------|
7
- | `date()` | `date(string): date` | Parse string to date. Format: `YYYY-MM-DD HH:mm:ss` |
8
- | `duration()` | `duration(string): duration` | Parse duration string |
9
- | `now()` | `now(): date` | Current date and time |
10
- | `today()` | `today(): date` | Current date (time = 00:00:00) |
11
- | `if()` | `if(condition, trueResult, falseResult?)` | Conditional |
12
- | `min()` | `min(n1, n2, ...): number` | Smallest number |
13
- | `max()` | `max(n1, n2, ...): number` | Largest number |
14
- | `number()` | `number(any): number` | Convert to number |
15
- | `link()` | `link(path, display?): Link` | Create a link |
16
- | `list()` | `list(element): List` | Wrap in list if not already |
17
- | `file()` | `file(path): file` | Get file object |
18
- | `image()` | `image(path): image` | Create image for rendering |
19
- | `icon()` | `icon(name): icon` | Lucide icon by name |
20
- | `html()` | `html(string): html` | Render as HTML |
21
- | `escapeHTML()` | `escapeHTML(string): string` | Escape HTML characters |
22
-
23
- ## Any Type Functions
24
-
25
- | Function | Signature | Description |
26
- |----------|-----------|-------------|
27
- | `isTruthy()` | `any.isTruthy(): boolean` | Coerce to boolean |
28
- | `isType()` | `any.isType(type): boolean` | Check type |
29
- | `toString()` | `any.toString(): string` | Convert to string |
30
-
31
- ## Date Functions & Fields
32
-
33
- **Fields:** `date.year`, `date.month`, `date.day`, `date.hour`, `date.minute`, `date.second`, `date.millisecond`
34
-
35
- | Function | Signature | Description |
36
- |----------|-----------|-------------|
37
- | `date()` | `date.date(): date` | Remove time portion |
38
- | `format()` | `date.format(string): string` | Format with Moment.js pattern |
39
- | `time()` | `date.time(): string` | Get time as string |
40
- | `relative()` | `date.relative(): string` | Human-readable relative time |
41
- | `isEmpty()` | `date.isEmpty(): boolean` | Always false for dates |
42
-
43
- ## Duration Type
44
-
45
- When subtracting two dates, the result is a **Duration** type (not a number). Duration has its own properties and methods.
46
-
47
- **Duration Fields:**
48
- | Field | Type | Description |
49
- |-------|------|-------------|
50
- | `duration.days` | Number | Total days in duration |
51
- | `duration.hours` | Number | Total hours in duration |
52
- | `duration.minutes` | Number | Total minutes in duration |
53
- | `duration.seconds` | Number | Total seconds in duration |
54
- | `duration.milliseconds` | Number | Total milliseconds in duration |
55
-
56
- **IMPORTANT:** Duration does NOT support `.round()`, `.floor()`, `.ceil()` directly. You must access a numeric field first (like `.days`), then apply number functions.
57
-
58
- ```yaml
59
- # CORRECT: Calculate days between dates
60
- "(date(due_date) - today()).days" # Returns number of days
61
- "(now() - file.ctime).days" # Days since created
62
-
63
- # CORRECT: Round the numeric result if needed
64
- "(date(due_date) - today()).days.round(0)" # Rounded days
65
- "(now() - file.ctime).hours.round(0)" # Rounded hours
66
-
67
- # WRONG - will cause error:
68
- # "((date(due) - today()) / 86400000).round(0)" # Duration doesn't support division then round
69
- ```
70
-
71
- ## Date Arithmetic
72
-
73
- ```yaml
74
- # Duration units: y/year/years, M/month/months, d/day/days,
75
- # w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
76
-
77
- # Add/subtract durations
78
- "date + \"1M\"" # Add 1 month
79
- "date - \"2h\"" # Subtract 2 hours
80
- "now() + \"1 day\"" # Tomorrow
81
- "today() + \"7d\"" # A week from today
82
-
83
- # Subtract dates returns Duration type
84
- "now() - file.ctime" # Returns Duration
85
- "(now() - file.ctime).days" # Get days as number
86
- "(now() - file.ctime).hours" # Get hours as number
87
-
88
- # Complex duration arithmetic
89
- "now() + (duration('1d') * 2)"
90
- ```
91
-
92
- ## String Functions
93
-
94
- **Field:** `string.length`
95
-
96
- | Function | Signature | Description |
97
- |----------|-----------|-------------|
98
- | `contains()` | `string.contains(value): boolean` | Check substring |
99
- | `containsAll()` | `string.containsAll(...values): boolean` | All substrings present |
100
- | `containsAny()` | `string.containsAny(...values): boolean` | Any substring present |
101
- | `startsWith()` | `string.startsWith(query): boolean` | Starts with query |
102
- | `endsWith()` | `string.endsWith(query): boolean` | Ends with query |
103
- | `isEmpty()` | `string.isEmpty(): boolean` | Empty or not present |
104
- | `lower()` | `string.lower(): string` | To lowercase |
105
- | `title()` | `string.title(): string` | To Title Case |
106
- | `trim()` | `string.trim(): string` | Remove whitespace |
107
- | `replace()` | `string.replace(pattern, replacement): string` | Replace pattern |
108
- | `repeat()` | `string.repeat(count): string` | Repeat string |
109
- | `reverse()` | `string.reverse(): string` | Reverse string |
110
- | `slice()` | `string.slice(start, end?): string` | Substring |
111
- | `split()` | `string.split(separator, n?): list` | Split to list |
112
-
113
- ## Number Functions
114
-
115
- | Function | Signature | Description |
116
- |----------|-----------|-------------|
117
- | `abs()` | `number.abs(): number` | Absolute value |
118
- | `ceil()` | `number.ceil(): number` | Round up |
119
- | `floor()` | `number.floor(): number` | Round down |
120
- | `round()` | `number.round(digits?): number` | Round to digits |
121
- | `toFixed()` | `number.toFixed(precision): string` | Fixed-point notation |
122
- | `isEmpty()` | `number.isEmpty(): boolean` | Not present |
123
-
124
- ## List Functions
125
-
126
- **Field:** `list.length`
127
-
128
- | Function | Signature | Description |
129
- |----------|-----------|-------------|
130
- | `contains()` | `list.contains(value): boolean` | Element exists |
131
- | `containsAll()` | `list.containsAll(...values): boolean` | All elements exist |
132
- | `containsAny()` | `list.containsAny(...values): boolean` | Any element exists |
133
- | `filter()` | `list.filter(expression): list` | Filter by condition (uses `value`, `index`) |
134
- | `map()` | `list.map(expression): list` | Transform elements (uses `value`, `index`) |
135
- | `reduce()` | `list.reduce(expression, initial): any` | Reduce to single value (uses `value`, `index`, `acc`) |
136
- | `flat()` | `list.flat(): list` | Flatten nested lists |
137
- | `join()` | `list.join(separator): string` | Join to string |
138
- | `reverse()` | `list.reverse(): list` | Reverse order |
139
- | `slice()` | `list.slice(start, end?): list` | Sublist |
140
- | `sort()` | `list.sort(): list` | Sort ascending |
141
- | `unique()` | `list.unique(): list` | Remove duplicates |
142
- | `isEmpty()` | `list.isEmpty(): boolean` | No elements |
143
-
144
- ## File Functions
145
-
146
- | Function | Signature | Description |
147
- |----------|-----------|-------------|
148
- | `asLink()` | `file.asLink(display?): Link` | Convert to link |
149
- | `hasLink()` | `file.hasLink(otherFile): boolean` | Has link to file |
150
- | `hasTag()` | `file.hasTag(...tags): boolean` | Has any of the tags |
151
- | `hasProperty()` | `file.hasProperty(name): boolean` | Has property |
152
- | `inFolder()` | `file.inFolder(folder): boolean` | In folder or subfolder |
153
-
154
- ## Link Functions
155
-
156
- | Function | Signature | Description |
157
- |----------|-----------|-------------|
158
- | `asFile()` | `link.asFile(): file` | Get file object |
159
- | `linksTo()` | `link.linksTo(file): boolean` | Links to file |
160
-
161
- ## Object Functions
162
-
163
- | Function | Signature | Description |
164
- |----------|-----------|-------------|
165
- | `isEmpty()` | `object.isEmpty(): boolean` | No properties |
166
- | `keys()` | `object.keys(): list` | List of keys |
167
- | `values()` | `object.values(): list` | List of values |
168
-
169
- ## Regular Expression Functions
170
-
171
- | Function | Signature | Description |
172
- |----------|-----------|-------------|
173
- | `matches()` | `regexp.matches(string): boolean` | Test if matches |
@@ -1,115 +0,0 @@
1
- ---
2
- name: obsidian-cli
3
- description: "Use the Obsidian CLI to read, create, search, and manage vault content, or to develop and debug Obsidian plugins and themes from the command line."
4
- risk: unknown
5
- source: "https://github.com/kepano/obsidian-skills"
6
- date_added: "2026-03-21"
7
- ---
8
-
9
- # Obsidian CLI
10
-
11
- Use the `obsidian` CLI to interact with a running Obsidian instance. Requires Obsidian to be open.
12
-
13
- ## When to Use
14
-
15
- - Use when managing vault content through the Obsidian CLI.
16
- - Use when developing or debugging Obsidian plugins and themes from the command line.
17
- - Use when the user wants shell-driven interaction with a running Obsidian app.
18
-
19
- ## Command reference
20
-
21
- Run `obsidian help` to see all available commands. This is always up to date. Full docs: https://help.obsidian.md/cli
22
-
23
- ## Syntax
24
-
25
- **Parameters** take a value with `=`. Quote values with spaces:
26
-
27
- ```bash
28
- obsidian create name="My Note" content="Hello world"
29
- ```
30
-
31
- **Flags** are boolean switches with no value:
32
-
33
- ```bash
34
- obsidian create name="My Note" silent overwrite
35
- ```
36
-
37
- For multiline content use `\n` for newline and `\t` for tab.
38
-
39
- ## File targeting
40
-
41
- Many commands accept `file` or `path` to target a file. Without either, the active file is used.
42
-
43
- - `file=<name>` — resolves like a wikilink (name only, no path or extension needed)
44
- - `path=<path>` — exact path from vault root, e.g. `folder/note.md`
45
-
46
- ## Vault targeting
47
-
48
- Commands target the most recently focused vault by default. Use `vault=<name>` as the first parameter to target a specific vault:
49
-
50
- ```bash
51
- obsidian vault="My Vault" search query="test"
52
- ```
53
-
54
- ## Common patterns
55
-
56
- ```bash
57
- obsidian read file="My Note"
58
- obsidian create name="New Note" content="# Hello" template="Template" silent
59
- obsidian append file="My Note" content="New line"
60
- obsidian search query="search term" limit=10
61
- obsidian daily:read
62
- obsidian daily:append content="- [ ] New task"
63
- obsidian property:set name="status" value="done" file="My Note"
64
- obsidian tasks daily todo
65
- obsidian tags sort=count counts
66
- obsidian backlinks file="My Note"
67
- ```
68
-
69
- Use `--copy` on any command to copy output to clipboard. Use `silent` to prevent files from opening. Use `total` on list commands to get a count.
70
-
71
- ## Plugin development
72
-
73
- ### Develop/test cycle
74
-
75
- After making code changes to a plugin or theme, follow this workflow:
76
-
77
- 1. **Reload** the plugin to pick up changes:
78
- ```bash
79
- obsidian plugin:reload id=my-plugin
80
- ```
81
- 2. **Check for errors** — if errors appear, fix and repeat from step 1:
82
- ```bash
83
- obsidian dev:errors
84
- ```
85
- 3. **Verify visually** with a screenshot or DOM inspection:
86
- ```bash
87
- obsidian dev:screenshot path=screenshot.png
88
- obsidian dev:dom selector=".workspace-leaf" text
89
- ```
90
- 4. **Check console output** for warnings or unexpected logs:
91
- ```bash
92
- obsidian dev:console level=error
93
- ```
94
-
95
- ### Additional developer commands
96
-
97
- Run JavaScript in the app context:
98
-
99
- ```bash
100
- obsidian eval code="app.vault.getFiles().length"
101
- ```
102
-
103
- Inspect CSS values:
104
-
105
- ```bash
106
- obsidian dev:css selector=".workspace-leaf" prop=background-color
107
- ```
108
-
109
- Toggle mobile emulation:
110
-
111
- ```bash
112
- obsidian dev:mobile on
113
- ```
114
-
115
- Run `obsidian help` to see additional developer commands including CDP and debugger controls.
@@ -1,73 +0,0 @@
1
- ---
2
- name: obsidian-clipper-template-creator
3
- description: Guide for creating templates for the Obsidian Web Clipper. Use when you want to create a new clipping template, understand available variables, or format clipped content.
4
- risk: safe
5
- source: community
6
- date_added: "2026-02-27"
7
- ---
8
-
9
- # Obsidian Web Clipper Template Creator
10
-
11
- This skill helps you create importable JSON templates for the Obsidian Web Clipper.
12
-
13
- ## Workflow
14
-
15
- 1. **Identify User Intent:** specific site (YouTube), specific type (Recipe), or general clipping?
16
- 2. **Check Existing Bases:** The user likely has a "Base" schema defined in `Bases/`.
17
- - **Action:** Read `Bases/*.base` to find a matching category (e.g., `Recipes.base`).
18
- - **Action:** Use the properties defined in the Base to structure the Clipper template properties.
19
- - See [references/bases-workflow.md](references/bases-workflow.md) for details.
20
- 3. **Fetch & Analyze Reference URL:** Validate variables against a real page.
21
- - **Action:** Ask the user for a sample URL of the content they want to clip (if not provided).
22
- - **Action (REQUIRED):** Use **WebFetch** to retrieve page content; if WebFetch is not available, use a browser DOM snapshot. See [references/analysis-workflow.md](references/analysis-workflow.md).
23
- - **Action:** Analyze the HTML for Schema.org JSON, Meta tags, and CSS selectors.
24
- - **Action (REQUIRED):** Verify each selector against the fetched content. Do not guess selectors.
25
- - See [references/analysis-workflow.md](references/analysis-workflow.md) for analysis techniques.
26
- 4. **Draft the JSON:** Create a valid JSON object following the schema.
27
- - See [references/json-schema.md](references/json-schema.md).
28
- 5. **Consider template logic:** Use conditionals for optional blocks (e.g. show nutrition only if present), loops for list data, variable assignment to avoid repeating expressions, and fallbacks for missing variables. Use logic only when it improves the template; keep simple templates simple. See [references/logic.md](references/logic.md).
29
- 6. **Verify Variables:** Ensure the chosen variables (Preset, Schema, Selector) exist in your analysis.
30
- - **Action (REQUIRED):** If a selector cannot be verified from the fetched content, state that explicitly and ask for another URL.
31
- - See [references/variables.md](references/variables.md).
32
-
33
- ## Selector Verification Rules
34
-
35
- - **Always verify selectors** against live page content before responding.
36
- - **Never guess selectors.** If the DOM cannot be accessed or the element is missing, ask for another URL or a screenshot.
37
- - **Prefer stable selectors** (data attributes, semantic roles, unique IDs) over fragile class chains.
38
- - **Document the target element** in your reasoning (e.g., "About sidebar paragraph") to reduce mismatch.
39
-
40
- ## Output Format
41
-
42
- **ALWAYS** output the final result as a JSON code block that the user can copy and import.
43
-
44
- The Clipper template editor validates template syntax.
45
- If you use template logic (conditionals, loops, variable assignment), ensure it follows the syntax in [references/logic.md](references/logic.md) and the official [Logic](https://help.obsidian.md/web-clipper/logic) docs so the template passes validation.
46
-
47
- ```json
48
- {
49
- "schemaVersion": "0.1.0",
50
- "name": "My Template",
51
- ...
52
- }
53
- ```
54
-
55
- ## Resources
56
-
57
- - [references/variables.md](references/variables.md) - Available data variables.
58
- - [references/filters.md](references/filters.md) - Formatting filters.
59
- - [references/json-schema.md](references/json-schema.md) - JSON structure documentation.
60
- - [references/logic.md](references/logic.md) - Template logic.
61
- - [references/bases-workflow.md](references/bases-workflow.md) - How to map Bases to Templates.
62
- - [references/analysis-workflow.md](references/analysis-workflow.md) - How to validate page data.
63
-
64
- ### Official Documentation
65
-
66
- - [Variables](https://help.obsidian.md/web-clipper/variables)
67
- - [Filters](https://help.obsidian.md/web-clipper/filters)
68
- - [Logic](https://help.obsidian.md/web-clipper/logic)
69
- - [Templates](https://help.obsidian.md/web-clipper/templates)
70
-
71
- ## Examples
72
-
73
- See [assets/](assets/) for JSON examples.
@@ -1,51 +0,0 @@
1
- {
2
- "schemaVersion": "0.1.0",
3
- "name": "General Clipping",
4
- "behavior": "create",
5
- "noteContentFormat": "{{content}}",
6
- "properties": [
7
- {
8
- "name": "categories",
9
- "value": "[[Clippings]]",
10
- "type": "multitext"
11
- },
12
- {
13
- "name": "author",
14
- "value": "[[{{author}}]]",
15
- "type": "multitext"
16
- },
17
- {
18
- "name": "source",
19
- "value": "{{url}}",
20
- "type": "text"
21
- },
22
- {
23
- "name": "via",
24
- "value": "",
25
- "type": "text"
26
- },
27
- {
28
- "name": "published",
29
- "value": "{{published}}",
30
- "type": "datetime"
31
- },
32
- {
33
- "name": "created",
34
- "value": "{{date}}",
35
- "type": "datetime"
36
- },
37
- {
38
- "name": "topics",
39
- "value": "",
40
- "type": "multitext"
41
- },
42
- {
43
- "name": "description",
44
- "value": "{{description}}",
45
- "type": "text"
46
- }
47
- ],
48
- "triggers": [],
49
- "noteNameFormat": "{{title}}",
50
- "path": "Clippings/"
51
- }
@@ -1,48 +0,0 @@
1
- {
2
- "schemaVersion": "0.1.0",
3
- "name": "Recipe",
4
- "behavior": "create",
5
- "noteContentFormat": "![{{schema:Recipe:image|first}}]\n\n## Description\n{{schema:Recipe:description}}\n\n## Ingredients\n{{schema:Recipe:recipeIngredient|list}}\n\n## Instructions\n{{schema:Recipe:recipeInstructions|map:step =>> step.text|list}}\n\n## Nutrition\n- Calories: {{schema:Recipe:nutrition.calories}}",
6
- "properties": [
7
- {
8
- "name": "categories",
9
- "value": "[[Recipes]]",
10
- "type": "multitext"
11
- },
12
- {
13
- "name": "author",
14
- "value": "[[{{schema:Recipe:author.name}}]]",
15
- "type": "text"
16
- },
17
- {
18
- "name": "source",
19
- "value": "{{url}}",
20
- "type": "text"
21
- },
22
- {
23
- "name": "ingredients",
24
- "value": "{{schema:Recipe:recipeIngredient}}",
25
- "type": "multitext"
26
- },
27
- {
28
- "name": "cuisine",
29
- "value": "{{schema:Recipe:recipeCuisine}}",
30
- "type": "text"
31
- },
32
- {
33
- "name": "rating",
34
- "value": "",
35
- "type": "number"
36
- },
37
- {
38
- "name": "type",
39
- "value": "Recipe",
40
- "type": "text"
41
- }
42
- ],
43
- "triggers": [
44
- "schema:Recipe"
45
- ],
46
- "noteNameFormat": "{{schema:Recipe:name}}",
47
- "path": "Recipes/"
48
- }
@@ -1,79 +0,0 @@
1
- # Analysis Workflow: Validating Variables
2
-
3
- To ensure your template works correctly, you must validate that the target page actually contains the data you want to extract.
4
-
5
- ## 1. Fetch the Page
6
-
7
- Use the `WebFetch` tool or a browser DOM snapshot to retrieve the content of a representative URL provided by the user.
8
-
9
- ```text
10
- WebFetch(url="https://example.com/recipe/chocolate-cake")
11
- ```
12
-
13
- ## 2. Analyze the Output
14
-
15
- ### Check for Schema.org (Recommended)
16
-
17
- Look for `<script type="application/ld+json">`. This contains structured data which is the most reliable way to extract info.
18
-
19
- **Example Found in HTML:**
20
-
21
- ```html
22
- <script type="application/ld+json">
23
- {
24
- "@context": "https://schema.org/",
25
- "@type": "Recipe",
26
- "name": "Chocolate Cake",
27
- "author": {
28
- "@type": "Person",
29
- "name": "John Doe"
30
- }
31
- }
32
- ```
33
-
34
- **Conclusion:**
35
-
36
- - `{{schema:Recipe:name}}` is valid.
37
- - `{{schema:Recipe:author.name}}` is valid.
38
- - **Tip:** You can use `schema:Recipe` in the `triggers` array to automatically select this template for any page with this schema.
39
-
40
- ### Check for Meta Tags
41
-
42
- Look for `<meta>` tags in the `<head>` section.
43
-
44
- **Example Found in HTML:**
45
-
46
- ```html
47
- <meta property="og:title" content="The Best Chocolate Cake" />
48
- <meta name="description" content="A rich, moist chocolate cake recipe." />
49
- ```
50
-
51
- **Conclusion:**
52
-
53
- - `{{meta:og:title}}` is valid.
54
- - `{{meta:description}}` is valid.
55
-
56
- ### Check for CSS Selectors (Verified)
57
-
58
- If Schema and Meta tags are missing, look for HTML structure (classes and IDs) to use with `{{selector:...}}`.
59
- Selectors must be verified against the fetched HTML or DOM snapshot. Do not guess selectors.
60
-
61
- **Example Found in HTML:**
62
-
63
- ```html
64
- <div class="article-body">
65
- <h1 id="main-title">Chocolate Cake</h1>
66
- <span class="author-name">By John Doe</span>
67
- </div>
68
- ```
69
-
70
- **Conclusion:**
71
-
72
- - `{{selector:h1#main-title}}` or `{{selector:h1}}` can extract the title.
73
- - `{{selector:.author-name}}` can extract the author.
74
-
75
- ## 3. Verify Against Base
76
-
77
- Compare the available data from your analysis with the properties required by the user's Base (see [bases-workflow.md](bases-workflow.md)).
78
-
79
- - If the Base requires `ingredients` but the page has no Schema or clear list structure, warn the user that this field might need manual entry or a prompt variable.
@@ -1,44 +0,0 @@
1
- # Working with Obsidian Bases
2
-
3
- The user maintains "Bases" in `Bases/*.base` which define the schema and properties for different types of notes (e.g., Recipes, Clippings, People).
4
-
5
- ## Workflow
6
-
7
- 1. **Identify the Category:** Determine the type of content the user wants to clip (e.g., a Recipe, a News Article, a YouTube video).
8
- 2. **Find the Base:** Search `Bases/` for a matching `.base` file.
9
- * Example: For a recipe, look for `Bases/Recipes.base`.
10
- * Example: For a generic article, look for `Bases/Clippings.base`.
11
- 3. **Read the Base:** Read the content of the `.base` file to understand the required properties.
12
-
13
- ## Interpreting .base Files
14
-
15
- Base files use a YAML-like structure. Look for the `properties` section.
16
-
17
- ```yaml
18
- properties:
19
- file.name:
20
- displayName: name
21
- note.author:
22
- displayName: author
23
- note.type:
24
- displayName: type
25
- note.ingredients:
26
- displayName: ingredients
27
- ```
28
-
29
- * `note.X` corresponds to a property name `X` in the frontmatter.
30
- * `displayName` helps understand the intent, but the property key (e.g., `author`, `type`, `ingredients`) is what matters for the template.
31
-
32
- ## Mapping to Clipper Properties
33
-
34
- When creating the JSON for the Web Clipper, map the Base properties to the `properties` array in the JSON.
35
-
36
- | Base Property | Clipper JSON Property Name | Value Strategy |
37
- | :--- | :--- | :--- |
38
- | `note.author` | `author` | `{{author}}` or `{{schema:author.name}}` |
39
- | `note.source` | `source` | `{{url}}` |
40
- | `note.published` | `published` | `{{published}}` |
41
- | `note.ingredients` | `ingredients` | `{{schema:Recipe:recipeIngredient}}` |
42
- | `note.type` | `type` | Constant (e.g., `Recipe`) or empty |
43
-
44
- **Crucial Step:** Ask the user which properties should be automatically filled, which should be hardcoded (e.g., `type: Recipe`), and which should be left empty for manual entry.
@@ -1,51 +0,0 @@
1
- # Obsidian Web Clipper Filters
2
-
3
- **Official Docs:** [help.obsidian.md/web-clipper/filters](https://help.obsidian.md/web-clipper/filters)
4
-
5
- Use filters to format variables: `{{variable|filter}}`.
6
-
7
- ## Text Formatting
8
- - `markdown`: Convert HTML to Markdown.
9
- - `strip_tags`: Remove HTML tags.
10
- - `trim`: Remove whitespace.
11
- - `upper`: Convert to uppercase.
12
- - `lower`: Convert to lowercase.
13
- - `title`: Title Case.
14
- - `capitalize`: Capitalize first letter.
15
- - `camel`: CamelCase.
16
- - `kebab`: kebab-case.
17
- - `snake`: snake_case.
18
- - `pascal`: PascalCase.
19
- - `replace:"old","new"`: Replace text.
20
- - `safe_name`: Make safe for filenames.
21
- - `blockquote`: Format as blockquote.
22
- - `link`: Create markdown link.
23
- - `wikilink`: Create [[wikilink]].
24
- - `list`: Format array as list.
25
- - `table`: Format array as table.
26
- - `callout`: Format as callout block.
27
-
28
- ## Dates
29
- - `date:"format"`: Format date (e.g., `YYYY-MM-DD`).
30
- - `date_modify:"+1 day"`: Modify date.
31
- - `duration`: Format duration.
32
-
33
- ## Numbers
34
- - `calc`: Perform calculations.
35
- - `length`: Get length of string/array.
36
- - `round`: Round numbers.
37
-
38
- ## HTML Processing
39
- - `remove_html`: Remove HTML tags.
40
- - `remove_attr`: Remove attributes.
41
- - `strip_attr`: Strip specific attributes.
42
-
43
- ## Arrays and Objects
44
- - `map`: Transform array items (e.g., `map:item =>> item.text`).
45
- - `join:"separator"`: Join array items.
46
- - `split:"separator"`: Split string into array.
47
- - `first`: First item.
48
- - `last`: Last item.
49
- - `slice:start,end`: Slice array.
50
- - `unique`: Unique items.
51
- - `template:"format"`: Format items using a template string.