bobo-ai-cli 1.0.1

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 (234) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +216 -0
  3. package/dist/agent.d.ts +9 -0
  4. package/dist/agent.js +144 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/config.d.ts +15 -0
  7. package/dist/config.js +76 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.js +366 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/knowledge-commands.d.ts +2 -0
  13. package/dist/knowledge-commands.js +40 -0
  14. package/dist/knowledge-commands.js.map +1 -0
  15. package/dist/knowledge.d.ts +17 -0
  16. package/dist/knowledge.js +112 -0
  17. package/dist/knowledge.js.map +1 -0
  18. package/dist/memory.d.ts +17 -0
  19. package/dist/memory.js +215 -0
  20. package/dist/memory.js.map +1 -0
  21. package/dist/planner.d.ts +22 -0
  22. package/dist/planner.js +130 -0
  23. package/dist/planner.js.map +1 -0
  24. package/dist/project.d.ts +25 -0
  25. package/dist/project.js +117 -0
  26. package/dist/project.js.map +1 -0
  27. package/dist/rules-commands.d.ts +2 -0
  28. package/dist/rules-commands.js +51 -0
  29. package/dist/rules-commands.js.map +1 -0
  30. package/dist/skills.d.ts +28 -0
  31. package/dist/skills.js +349 -0
  32. package/dist/skills.js.map +1 -0
  33. package/dist/structured/loader.d.ts +19 -0
  34. package/dist/structured/loader.js +147 -0
  35. package/dist/structured/loader.js.map +1 -0
  36. package/dist/structured/paths.d.ts +2 -0
  37. package/dist/structured/paths.js +14 -0
  38. package/dist/structured/paths.js.map +1 -0
  39. package/dist/structured/project-scaffold.d.ts +7 -0
  40. package/dist/structured/project-scaffold.js +60 -0
  41. package/dist/structured/project-scaffold.js.map +1 -0
  42. package/dist/structured/render-markdown.d.ts +37 -0
  43. package/dist/structured/render-markdown.js +47 -0
  44. package/dist/structured/render-markdown.js.map +1 -0
  45. package/dist/structured/render-table.d.ts +1 -0
  46. package/dist/structured/render-table.js +15 -0
  47. package/dist/structured/render-table.js.map +1 -0
  48. package/dist/structured/search.d.ts +10 -0
  49. package/dist/structured/search.js +104 -0
  50. package/dist/structured/search.js.map +1 -0
  51. package/dist/structured/skill-runner.d.ts +15 -0
  52. package/dist/structured/skill-runner.js +60 -0
  53. package/dist/structured/skill-runner.js.map +1 -0
  54. package/dist/structured/types.d.ts +212 -0
  55. package/dist/structured/types.js +97 -0
  56. package/dist/structured/types.js.map +1 -0
  57. package/dist/structured-skills-commands.d.ts +3 -0
  58. package/dist/structured-skills-commands.js +126 -0
  59. package/dist/structured-skills-commands.js.map +1 -0
  60. package/dist/structured-template-commands.d.ts +2 -0
  61. package/dist/structured-template-commands.js +34 -0
  62. package/dist/structured-template-commands.js.map +1 -0
  63. package/dist/tools/index.d.ts +3 -0
  64. package/dist/tools/index.js +450 -0
  65. package/dist/tools/index.js.map +1 -0
  66. package/dist/ui.d.ts +19 -0
  67. package/dist/ui.js +72 -0
  68. package/dist/ui.js.map +1 -0
  69. package/dist/web.d.ts +4 -0
  70. package/dist/web.js +124 -0
  71. package/dist/web.js.map +1 -0
  72. package/knowledge/advanced-patterns.md +70 -0
  73. package/knowledge/agent-directives.md +74 -0
  74. package/knowledge/dream.md +36 -0
  75. package/knowledge/engineering.md +46 -0
  76. package/knowledge/error-catalog.md +33 -0
  77. package/knowledge/index.json +170 -0
  78. package/knowledge/memory/cache-optimization-and-skill-integration.md +102 -0
  79. package/knowledge/memory/engineering-patterns.md +134 -0
  80. package/knowledge/memory/feedback_root_structure.md +16 -0
  81. package/knowledge/memory/project-contexts.md +69 -0
  82. package/knowledge/memory/tools-and-services.md +85 -0
  83. package/knowledge/rules/agents.md +62 -0
  84. package/knowledge/rules/blocking-rules.md +323 -0
  85. package/knowledge/rules/cache-management.md +379 -0
  86. package/knowledge/rules/capability-evolution.md +132 -0
  87. package/knowledge/rules/coding.md +126 -0
  88. package/knowledge/rules/engineering-workflows.md +225 -0
  89. package/knowledge/rules/evomap-content-guidelines.md +354 -0
  90. package/knowledge/rules/evomap-guide.md +224 -0
  91. package/knowledge/rules/git.md +31 -0
  92. package/knowledge/rules/hooks.md +106 -0
  93. package/knowledge/rules/performance.md +101 -0
  94. package/knowledge/rules/remotion-auto-production.md +1120 -0
  95. package/knowledge/rules/security.md +46 -0
  96. package/knowledge/rules/testing.md +32 -0
  97. package/knowledge/rules/work-mode.md +208 -0
  98. package/knowledge/rules.md +62 -0
  99. package/knowledge/skills/Skill_Seekers.md +1722 -0
  100. package/knowledge/skills/ab-test-setup.md +557 -0
  101. package/knowledge/skills/agent-sdk-dev.md +238 -0
  102. package/knowledge/skills/agent-tools.md +136 -0
  103. package/knowledge/skills/analytics-tracking.md +597 -0
  104. package/knowledge/skills/artifacts-builder.md +89 -0
  105. package/knowledge/skills/asana.md +13 -0
  106. package/knowledge/skills/backend-expert.md +97 -0
  107. package/knowledge/skills/brand-voice.md +481 -0
  108. package/knowledge/skills/browser-use.md +419 -0
  109. package/knowledge/skills/cache-optimization-skill.md +179 -0
  110. package/knowledge/skills/canvas-design.md +147 -0
  111. package/knowledge/skills/citation-validator.md +203 -0
  112. package/knowledge/skills/clangd-lsp.md +52 -0
  113. package/knowledge/skills/code-review-expert.md +85 -0
  114. package/knowledge/skills/code-review.md +280 -0
  115. package/knowledge/skills/code-simplifier.md +13 -0
  116. package/knowledge/skills/commit-commands.md +258 -0
  117. package/knowledge/skills/competitor-alternatives.md +795 -0
  118. package/knowledge/skills/content-atomizer.md +910 -0
  119. package/knowledge/skills/content-research-writer.md +605 -0
  120. package/knowledge/skills/context-optimization-suite.md +162 -0
  121. package/knowledge/skills/context7.md +13 -0
  122. package/knowledge/skills/copy-editing.md +494 -0
  123. package/knowledge/skills/copywriting.md +510 -0
  124. package/knowledge/skills/csharp-lsp.md +40 -0
  125. package/knowledge/skills/decision-making-framework.md +154 -0
  126. package/knowledge/skills/developer-growth-analysis.md +335 -0
  127. package/knowledge/skills/direct-response-copy.md +2336 -0
  128. package/knowledge/skills/docker-expert.md +229 -0
  129. package/knowledge/skills/document-skills.md +13 -0
  130. package/knowledge/skills/documentation-expert.md +126 -0
  131. package/knowledge/skills/email-sequence.md +1061 -0
  132. package/knowledge/skills/email-sequences.md +910 -0
  133. package/knowledge/skills/example-plugin.md +72 -0
  134. package/knowledge/skills/explanatory-output-style.md +82 -0
  135. package/knowledge/skills/feature-dev.md +458 -0
  136. package/knowledge/skills/file-organizer.md +466 -0
  137. package/knowledge/skills/firebase.disabled.md +13 -0
  138. package/knowledge/skills/form-cro.md +488 -0
  139. package/knowledge/skills/free-tool-strategy.md +636 -0
  140. package/knowledge/skills/frontend-design-offical.md +55 -0
  141. package/knowledge/skills/frontend-design.md +41 -0
  142. package/knowledge/skills/frontend-expert.md +93 -0
  143. package/knowledge/skills/github.md +13 -0
  144. package/knowledge/skills/gitlab.md +13 -0
  145. package/knowledge/skills/gopls-lsp.md +32 -0
  146. package/knowledge/skills/got-controller.md +218 -0
  147. package/knowledge/skills/greptile.md +72 -0
  148. package/knowledge/skills/hookify.md +376 -0
  149. package/knowledge/skills/image-editor.md +189 -0
  150. package/knowledge/skills/image-enhancer.md +109 -0
  151. package/knowledge/skills/jdtls-lsp.md +49 -0
  152. package/knowledge/skills/json-canvas.md +654 -0
  153. package/knowledge/skills/keyword-research.md +559 -0
  154. package/knowledge/skills/kotlin-lsp.md +28 -0
  155. package/knowledge/skills/laravel-boost.md +13 -0
  156. package/knowledge/skills/launch-strategy.md +394 -0
  157. package/knowledge/skills/lead-magnet.md +393 -0
  158. package/knowledge/skills/learning-output-style.md +106 -0
  159. package/knowledge/skills/linear.md +13 -0
  160. package/knowledge/skills/lua-lsp.md +47 -0
  161. package/knowledge/skills/marketing-ideas.md +720 -0
  162. package/knowledge/skills/marketing-psychology.md +534 -0
  163. package/knowledge/skills/mcp-builder.md +369 -0
  164. package/knowledge/skills/meeting-insights-analyzer.md +347 -0
  165. package/knowledge/skills/memory-evolution-system.md +172 -0
  166. package/knowledge/skills/multi-lens-thinking.md +407 -0
  167. package/knowledge/skills/nano-banana-pro.md +116 -0
  168. package/knowledge/skills/newsletter.md +736 -0
  169. package/knowledge/skills/notebooklm.md +296 -0
  170. package/knowledge/skills/obsidian-bases.md +634 -0
  171. package/knowledge/skills/obsidian-markdown.md +651 -0
  172. package/knowledge/skills/onboarding-cro.md +494 -0
  173. package/knowledge/skills/orchestrator.md +681 -0
  174. package/knowledge/skills/page-cro.md +379 -0
  175. package/knowledge/skills/paid-ads.md +624 -0
  176. package/knowledge/skills/paywall-upgrade-cro.md +651 -0
  177. package/knowledge/skills/php-lsp.md +36 -0
  178. package/knowledge/skills/planning-with-files.md +193 -0
  179. package/knowledge/skills/playwright.md +13 -0
  180. package/knowledge/skills/plugin-dev.md +434 -0
  181. package/knowledge/skills/popup-cro.md +520 -0
  182. package/knowledge/skills/positioning-angles.md +330 -0
  183. package/knowledge/skills/pr-review-toolkit.md +359 -0
  184. package/knowledge/skills/pricing-strategy.md +777 -0
  185. package/knowledge/skills/programmatic-seo.md +714 -0
  186. package/knowledge/skills/pyright-lsp.md +43 -0
  187. package/knowledge/skills/quality-assurance-framework.md +168 -0
  188. package/knowledge/skills/question-refiner.md +160 -0
  189. package/knowledge/skills/ralph-loop.md +205 -0
  190. package/knowledge/skills/refactoring-expert.md +103 -0
  191. package/knowledge/skills/referral-program.md +668 -0
  192. package/knowledge/skills/research-executor.md +164 -0
  193. package/knowledge/skills/review-with-security.md +12 -0
  194. package/knowledge/skills/rust-analyzer-lsp.md +50 -0
  195. package/knowledge/skills/schema-markup.md +647 -0
  196. package/knowledge/skills/security-audit-expert.md +124 -0
  197. package/knowledge/skills/security-expert.md +140 -0
  198. package/knowledge/skills/security-guidance.md +13 -0
  199. package/knowledge/skills/seedance-prompt.md +139 -0
  200. package/knowledge/skills/self-evolution.md +1160 -0
  201. package/knowledge/skills/seo-audit.md +432 -0
  202. package/knowledge/skills/seo-content.md +787 -0
  203. package/knowledge/skills/serena.md +13 -0
  204. package/knowledge/skills/signup-flow-cro.md +409 -0
  205. package/knowledge/skills/skill-creator.md +220 -0
  206. package/knowledge/skills/skill-manager.md +226 -0
  207. package/knowledge/skills/skill-share.md +98 -0
  208. package/knowledge/skills/slack.md +13 -0
  209. package/knowledge/skills/social-content.md +878 -0
  210. package/knowledge/skills/spec-flow-skill.md +124 -0
  211. package/knowledge/skills/stripe.md +13 -0
  212. package/knowledge/skills/supabase.md +13 -0
  213. package/knowledge/skills/swift-lsp.md +40 -0
  214. package/knowledge/skills/synthesizer.md +236 -0
  215. package/knowledge/skills/template-skill.md +16 -0
  216. package/knowledge/skills/testing-expert.md +99 -0
  217. package/knowledge/skills/theme-factory.md +72 -0
  218. package/knowledge/skills/tiktok-research.md +208 -0
  219. package/knowledge/skills/typescript-lsp.md +36 -0
  220. package/knowledge/skills/ui-ux-pro-max.md +247 -0
  221. package/knowledge/skills/verify.md +15 -0
  222. package/knowledge/skills/visual-prompt-engineer.md +102 -0
  223. package/knowledge/skills/webapp-testing.md +111 -0
  224. package/knowledge/skills/wide-research.md +191 -0
  225. package/knowledge/system.md +93 -0
  226. package/knowledge/task-router.md +37 -0
  227. package/knowledge/verification.md +38 -0
  228. package/knowledge/workflows/3d-viz.md +47 -0
  229. package/knowledge/workflows/data-pipeline.md +47 -0
  230. package/knowledge/workflows/db-migration.md +51 -0
  231. package/knowledge/workflows/feature-dev.md +41 -0
  232. package/knowledge/workflows/tdd-flow.md +52 -0
  233. package/knowledge/workflows/ui-verify.md +51 -0
  234. package/package.json +60 -0
