@sulala/agent 0.1.13 → 0.1.15

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 (102) hide show
  1. package/README.md +3 -3
  2. package/dashboard/dist/assets/index-DegBJNv6.css +1 -0
  3. package/dashboard/dist/assets/index-pVHpAj3h.js +83 -0
  4. package/dashboard/dist/index.html +2 -2
  5. package/dist/agent/loop.d.ts.map +1 -1
  6. package/dist/agent/loop.js +21 -6
  7. package/dist/agent/loop.js.map +1 -1
  8. package/dist/agent/skill-generate.d.ts +1 -1
  9. package/dist/agent/skill-generate.d.ts.map +1 -1
  10. package/dist/agent/skill-generate.js +10 -3
  11. package/dist/agent/skill-generate.js.map +1 -1
  12. package/dist/agent/skill-install.d.ts +12 -1
  13. package/dist/agent/skill-install.d.ts.map +1 -1
  14. package/dist/agent/skill-install.js +130 -15
  15. package/dist/agent/skill-install.js.map +1 -1
  16. package/dist/agent/skills.d.ts +4 -3
  17. package/dist/agent/skills.d.ts.map +1 -1
  18. package/dist/agent/skills.js +53 -25
  19. package/dist/agent/skills.js.map +1 -1
  20. package/dist/agent/tool/spec-loader.d.ts +7 -0
  21. package/dist/agent/tool/spec-loader.d.ts.map +1 -0
  22. package/dist/agent/tool/spec-loader.js +540 -0
  23. package/dist/agent/tool/spec-loader.js.map +1 -0
  24. package/dist/agent/tools.d.ts.map +1 -1
  25. package/dist/agent/tools.integrations.test.js +4 -5
  26. package/dist/agent/tools.integrations.test.js.map +1 -1
  27. package/dist/agent/tools.js +144 -367
  28. package/dist/agent/tools.js.map +1 -1
  29. package/dist/ai/orchestrator.d.ts.map +1 -1
  30. package/dist/ai/orchestrator.js +82 -17
  31. package/dist/ai/orchestrator.js.map +1 -1
  32. package/dist/cli.d.ts +4 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +25 -9
  35. package/dist/cli.js.map +1 -1
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js +20 -5
  38. package/dist/config.js.map +1 -1
  39. package/dist/db/index.d.ts +14 -7
  40. package/dist/db/index.d.ts.map +1 -1
  41. package/dist/db/index.js +108 -30
  42. package/dist/db/index.js.map +1 -1
  43. package/dist/gateway/server.d.ts.map +1 -1
  44. package/dist/gateway/server.js +141 -15
  45. package/dist/gateway/server.js.map +1 -1
  46. package/dist/index.js +1 -1
  47. package/dist/index.js.map +1 -1
  48. package/dist/onboard-env.d.ts +1 -1
  49. package/dist/onboard-env.d.ts.map +1 -1
  50. package/dist/onboard-env.js +2 -0
  51. package/dist/onboard-env.js.map +1 -1
  52. package/dist/types.d.ts +5 -3
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/watcher/index.d.ts.map +1 -1
  55. package/dist/watcher/index.js +1 -2
  56. package/dist/watcher/index.js.map +1 -1
  57. package/package.json +4 -5
  58. package/src/index.ts +1 -1
  59. package/context/00-rules.md +0 -1
  60. package/context/airtable.md +0 -35
  61. package/context/apple-notes.md +0 -99
  62. package/context/asana.md +0 -37
  63. package/context/bluesky.md +0 -46
  64. package/context/calendar.md +0 -63
  65. package/context/country-info.md +0 -13
  66. package/context/create-skill.md +0 -128
  67. package/context/discord.md +0 -30
  68. package/context/docs.md +0 -29
  69. package/context/drive.md +0 -49
  70. package/context/dropbox.md +0 -39
  71. package/context/facebook.md +0 -47
  72. package/context/fetch-form-api.md +0 -16
  73. package/context/figma.md +0 -30
  74. package/context/files.md +0 -30
  75. package/context/git.md +0 -37
  76. package/context/github.md +0 -58
  77. package/context/gmail.md +0 -52
  78. package/context/google.md +0 -28
  79. package/context/hellohub.md +0 -29
  80. package/context/jira.md +0 -46
  81. package/context/linear.md +0 -40
  82. package/context/news.md +0 -64
  83. package/context/notion.md +0 -45
  84. package/context/portal-integrations.md +0 -42
  85. package/context/post-to-x.md +0 -50
  86. package/context/sheets.md +0 -47
  87. package/context/slack.md +0 -48
  88. package/context/slides.md +0 -35
  89. package/context/stripe.md +0 -38
  90. package/context/tes.md +0 -7
  91. package/context/test.md +0 -7
  92. package/context/weather.md +0 -32
  93. package/context/zoom.md +0 -28
  94. package/dashboard/dist/assets/index-BTx-9jCj.css +0 -1
  95. package/dashboard/dist/assets/index-B_QGQ8c_.js +0 -83
  96. package/registry/apple-notes.md +0 -99
  97. package/registry/bluesky.md +0 -34
  98. package/registry/files.md +0 -30
  99. package/registry/git.md +0 -37
  100. package/registry/news.md +0 -64
  101. package/registry/skills-registry.json +0 -46
  102. package/registry/weather.md +0 -32
