@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.
Files changed (28) hide show
  1. package/README.md +14 -14
  2. package/commands/{aether_configure_query_server.md → configure_query_server.md} +1 -1
  3. package/commands/{aether_update_instructions.md → update_instructions.md} +44 -32
  4. package/commands/{aether_vercel_setup.md → vercel_setup.md} +4 -4
  5. package/package.json +24 -24
  6. package/rules/{aether_agents.mdc → agents.mdc} +12 -1
  7. package/rules/{aether_api.mdc → api.mdc} +2 -2
  8. package/rules/instructions_warning.mdc +41 -0
  9. package/rules/aether_instructions_warning.mdc +0 -48
  10. /package/commands/{aether_broadchurch_setup.md → broadchurch_setup.md} +0 -0
  11. /package/commands/{aether_build_my_app.md → build_my_app.md} +0 -0
  12. /package/commands/{aether_deploy_agent.md → deploy_agent.md} +0 -0
  13. /package/commands/{aether_deploy_mcp.md → deploy_mcp.md} +0 -0
  14. /package/commands/{aether_update_branding.md → update_branding.md} +0 -0
  15. /package/commands/{aether_vercel_deploy.md → vercel_deploy.md} +0 -0
  16. /package/rules/{aether_aether.mdc → aether.mdc} +0 -0
  17. /package/rules/{aether_architecture.mdc → architecture.mdc} +0 -0
  18. /package/rules/{aether_branding.mdc → branding.mdc} +0 -0
  19. /package/rules/{aether_cookbook.mdc → cookbook.mdc} +0 -0
  20. /package/rules/{aether_design.mdc → design.mdc} +0 -0
  21. /package/rules/{aether_git-support.mdc → git-support.mdc} +0 -0
  22. /package/rules/{aether_mcp-servers.mdc → mcp-servers.mdc} +0 -0
  23. /package/rules/{aether_pref.mdc → pref.mdc} +0 -0
  24. /package/rules/{aether_server.mdc → server.mdc} +0 -0
  25. /package/rules/{aether_something-broke.mdc → something-broke.mdc} +0 -0
  26. /package/rules/{aether_ui.mdc → ui.mdc} +0 -0
  27. /package/skills/{aether_test-api-queries → test-api-queries}/SKILL.md +0 -0
  28. /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
- /aether_update_instructions
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. Delete existing `aether_*` files in `.cursor/`
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
- All files from this package are prefixed with `aether_`:
27
- - Rules: `.cursor/rules/aether_*.mdc`
28
- - Commands: `.cursor/commands/aether_*.md`
29
- - Skills: `.cursor/skills/aether_*/`
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 a package file:
38
- 1. Copy it to a new name without the `aether_` prefix
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 affected by instruction updates
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
- - Copies source files with `aether_` prefix to `packages/aether-instructions/`
49
+
50
+ - Copies source files to `packages/aether-instructions/` with their original names
51
51
  - Bumps the version
52
52
  - Publishes to npmjs
@@ -59,7 +59,7 @@ Replace the `query_server.url` value in `broadchurch.yaml` with the new URL. The
59
59
 
60
60
  ```yaml
61
61
  query_server:
62
- url: "<NEW_URL>"
62
+ url: '<NEW_URL>'
63
63
  ```
64
64
 
65
65
  Preserve all other content in the file.
@@ -1,19 +1,21 @@
1
- # Update Aether Instructions
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 version of the Aether instructions package and extracts it to your `.cursor/` directory. All package files are prefixed with `aether_` to distinguish them from your own custom files.
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 all existing `aether_*` files in `.cursor/rules/` and `.cursor/commands/`
12
- 3. Deletes all existing `aether_*/` directories in `.cursor/skills/`
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. Commits the changes
15
+ 5. Writes a new manifest
16
+ 6. Commits the changes
15
17
 
16
- **Your files are safe:** Only files with the `aether_` prefix are touched. Your custom rules, commands, and skills (without the prefix) are never modified.
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 Existing aether_* Files
71
+ ## Step 4: Delete Previously Installed Files
68
72
 
69
- Remove all `aether_*` files from `.cursor/rules/` and `.cursor/commands/`:
73
+ Read the manifest and delete listed files:
70
74
 
71
75
  ```bash
72
- rm -f .cursor/rules/aether_*.mdc
73
- rm -f .cursor/commands/aether_*.md
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
- Remove all `aether_*/` directories from `.cursor/skills/`:
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: Update Version Marker
111
+ ## Step 6: Write Manifest and Version Marker
103
112
 
104
- Read the new version from the package:
113
+ Build a manifest of all installed files (one relative path per line):
105
114
 
106
115
  ```bash
107
- grep '"version"' "$TEMP_DIR/package/package.json"
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
- echo "X.Y.Z" > .cursor/.aether-instructions-version
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
- echo "=== Installed ==="
134
- ls .cursor/rules/aether_*.mdc 2>/dev/null | wc -l
135
- ls .cursor/commands/aether_*.md 2>/dev/null | wc -l
136
- ls -d .cursor/skills/aether_*/ 2>/dev/null | wc -l
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/aether_* .cursor/commands/aether_* .cursor/skills/aether_* .cursor/.aether-instructions-version
153
- git commit -m "Update Aether instructions to vX.Y.Z"
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 Aether instructions are now up to date.
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/command?
189
+ ### Want to customize a rule or command?
173
190
 
174
- If you need to modify one of the `aether_*` files:
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
- Example:
180
- ```bash
181
- cp .cursor/rules/aether_api.mdc .cursor/rules/api_custom.mdc
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
- "name": "@yottagraph-app/aether-instructions",
3
- "version": "1.0.2",
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
- }
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
- from broadchurch_auth import elemental_client
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 batch search
139
- (`POST /entities/search`). Best for filtered searches (by type, property,
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