@elizaos/skills 2.0.0-alpha.43 → 2.0.0-alpha.430

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 (154) hide show
  1. package/README.md +4 -0
  2. package/dist/formatter.d.ts.map +1 -1
  3. package/dist/formatter.js +3 -3
  4. package/dist/frontmatter.d.ts +13 -1
  5. package/dist/frontmatter.d.ts.map +1 -1
  6. package/dist/frontmatter.js +51 -1
  7. package/dist/index.d.ts +3 -3
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +2 -2
  10. package/dist/loader.d.ts.map +1 -1
  11. package/dist/loader.js +10 -3
  12. package/dist/resolver.d.ts +17 -0
  13. package/dist/resolver.d.ts.map +1 -1
  14. package/dist/resolver.js +54 -1
  15. package/dist/types.d.ts +38 -1
  16. package/dist/types.d.ts.map +1 -1
  17. package/package.json +7 -6
  18. package/skills/apple-reminders/SKILL.md +1 -1
  19. package/skills/blucli/SKILL.md +1 -1
  20. package/skills/bluebubbles/SKILL.md +1 -1
  21. package/skills/camsnap/SKILL.md +1 -1
  22. package/skills/canvas/SKILL.md +6 -6
  23. package/skills/coding-agent/SKILL.md +2 -2
  24. package/skills/eliza-app-development/SKILL.md +62 -0
  25. package/skills/eliza-app-development/references/repo-map.md +70 -0
  26. package/skills/eliza-app-development/references/runtime-and-cloud.md +61 -0
  27. package/skills/eliza-cloud/SKILL.md +39 -0
  28. package/skills/eliza-cloud/references/apps-and-containers.md +73 -0
  29. package/skills/eliza-cloud/references/cloud-backend-and-monetization.md +99 -0
  30. package/skills/elizaos/SKILL.md +27 -0
  31. package/skills/elizaos/references/core-abstractions.md +101 -0
  32. package/skills/elizaos/references/plugin-development.md +74 -0
  33. package/skills/github/SKILL.md +1 -1
  34. package/skills/imsg/SKILL.md +1 -1
  35. package/skills/nano-banana-pro/SKILL.md +1 -1
  36. package/skills/nano-pdf/SKILL.md +1 -1
  37. package/skills/notion/SKILL.md +1 -1
  38. package/skills/obsidian/SKILL.md +1 -1
  39. package/skills/ordercli/SKILL.md +1 -1
  40. package/skills/skill-creator/SKILL.md +1 -1
  41. package/skills/slack/SKILL.md +1 -1
  42. package/skills/spotify-player/SKILL.md +1 -1
  43. package/skills/tmux/SKILL.md +1 -1
  44. package/skills/trello/SKILL.md +1 -1
  45. package/skills/wacli/SKILL.md +1 -1
  46. package/skills/weather/SKILL.md +1 -1
  47. package/skills/yara-authoring/SKILL.md +111 -0
  48. package/skills/bear-notes/SKILL.md +0 -107
  49. package/skills/bird/SKILL.md +0 -224
  50. package/skills/blogwatcher/SKILL.md +0 -69
  51. package/skills/clawhub/SKILL.md +0 -77
  52. package/skills/eightctl/SKILL.md +0 -50
  53. package/skills/food-order/SKILL.md +0 -48
  54. package/skills/gemini/SKILL.md +0 -43
  55. package/skills/gifgrep/SKILL.md +0 -79
  56. package/skills/gog/SKILL.md +0 -116
  57. package/skills/goplaces/SKILL.md +0 -52
  58. package/skills/himalaya/SKILL.md +0 -257
  59. package/skills/himalaya/references/configuration.md +0 -184
  60. package/skills/himalaya/references/message-composition.md +0 -199
  61. package/skills/local-places/SERVER_README.md +0 -101
  62. package/skills/local-places/SKILL.md +0 -102
  63. package/skills/local-places/pyproject.toml +0 -21
  64. package/skills/local-places/src/local_places/__init__.py +0 -2
  65. package/skills/local-places/src/local_places/google_places.py +0 -314
  66. package/skills/local-places/src/local_places/main.py +0 -65
  67. package/skills/local-places/src/local_places/schemas.py +0 -107
  68. package/skills/mcporter/SKILL.md +0 -61
  69. package/skills/model-usage/SKILL.md +0 -69
  70. package/skills/model-usage/references/codexbar-cli.md +0 -33
  71. package/skills/model-usage/scripts/model_usage.py +0 -310
  72. package/skills/openai-image-gen/SKILL.md +0 -89
  73. package/skills/openai-image-gen/scripts/gen.py +0 -240
  74. package/skills/openai-whisper/SKILL.md +0 -38
  75. package/skills/openai-whisper-api/SKILL.md +0 -52
  76. package/skills/openai-whisper-api/scripts/transcribe.sh +0 -85
  77. package/skills/openhue/SKILL.md +0 -51
  78. package/skills/oracle/SKILL.md +0 -125
  79. package/skills/peekaboo/SKILL.md +0 -190
  80. package/skills/sag/SKILL.md +0 -87
  81. package/skills/session-logs/SKILL.md +0 -115
  82. package/skills/sharp-edges/.claude-plugin/plugin.json +0 -10
  83. package/skills/sharp-edges/README.md +0 -48
  84. package/skills/sharp-edges/SKILL.md +0 -292
  85. package/skills/sharp-edges/skills/sharp-edges/SKILL.md +0 -292
  86. package/skills/sharp-edges/skills/sharp-edges/references/auth-patterns.md +0 -252
  87. package/skills/sharp-edges/skills/sharp-edges/references/case-studies.md +0 -274
  88. package/skills/sharp-edges/skills/sharp-edges/references/config-patterns.md +0 -333
  89. package/skills/sharp-edges/skills/sharp-edges/references/crypto-apis.md +0 -190
  90. package/skills/sharp-edges/skills/sharp-edges/references/lang-c.md +0 -205
  91. package/skills/sharp-edges/skills/sharp-edges/references/lang-csharp.md +0 -285
  92. package/skills/sharp-edges/skills/sharp-edges/references/lang-go.md +0 -270
  93. package/skills/sharp-edges/skills/sharp-edges/references/lang-java.md +0 -263
  94. package/skills/sharp-edges/skills/sharp-edges/references/lang-javascript.md +0 -269
  95. package/skills/sharp-edges/skills/sharp-edges/references/lang-kotlin.md +0 -265
  96. package/skills/sharp-edges/skills/sharp-edges/references/lang-php.md +0 -245
  97. package/skills/sharp-edges/skills/sharp-edges/references/lang-python.md +0 -274
  98. package/skills/sharp-edges/skills/sharp-edges/references/lang-ruby.md +0 -273
  99. package/skills/sharp-edges/skills/sharp-edges/references/lang-rust.md +0 -272
  100. package/skills/sharp-edges/skills/sharp-edges/references/lang-swift.md +0 -287
  101. package/skills/sharp-edges/skills/sharp-edges/references/language-specific.md +0 -588
  102. package/skills/sherpa-onnx-tts/SKILL.md +0 -103
  103. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -178
  104. package/skills/songsee/SKILL.md +0 -49
  105. package/skills/sonoscli/SKILL.md +0 -46
  106. package/skills/spec-to-code-compliance/.claude-plugin/plugin.json +0 -10
  107. package/skills/spec-to-code-compliance/README.md +0 -67
  108. package/skills/spec-to-code-compliance/SKILL.md +0 -349
  109. package/skills/spec-to-code-compliance/commands/spec-compliance.md +0 -22
  110. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/SKILL.md +0 -349
  111. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/COMPLETENESS_CHECKLIST.md +0 -69
  112. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/IR_EXAMPLES.md +0 -417
  113. package/skills/spec-to-code-compliance/skills/spec-to-code-compliance/resources/OUTPUT_REQUIREMENTS.md +0 -105
  114. package/skills/static-analysis/.claude-plugin/plugin.json +0 -8
  115. package/skills/static-analysis/README.md +0 -59
  116. package/skills/static-analysis/SKILL.md +0 -91
  117. package/skills/static-analysis/skills/codeql/SKILL.md +0 -315
  118. package/skills/static-analysis/skills/sarif-parsing/SKILL.md +0 -479
  119. package/skills/static-analysis/skills/sarif-parsing/resources/jq-queries.md +0 -162
  120. package/skills/static-analysis/skills/sarif-parsing/resources/sarif_helpers.py +0 -331
  121. package/skills/static-analysis/skills/semgrep/SKILL.md +0 -337
  122. package/skills/summarize/SKILL.md +0 -87
  123. package/skills/testing-handbook-skills/.claude-plugin/plugin.json +0 -8
  124. package/skills/testing-handbook-skills/README.md +0 -241
  125. package/skills/testing-handbook-skills/SKILL.md +0 -104
  126. package/skills/testing-handbook-skills/scripts/pyproject.toml +0 -8
  127. package/skills/testing-handbook-skills/scripts/validate-skills.py +0 -657
  128. package/skills/testing-handbook-skills/skills/address-sanitizer/SKILL.md +0 -341
  129. package/skills/testing-handbook-skills/skills/aflpp/SKILL.md +0 -640
  130. package/skills/testing-handbook-skills/skills/atheris/SKILL.md +0 -515
  131. package/skills/testing-handbook-skills/skills/cargo-fuzz/SKILL.md +0 -454
  132. package/skills/testing-handbook-skills/skills/codeql/SKILL.md +0 -549
  133. package/skills/testing-handbook-skills/skills/constant-time-testing/SKILL.md +0 -507
  134. package/skills/testing-handbook-skills/skills/coverage-analysis/SKILL.md +0 -607
  135. package/skills/testing-handbook-skills/skills/fuzzing-dictionary/SKILL.md +0 -297
  136. package/skills/testing-handbook-skills/skills/fuzzing-obstacles/SKILL.md +0 -426
  137. package/skills/testing-handbook-skills/skills/harness-writing/SKILL.md +0 -614
  138. package/skills/testing-handbook-skills/skills/libafl/SKILL.md +0 -625
  139. package/skills/testing-handbook-skills/skills/libfuzzer/SKILL.md +0 -795
  140. package/skills/testing-handbook-skills/skills/ossfuzz/SKILL.md +0 -426
  141. package/skills/testing-handbook-skills/skills/ruzzy/SKILL.md +0 -443
  142. package/skills/testing-handbook-skills/skills/semgrep/SKILL.md +0 -601
  143. package/skills/testing-handbook-skills/skills/testing-handbook-generator/SKILL.md +0 -372
  144. package/skills/testing-handbook-skills/skills/testing-handbook-generator/agent-prompt.md +0 -280
  145. package/skills/testing-handbook-skills/skills/testing-handbook-generator/discovery.md +0 -452
  146. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/domain-skill.md +0 -504
  147. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/fuzzer-skill.md +0 -454
  148. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/technique-skill.md +0 -527
  149. package/skills/testing-handbook-skills/skills/testing-handbook-generator/templates/tool-skill.md +0 -366
  150. package/skills/testing-handbook-skills/skills/testing-handbook-generator/testing.md +0 -482
  151. package/skills/testing-handbook-skills/skills/wycheproof/SKILL.md +0 -533
  152. package/skills/video-frames/SKILL.md +0 -46
  153. package/skills/video-frames/scripts/frame.sh +0 -81
  154. package/skills/voice-call/SKILL.md +0 -45