@@ -1,99 +0,0 @@
1
- ---
2
- name: apple-notes
3
- description: Manage Apple Notes via the `memo` CLI on macOS. Use when the user asks to add a note, list notes, search notes, or manage note folders.
4
- homepage: https://github.com/antoniorodr/memo
5
- metadata:
6
- {
7
- "sulala":
8
- {
9
- "emoji": "📝",
10
- "os": ["darwin"],
11
- "requires": { "bins": ["memo"] },
12
- "install":
13
- [
14
- {
15
- "id": "brew",
16
- "kind": "brew",
17
- "formula": "antoniorodr/memo/memo",
18
- "bins": ["memo"],
19
- "label": "Install memo via Homebrew",
20
- },
21
- ],
22
- },
23
- }
24
- ---
25
-
26
- # Apple Notes CLI
27
-
28
- Use `memo notes` to manage Apple Notes directly from the terminal. Create, view, edit, delete, search, move notes between folders, and export to HTML/Markdown.
29
-
30
- Setup
31
-
32
- - Install (Homebrew): `brew tap antoniorodr/memo && brew install antoniorodr/memo/memo`
33
- - Manual (pip): `pip install .` (after cloning the repo)
34
- - macOS-only; if prompted, grant Automation access to Notes.app.
35
-
36
- View Notes
37
-
38
- - List all notes: `memo notes`
39
- - Filter by folder: `memo notes -f "Folder Name"`
40
- - Search notes (fuzzy): `memo notes -s "query"`
41
-
42
- Create Notes
43
-
44
- - **Add a note (prefer AppleScript):** For "add a note titled X", use **run_command** with `binary: "osascript"` and the AppleScript in the section below. Do not use memo for non-interactive add.
45
- - Add via memo (interactive only): `memo notes -a -f "FolderName"` — **requires** `-f` (folder). Opens the user's editor; memo does **not** accept title or body as arguments. Use only as fallback if osascript is unavailable.
46
-
47
- Edit Notes
48
-
49
- - Edit existing note: `memo notes -e`
50
- - Interactive selection of note to edit.
51
-
52
- Delete Notes
53
-
54
- - Delete a note: `memo notes -d`
55
- - Interactive selection of note to delete.
56
-
57
- Move Notes
58
-
59
- - Move note to folder: `memo notes -m`
60
- - Interactive selection of note and destination folder.
61
-
62
- Export Notes
63
-
64
- - Export to HTML/Markdown: `memo notes -ex`
65
- - Exports selected note; uses Mistune for markdown processing.
66
-
67
- Limitations
68
-
69
- - Cannot edit notes containing images or attachments.
70
- - Interactive prompts may require terminal access.
71
-
72
- Notes
73
-
74
- - macOS-only.
75
- - Requires Apple Notes.app to be accessible.
76
- - For automation, grant permissions in System Settings > Privacy & Security > Automation.
77
-
78
- ---
79
-
80
- ## When the user asks you to add a note
81
-
82
- Your goal is to get the note into Apple Notes. Use **run_command** only (no skill-specific tools). Add osascript and memo to ALLOWED_BINARIES.
83
-
84
- **Prefer AppleScript for "add a note titled X".** Use the osascript one-liner below so the agent creates the note in one shot instead of trying memo (which is interactive and does not accept title as an argument).
85
-
86
- 1. **Adding a note directly (macOS)**
87
- - Use **run_command** with `binary: "osascript"` and one `-e` argument containing this AppleScript. Replace TITLE and BODY with the user's note title and optional body; escape any double-quote in TITLE or BODY as backslash-quote (`\"`).
88
- - Script (use `\n` for newlines in the string you pass):
89
- `tell application "Notes"\ntell account "iCloud"\ntell folder "Notes"\nmake new note with properties {name:"TITLE", body:"BODY"}\nend tell\nend tell\nend tell`
90
- - Example for "add apple note called buy saisai": args = `["-e", "tell application \"Notes\"\ntell account \"iCloud\"\ntell folder \"Notes\"\nmake new note with properties {name:\"buy saisai\", body:\"\"}\nend tell\nend tell\nend tell"]`
91
- - On success, confirm: "Done — I added an Apple Note titled \"…\"."
92
- - If osascript is not in ALLOWED_BINARIES or the command errors: give the user the note text and steps to run `memo notes -a -f "Notes"` in the terminal and paste the content when the editor opens.
93
-
94
- 2. **List and search**
95
- - **run_command** with `binary: "memo"`, `args: ["notes"]` for list; `args: ["notes", "-s", "query"]` for search.
96
-
97
- 3. **Do not**
98
- - Do not use run_command with memo `["notes", "-a", "title"]`; memo rejects extra arguments.
99
- - Do not leave the user without a path to success: either add via osascript (run_command) or give text + steps for memo notes -a, or explain why (e.g. add osascript to ALLOWED_BINARIES).
@@ -1,34 +0,0 @@
1
- ---
2
- name: bluesky
3
- description: Post to Bluesky (AT Protocol). Use when the user asks to post to Bluesky or share content on Bluesky. Uses Portal OAuth connection via integrations.
4
- homepage: https://bsky.app
5
- metadata:
6
- {
7
- "sulala": {
8
- "emoji": "🦋",
9
- "requires": { "bins": ["curl"] }
10
- }
11
- }
12
- ---
13
-
14
- # Bluesky Posting
15
-
16
- Post to Bluesky via the AT Protocol. Uses the **Portal OAuth connection** (integrations). User connects Bluesky in the Portal; no app password needed.
17
-
18
- ## How to post
19
-
20
- 1. **list_integrations_connections** with `provider: "bluesky"` → get `connection_id`.
21
- 2. **bluesky_post** with that `connection_id` and the post text (max 300 characters).
22
-
23
- Use **bluesky_post**; do not use run_command (curl) for Bluesky.
24
-
25
- ## When to use
26
-
27
- - "Post this to Bluesky"
28
- - "Share [content] on Bluesky"
29
- - "Post news from [URL] to Bluesky"
30
-
31
- ## Requirements
32
-
33
- - **PORTAL_GATEWAY_URL** and **PORTAL_API_KEY** (from Portal → API Keys).
34
- - User must have connected Bluesky in the Portal (Connections).
package/registry/files.md DELETED
@@ -1,30 +0,0 @@
1
- ---
2
- name: files
3
- description: Basic file operations via run_command. Use when the user asks to list files, show file contents, search within files, or inspect directories.
4
- metadata:
5
- {
6
- "sulala": {
7
- "requires": { "bins": [] }
8
- }
9
- }
10
- ---
11
-
12
- # File operations
13
-
14
- Use **run_command** with common shell tools to read and inspect files. Add required binaries to ALLOWED_BINARIES (e.g. ls, cat, head, tail, wc, grep, find).
15
-
16
- ## List files
17
-
18
- - `ls` — list directory contents
19
- - `ls -la` — long format with hidden files
20
-
21
- ## Read files
22
-
23
- - `cat path/to/file` — output entire file
24
- - `head -n 20 path/to/file` — first 20 lines
25
- - `tail -n 50 path/to/file` — last 50 lines
26
-
27
- ## Search
28
-
29
- - `grep -r "pattern" path/` — search in files recursively
30
- - `find path -name "*.md"` — find files by name
package/registry/git.md DELETED
@@ -1,37 +0,0 @@
1
- ---
2
- name: git
3
- description: Basic Git operations via run_command. Use when the user asks to check status, diff, log, branch, or perform simple git commands.
4
- metadata:
5
- {
6
- "sulala": {
7
- "requires": { "bins": ["git"] }
8
- }
9
- }
10
- ---
11
-
12
- # Git operations
13
-
14
- Use **run_command** with `binary: "git"` and appropriate args. Add `git` to ALLOWED_BINARIES.
15
-
16
- ## Status and diff
17
-
18
- - `git status`
19
- - `git diff`
20
- - `git diff --staged`
21
- - `git log -n 10 --oneline`
22
-
23
- ## Branches
24
-
25
- - `git branch`
26
- - `git branch -a`
27
- - `git checkout -b new-branch`
28
-
29
- ## Info
30
-
31
- - `git show HEAD:path/to/file` — show file at HEAD
32
- - `git rev-parse --abbrev-ref HEAD` — current branch name
33
-
34
- ## Limits
35
-
36
- - Do not run destructive commands (reset --hard, push --force) without explicit user confirmation.
37
- - Prefer read-only commands when the user only asks to inspect.
package/registry/news.md DELETED
@@ -1,64 +0,0 @@
1
- ---
2
- name: news
3
- description: Fetch news and articles via the Perigon API. Use when the user asks for news, headlines, or articles on a topic.
4
- homepage: https://www.perigon.io
5
- metadata:
6
- {
7
- "sulala": {
8
- "emoji": "📰",
9
- "requires": { "bins": ["curl"], "env": ["PERIGON_API_KEY"] }
10
- }
11
- }
12
- ---
13
-
14
- # News (Perigon API)
15
-
16
- Use **run_command** with `curl` to fetch articles from the Perigon API. Add `curl` to ALLOWED_BINARIES.
17
-
18
- Requires `PERIGON_API_KEY`. Set it in `.env` or in the skill config (dashboard Skills page). Config key in `skills.entries.news` is `PERIGON_API_KEY`.
19
-
20
- **IMPORTANT:** Use `binary: "sh"` and `args: ["-c", "curl ..."]` so `$PERIGON_API_KEY` expands, or pass the key in the URL when calling curl.
21
-
22
- ## When to Use
23
-
24
- - "Get me the latest news"
25
- - "Headlines about [topic]"
26
- - "Find articles on [subject]"
27
-
28
- ## API
29
-
30
- Base URL: `https://api.perigon.io/v1`
31
-
32
- ### All articles (recent)
33
-
34
- ```bash
35
- curl -s -X GET "https://api.perigon.io/v1/articles/all?apiKey=$PERIGON_API_KEY" -H "Content-Type: application/json"
36
- ```
37
-
38
- ### With query (topic, keyword)
39
-
40
- Append `&q=keyword` to the URL. Example:
41
-
42
- ```bash
43
- curl -s -X GET "https://api.perigon.io/v1/articles/all?apiKey=$PERIGON_API_KEY&q=climate" -H "Content-Type: application/json"
44
- ```
45
-
46
- ### Reading key from config
47
-
48
- If `PERIGON_API_KEY` is not set in the environment, read from Sulala config:
49
-
50
- ```
51
- CONFIG_PATH="${SULALA_CONFIG_PATH:-$HOME/.sulala/config.json}"
52
- PERIGON_API_KEY=$(cat "$CONFIG_PATH" 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); e=d.get('skills',{}).get('entries',{}).get('news',{}); print(e.get('PERIGON_API_KEY',''))" 2>/dev/null)
53
- ```
54
-
55
- Then use `$PERIGON_API_KEY` in the curl URL.
56
-
57
- ## Response
58
-
59
- Returns JSON with an array of articles (title, description, url, source, published date, etc.). Parse with `python3 -c "import sys,json; d=json.load(sys.stdin); ..."` to summarize or filter for the user.
60
-
61
- ## Notes
62
-
63
- - Get an API key at https://www.perigon.io
64
- - Add `api.perigon.io` to ALLOWED_CURL_HOSTS if you restrict curl by host.
@@ -1,46 +0,0 @@
1
- {
2
- "skills": [
3
- {
4
- "slug": "apple-notes",
5
- "name": "apple-notes",
6
- "description": "Manage Apple Notes via the memo CLI on macOS. Use when the user asks to add a note, list notes, search notes, or manage note folders.",
7
- "version": "1.0.0"
8
- },
9
- {
10
- "slug": "files",
11
- "name": "files",
12
- "description": "Basic file operations via run_command. Use when the user asks to list files, show file contents, search within files, or inspect directories.",
13
- "version": "1.0.0"
14
- },
15
- {
16
- "slug": "git",
17
- "name": "git",
18
- "description": "Basic Git operations via run_command. Use when the user asks to check status, diff, log, branch, or perform simple git commands.",
19
- "version": "1.0.0"
20
- },
21
- {
22
- "slug": "weather",
23
- "name": "weather",
24
- "description": "Get current weather and forecasts (no API key required). Uses Open-Meteo.",
25
- "version": "1.0.0"
26
- },
27
- {
28
- "slug": "bluesky",
29
- "name": "bluesky",
30
- "description": "Post to Bluesky (AT Protocol). Use when the user asks to post a tweet/thread to Bluesky, share content on Bluesky, or post news from a URL.",
31
- "version": "1.0.0"
32
- },
33
- {
34
- "slug": "news",
35
- "name": "news",
36
- "description": "Fetch news and articles via the Perigon API. Use when the user asks for news, headlines, or articles on a topic.",
37
- "version": "1.0.0"
38
- },
39
- {
40
- "slug": "portal-integrations",
41
- "name": "portal-integrations",
42
- "description": "Use connected apps (Gmail, Calendar, Zoom, Slack, GitHub, etc.) via the Portal. List connections with list_integrations_connections, then use connection_id in provider tools.",
43
- "version": "1.0.0"
44
- }
45
- ]
46
- }
@@ -1,32 +0,0 @@
1
- ---
2
- name: weather
3
- description: Get current weather and forecasts (no API key required).
4
- homepage: https://open-meteo.com/en/docs
5
- metadata:
6
- {
7
- "sulala": {
8
- "emoji": "🌤️",
9
- "requires": { "bins": ["curl"] }
10
- }
11
- }
12
- ---
13
-
14
- # Weather
15
-
16
- Use **run_command** with `curl` to fetch weather from Open-Meteo (free, no API key). Add `curl` to ALLOWED_BINARIES.
17
-
18
- ## Open-Meteo
19
-
20
- Geocoding (city → lat, lon):
21
- ```bash
22
- curl -s "https://geocoding-api.open-meteo.com/v1/search?name=London&count=1"
23
- ```
24
-
25
- Current weather (use lat, lon from geocoding):
26
- ```bash
27
- curl -s "https://api.open-meteo.com/v1/forecast?latitude=51.5&longitude=-0.12&current_weather=true"
28
- ```
29
-
30
- Returns JSON with temp, windspeed, weathercode, etc.
31
-
32
- Docs: https://open-meteo.com/en/docs