@yottagraph-app/aether-instructions 1.0.2 → 1.1.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.
- package/README.md +14 -14
- package/commands/{aether_configure_query_server.md → configure_query_server.md} +1 -1
- package/commands/{aether_update_instructions.md → update_instructions.md} +44 -32
- package/commands/{aether_vercel_setup.md → vercel_setup.md} +4 -4
- package/package.json +24 -24
- package/rules/{aether_agents.mdc → agents.mdc} +12 -1
- package/rules/{aether_api.mdc → api.mdc} +2 -2
- package/rules/instructions_warning.mdc +41 -0
- package/rules/aether_instructions_warning.mdc +0 -48
- /package/commands/{aether_broadchurch_setup.md → broadchurch_setup.md} +0 -0
- /package/commands/{aether_build_my_app.md → build_my_app.md} +0 -0
- /package/commands/{aether_deploy_agent.md → deploy_agent.md} +0 -0
- /package/commands/{aether_deploy_mcp.md → deploy_mcp.md} +0 -0
- /package/commands/{aether_update_branding.md → update_branding.md} +0 -0
- /package/commands/{aether_vercel_deploy.md → vercel_deploy.md} +0 -0
- /package/rules/{aether_aether.mdc → aether.mdc} +0 -0
- /package/rules/{aether_architecture.mdc → architecture.mdc} +0 -0
- /package/rules/{aether_branding.mdc → branding.mdc} +0 -0
- /package/rules/{aether_cookbook.mdc → cookbook.mdc} +0 -0
- /package/rules/{aether_design.mdc → design.mdc} +0 -0
- /package/rules/{aether_git-support.mdc → git-support.mdc} +0 -0
- /package/rules/{aether_mcp-servers.mdc → mcp-servers.mdc} +0 -0
- /package/rules/{aether_pref.mdc → pref.mdc} +0 -0
- /package/rules/{aether_server.mdc → server.mdc} +0 -0
- /package/rules/{aether_something-broke.mdc → something-broke.mdc} +0 -0
- /package/rules/{aether_ui.mdc → ui.mdc} +0 -0
- /package/skills/{aether_test-api-queries → test-api-queries}/SKILL.md +0 -0
- /package/skills/{aether_test-api-queries → test-api-queries}/query-api.js +0 -0
package/README.md
CHANGED
|
@@ -12,32 +12,31 @@ initialization (`init-project.js`). You don't need to install it directly.
|
|
|
12
12
|
To update to the latest version:
|
|
13
13
|
|
|
14
14
|
```
|
|
15
|
-
/
|
|
15
|
+
/update_instructions
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
This Cursor command will:
|
|
19
|
+
|
|
19
20
|
1. Download the latest version of this package
|
|
20
|
-
2.
|
|
21
|
+
2. Replace files in `.cursor/` that are listed in `.cursor/.aether-instructions-manifest`
|
|
21
22
|
3. Extract fresh files from the package
|
|
22
23
|
4. Commit the changes
|
|
23
24
|
|
|
24
25
|
### File Naming Convention
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
This separates package-provided files from your own custom files. Files with
|
|
32
|
-
the `aether_` prefix will be overwritten on update; your non-prefixed files
|
|
33
|
-
are untouched.
|
|
27
|
+
Package files keep their original names under `.cursor/rules/`,
|
|
28
|
+
`.cursor/commands/`, and `.cursor/skills/`. Which paths are owned by the
|
|
29
|
+
package is recorded in `.cursor/.aether-instructions-manifest`. Only those
|
|
30
|
+
paths are overwritten on update; other files under `.cursor/` are not touched
|
|
31
|
+
by the updater.
|
|
34
32
|
|
|
35
33
|
### Customizing Rules/Commands
|
|
36
34
|
|
|
37
|
-
To customize
|
|
38
|
-
|
|
35
|
+
To customize something that ships with the package:
|
|
36
|
+
|
|
37
|
+
1. Copy it to a new filename (a path not listed in the manifest)
|
|
39
38
|
2. Make your changes to the copy
|
|
40
|
-
3. Your copy won't be
|
|
39
|
+
3. Your copy won't be replaced when you run `/update_instructions`
|
|
41
40
|
|
|
42
41
|
## For Maintainers
|
|
43
42
|
|
|
@@ -47,6 +46,7 @@ This package is built from `aether-dev` sources. To publish:
|
|
|
47
46
|
2. Run `/publish_instructions --bump patch --publish`
|
|
48
47
|
|
|
49
48
|
The publish command:
|
|
50
|
-
|
|
49
|
+
|
|
50
|
+
- Copies source files to `packages/aether-instructions/` with their original names
|
|
51
51
|
- Bumps the version
|
|
52
52
|
- Publishes to npmjs
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
# Update
|
|
1
|
+
# Update Instructions
|
|
2
2
|
|
|
3
3
|
Update Cursor rules, commands, and skills from the `@yottagraph-app/aether-instructions` npm package.
|
|
4
4
|
|
|
5
5
|
## Overview
|
|
6
6
|
|
|
7
|
-
This command downloads the latest
|
|
7
|
+
This command downloads the latest instructions package and extracts it to your `.cursor/` directory. A manifest file (`.cursor/.aether-instructions-manifest`) tracks which files came from the package so updates only replace package-provided files.
|
|
8
8
|
|
|
9
9
|
**What happens:**
|
|
10
|
+
|
|
10
11
|
1. Downloads the latest `@yottagraph-app/aether-instructions` package
|
|
11
|
-
2. Deletes
|
|
12
|
-
3.
|
|
12
|
+
2. Deletes files listed in the existing manifest
|
|
13
|
+
3. Cleans up any legacy `aether_*` prefixed files from older versions
|
|
13
14
|
4. Extracts fresh files from the package
|
|
14
|
-
5.
|
|
15
|
+
5. Writes a new manifest
|
|
16
|
+
6. Commits the changes
|
|
15
17
|
|
|
16
|
-
**Your files are safe:** Only files
|
|
18
|
+
**Your files are safe:** Only files listed in the manifest are touched during updates. If you've created your own rules or commands, they won't be modified.
|
|
17
19
|
|
|
18
20
|
---
|
|
19
21
|
|
|
@@ -26,6 +28,7 @@ cat .cursor/.aether-instructions-version 2>/dev/null || echo "Not installed"
|
|
|
26
28
|
```
|
|
27
29
|
|
|
28
30
|
Report to user:
|
|
31
|
+
|
|
29
32
|
> Current version: X.Y.Z (or "Not installed")
|
|
30
33
|
|
|
31
34
|
---
|
|
@@ -39,6 +42,7 @@ npm view @yottagraph-app/aether-instructions version
|
|
|
39
42
|
```
|
|
40
43
|
|
|
41
44
|
Compare with current:
|
|
45
|
+
|
|
42
46
|
- If same version: Ask user if they want to reinstall anyway
|
|
43
47
|
- If newer version: Proceed with update
|
|
44
48
|
- If current is newer: Warn user (they may have a pre-release)
|
|
@@ -64,18 +68,23 @@ The extracted content is in `$TEMP_DIR/package/`.
|
|
|
64
68
|
|
|
65
69
|
---
|
|
66
70
|
|
|
67
|
-
## Step 4: Delete
|
|
71
|
+
## Step 4: Delete Previously Installed Files
|
|
68
72
|
|
|
69
|
-
|
|
73
|
+
Read the manifest and delete listed files:
|
|
70
74
|
|
|
71
75
|
```bash
|
|
72
|
-
|
|
73
|
-
|
|
76
|
+
if [ -f .cursor/.aether-instructions-manifest ]; then
|
|
77
|
+
while IFS= read -r rel; do
|
|
78
|
+
rm -rf ".cursor/$rel"
|
|
79
|
+
done < .cursor/.aether-instructions-manifest
|
|
80
|
+
fi
|
|
74
81
|
```
|
|
75
82
|
|
|
76
|
-
|
|
83
|
+
Also clean up legacy `aether_*` files from older package versions:
|
|
77
84
|
|
|
78
85
|
```bash
|
|
86
|
+
rm -f .cursor/rules/aether_*.mdc
|
|
87
|
+
rm -f .cursor/commands/aether_*.md
|
|
79
88
|
rm -rf .cursor/skills/aether_*/
|
|
80
89
|
```
|
|
81
90
|
|
|
@@ -99,18 +108,22 @@ cp -r "$TEMP_DIR/package/skills/"* .cursor/skills/ 2>/dev/null || true
|
|
|
99
108
|
|
|
100
109
|
---
|
|
101
110
|
|
|
102
|
-
## Step 6:
|
|
111
|
+
## Step 6: Write Manifest and Version Marker
|
|
103
112
|
|
|
104
|
-
|
|
113
|
+
Build a manifest of all installed files (one relative path per line):
|
|
105
114
|
|
|
106
115
|
```bash
|
|
107
|
-
|
|
116
|
+
MANIFEST=""
|
|
117
|
+
for f in .cursor/rules/*.mdc; do [ -f "$f" ] && MANIFEST="$MANIFEST\nrules/$(basename "$f")"; done
|
|
118
|
+
for f in .cursor/commands/*.md; do [ -f "$f" ] && MANIFEST="$MANIFEST\ncommands/$(basename "$f")"; done
|
|
119
|
+
for d in .cursor/skills/*/; do [ -d "$d" ] && MANIFEST="$MANIFEST\nskills/$(basename "$d")"; done
|
|
120
|
+
echo -e "$MANIFEST" > .cursor/.aether-instructions-manifest
|
|
108
121
|
```
|
|
109
122
|
|
|
110
123
|
Write the version marker:
|
|
111
124
|
|
|
112
125
|
```bash
|
|
113
|
-
|
|
126
|
+
grep -o '"version": *"[^"]*"' "$TEMP_DIR/package/package.json" | grep -o '[0-9][^"]*' > .cursor/.aether-instructions-version
|
|
114
127
|
```
|
|
115
128
|
|
|
116
129
|
---
|
|
@@ -130,14 +143,16 @@ rm -rf "$TEMP_DIR"
|
|
|
130
143
|
Count what was installed:
|
|
131
144
|
|
|
132
145
|
```bash
|
|
133
|
-
|
|
134
|
-
ls .cursor/rules
|
|
135
|
-
ls .cursor/commands
|
|
136
|
-
ls -d .cursor/skills
|
|
146
|
+
wc -l < .cursor/.aether-instructions-manifest
|
|
147
|
+
ls .cursor/rules/*.mdc 2>/dev/null | wc -l
|
|
148
|
+
ls .cursor/commands/*.md 2>/dev/null | wc -l
|
|
149
|
+
ls -d .cursor/skills/*/ 2>/dev/null | wc -l
|
|
137
150
|
```
|
|
138
151
|
|
|
139
152
|
Report to user:
|
|
153
|
+
|
|
140
154
|
> Updated to @yottagraph-app/aether-instructions@X.Y.Z
|
|
155
|
+
>
|
|
141
156
|
> - Rules: N files
|
|
142
157
|
> - Commands: N files
|
|
143
158
|
> - Skills: N directories
|
|
@@ -149,11 +164,11 @@ Report to user:
|
|
|
149
164
|
Commit the updated instruction files:
|
|
150
165
|
|
|
151
166
|
```bash
|
|
152
|
-
git add .cursor/rules/
|
|
153
|
-
git commit -m "Update
|
|
167
|
+
git add .cursor/rules/ .cursor/commands/ .cursor/skills/ .cursor/.aether-instructions-version .cursor/.aether-instructions-manifest
|
|
168
|
+
git commit -m "Update instructions to vX.Y.Z"
|
|
154
169
|
```
|
|
155
170
|
|
|
156
|
-
> Changes committed. Your
|
|
171
|
+
> Changes committed. Your instructions are now up to date.
|
|
157
172
|
|
|
158
173
|
---
|
|
159
174
|
|
|
@@ -162,22 +177,19 @@ git commit -m "Update Aether instructions to vX.Y.Z"
|
|
|
162
177
|
### npm pack fails
|
|
163
178
|
|
|
164
179
|
If `npm pack` fails with a registry error:
|
|
180
|
+
|
|
165
181
|
> Make sure you have network access to npmjs.com. If you're behind a proxy, configure npm: `npm config set proxy <url>`
|
|
166
182
|
|
|
167
183
|
### Permission denied
|
|
168
184
|
|
|
169
185
|
If you get permission errors:
|
|
186
|
+
|
|
170
187
|
> Try running with appropriate permissions, or check that `.cursor/` is writable.
|
|
171
188
|
|
|
172
|
-
### Want to customize a rule
|
|
189
|
+
### Want to customize a rule or command?
|
|
173
190
|
|
|
174
|
-
If you need to modify
|
|
175
|
-
1. Copy it to a new name without the `aether_` prefix
|
|
176
|
-
2. Make your changes to the copy
|
|
177
|
-
3. Your copy won't be affected by future updates
|
|
191
|
+
If you need to modify a package-provided file:
|
|
178
192
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
# Edit api_custom.mdc as needed
|
|
183
|
-
```
|
|
193
|
+
1. Edit it directly — your changes will persist until the next update
|
|
194
|
+
2. To preserve changes across updates, copy it to a new name first
|
|
195
|
+
3. Remove the original's entry from `.cursor/.aether-instructions-manifest` so it won't be deleted on update
|
|
@@ -307,10 +307,10 @@ Read the local `.env` file and parse all non-commented, non-empty lines into KEY
|
|
|
307
307
|
|
|
308
308
|
- Commented-out lines (starting with `#`)
|
|
309
309
|
- Variables with empty values (e.g., `NUXT_PUBLIC_USER_NAME=`, `NUXT_PUBLIC_QUERY_SERVER_ADDRESS=`)
|
|
310
|
-
> **Why skip empty values?** Nuxt's runtime config defaults them to empty strings already.
|
|
311
|
-
> The Vercel CLI cannot store truly empty values — it either prompts interactively or
|
|
312
|
-
> requires a non-empty string. Using a space or placeholder causes bugs. For example,
|
|
313
|
-
> a space in `NUXT_PUBLIC_USER_NAME` bypasses Auth0 login entirely.
|
|
310
|
+
> **Why skip empty values?** Nuxt's runtime config defaults them to empty strings already.
|
|
311
|
+
> The Vercel CLI cannot store truly empty values — it either prompts interactively or
|
|
312
|
+
> requires a non-empty string. Using a space or placeholder causes bugs. For example,
|
|
313
|
+
> a space in `NUXT_PUBLIC_USER_NAME` bypasses Auth0 login entirely.
|
|
314
314
|
|
|
315
315
|
### Sync Process
|
|
316
316
|
|
package/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
2
|
+
"name": "@yottagraph-app/aether-instructions",
|
|
3
|
+
"version": "1.1.1",
|
|
4
|
+
"description": "Cursor rules, commands, and skills for Aether development",
|
|
5
|
+
"files": [
|
|
6
|
+
"rules",
|
|
7
|
+
"commands",
|
|
8
|
+
"skills"
|
|
9
|
+
],
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/Lovelace-AI/aether-dev.git",
|
|
13
|
+
"directory": "packages/aether-instructions"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"cursor",
|
|
17
|
+
"aether",
|
|
18
|
+
"rules",
|
|
19
|
+
"commands",
|
|
20
|
+
"skills"
|
|
21
|
+
],
|
|
22
|
+
"license": "UNLICENSED",
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
}
|
|
26
26
|
}
|
|
@@ -58,7 +58,10 @@ directory at deploy time. It handles:
|
|
|
58
58
|
- Falling back to `ELEMENTAL_API_TOKEN` for local dev
|
|
59
59
|
|
|
60
60
|
```python
|
|
61
|
-
|
|
61
|
+
try:
|
|
62
|
+
from broadchurch_auth import elemental_client
|
|
63
|
+
except ImportError:
|
|
64
|
+
from .broadchurch_auth import elemental_client
|
|
62
65
|
|
|
63
66
|
def get_schema() -> dict:
|
|
64
67
|
"""Get the yottagraph schema."""
|
|
@@ -73,6 +76,10 @@ def find_entities(expression: str, limit: int = 10) -> dict:
|
|
|
73
76
|
return resp.json()
|
|
74
77
|
```
|
|
75
78
|
|
|
79
|
+
The try/except is required because the import path differs between local
|
|
80
|
+
dev (`agents/` on sys.path → absolute import) and Agent Engine runtime
|
|
81
|
+
(code packaged inside an ADK module → relative import).
|
|
82
|
+
|
|
76
83
|
**Do NOT** hardcode URLs or manually handle auth tokens. Do NOT read
|
|
77
84
|
`broadchurch.yaml` directly — `broadchurch_auth` handles all of this.
|
|
78
85
|
|
|
@@ -116,6 +123,10 @@ Select your agent from the dropdown in the web UI. You can also run a single age
|
|
|
116
123
|
during local dev (agents/ is the CWD → on sys.path). At deploy time, the
|
|
117
124
|
workflow copies it into the agent directory alongside `broadchurch.yaml`.
|
|
118
125
|
|
|
126
|
+
**Important:** Always use the try/except import pattern shown above. ADK
|
|
127
|
+
wraps agent code in a package at deploy time, so absolute imports fail at
|
|
128
|
+
runtime in Agent Engine — the relative import fallback is required.
|
|
129
|
+
|
|
119
130
|
## Deployment
|
|
120
131
|
|
|
121
132
|
Two ways to deploy:
|
|
@@ -135,8 +135,8 @@ See the **cookbook** rule for a full "Get filings for a company" recipe.
|
|
|
135
135
|
|
|
136
136
|
- **`client.getNEID()`** -- simple single-entity lookup by name
|
|
137
137
|
(`GET /entities/lookup`). Best for resolving one company/person name.
|
|
138
|
-
- **`client.findEntities()`** -- expression-based
|
|
139
|
-
(`POST /
|
|
138
|
+
- **`client.findEntities()`** -- expression-based search
|
|
139
|
+
(`POST /elemental/find`). Best for filtered searches (by type, property,
|
|
140
140
|
relationship). See `find.md` for the expression language.
|
|
141
141
|
|
|
142
142
|
## Error Handling
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Warns users not to modify package-managed instruction files in .cursor/
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Aether Instructions Warning
|
|
7
|
+
|
|
8
|
+
**You are editing a file managed by the `@yottagraph-app/aether-instructions` package.**
|
|
9
|
+
|
|
10
|
+
Package-managed files are tracked by `.cursor/.aether-instructions-manifest`.
|
|
11
|
+
They will be **overwritten** when you run `/update_instructions`.
|
|
12
|
+
|
|
13
|
+
## Do Not
|
|
14
|
+
|
|
15
|
+
- Modify files listed in the manifest directly (changes will be lost on update)
|
|
16
|
+
|
|
17
|
+
## To Customize
|
|
18
|
+
|
|
19
|
+
If you need to modify a package-provided rule or command:
|
|
20
|
+
|
|
21
|
+
1. **Copy** the file to a new name
|
|
22
|
+
2. Make your changes to the copy
|
|
23
|
+
3. Remove the original's entry from `.cursor/.aether-instructions-manifest`
|
|
24
|
+
so it won't be replaced on update
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Copy the rule you want to customize
|
|
30
|
+
cp .cursor/rules/api.mdc .cursor/rules/api_custom.mdc
|
|
31
|
+
|
|
32
|
+
# Edit your copy — it won't be affected by instruction updates
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## How It Works
|
|
36
|
+
|
|
37
|
+
- `.cursor/.aether-instructions-manifest` lists every file installed by the
|
|
38
|
+
package (one relative path per line, e.g. `rules/api.mdc`)
|
|
39
|
+
- `/update_instructions` deletes manifest entries, extracts fresh files from
|
|
40
|
+
the latest package, and writes a new manifest
|
|
41
|
+
- Files not in the manifest are never touched
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Warns users not to modify aether_ prefixed files in .cursor/
|
|
3
|
-
globs:
|
|
4
|
-
- .cursor/**/aether_*
|
|
5
|
-
alwaysApply: false
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Aether Instructions Warning
|
|
9
|
-
|
|
10
|
-
**You are editing a file managed by the `@yottagraph-app/aether-instructions` package.**
|
|
11
|
-
|
|
12
|
-
Files prefixed with `aether_` are automatically installed and updated by the
|
|
13
|
-
Aether instructions system. They will be **overwritten** when you run
|
|
14
|
-
`/aether_update_instructions`.
|
|
15
|
-
|
|
16
|
-
## Do Not
|
|
17
|
-
|
|
18
|
-
- Modify existing `aether_*` files directly (changes will be lost on update)
|
|
19
|
-
- Create new files with the `aether_` prefix (they will be deleted on update)
|
|
20
|
-
|
|
21
|
-
## To Customize
|
|
22
|
-
|
|
23
|
-
If you need to modify the behavior of an `aether_*` rule or command:
|
|
24
|
-
|
|
25
|
-
1. **Copy** the file to a new name **without** the `aether_` prefix
|
|
26
|
-
2. Make your changes to the copy
|
|
27
|
-
3. Your copy will not be affected by instruction updates
|
|
28
|
-
|
|
29
|
-
Example:
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
# Copy the rule you want to customize
|
|
33
|
-
cp .cursor/rules/aether_api.mdc .cursor/rules/api_custom.mdc
|
|
34
|
-
|
|
35
|
-
# Edit your copy
|
|
36
|
-
# Your customizations in api_custom.mdc are preserved across updates
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## Why This Matters
|
|
40
|
-
|
|
41
|
-
The `aether_` prefix creates a clear namespace:
|
|
42
|
-
- **`aether_*` files** = Package-managed, updated automatically
|
|
43
|
-
- **Other files** = Your custom rules/commands, never touched
|
|
44
|
-
|
|
45
|
-
This allows you to:
|
|
46
|
-
- Receive rule updates without losing your customizations
|
|
47
|
-
- Know at a glance which files are yours vs. package-provided
|
|
48
|
-
- Safely extend the system without conflicts
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|