@@ -1,184 +0,0 @@
1
- # Himalaya Configuration Reference
2
-
3
- Configuration file location: `~/.config/himalaya/config.toml`
4
-
5
- ## Minimal IMAP + SMTP Setup
6
-
7
- ```toml
8
- [accounts.default]
9
- email = "user@example.com"
10
- display-name = "Your Name"
11
- default = true
12
-
13
- # IMAP backend for reading emails
14
- backend.type = "imap"
15
- backend.host = "imap.example.com"
16
- backend.port = 993
17
- backend.encryption.type = "tls"
18
- backend.login = "user@example.com"
19
- backend.auth.type = "password"
20
- backend.auth.raw = "your-password"
21
-
22
- # SMTP backend for sending emails
23
- message.send.backend.type = "smtp"
24
- message.send.backend.host = "smtp.example.com"
25
- message.send.backend.port = 587
26
- message.send.backend.encryption.type = "start-tls"
27
- message.send.backend.login = "user@example.com"
28
- message.send.backend.auth.type = "password"
29
- message.send.backend.auth.raw = "your-password"
30
- ```
31
-
32
- ## Password Options
33
-
34
- ### Raw password (testing only, not recommended)
35
-
36
- ```toml
37
- backend.auth.raw = "your-password"
38
- ```
39
-
40
- ### Password from command (recommended)
41
-
42
- ```toml
43
- backend.auth.cmd = "pass show email/imap"
44
- # backend.auth.cmd = "security find-generic-password -a user@example.com -s imap -w"
45
- ```
46
-
47
- ### System keyring (requires keyring feature)
48
-
49
- ```toml
50
- backend.auth.keyring = "imap-example"
51
- ```
52
-
53
- Then run `himalaya account configure <account>` to store the password.
54
-
55
- ## Gmail Configuration
56
-
57
- ```toml
58
- [accounts.gmail]
59
- email = "you@gmail.com"
60
- display-name = "Your Name"
61
- default = true
62
-
63
- backend.type = "imap"
64
- backend.host = "imap.gmail.com"
65
- backend.port = 993
66
- backend.encryption.type = "tls"
67
- backend.login = "you@gmail.com"
68
- backend.auth.type = "password"
69
- backend.auth.cmd = "pass show google/app-password"
70
-
71
- message.send.backend.type = "smtp"
72
- message.send.backend.host = "smtp.gmail.com"
73
- message.send.backend.port = 587
74
- message.send.backend.encryption.type = "start-tls"
75
- message.send.backend.login = "you@gmail.com"
76
- message.send.backend.auth.type = "password"
77
- message.send.backend.auth.cmd = "pass show google/app-password"
78
- ```
79
-
80
- **Note:** Gmail requires an App Password if 2FA is enabled.
81
-
82
- ## iCloud Configuration
83
-
84
- ```toml
85
- [accounts.icloud]
86
- email = "you@icloud.com"
87
- display-name = "Your Name"
88
-
89
- backend.type = "imap"
90
- backend.host = "imap.mail.me.com"
91
- backend.port = 993
92
- backend.encryption.type = "tls"
93
- backend.login = "you@icloud.com"
94
- backend.auth.type = "password"
95
- backend.auth.cmd = "pass show icloud/app-password"
96
-
97
- message.send.backend.type = "smtp"
98
- message.send.backend.host = "smtp.mail.me.com"
99
- message.send.backend.port = 587
100
- message.send.backend.encryption.type = "start-tls"
101
- message.send.backend.login = "you@icloud.com"
102
- message.send.backend.auth.type = "password"
103
- message.send.backend.auth.cmd = "pass show icloud/app-password"
104
- ```
105
-
106
- **Note:** Generate an app-specific password at appleid.apple.com
107
-
108
- ## Folder Aliases
109
-
110
- Map custom folder names:
111
-
112
- ```toml
113
- [accounts.default.folder.alias]
114
- inbox = "INBOX"
115
- sent = "Sent"
116
- drafts = "Drafts"
117
- trash = "Trash"
118
- ```
119
-
120
- ## Multiple Accounts
121
-
122
- ```toml
123
- [accounts.personal]
124
- email = "personal@example.com"
125
- default = true
126
- # ... backend config ...
127
-
128
- [accounts.work]
129
- email = "work@company.com"
130
- # ... backend config ...
131
- ```
132
-
133
- Switch accounts with `--account`:
134
-
135
- ```bash
136
- himalaya --account work envelope list
137
- ```
138
-
139
- ## Notmuch Backend (local mail)
140
-
141
- ```toml
142
- [accounts.local]
143
- email = "user@example.com"
144
-
145
- backend.type = "notmuch"
146
- backend.db-path = "~/.mail/.notmuch"
147
- ```
148
-
149
- ## OAuth2 Authentication (for providers that support it)
150
-
151
- ```toml
152
- backend.auth.type = "oauth2"
153
- backend.auth.client-id = "your-client-id"
154
- backend.auth.client-secret.cmd = "pass show oauth/client-secret"
155
- backend.auth.access-token.cmd = "pass show oauth/access-token"
156
- backend.auth.refresh-token.cmd = "pass show oauth/refresh-token"
157
- backend.auth.auth-url = "https://provider.com/oauth/authorize"
158
- backend.auth.token-url = "https://provider.com/oauth/token"
159
- ```
160
-
161
- ## Additional Options
162
-
163
- ### Signature
164
-
165
- ```toml
166
- [accounts.default]
167
- signature = "Best regards,\nYour Name"
168
- signature-delim = "-- \n"
169
- ```
170
-
171
- ### Downloads directory
172
-
173
- ```toml
174
- [accounts.default]
175
- downloads-dir = "~/Downloads/himalaya"
176
- ```
177
-
178
- ### Editor for composing
179
-
180
- Set via environment variable:
181
-
182
- ```bash
183
- export EDITOR="vim"
184
- ```
@@ -1,199 +0,0 @@
1
- # Message Composition with MML (MIME Meta Language)
2
-
3
- Himalaya uses MML for composing emails. MML is a simple XML-based syntax that compiles to MIME messages.
4
-
5
- ## Basic Message Structure
6
-
7
- An email message is a list of **headers** followed by a **body**, separated by a blank line:
8
-
9
- ```
10
- From: sender@example.com
11
- To: recipient@example.com
12
- Subject: Hello World
13
-
14
- This is the message body.
15
- ```
16
-
17
- ## Headers
18
-
19
- Common headers:
20
-
21
- - `From`: Sender address
22
- - `To`: Primary recipient(s)
23
- - `Cc`: Carbon copy recipients
24
- - `Bcc`: Blind carbon copy recipients
25
- - `Subject`: Message subject
26
- - `Reply-To`: Address for replies (if different from From)
27
- - `In-Reply-To`: Message ID being replied to
28
-
29
- ### Address Formats
30
-
31
- ```
32
- To: user@example.com
33
- To: John Doe <john@example.com>
34
- To: "John Doe" <john@example.com>
35
- To: user1@example.com, user2@example.com, "Jane" <jane@example.com>
36
- ```
37
-
38
- ## Plain Text Body
39
-
40
- Simple plain text email:
41
-
42
- ```
43
- From: alice@localhost
44
- To: bob@localhost
45
- Subject: Plain Text Example
46
-
47
- Hello, this is a plain text email.
48
- No special formatting needed.
49
-
50
- Best,
51
- Alice
52
- ```
53
-
54
- ## MML for Rich Emails
55
-
56
- ### Multipart Messages
57
-
58
- Alternative text/html parts:
59
-
60
- ```
61
- From: alice@localhost
62
- To: bob@localhost
63
- Subject: Multipart Example
64
-
65
- <#multipart type=alternative>
66
- This is the plain text version.
67
- <#part type=text/html>
68
- <html><body><h1>This is the HTML version</h1></body></html>
69
- <#/multipart>
70
- ```
71
-
72
- ### Attachments
73
-
74
- Attach a file:
75
-
76
- ```
77
- From: alice@localhost
78
- To: bob@localhost
79
- Subject: With Attachment
80
-
81
- Here is the document you requested.
82
-
83
- <#part filename=/path/to/document.pdf><#/part>
84
- ```
85
-
86
- Attachment with custom name:
87
-
88
- ```
89
- <#part filename=/path/to/file.pdf name=report.pdf><#/part>
90
- ```
91
-
92
- Multiple attachments:
93
-
94
- ```
95
- <#part filename=/path/to/doc1.pdf><#/part>
96
- <#part filename=/path/to/doc2.pdf><#/part>
97
- ```
98
-
99
- ### Inline Images
100
-
101
- Embed an image inline:
102
-
103
- ```
104
- From: alice@localhost
105
- To: bob@localhost
106
- Subject: Inline Image
107
-
108
- <#multipart type=related>
109
- <#part type=text/html>
110
- <html><body>
111
- <p>Check out this image:</p>
112
- <img src="cid:image1">
113
- </body></html>
114
- <#part disposition=inline id=image1 filename=/path/to/image.png><#/part>
115
- <#/multipart>
116
- ```
117
-
118
- ### Mixed Content (Text + Attachments)
119
-
120
- ```
121
- From: alice@localhost
122
- To: bob@localhost
123
- Subject: Mixed Content
124
-
125
- <#multipart type=mixed>
126
- <#part type=text/plain>
127
- Please find the attached files.
128
-
129
- Best,
130
- Alice
131
- <#part filename=/path/to/file1.pdf><#/part>
132
- <#part filename=/path/to/file2.zip><#/part>
133
- <#/multipart>
134
- ```
135
-
136
- ## MML Tag Reference
137
-
138
- ### `<#multipart>`
139
-
140
- Groups multiple parts together.
141
-
142
- - `type=alternative`: Different representations of same content
143
- - `type=mixed`: Independent parts (text + attachments)
144
- - `type=related`: Parts that reference each other (HTML + images)
145
-
146
- ### `<#part>`
147
-
148
- Defines a message part.
149
-
150
- - `type=<mime-type>`: Content type (e.g., `text/html`, `application/pdf`)
151
- - `filename=<path>`: File to attach
152
- - `name=<name>`: Display name for attachment
153
- - `disposition=inline`: Display inline instead of as attachment
154
- - `id=<cid>`: Content ID for referencing in HTML
155
-
156
- ## Composing from CLI
157
-
158
- ### Interactive compose
159
-
160
- Opens your `$EDITOR`:
161
-
162
- ```bash
163
- himalaya message write
164
- ```
165
-
166
- ### Reply (opens editor with quoted message)
167
-
168
- ```bash
169
- himalaya message reply 42
170
- himalaya message reply 42 --all # reply-all
171
- ```
172
-
173
- ### Forward
174
-
175
- ```bash
176
- himalaya message forward 42
177
- ```
178
-
179
- ### Send from stdin
180
-
181
- ```bash
182
- cat message.txt | himalaya template send
183
- ```
184
-
185
- ### Prefill headers from CLI
186
-
187
- ```bash
188
- himalaya message write \
189
- -H "To:recipient@example.com" \
190
- -H "Subject:Quick Message" \
191
- "Message body here"
192
- ```
193
-
194
- ## Tips
195
-
196
- - The editor opens with a template; fill in headers and body.
197
- - Save and exit the editor to send; exit without saving to cancel.
198
- - MML parts are compiled to proper MIME when sending.
199
- - Use `himalaya message export --full` to inspect the raw MIME structure of received emails.
@@ -1,101 +0,0 @@
1
- # Local Places
2
-
3
- This repo is a fusion of two pieces:
4
-
5
- - A FastAPI server that exposes endpoints for searching and resolving places via the Google Maps Places API.
6
- - A companion agent skill that explains how to use the API and can call it to find places efficiently.
7
-
8
- Together, the skill and server let an agent turn natural-language place queries into structured results quickly.
9
-
10
- ## Run locally
11
-
12
- ```bash
13
- # copy skill definition into the relevant folder (where the agent looks for it)
14
- # then run the server
15
-
16
- uv venv
17
- uv pip install -e ".[dev]"
18
- uv run --env-file .env uvicorn local_places.main:app --host 0.0.0.0 --reload
19
- ```
20
-
21
- Open the API docs at http://127.0.0.1:8000/docs.
22
-
23
- ## Places API
24
-
25
- Set the Google Places API key before running:
26
-
27
- ```bash
28
- export GOOGLE_PLACES_API_KEY="your-key"
29
- ```
30
-
31
- Endpoints:
32
-
33
- - `POST /places/search` (free-text query + filters)
34
- - `GET /places/{place_id}` (place details)
35
- - `POST /locations/resolve` (resolve a user-provided location string)
36
-
37
- Example search request:
38
-
39
- ```json
40
- {
41
- "query": "italian restaurant",
42
- "filters": {
43
- "types": ["restaurant"],
44
- "open_now": true,
45
- "min_rating": 4.0,
46
- "price_levels": [1, 2]
47
- },
48
- "limit": 10
49
- }
50
- ```
51
-
52
- Notes:
53
-
54
- - `filters.types` supports a single type (mapped to Google `includedType`).
55
-
56
- Example search request (curl):
57
-
58
- ```bash
59
- curl -X POST http://127.0.0.1:8000/places/search \
60
- -H "Content-Type: application/json" \
61
- -d '{
62
- "query": "italian restaurant",
63
- "location_bias": {
64
- "lat": 40.8065,
65
- "lng": -73.9719,
66
- "radius_m": 3000
67
- },
68
- "filters": {
69
- "types": ["restaurant"],
70
- "open_now": true,
71
- "min_rating": 4.0,
72
- "price_levels": [1, 2, 3]
73
- },
74
- "limit": 10
75
- }'
76
- ```
77
-
78
- Example resolve request (curl):
79
-
80
- ```bash
81
- curl -X POST http://127.0.0.1:8000/locations/resolve \
82
- -H "Content-Type: application/json" \
83
- -d '{
84
- "location_text": "Riverside Park, New York",
85
- "limit": 5
86
- }'
87
- ```
88
-
89
- ## Test
90
-
91
- ```bash
92
- uv run pytest
93
- ```
94
-
95
- ## OpenAPI
96
-
97
- Generate the OpenAPI schema:
98
-
99
- ```bash
100
- uv run python scripts/generate_openapi.py
101
- ```
@@ -1,102 +0,0 @@
1
- ---
2
- name: local-places
3
- description: Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
4
- homepage: https://github.com/Hyaxia/local_places
5
- metadata:
6
- {
7
- "otto":
8
- {
9
- "emoji": "📍",
10
- "requires": { "bins": ["uv"], "env": ["GOOGLE_PLACES_API_KEY"] },
11
- "primaryEnv": "GOOGLE_PLACES_API_KEY",
12
- },
13
- }
14
- ---
15
-
16
- # 📍 Local Places
17
-
18
- _Find places, Go fast_
19
-
20
- Search for nearby places using a local Google Places API proxy. Two-step flow: resolve location first, then search.
21
-
22
- ## Setup
23
-
24
- ```bash
25
- cd {baseDir}
26
- echo "GOOGLE_PLACES_API_KEY=your-key" > .env
27
- uv venv && uv pip install -e ".[dev]"
28
- uv run --env-file .env uvicorn local_places.main:app --host 127.0.0.1 --port 8000
29
- ```
30
-
31
- Requires `GOOGLE_PLACES_API_KEY` in `.env` or environment.
32
-
33
- ## Quick Start
34
-
35
- 1. **Check server:** `curl http://127.0.0.1:8000/ping`
36
-
37
- 2. **Resolve location:**
38
-
39
- ```bash
40
- curl -X POST http://127.0.0.1:8000/locations/resolve \
41
- -H "Content-Type: application/json" \
42
- -d '{"location_text": "Soho, London", "limit": 5}'
43
- ```
44
-
45
- 3. **Search places:**
46
-
47
- ```bash
48
- curl -X POST http://127.0.0.1:8000/places/search \
49
- -H "Content-Type: application/json" \
50
- -d '{
51
- "query": "coffee shop",
52
- "location_bias": {"lat": 51.5137, "lng": -0.1366, "radius_m": 1000},
53
- "filters": {"open_now": true, "min_rating": 4.0},
54
- "limit": 10
55
- }'
56
- ```
57
-
58
- 4. **Get details:**
59
-
60
- ```bash
61
- curl http://127.0.0.1:8000/places/{place_id}
62
- ```
63
-
64
- ## Conversation Flow
65
-
66
- 1. If user says "near me" or gives vague location → resolve it first
67
- 2. If multiple results → show numbered list, ask user to pick
68
- 3. Ask for preferences: type, open now, rating, price level
69
- 4. Search with `location_bias` from chosen location
70
- 5. Present results with name, rating, address, open status
71
- 6. Offer to fetch details or refine search
72
-
73
- ## Filter Constraints
74
-
75
- - `filters.types`: exactly ONE type (e.g., "restaurant", "cafe", "gym")
76
- - `filters.price_levels`: integers 0-4 (0=free, 4=very expensive)
77
- - `filters.min_rating`: 0-5 in 0.5 increments
78
- - `filters.open_now`: boolean
79
- - `limit`: 1-20 for search, 1-10 for resolve
80
- - `location_bias.radius_m`: must be > 0
81
-
82
- ## Response Format
83
-
84
- ```json
85
- {
86
- "results": [
87
- {
88
- "place_id": "ChIJ...",
89
- "name": "Coffee Shop",
90
- "address": "123 Main St",
91
- "location": { "lat": 51.5, "lng": -0.1 },
92
- "rating": 4.6,
93
- "price_level": 2,
94
- "types": ["cafe", "food"],
95
- "open_now": true
96
- }
97
- ],
98
- "next_page_token": "..."
99
- }
100
- ```
101
-
102
- Use `next_page_token` as `page_token` in next request for more results.
@@ -1,21 +0,0 @@
1
- [project]
2
- name = "my-api"
3
- version = "0.1.0"
4
- description = "FastAPI server"
5
- readme = "README.md"
6
- requires-python = ">=3.11"
7
- dependencies = ["fastapi>=0.110.0", "httpx>=0.27.0", "uvicorn[standard]>=0.29.0"]
8
-
9
- [project.optional-dependencies]
10
- dev = ["pytest>=8.0.0"]
11
-
12
- [build-system]
13
- requires = ["hatchling"]
14
- build-backend = "hatchling.build"
15
-
16
- [tool.hatch.build.targets.wheel]
17
- packages = ["src/local_places"]
18
-
19
- [tool.pytest.ini_options]
20
- addopts = "-q"
21
- testpaths = ["tests"]
@@ -1,2 +0,0 @@
1
- __all__ = ["__version__"]
2
- __version__ = "0.1.0"