@@ -0,0 +1,634 @@
1
+ ---
2
+ id: "obsidian-bases"
3
+ title: "Obsidian Bases Skill"
4
+ category: "knowledge"
5
+ tags: ["obsidian bases skill", "overview", "file format", "complete schema", "define one or more views", "filter syntax", "single filter", "not - exclude matching items", "nested filters", "properties"]
6
+ triggers: []
7
+ dependencies: []
8
+ source: "E:/Bobo's Coding cache/.claude/skills/obsidian-bases"
9
+ ---
10
+
11
+ ---
12
+ name: obsidian-bases
13
+ description: Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian.
14
+ ---
15
+
16
+ # Obsidian Bases Skill
17
+
18
+ This skill enables Claude Code to create and edit valid Obsidian Bases (`.base` files) including views, filters, formulas, and all related configurations.
19
+
20
+ ## Overview
21
+
22
+ Obsidian Bases are YAML-based files that define dynamic views of notes in an Obsidian vault. A Base file can contain multiple views, global filters, formulas, property configurations, and custom summaries.
23
+
24
+ ## File Format
25
+
26
+ Base files use the `.base` extension and contain valid YAML. They can also be embedded in Markdown code blocks.
27
+
28
+ ## Complete Schema
29
+
30
+ ```yaml
31
+ # Global filters apply to ALL views in the base
32
+ filters:
33
+ # Can be a single filter string
34
+ # OR a recursive filter object with and/or/not
35
+ and: []
36
+ or: []
37
+ not: []
38
+
39
+ # Define formula properties that can be used across all views
40
+ formulas:
41
+ formula_name: 'expression'
42
+
43
+ # Configure display names and settings for properties
44
+ properties:
45
+ property_name:
46
+ displayName: 'Display Name'
47
+ formula.formula_name:
48
+ displayName: 'Formula Display Name'
49
+ file.ext:
50
+ displayName: 'Extension'
51
+
52
+ # Define custom summary formulas
53
+ summaries:
54
+ custom_summary_name: 'values.mean().round(3)'
55
+
56
+ # Define one or more views
57
+ views:
58
+ - type: table | cards | list | map
59
+ name: 'View Name'
60
+ limit: 10 # Optional: limit results
61
+ groupBy: # Optional: group results
62
+ property: property_name
63
+ direction: ASC | DESC
64
+ filters: # View-specific filters
65
+ and: []
66
+ order: # Properties to display in order
67
+ - file.name
68
+ - property_name
69
+ - formula.formula_name
70
+ summaries: # Map properties to summary formulas
71
+ property_name: Average
72
+ ```
73
+
74
+ ## Filter Syntax
75
+
76
+ Filters narrow down results. They can be applied globally or per-view.
77
+
78
+ ### Filter Structure
79
+
80
+ ```yaml
81
+ # Single filter
82
+ filters: 'status == "done"'
83
+
84
+ # AND - all conditions must be true
85
+ filters:
86
+ and:
87
+ - 'status == "done"'
88
+ - 'priority > 3'
89
+
90
+ # OR - any condition can be true
91
+ filters:
92
+ or:
93
+ - 'file.hasTag("book")'
94
+ - 'file.hasTag("article")'
95
+
96
+ # NOT - exclude matching items
97
+ filters:
98
+ not:
99
+ - 'file.hasTag("archived")'
100
+
101
+ # Nested filters
102
+ filters:
103
+ or:
104
+ - file.hasTag("tag")
105
+ - and:
106
+ - file.hasTag("book")
107
+ - file.hasLink("Textbook")
108
+ - not:
109
+ - file.hasTag("book")
110
+ - file.inFolder("Required Reading")
111
+ ```
112
+
113
+ ### Filter Operators
114
+
115
+ | Operator | Description |
116
+ | -------- | --------------------- |
117
+ | `==` | equals |
118
+ | `!=` | not equal |
119
+ | `>` | greater than |
120
+ | `<` | less than |
121
+ | `>=` | greater than or equal |
122
+ | `<=` | less than or equal |
123
+ | `&&` | logical and |
124
+ | `\|\|` | logical or |
125
+ | `!` | logical not |
126
+
127
+ ## Properties
128
+
129
+ ### Three Types of Properties
130
+
131
+ 1. **Note properties** - From frontmatter: `note.author` or just `author`
132
+ 2. **File properties** - File metadata: `file.name`, `file.mtime`, etc.
133
+ 3. **Formula properties** - Computed values: `formula.my_formula`
134
+
135
+ ### File Properties Reference
136
+
137
+ | Property | Type | Description |
138
+ | ----------------- | ------ | --------------------------- |
139
+ | `file.name` | String | File name |
140
+ | `file.basename` | String | File name without extension |
141
+ | `file.path` | String | Full path to file |
142
+ | `file.folder` | String | Parent folder path |
143
+ | `file.ext` | String | File extension |
144
+ | `file.size` | Number | File size in bytes |
145
+ | `file.ctime` | Date | Created time |
146
+ | `file.mtime` | Date | Modified time |
147
+ | `file.tags` | List | All tags in file |
148
+ | `file.links` | List | Internal links in file |
149
+ | `file.backlinks` | List | Files linking to this file |
150
+ | `file.embeds` | List | Embeds in the note |
151
+ | `file.properties` | Object | All frontmatter properties |
152
+
153
+ ### The `this` Keyword
154
+
155
+ - In main content area: refers to the base file itself
156
+ - When embedded: refers to the embedding file
157
+ - In sidebar: refers to the active file in main content
158
+
159
+ ## Formula Syntax
160
+
161
+ Formulas compute values from properties. Defined in the `formulas` section.
162
+
163
+ ```yaml
164
+ formulas:
165
+ # Simple arithmetic
166
+ total: 'price * quantity'
167
+
168
+ # Conditional logic
169
+ status_icon: 'if(done, "✅", "⏳")'
170
+
171
+ # String formatting
172
+ formatted_price: 'if(price, price.toFixed(2) + " dollars")'
173
+
174
+ # Date formatting
175
+ created: 'file.ctime.format("YYYY-MM-DD")'
176
+
177
+ # Complex expressions
178
+ days_old: '((now() - file.ctime) / 86400000).round(0)'
179
+ ```
180
+
181
+ ## Functions Reference
182
+
183
+ ### Global Functions
184
+
185
+ | Function | Signature | Description |
186
+ | -------------- | ----------------------------------------- | --------------------------------------------------- |
187
+ | `date()` | `date(string): date` | Parse string to date. Format: `YYYY-MM-DD HH:mm:ss` |
188
+ | `duration()` | `duration(string): duration` | Parse duration string |
189
+ | `now()` | `now(): date` | Current date and time |
190
+ | `today()` | `today(): date` | Current date (time = 00:00:00) |
191
+ | `if()` | `if(condition, trueResult, falseResult?)` | Conditional |
192
+ | `min()` | `min(n1, n2, ...): number` | Smallest number |
193
+ | `max()` | `max(n1, n2, ...): number` | Largest number |
194
+ | `number()` | `number(any): number` | Convert to number |
195
+ | `link()` | `link(path, display?): Link` | Create a link |
196
+ | `list()` | `list(element): List` | Wrap in list if not already |
197
+ | `file()` | `file(path): file` | Get file object |
198
+ | `image()` | `image(path): image` | Create image for rendering |
199
+ | `icon()` | `icon(name): icon` | Lucide icon by name |
200
+ | `html()` | `html(string): html` | Render as HTML |
201
+ | `escapeHTML()` | `escapeHTML(string): string` | Escape HTML characters |
202
+
203
+ ### Any Type Functions
204
+
205
+ | Function | Signature | Description |
206
+ | ------------ | --------------------------- | ----------------- |
207
+ | `isTruthy()` | `any.isTruthy(): boolean` | Coerce to boolean |
208
+ | `isType()` | `any.isType(type): boolean` | Check type |
209
+ | `toString()` | `any.toString(): string` | Convert to string |
210
+
211
+ ### Date Functions & Fields
212
+
213
+ **Fields:** `date.year`, `date.month`, `date.day`, `date.hour`, `date.minute`, `date.second`, `date.millisecond`
214
+
215
+ | Function | Signature | Description |
216
+ | ------------ | ----------------------------- | ----------------------------- |
217
+ | `date()` | `date.date(): date` | Remove time portion |
218
+ | `format()` | `date.format(string): string` | Format with Moment.js pattern |
219
+ | `time()` | `date.time(): string` | Get time as string |
220
+ | `relative()` | `date.relative(): string` | Human-readable relative time |
221
+ | `isEmpty()` | `date.isEmpty(): boolean` | Always false for dates |
222
+
223
+ ### Date Arithmetic
224
+
225
+ ```yaml
226
+ # Duration units: y/year/years, M/month/months, d/day/days,
227
+ # w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
228
+
229
+ # Add/subtract durations
230
+ "date + \"1M\"" # Add 1 month
231
+ "date - \"2h\"" # Subtract 2 hours
232
+ "now() + \"1 day\"" # Tomorrow
233
+ "today() + \"7d\"" # A week from today
234
+
235
+ # Subtract dates for millisecond difference
236
+ "now() - file.ctime"
237
+
238
+ # Complex duration arithmetic
239
+ "now() + (duration('1d') * 2)"
240
+ ```
241
+
242
+ ### String Functions
243
+
244
+ **Field:** `string.length`
245
+
246
+ | Function | Signature | Description |
247
+ | --------------- | ---------------------------------------------- | ---------------------- |
248
+ | `contains()` | `string.contains(value): boolean` | Check substring |
249
+ | `containsAll()` | `string.containsAll(...values): boolean` | All substrings present |
250
+ | `containsAny()` | `string.containsAny(...values): boolean` | Any substring present |
251
+ | `startsWith()` | `string.startsWith(query): boolean` | Starts with query |
252
+ | `endsWith()` | `string.endsWith(query): boolean` | Ends with query |
253
+ | `isEmpty()` | `string.isEmpty(): boolean` | Empty or not present |
254
+ | `lower()` | `string.lower(): string` | To lowercase |
255
+ | `title()` | `string.title(): string` | To Title Case |
256
+ | `trim()` | `string.trim(): string` | Remove whitespace |
257
+ | `replace()` | `string.replace(pattern, replacement): string` | Replace pattern |
258
+ | `repeat()` | `string.repeat(count): string` | Repeat string |
259
+ | `reverse()` | `string.reverse(): string` | Reverse string |
260
+ | `slice()` | `string.slice(start, end?): string` | Substring |
261
+ | `split()` | `string.split(separator, n?): list` | Split to list |
262
+
263
+ ### Number Functions
264
+
265
+ | Function | Signature | Description |
266
+ | ----------- | ----------------------------------- | -------------------- |
267
+ | `abs()` | `number.abs(): number` | Absolute value |
268
+ | `ceil()` | `number.ceil(): number` | Round up |
269
+ | `floor()` | `number.floor(): number` | Round down |
270
+ | `round()` | `number.round(digits?): number` | Round to digits |
271
+ | `toFixed()` | `number.toFixed(precision): string` | Fixed-point notation |
272
+ | `isEmpty()` | `number.isEmpty(): boolean` | Not present |
273
+
274
+ ### List Functions
275
+
276
+ **Field:** `list.length`
277
+
278
+ | Function | Signature | Description |
279
+ | --------------- | --------------------------------------- | ----------------------------------------------------- |
280
+ | `contains()` | `list.contains(value): boolean` | Element exists |
281
+ | `containsAll()` | `list.containsAll(...values): boolean` | All elements exist |
282
+ | `containsAny()` | `list.containsAny(...values): boolean` | Any element exists |
283
+ | `filter()` | `list.filter(expression): list` | Filter by condition (uses `value`, `index`) |
284
+ | `map()` | `list.map(expression): list` | Transform elements (uses `value`, `index`) |
285
+ | `reduce()` | `list.reduce(expression, initial): any` | Reduce to single value (uses `value`, `index`, `acc`) |
286
+ | `flat()` | `list.flat(): list` | Flatten nested lists |
287
+ | `join()` | `list.join(separator): string` | Join to string |
288
+ | `reverse()` | `list.reverse(): list` | Reverse order |
289
+ | `slice()` | `list.slice(start, end?): list` | Sublist |
290
+ | `sort()` | `list.sort(): list` | Sort ascending |
291
+ | `unique()` | `list.unique(): list` | Remove duplicates |
292
+ | `isEmpty()` | `list.isEmpty(): boolean` | No elements |
293
+
294
+ ### File Functions
295
+
296
+ | Function | Signature | Description |
297
+ | --------------- | ---------------------------------- | ---------------------- |
298
+ | `asLink()` | `file.asLink(display?): Link` | Convert to link |
299
+ | `hasLink()` | `file.hasLink(otherFile): boolean` | Has link to file |
300
+ | `hasTag()` | `file.hasTag(...tags): boolean` | Has any of the tags |
301
+ | `hasProperty()` | `file.hasProperty(name): boolean` | Has property |
302
+ | `inFolder()` | `file.inFolder(folder): boolean` | In folder or subfolder |
303
+
304
+ ### Link Functions
305
+
306
+ | Function | Signature | Description |
307
+ | ----------- | ----------------------------- | --------------- |
308
+ | `asFile()` | `link.asFile(): file` | Get file object |
309
+ | `linksTo()` | `link.linksTo(file): boolean` | Links to file |
310
+
311
+ ### Object Functions
312
+
313
+ | Function | Signature | Description |
314
+ | ----------- | --------------------------- | -------------- |
315
+ | `isEmpty()` | `object.isEmpty(): boolean` | No properties |
316
+ | `keys()` | `object.keys(): list` | List of keys |
317
+ | `values()` | `object.values(): list` | List of values |
318
+
319
+ ### Regular Expression Functions
320
+
321
+ | Function | Signature | Description |
322
+ | ----------- | --------------------------------- | --------------- |
323
+ | `matches()` | `regexp.matches(string): boolean` | Test if matches |
324
+
325
+ ## View Types
326
+
327
+ ### Table View
328
+
329
+ ```yaml
330
+ views:
331
+ - type: table
332
+ name: 'My Table'
333
+ order:
334
+ - file.name
335
+ - status
336
+ - due_date
337
+ summaries:
338
+ price: Sum
339
+ count: Average
340
+ ```
341
+
342
+ ### Cards View
343
+
344
+ ```yaml
345
+ views:
346
+ - type: cards
347
+ name: 'Gallery'
348
+ order:
349
+ - file.name
350
+ - cover_image
351
+ - description
352
+ ```
353
+
354
+ ### List View
355
+
356
+ ```yaml
357
+ views:
358
+ - type: list
359
+ name: 'Simple List'
360
+ order:
361
+ - file.name
362
+ - status
363
+ ```
364
+
365
+ ### Map View
366
+
367
+ Requires latitude/longitude properties and the Maps plugin.
368
+
369
+ ```yaml
370
+ views:
371
+ - type: map
372
+ name: 'Locations'
373
+ # Map-specific settings for lat/lng properties
374
+ ```
375
+
376
+ ## Default Summary Formulas
377
+
378
+ | Name | Input Type | Description |
379
+ | ----------- | ---------- | ------------------------- |
380
+ | `Average` | Number | Mathematical mean |
381
+ | `Min` | Number | Smallest number |
382
+ | `Max` | Number | Largest number |
383
+ | `Sum` | Number | Sum of all numbers |
384
+ | `Range` | Number | Max - Min |
385
+ | `Median` | Number | Mathematical median |
386
+ | `Stddev` | Number | Standard deviation |
387
+ | `Earliest` | Date | Earliest date |
388
+ | `Latest` | Date | Latest date |
389
+ | `Range` | Date | Latest - Earliest |
390
+ | `Checked` | Boolean | Count of true values |
391
+ | `Unchecked` | Boolean | Count of false values |
392
+ | `Empty` | Any | Count of empty values |
393
+ | `Filled` | Any | Count of non-empty values |
394
+ | `Unique` | Any | Count of unique values |
395
+
396
+ ## Complete Examples
397
+
398
+ ### Task Tracker Base
399
+
400
+ ```yaml
401
+ filters:
402
+ and:
403
+ - file.hasTag("task")
404
+ - 'file.ext == "md"'
405
+
406
+ formulas:
407
+ days_until_due: 'if(due, ((date(due) - today()) / 86400000).round(0), "")'
408
+ is_overdue: 'if(due, date(due) < today() && status != "done", false)'
409
+ priority_label: 'if(priority == 1, "🔴 High", if(priority == 2, "🟡 Medium", "🟢 Low"))'
410
+
411
+ properties:
412
+ status:
413
+ displayName: Status
414
+ formula.days_until_due:
415
+ displayName: 'Days Until Due'
416
+ formula.priority_label:
417
+ displayName: Priority
418
+
419
+ views:
420
+ - type: table
421
+ name: 'Active Tasks'
422
+ filters:
423
+ and:
424
+ - 'status != "done"'
425
+ order:
426
+ - file.name
427
+ - status
428
+ - formula.priority_label
429
+ - due
430
+ - formula.days_until_due
431
+ groupBy:
432
+ property: status
433
+ direction: ASC
434
+ summaries:
435
+ formula.days_until_due: Average
436
+
437
+ - type: table
438
+ name: 'Completed'
439
+ filters:
440
+ and:
441
+ - 'status == "done"'
442
+ order:
443
+ - file.name
444
+ - completed_date
445
+ ```
446
+
447
+ ### Reading List Base
448
+
449
+ ```yaml
450
+ filters:
451
+ or:
452
+ - file.hasTag("book")
453
+ - file.hasTag("article")
454
+
455
+ formulas:
456
+ reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
457
+ status_icon: 'if(status == "reading", "📖", if(status == "done", "✅", "📚"))'
458
+ year_read: 'if(finished_date, date(finished_date).year, "")'
459
+
460
+ properties:
461
+ author:
462
+ displayName: Author
463
+ formula.status_icon:
464
+ displayName: ''
465
+ formula.reading_time:
466
+ displayName: 'Est. Time'
467
+
468
+ views:
469
+ - type: cards
470
+ name: 'Library'
471
+ order:
472
+ - cover
473
+ - file.name
474
+ - author
475
+ - formula.status_icon
476
+ filters:
477
+ not:
478
+ - 'status == "dropped"'
479
+
480
+ - type: table
481
+ name: 'Reading List'
482
+ filters:
483
+ and:
484
+ - 'status == "to-read"'
485
+ order:
486
+ - file.name
487
+ - author
488
+ - pages
489
+ - formula.reading_time
490
+ ```
491
+
492
+ ### Project Notes Base
493
+
494
+ ```yaml
495
+ filters:
496
+ and:
497
+ - file.inFolder("Projects")
498
+ - 'file.ext == "md"'
499
+
500
+ formulas:
501
+ last_updated: 'file.mtime.relative()'
502
+ link_count: 'file.links.length'
503
+
504
+ summaries:
505
+ avgLinks: 'values.filter(value.isType("number")).mean().round(1)'
506
+
507
+ properties:
508
+ formula.last_updated:
509
+ displayName: 'Updated'
510
+ formula.link_count:
511
+ displayName: 'Links'
512
+
513
+ views:
514
+ - type: table
515
+ name: 'All Projects'
516
+ order:
517
+ - file.name
518
+ - status
519
+ - formula.last_updated
520
+ - formula.link_count
521
+ summaries:
522
+ formula.link_count: avgLinks
523
+ groupBy:
524
+ property: status
525
+ direction: ASC
526
+
527
+ - type: list
528
+ name: 'Quick List'
529
+ order:
530
+ - file.name
531
+ - status
532
+ ```
533
+
534
+ ### Daily Notes Index
535
+
536
+ ```yaml
537
+ filters:
538
+ and:
539
+ - file.inFolder("Daily Notes")
540
+ - '/^\d{4}-\d{2}-\d{2}$/.matches(file.basename)'
541
+
542
+ formulas:
543
+ word_estimate: '(file.size / 5).round(0)'
544
+ day_of_week: 'date(file.basename).format("dddd")'
545
+
546
+ properties:
547
+ formula.day_of_week:
548
+ displayName: 'Day'
549
+ formula.word_estimate:
550
+ displayName: '~Words'
551
+
552
+ views:
553
+ - type: table
554
+ name: 'Recent Notes'
555
+ limit: 30
556
+ order:
557
+ - file.name
558
+ - formula.day_of_week
559
+ - formula.word_estimate
560
+ - file.mtime
561
+ ```
562
+
563
+ ## Embedding Bases
564
+
565
+ Embed in Markdown files:
566
+
567
+ ```markdown
568
+ ![[MyBase.base]]
569
+
570
+ <!-- Specific view -->
571
+
572
+ ![[MyBase.base#View Name]]
573
+ ```
574
+
575
+ ## YAML Quoting Rules
576
+
577
+ - Use single quotes for formulas containing double quotes: `'if(done, "Yes", "No")'`
578
+ - Use double quotes for simple strings: `"My View Name"`
579
+ - Escape nested quotes properly in complex expressions
580
+
581
+ ## Common Patterns
582
+
583
+ ### Filter by Tag
584
+
585
+ ```yaml
586
+ filters:
587
+ and:
588
+ - file.hasTag("project")
589
+ ```
590
+
591
+ ### Filter by Folder
592
+
593
+ ```yaml
594
+ filters:
595
+ and:
596
+ - file.inFolder("Notes")
597
+ ```
598
+
599
+ ### Filter by Date Range
600
+
601
+ ```yaml
602
+ filters:
603
+ and:
604
+ - 'file.mtime > now() - "7d"'
605
+ ```
606
+
607
+ ### Filter by Property Value
608
+
609
+ ```yaml
610
+ filters:
611
+ and:
612
+ - 'status == "active"'
613
+ - 'priority >= 3'
614
+ ```
615
+
616
+ ### Combine Multiple Conditions
617
+
618
+ ```yaml
619
+ filters:
620
+ or:
621
+ - and:
622
+ - file.hasTag("important")
623
+ - 'status != "done"'
624
+ - and:
625
+ - 'priority == 1'
626
+ - 'due != ""'
627
+ ```
628
+
629
+ ## References
630
+
631
+ - [Bases Syntax](https://help.obsidian.md/bases/syntax)
632
+ - [Functions](https://help.obsidian.md/bases/functions)
633
+ - [Views](https://help.obsidian.md/bases/views)
634
+ - [Formulas](https://help.obsidian.md/formulas)