@uluops/setup 0.4.0 → 0.6.0

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 (211) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -50
  3. package/assets/auto-tracker-save.mjs +142 -0
  4. package/assets/{agents → claude-code/agents}/api-contract-validator-agent.md +9 -228
  5. package/assets/{agents → claude-code/agents}/aristotle-analyst-agent.md +51 -4
  6. package/assets/{agents → claude-code/agents}/aristotle-explorer-agent.md +6 -2
  7. package/assets/{agents → claude-code/agents}/aristotle-forecaster-agent.md +15 -230
  8. package/assets/{agents → claude-code/agents}/aristotle-validator-agent.md +12 -252
  9. package/assets/{agents → claude-code/agents}/assumption-excavator-agent.md +21 -247
  10. package/assets/{agents → claude-code/agents}/code-auditor-agent.md +12 -255
  11. package/assets/{agents → claude-code/agents}/code-optimizer-agent.md +15 -236
  12. package/assets/{agents → claude-code/agents}/code-validator-agent.md +31 -300
  13. package/assets/claude-code/agents/docs-validator-agent.md +472 -0
  14. package/assets/{agents → claude-code/agents}/frontend-validator-agent.md +15 -258
  15. package/assets/{agents → claude-code/agents}/mcp-validator-agent.md +8 -252
  16. package/assets/{agents → claude-code/agents}/pre-implementation-architect-agent.md +8 -224
  17. package/assets/{agents → claude-code/agents}/prompt-engineer-agent.md +57 -290
  18. package/assets/{agents → claude-code/agents}/prompt-pattern-analyzer-agent.md +10 -225
  19. package/assets/{agents → claude-code/agents}/prompt-quality-validator-agent.md +11 -249
  20. package/assets/{agents → claude-code/agents}/public-interface-validator-agent.md +15 -268
  21. package/assets/claude-code/agents/release-readiness-agent.md +495 -0
  22. package/assets/{agents → claude-code/agents}/security-analyst-agent.md +236 -480
  23. package/assets/{agents → claude-code/agents}/test-architect-agent.md +16 -259
  24. package/assets/{agents → claude-code/agents}/type-safety-validator-agent.md +23 -266
  25. package/assets/{agents → claude-code/agents}/workflow-synthesis-agent.md +23 -226
  26. package/assets/{commands → claude-code/commands}/agents/anxiety-reader.md +12 -15
  27. package/assets/{commands → claude-code/commands}/agents/api-contract.md +156 -136
  28. package/assets/{commands → claude-code/commands}/agents/architect.md +156 -136
  29. package/assets/claude-code/commands/agents/aristotle-analyst.md +157 -0
  30. package/assets/claude-code/commands/agents/aristotle-explorer.md +157 -0
  31. package/assets/claude-code/commands/agents/aristotle-forecaster.md +157 -0
  32. package/assets/claude-code/commands/agents/aristotle-validator.md +157 -0
  33. package/assets/{commands → claude-code/commands}/agents/assumption-excavator.md +49 -7
  34. package/assets/{commands → claude-code/commands}/agents/audit.md +156 -137
  35. package/assets/{commands → claude-code/commands}/agents/docs-validate.md +156 -134
  36. package/assets/{commands → claude-code/commands}/agents/frontend.md +156 -136
  37. package/assets/{commands → claude-code/commands}/agents/mcp-validate.md +156 -137
  38. package/assets/{commands → claude-code/commands}/agents/optimize.md +156 -134
  39. package/assets/{commands → claude-code/commands}/agents/pattern-analyzer.md +150 -127
  40. package/assets/{commands → claude-code/commands}/agents/prompt-quality.md +155 -135
  41. package/assets/claude-code/commands/agents/prompt-validate.md +155 -0
  42. package/assets/{commands → claude-code/commands}/agents/public-interface.md +156 -135
  43. package/assets/{commands → claude-code/commands}/agents/release.md +156 -136
  44. package/assets/{commands → claude-code/commands}/agents/security.md +156 -138
  45. package/assets/{commands → claude-code/commands}/agents/test-review.md +156 -137
  46. package/assets/{commands → claude-code/commands}/agents/type-safety.md +156 -136
  47. package/assets/{commands/agents/code-validate.md → claude-code/commands/agents/validate.md} +156 -135
  48. package/assets/claude-code/commands/agents/workflow-synthesis.md +157 -0
  49. package/assets/{commands → claude-code/commands}/pipelines/aristotle.md +8 -8
  50. package/assets/{commands → claude-code/commands}/pipelines/ship.md +8 -8
  51. package/assets/claude-code/commands/workflows/post-implementation.md +60 -0
  52. package/assets/claude-code/commands/workflows/pre-implementation.md +46 -0
  53. package/assets/{commands → claude-code/commands}/workflows/prompt-audit.md +2 -2
  54. package/assets/codex/agents/anxiety-reader-agent.toml +462 -0
  55. package/assets/codex/agents/api-contract-validator-agent.toml +738 -0
  56. package/assets/codex/agents/aristotle-analyst-agent.toml +750 -0
  57. package/assets/codex/agents/aristotle-explorer-agent.toml +155 -0
  58. package/assets/codex/agents/aristotle-forecaster-agent.toml +449 -0
  59. package/assets/codex/agents/aristotle-validator-agent.toml +424 -0
  60. package/assets/codex/agents/assumption-excavator-agent.toml +1126 -0
  61. package/assets/codex/agents/code-auditor-agent.toml +815 -0
  62. package/assets/codex/agents/code-optimizer-agent.toml +652 -0
  63. package/assets/codex/agents/code-validator-agent.toml +573 -0
  64. package/assets/codex/agents/docs-validator-agent.toml +468 -0
  65. package/assets/codex/agents/frontend-validator-agent.toml +598 -0
  66. package/assets/codex/agents/mcp-validator-agent.toml +580 -0
  67. package/assets/codex/agents/pre-implementation-architect-agent.toml +817 -0
  68. package/assets/codex/agents/prompt-engineer-agent.toml +922 -0
  69. package/assets/codex/agents/prompt-pattern-analyzer-agent.toml +689 -0
  70. package/assets/codex/agents/prompt-quality-validator-agent.toml +777 -0
  71. package/assets/codex/agents/public-interface-validator-agent.toml +695 -0
  72. package/assets/codex/agents/release-readiness-agent.toml +491 -0
  73. package/assets/codex/agents/security-analyst-agent.toml +847 -0
  74. package/assets/codex/agents/test-architect-agent.toml +615 -0
  75. package/assets/codex/agents/type-safety-validator-agent.toml +686 -0
  76. package/assets/codex/agents/workflow-synthesis-agent.toml +631 -0
  77. package/assets/gemini-cli/agents/anxiety-reader-agent.md +470 -0
  78. package/assets/gemini-cli/agents/api-contract-validator-agent.md +747 -0
  79. package/assets/gemini-cli/agents/aristotle-analyst-agent.md +758 -0
  80. package/assets/gemini-cli/agents/aristotle-explorer-agent.md +163 -0
  81. package/assets/gemini-cli/agents/aristotle-forecaster-agent.md +457 -0
  82. package/assets/gemini-cli/agents/aristotle-validator-agent.md +432 -0
  83. package/assets/gemini-cli/agents/assumption-excavator-agent.md +1134 -0
  84. package/assets/gemini-cli/agents/code-auditor-agent.md +827 -0
  85. package/assets/gemini-cli/agents/code-optimizer-agent.md +661 -0
  86. package/assets/gemini-cli/agents/code-validator-agent.md +582 -0
  87. package/assets/gemini-cli/agents/docs-validator-agent.md +477 -0
  88. package/assets/gemini-cli/agents/frontend-validator-agent.md +610 -0
  89. package/assets/gemini-cli/agents/mcp-validator-agent.md +589 -0
  90. package/assets/gemini-cli/agents/pre-implementation-architect-agent.md +826 -0
  91. package/assets/gemini-cli/agents/prompt-engineer-agent.md +931 -0
  92. package/assets/gemini-cli/agents/prompt-pattern-analyzer-agent.md +698 -0
  93. package/assets/gemini-cli/agents/prompt-quality-validator-agent.md +786 -0
  94. package/assets/gemini-cli/agents/public-interface-validator-agent.md +707 -0
  95. package/assets/gemini-cli/agents/release-readiness-agent.md +500 -0
  96. package/assets/gemini-cli/agents/security-analyst-agent.md +859 -0
  97. package/assets/gemini-cli/agents/test-architect-agent.md +624 -0
  98. package/assets/gemini-cli/agents/type-safety-validator-agent.md +695 -0
  99. package/assets/gemini-cli/agents/workflow-synthesis-agent.md +639 -0
  100. package/assets/gemini-cli/commands/agents/anxiety-reader.toml +155 -0
  101. package/assets/gemini-cli/commands/agents/api-contract.toml +154 -0
  102. package/assets/gemini-cli/commands/agents/architect.toml +154 -0
  103. package/assets/gemini-cli/commands/agents/aristotle-analyst.toml +155 -0
  104. package/assets/gemini-cli/commands/agents/aristotle-explorer.toml +155 -0
  105. package/assets/gemini-cli/commands/agents/aristotle-forecaster.toml +155 -0
  106. package/assets/gemini-cli/commands/agents/aristotle-validator.toml +155 -0
  107. package/assets/gemini-cli/commands/agents/assumption-excavator.toml +155 -0
  108. package/assets/gemini-cli/commands/agents/audit.toml +154 -0
  109. package/assets/gemini-cli/commands/agents/docs-validate.toml +154 -0
  110. package/assets/gemini-cli/commands/agents/frontend.toml +154 -0
  111. package/assets/gemini-cli/commands/agents/mcp-validate.toml +154 -0
  112. package/assets/gemini-cli/commands/agents/optimize.toml +154 -0
  113. package/assets/gemini-cli/commands/agents/pattern-analyzer.toml +148 -0
  114. package/assets/gemini-cli/commands/agents/prompt-quality.toml +153 -0
  115. package/assets/gemini-cli/commands/agents/prompt-validate.toml +153 -0
  116. package/assets/gemini-cli/commands/agents/public-interface.toml +154 -0
  117. package/assets/gemini-cli/commands/agents/release.toml +154 -0
  118. package/assets/gemini-cli/commands/agents/security.toml +154 -0
  119. package/assets/gemini-cli/commands/agents/test-review.toml +154 -0
  120. package/assets/gemini-cli/commands/agents/type-safety.toml +154 -0
  121. package/assets/gemini-cli/commands/agents/validate.toml +154 -0
  122. package/assets/gemini-cli/commands/agents/workflow-synthesis.toml +155 -0
  123. package/assets/gemini-cli/commands/pipelines/aristotle.toml +139 -0
  124. package/assets/gemini-cli/commands/pipelines/ship.toml +184 -0
  125. package/assets/gemini-cli/commands/workflows/post-implementation.toml +56 -0
  126. package/assets/gemini-cli/commands/workflows/pre-implementation.toml +42 -0
  127. package/assets/gemini-cli/commands/workflows/prompt-audit.toml +40 -0
  128. package/assets/opencode/agents/anxiety-reader-agent.md +472 -0
  129. package/assets/opencode/agents/api-contract-validator-agent.md +749 -0
  130. package/assets/opencode/agents/aristotle-analyst-agent.md +760 -0
  131. package/assets/opencode/agents/aristotle-explorer-agent.md +164 -0
  132. package/assets/opencode/agents/aristotle-forecaster-agent.md +459 -0
  133. package/assets/opencode/agents/aristotle-validator-agent.md +434 -0
  134. package/assets/opencode/agents/assumption-excavator-agent.md +1136 -0
  135. package/assets/opencode/agents/code-auditor-agent.md +826 -0
  136. package/assets/opencode/agents/code-optimizer-agent.md +663 -0
  137. package/assets/opencode/agents/code-validator-agent.md +584 -0
  138. package/assets/opencode/agents/docs-validator-agent.md +479 -0
  139. package/assets/opencode/agents/frontend-validator-agent.md +609 -0
  140. package/assets/opencode/agents/mcp-validator-agent.md +591 -0
  141. package/assets/opencode/agents/pre-implementation-architect-agent.md +828 -0
  142. package/assets/opencode/agents/prompt-engineer-agent.md +933 -0
  143. package/assets/opencode/agents/prompt-pattern-analyzer-agent.md +700 -0
  144. package/assets/opencode/agents/prompt-quality-validator-agent.md +788 -0
  145. package/assets/opencode/agents/public-interface-validator-agent.md +706 -0
  146. package/assets/opencode/agents/release-readiness-agent.md +502 -0
  147. package/assets/opencode/agents/security-analyst-agent.md +858 -0
  148. package/assets/opencode/agents/test-architect-agent.md +626 -0
  149. package/assets/opencode/agents/type-safety-validator-agent.md +697 -0
  150. package/assets/opencode/agents/workflow-synthesis-agent.md +641 -0
  151. package/dist/cli.js +12 -414
  152. package/dist/commands/helpers.d.ts +73 -0
  153. package/dist/commands/helpers.js +274 -0
  154. package/dist/commands/setup.d.ts +13 -0
  155. package/dist/commands/setup.js +93 -0
  156. package/dist/commands/uninstall.d.ts +3 -0
  157. package/dist/commands/uninstall.js +126 -0
  158. package/dist/commands/verify.d.ts +1 -0
  159. package/dist/commands/verify.js +28 -0
  160. package/dist/harnesses/claude-code.d.ts +1 -1
  161. package/dist/harnesses/claude-code.js +3 -1
  162. package/dist/harnesses/codex.js +6 -5
  163. package/dist/harnesses/gemini-cli.d.ts +4 -8
  164. package/dist/harnesses/gemini-cli.js +47 -21
  165. package/dist/harnesses/index.d.ts +10 -1
  166. package/dist/harnesses/index.js +11 -2
  167. package/dist/harnesses/opencode.d.ts +1 -1
  168. package/dist/harnesses/opencode.js +15 -6
  169. package/dist/harnesses/types.d.ts +19 -0
  170. package/dist/harnesses/types.js +2 -0
  171. package/dist/lib/asset-catalog.js +2 -2
  172. package/dist/lib/config-merger.d.ts +2 -1
  173. package/dist/lib/config-merger.js +12 -4
  174. package/dist/lib/file-ops.d.ts +5 -0
  175. package/dist/lib/file-ops.js +18 -3
  176. package/dist/lib/hash.d.ts +1 -1
  177. package/dist/lib/hash.js +2 -2
  178. package/dist/lib/manifest.d.ts +30 -1
  179. package/dist/lib/manifest.js +5 -7
  180. package/dist/lib/paths.d.ts +16 -1
  181. package/dist/lib/paths.js +31 -3
  182. package/dist/lib/settings-merger.d.ts +24 -9
  183. package/dist/lib/settings-merger.js +57 -22
  184. package/dist/lib/version.d.ts +2 -0
  185. package/dist/lib/version.js +10 -0
  186. package/dist/steps/agents.d.ts +1 -2
  187. package/dist/steps/agents.js +7 -18
  188. package/dist/steps/cli.d.ts +53 -0
  189. package/dist/steps/cli.js +90 -0
  190. package/dist/steps/commands.d.ts +1 -1
  191. package/dist/steps/commands.js +20 -71
  192. package/dist/steps/detect.js +4 -0
  193. package/dist/steps/mcp.js +7 -15
  194. package/dist/steps/metrics.d.ts +12 -0
  195. package/dist/steps/metrics.js +52 -22
  196. package/dist/steps/shell.js +11 -1
  197. package/dist/steps/signup.d.ts +2 -2
  198. package/dist/steps/signup.js +9 -12
  199. package/dist/steps/verify.js +47 -8
  200. package/package.json +12 -11
  201. package/assets/agents/docs-validator-agent.md +0 -490
  202. package/assets/agents/release-readiness-agent.md +0 -482
  203. package/assets/commands/agents/aristotle-analyst.md +0 -116
  204. package/assets/commands/agents/aristotle-explorer.md +0 -93
  205. package/assets/commands/agents/aristotle-forecaster.md +0 -115
  206. package/assets/commands/agents/aristotle-validator.md +0 -115
  207. package/assets/commands/agents/prompt-validate.md +0 -136
  208. package/assets/commands/agents/workflow-synthesis.md +0 -102
  209. package/assets/commands/workflows/post-implementation.md +0 -577
  210. package/assets/commands/workflows/pre-implementation.md +0 -670
  211. /package/assets/{agents → claude-code/agents}/anxiety-reader-agent.md +0 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 UluOps
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -10,13 +10,15 @@ Zero-friction installer for [UluOps](https://uluops.ai) agentic harnesses. One c
10
10
  npx @uluops/setup
11
11
  ```
12
12
 
13
+ > **⚠️ Windows Users:** Native Windows is not yet supported. Please use **WSL2 (Ubuntu)** and run the setup inside your WSL environment.
14
+
13
15
  ## Supported harnesses
14
16
 
15
17
  | Harness | Status | Alias | Config |
16
18
  |---------|--------|-------|--------|
17
19
  | Claude Code | Fully supported (default) | `claude` | `~/.claude.json` |
18
20
  | OpenCode | Fully supported | `oc` | `~/.config/opencode/opencode.json` |
19
- | Gemini CLI | Agents + Commands | `gemini` | `~/.gemini/settings.json` |
21
+ | Gemini CLI | Fully supported | `gemini` | `~/.gemini/settings.json` |
20
22
  | Codex | Coming soon | — | `~/.codex/config.toml` |
21
23
 
22
24
  ```bash
@@ -43,13 +45,16 @@ npx @uluops/setup --harness gemini-cli
43
45
 
44
46
  > Paths shown are for Claude Code (default). Gemini CLI installs agents as `.md` and commands as `.toml` to `~/.gemini/`. OpenCode installs agents to `~/.config/opencode/agents/`. Agent definitions and commands are transformed to the target harness format at install time from a single source.
45
47
 
46
- The installer runs five steps in sequence:
48
+ The installer runs these steps in sequence:
47
49
 
48
50
  1. **Authenticate** — Validates your API key (or creates an account with `--signup`)
49
51
  2. **MCP config** — Writes tracker and registry server entries to the harness config
50
52
  3. **Definitions** — Copies pre-rendered agent definition files
51
- 4. **Metrics hook** — Configures a post-agent hook for automatic run capture (Claude Code only)
52
- 5. **Health check** — Verifies both API endpoints are reachable
53
+ 4. **Metrics hook** — Configures a post-agent hook for automatic run capture (Claude Code and Gemini CLI)
54
+ 5. **`ulu` CLI** *(optional)* Offers to install `@uluops/cli` globally. Interactive runs are prompted (default Y); non-interactive runs skip unless `--with-cli` is passed. `--no-cli` always skips. The install is best-effort: if `npm install -g` fails (permissions, nvm prefix, etc.) the rest of setup still completes and a manual install command is printed.
55
+ 6. **Health check** — Verifies both API endpoints are reachable
56
+
57
+ > When this setup installs the CLI, the install is recorded in the manifest so `--uninstall` removes it symmetrically. If the CLI was already on your PATH before running setup, it is left alone on uninstall.
53
58
 
54
59
  ## Usage
55
60
 
@@ -67,16 +72,7 @@ npx @uluops/setup --signup
67
72
 
68
73
  You'll be prompted for email and password. Account + API key are created automatically.
69
74
 
70
- **Restart your harness after setup to load agents.**
71
-
72
- ### API key resolution
73
-
74
- The installer checks these sources in order:
75
-
76
- 1. `--api-key <key>` flag
77
- 2. `ULUOPS_API_KEY` environment variable
78
- 3. `~/.uluops/credentials.json` (existing CLI auth)
79
- 4. Interactive prompt
75
+ > **🛑 IMPORTANT:** You must restart your harness (e.g., restart Claude Code) after setup to load the new agents and commands.
80
76
 
81
77
  ### Options
82
78
 
@@ -90,6 +86,8 @@ npx @uluops/setup [options]
90
86
  --scope <mode> MCP config scope: "global" or "local" (default: global)
91
87
  --local-defs Save definitions to ./uluops/ for review
92
88
  --shell Write API key export to shell profile
89
+ --with-cli Install @uluops/cli globally (skip prompt)
90
+ --no-cli Skip @uluops/cli install (skip prompt)
93
91
  --skip-validation Accept API key without server verification
94
92
  --list Show available agents and workflows without installing
95
93
  --verify Check installation health: manifest, files, MCP config, API connectivity (no changes)
@@ -98,6 +96,42 @@ npx @uluops/setup [options]
98
96
  -y, --yes Skip confirmations
99
97
  ```
100
98
 
99
+ ### Advanced Commands
100
+
101
+ #### Preview available agents (`--list`)
102
+ Displays all agents and workflows included in the current version of the setup tool.
103
+
104
+ ```text
105
+ ⟨u⟩ ulu·ops v0.6.0 — available agents and workflows
106
+
107
+ WORKFLOWS
108
+ /workflows:post-implementation Iterative validation after coding
109
+ /workflows:pre-implementation Design validation before implementation
110
+ /workflows:prompt-audit Strategic prompt quality audit
111
+
112
+ AGENTS (run individually) MODEL
113
+ /agents:code-validator Validate cod... sonnet
114
+ /agents:type-safety Deep TypeScr... sonnet
115
+ /agents:security-analyst Comprehensiv... sonnet
116
+ /agents:test-architect Validate tes... sonnet
117
+ ...
118
+ ```
119
+
120
+ #### Check installation health (`--verify`)
121
+ Validates your current installation against the local manifest and checks API connectivity.
122
+
123
+ ```text
124
+ ⟨u⟩ ulu·ops Installation Check v0.6.0
125
+
126
+ ✓ Manifest found (~/.uluops/manifest.json)
127
+ ✓ All 23 agents present in ~/.claude/agents/
128
+ ✓ MCP servers configured in ~/.claude.json
129
+ ✓ API connectivity: Tracker (Online)
130
+ ✓ API connectivity: Registry (Online)
131
+
132
+ All checks passed.
133
+ ```
134
+
101
135
  ### Examples
102
136
 
103
137
  ```bash
@@ -119,31 +153,13 @@ npx @uluops/setup --dry-run --api-key ulr_abc123
119
153
  # Persist API key in shell profile (~/.zshrc, ~/.bashrc, etc.)
120
154
  npx @uluops/setup --shell
121
155
 
122
- # Preview what's included without installing
123
- npx @uluops/setup --list
124
-
125
- # Check existing installation (manifest + file presence + API connectivity)
126
- npx @uluops/setup --verify
156
+ # Install the ulu CLI globally alongside harness setup
157
+ npx @uluops/setup --with-cli
127
158
 
128
- # Clean removal
129
- npx @uluops/setup --uninstall
159
+ # Skip the CLI prompt entirely (interactive runs default to asking)
160
+ npx @uluops/setup --no-cli
130
161
  ```
131
162
 
132
- ## What's included
133
-
134
- ### Agents & Workflows
135
-
136
- Setup installs the starter set of agent and workflow slash commands. Run `npx @uluops/setup --list` to see what's included.
137
-
138
- > Browse more agents, workflows, and pipelines at [registry.uluops.ai](https://registry.uluops.ai). Pipelines are available via the registry API and MCP tools — they are not installed locally.
139
-
140
- ### MCP servers
141
-
142
- Both servers use `npx -y` so there's no global install required:
143
-
144
- - **uluops-tracker** — Validation run tracking, issue management, analytics
145
- - **uluops-registry** — Agent definition registry, versioning, rendering
146
-
147
163
  ## How updates work
148
164
 
149
165
  Re-running `npx @uluops/setup` is safe and idempotent:
@@ -155,27 +171,28 @@ Re-running `npx @uluops/setup` is safe and idempotent:
155
171
 
156
172
  Setup manages four surfaces: agent files, command files, MCP config entries, and the metrics hook. A manifest at `~/.uluops/manifest.json` tracks what was installed so `--uninstall` can cleanly reverse all changes. The manifest supports multiple harnesses — each gets its own installation state.
157
173
 
174
+ ## Troubleshooting
175
+
176
+ - **Agents not appearing:** Ensure you have restarted your harness (Claude Code, etc.) after running setup. For Claude Code, simply exit and restart the CLI.
177
+ - **MCP errors:** If the harness fails to start the MCP servers, ensure `npx` is available in your PATH. You can check your config at `~/.claude.json` or `~/.config/opencode/opencode.json`.
178
+ - **API key rejected:** Verify your key at [app.uluops.ai](https://app.uluops.ai). If you are behind a corporate proxy, you may need to set `HTTPS_PROXY`.
179
+ - **`@uluops/cli` install warning:** If setup warns it could not install the CLI globally (EACCES, nvm prefix mismatch, network), the rest of setup still completes. Run `npm install -g @uluops/cli` yourself when convenient — once it's on your PATH, every subsequent `npx @uluops/setup` will see it and skip the install step.
180
+ - **Windows issues:** Remember that native Windows is not supported; you must run the installer and your harness within **WSL2**.
181
+
158
182
  ## Uninstall
159
183
 
160
184
  ```
161
185
  npx @uluops/setup --uninstall
162
186
  ```
163
187
 
164
- Removes only UluOps-managed files: agents, commands, MCP config entries, and shell profile export (if `--shell` was used). Your custom agents and other MCP servers are preserved. Uninstall iterates all harnesses recorded in the manifest.
188
+ Removes only UluOps-managed files: agents, commands, MCP config entries, shell profile export (if `--shell` was used), and the global `@uluops/cli` package (only if this setup installed it — a CLI you installed yourself is left alone). Your custom agents and other MCP servers are preserved. Uninstall iterates all harnesses recorded in the manifest.
165
189
 
166
190
  ## Requirements
167
191
 
168
- - Node.js >= 20
169
- - At least one supported harness installed (Claude Code or OpenCode)
170
- - UluOps API key ([get one here](https://app.uluops.ai/settings/api-keys))
192
+ - **Node.js:** >= 20.0.0
193
+ - **Platform:** Linux, macOS, or WSL2 (native Windows not supported)
194
+ - **Harness:** Claude Code, OpenCode, or Gemini CLI
195
+ - **Auth:** UluOps API key ([get one here](https://app.uluops.ai/settings/api-keys))
171
196
 
172
- > **Global install:** If you install globally with `npm i -g @uluops/setup`, the binary is `uluops-setup`.
173
-
174
- ## Platform support
175
-
176
- | Platform | Status |
177
- |----------|--------|
178
- | Linux | Supported |
179
- | macOS | Supported |
180
- | WSL2 | Supported |
181
- | Windows (native) | Not yet supported |
197
+ ---
198
+ **Global install:** If you prefer, install once with `npm i -g @uluops/setup` then run `uluops-setup`.
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Auto-Tracker-Save Hook for Gemini CLI & Claude Code
5
+ *
6
+ * Event: AfterTool (Gemini CLI) / SubagentStop (Claude Code)
7
+ *
8
+ * This hook parses the output of an agent run and automatically
9
+ * queues a save_run call to the UluOps Tracker.
10
+ */
11
+
12
+ import { readFileSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+
15
+ function main() {
16
+ let input;
17
+ try {
18
+ input = JSON.parse(readFileSync(0, 'utf8'));
19
+ } catch (err) {
20
+ process.stderr.write('Failed to parse hook input: ' + err.message + '\n');
21
+ process.exit(1);
22
+ }
23
+
24
+ const { tool_name, tool_response, metadata, cwd } = input;
25
+
26
+ // Handle both Gemini CLI's invoke_agent and Claude Code's agent execution
27
+ // (In Claude Code, tool_name might be the specific agent tool if it's rendered as one)
28
+ const isAgentTool = tool_name === 'invoke_agent' || tool_name.startsWith('uluops-');
29
+
30
+ if (!isAgentTool) {
31
+ process.stdout.write(JSON.stringify({ decision: 'allow' }));
32
+ return;
33
+ }
34
+
35
+ const content = tool_response?.llmContent || tool_response?.content || '';
36
+ if (!content) {
37
+ process.stdout.write(JSON.stringify({ decision: 'allow' }));
38
+ return;
39
+ }
40
+
41
+ // --- Parsing Logic ---
42
+
43
+ // 1. Extract Agent Name
44
+ let agentName = input.tool_input?.agent_name || tool_name.replace(/^uluops-/, '');
45
+ if (agentName === 'invoke_agent') agentName = 'unknown-agent';
46
+
47
+ // 2. Extract Verdict and Score
48
+ // Broaden pattern to catch various agent output styles
49
+ const decisionMatch = content.match(/\*\*Verdict:\s*([A-Z_]+)/i) ||
50
+ content.match(/\*\*Decision:\s*([A-Z_]+)/i) ||
51
+ content.match(/Verdict:\s*([A-Z_]+)/i) ||
52
+ content.match(/Decision:\s*([A-Z_]+)/i);
53
+
54
+ const scoreMatch = content.match(/\(Score:\s*(\d+)\/100\)/i) ||
55
+ content.match(/Score:\s*(\d+)/i);
56
+
57
+ const decision = decisionMatch ? decisionMatch[1].toUpperCase() : 'PASS';
58
+ const score = scoreMatch ? parseInt(scoreMatch[1], 10) : 100;
59
+
60
+ // 3. Extract Summary
61
+ const summaryMatch = content.match(/### Executive Summary\n\n(.*?)(?:\n\n|###|$)/s) ||
62
+ content.match(/Summary\n\n(.*?)(?:\n\n|###|$)/s) ||
63
+ content.match(/## .*?\n\n(.*?)(?:\n\n|###|$)/s);
64
+ const summary = summaryMatch ? summaryMatch[1].trim().substring(0, 500) : `Auto-saved run for ${agentName}`;
65
+
66
+ // 4. Extract Recommendations & Failure Codes
67
+ const recommendations = [];
68
+ // Resilient pattern for list items containing a failure code
69
+ const lines = content.split('\n');
70
+ for (const line of lines) {
71
+ const codeMatch = line.match(/`([A-Z]{3}-[A-Z]{3}\/[CHMLI])`/);
72
+ if (codeMatch) {
73
+ const code = codeMatch[1];
74
+ // Try to extract title: everything before the first '(' or '`' or '-'
75
+ let title = line.replace(/^\s*[\*\-]\s*/, '') // remove bullet
76
+ .split(/[`\(\-]/)[0] // take everything before first separator
77
+ .trim();
78
+
79
+ if (!title) title = `Issue ${code}`;
80
+
81
+ // Try to extract priority
82
+ const priorityMatch = line.match(/\((Priority: )?(critical|high|suggested|backlog)\)/i);
83
+ const priority = priorityMatch ? priorityMatch[2].toLowerCase() : 'suggested';
84
+
85
+ recommendations.push({
86
+ agent: agentName,
87
+ title: title.substring(0, 100),
88
+ priority,
89
+ failure_code: code,
90
+ description: 'Extracted via auto-save hook'
91
+ });
92
+ }
93
+ }
94
+
95
+ // 5. Project Name Detection
96
+ let project = 'default-project';
97
+ if (cwd) {
98
+ const parts = cwd.split('/');
99
+ // If we're in a sub-repo (like uluops packages), use the last two parts
100
+ if (parts.length > 2 && (parts[parts.length-2].startsWith('-') || parts[parts.length-2] === 'packages')) {
101
+ project = parts[parts.length-1];
102
+ } else {
103
+ project = parts.pop();
104
+ }
105
+ }
106
+
107
+ // --- Build Tail Call ---
108
+
109
+ const saveRunArgs = {
110
+ project,
111
+ workflow_type: 'auto-save',
112
+ agents: [{
113
+ name: agentName,
114
+ model: metadata?.model || 'gemini-1.5-pro',
115
+ decision,
116
+ score: score,
117
+ summary,
118
+ tokens: {
119
+ input_tokens: metadata?.input_tokens || 0,
120
+ output_tokens: metadata?.output_tokens || 0,
121
+ cache_creation_tokens: metadata?.cache_creation_tokens || 0,
122
+ cache_read_tokens: metadata?.cache_read_tokens || 0
123
+ }
124
+ }],
125
+ recommendations
126
+ };
127
+
128
+ const output = {
129
+ decision: 'allow',
130
+ systemMessage: `[hook] Auto-saving ${agentName} results to tracker (Project: ${project})...`,
131
+ hookSpecificOutput: {
132
+ tailToolCallRequest: {
133
+ name: 'mcp_uluops-tracker_save_run',
134
+ args: saveRunArgs
135
+ }
136
+ }
137
+ };
138
+
139
+ process.stdout.write(JSON.stringify(output));
140
+ }
141
+
142
+ main();
@@ -1,12 +1,9 @@
1
1
  ---
2
2
  name: api-contract-validator
3
- version: "2.0.0"
3
+ version: "2.3.0"
4
4
  description: Validates API contract consistency between documentation, types, and implementation. Catches contract drift, breaking changes, and documentation staleness. Required for APIs consumed by external clients or other services. Prevents integration failures.
5
-
6
5
  tools: Read, Grep, Glob, Bash
7
6
  model: sonnet
8
- adl_schema: /home/alexs/uluops/uluops-agent-workflows/udl/adl/v3/api-contract-validator.agent.yaml
9
- taxonomy_version: "0.2.2"
10
7
  threshold: 80
11
8
  auto_fail_severity: [critical, high]
12
9
  ---
@@ -44,6 +41,12 @@ Every issue you identify MUST include a failure classification code from the tax
44
41
  - Do NOT auto-fail GraphQL APIs—adapt validation to schema.graphql
45
42
 
46
43
 
44
+ ### Epistemic Nature
45
+ - **Verifiability:** Expert Judgment
46
+ - **Determinism:** Stochastic
47
+ - **Claim Type:** Factual
48
+
49
+
47
50
  ## Reference Examples
48
51
 
49
52
  Use these examples to calibrate your judgment.
@@ -299,40 +302,6 @@ Use these examples to classify issues with the correct failure codes:
299
302
  Domain: Semantic (data exposure) Mode: INC (Inconsistency - internal data in public response) Severity: C (Critical - security concern, auto-fail)
300
303
 
301
304
 
302
- ## Failure Taxonomy Reference
303
-
304
- Compact format: `DOMAIN-MODE/SEVERITY` where:
305
- - **Domain:** STR (Structural), SEM (Semantic), PRA (Pragmatic), EPI (Epistemic)
306
- - **Mode:** 3-letter code (e.g., OMI=Omission, EXC=Excess, INC=Inconsistency, AMB=Ambiguity)
307
- - **Severity:** C (Critical), H (High), M (Medium), L (Low), I (Info)
308
-
309
- ### Domain Reference
310
- | Code | Domain | Description |
311
- |------|--------|-------------|
312
- | STR | Structural | Form, syntax, organization issues |
313
- | SEM | Semantic | Meaning, correctness, completeness issues |
314
- | PRA | Pragmatic | Practical effectiveness, efficiency issues |
315
- | EPI | Epistemic | Knowledge, claims, confidence issues |
316
-
317
- ### Common Mode Codes
318
- | Code | Mode | Domain | Meaning |
319
- |------|------|--------|---------|
320
- | OMI | Omission | STR | Missing required element |
321
- | EXC | Excess | STR | Unnecessary/redundant element |
322
- | MAL | Malformation | STR | Incorrectly structured |
323
- | INC | Inconsistency | STR/SEM | Internal contradictions |
324
- | COM | Incompleteness | SEM | Partial implementation |
325
- | AMB | Ambiguity | SEM | Unclear meaning |
326
- | COH | Incoherence | SEM | Logical disconnect |
327
- | ALI | Misalignment | PRA | Doesn't match requirements |
328
- | MAT | Mismatch | PRA | Interface/contract violation |
329
- | EFF | Inefficiency | PRA | Performance issues |
330
- | FRA | Fragility | PRA | Brittleness, poor error handling |
331
- | OVR | Overclaiming | EPI | Claims exceed evidence |
332
- | UND | Underclaiming | EPI | Evidence exceeds claims |
333
- | GRN | Granularity | EPI | Wrong level of detail |
334
- | FAL | Fallacy | EPI | Logical reasoning error |
335
-
336
305
  ## API Contract Validator Framework
337
306
 
338
307
  ### Category Overview
@@ -463,6 +432,7 @@ Before finalizing your decision, verify:
463
432
 
464
433
  - **Target:** ~3500 tokens
465
434
  - **Maximum:** 8000 tokens
435
+
466
436
  Target ~3500 tokens for typical reviews. Include endpoint inventory table for all endpoints. Show exact schema diffs for contract drift. Expand for large APIs with many endpoints.
467
437
 
468
438
 
@@ -547,154 +517,7 @@ OR
547
517
 
548
518
  Reasoning: [Explain decision]
549
519
 
550
- ## JSON OUTPUT
551
-
552
- <!-- Machine-readable output for API consumption and validation-tracker integration -->
553
- <!-- Schema: udl/agent-output-schema-v1.4.json -->
554
- ```json
555
- {
556
- "schema_version": "1.3.0",
557
- "validator": {
558
- "name": "api-contract-validator",
559
- "model": "sonnet",
560
- "adl_schema": "/home/alexs/uluops/uluops-agent-workflows/udl/adl/v3/api-contract-validator.agent.yaml",
561
- "tokens": {
562
- "input_tokens": 0,
563
- "output_tokens": 0
564
- }
565
- },
566
- "target": "[path/to/validated/directory]",
567
- "timestamp": "[ISO 8601 timestamp]",
568
- "result": {
569
- "score": "[X]",
570
- "max_score": 100,
571
- "decision": "[PASS|FAIL]",
572
- "threshold": 80
573
- },
574
- "categories": [
575
- {
576
- "name": "Endpoint Completeness",
577
- "score": "[X]",
578
- "max_points": 25,
579
- "findings": [
580
- {
581
- "criterion": "[criterion name from framework]",
582
- "points_earned": "[X]",
583
- "points_possible": "[X]",
584
- "issues": [
585
- {
586
- "title": "[Short issue title]",
587
- "priority": "[critical|suggested|backlog]",
588
- "type": "[feature|bug|refactor|config|docs|infra|security|test|observation|deficiency|ambiguity]",
589
- "failure_code": "[DOMAIN-MODE/SEVERITY]",
590
- "file_path": "[path/to/file]",
591
- "line_number": "[N]",
592
- "description": "[Full explanation]"
593
- }
594
- ]
595
- }
596
- ]
597
- },
598
- {
599
- "name": "Request Contract",
600
- "score": "[X]",
601
- "max_points": 25,
602
- "findings": [
603
- {
604
- "criterion": "[criterion name from framework]",
605
- "points_earned": "[X]",
606
- "points_possible": "[X]",
607
- "issues": [
608
- {
609
- "title": "[Short issue title]",
610
- "priority": "[critical|suggested|backlog]",
611
- "type": "[feature|bug|refactor|config|docs|infra|security|test|observation|deficiency|ambiguity]",
612
- "failure_code": "[DOMAIN-MODE/SEVERITY]",
613
- "file_path": "[path/to/file]",
614
- "line_number": "[N]",
615
- "description": "[Full explanation]"
616
- }
617
- ]
618
- }
619
- ]
620
- },
621
- {
622
- "name": "Response Contract",
623
- "score": "[X]",
624
- "max_points": 25,
625
- "findings": [
626
- {
627
- "criterion": "[criterion name from framework]",
628
- "points_earned": "[X]",
629
- "points_possible": "[X]",
630
- "issues": [
631
- {
632
- "title": "[Short issue title]",
633
- "priority": "[critical|suggested|backlog]",
634
- "type": "[feature|bug|refactor|config|docs|infra|security|test|observation|deficiency|ambiguity]",
635
- "failure_code": "[DOMAIN-MODE/SEVERITY]",
636
- "file_path": "[path/to/file]",
637
- "line_number": "[N]",
638
- "description": "[Full explanation]"
639
- }
640
- ]
641
- }
642
- ]
643
- },
644
- {
645
- "name": "Breaking Change Safety",
646
- "score": "[X]",
647
- "max_points": 25,
648
- "findings": [
649
- {
650
- "criterion": "[criterion name from framework]",
651
- "points_earned": "[X]",
652
- "points_possible": "[X]",
653
- "issues": [
654
- {
655
- "title": "[Short issue title]",
656
- "priority": "[critical|suggested|backlog]",
657
- "type": "[feature|bug|refactor|config|docs|infra|security|test|observation|deficiency|ambiguity]",
658
- "failure_code": "[DOMAIN-MODE/SEVERITY]",
659
- "file_path": "[path/to/file]",
660
- "line_number": "[N]",
661
- "description": "[Full explanation]"
662
- }
663
- ]
664
- }
665
- ]
666
- }
667
- ],
668
- "summary": {
669
- "total_issues": "[N]",
670
- "by_priority": {
671
- "critical": "[N]",
672
- "suggested": "[N]",
673
- "backlog": "[N]"
674
- },
675
- "by_severity": {
676
- "critical": "[N]",
677
- "high": "[N]",
678
- "medium": "[N]",
679
- "low": "[N]",
680
- "info": "[N]"
681
- },
682
- "by_type": {
683
- "feature": "[N]",
684
- "bug": "[N]",
685
- "refactor": "[N]",
686
- "config": "[N]",
687
- "docs": "[N]",
688
- "infra": "[N]",
689
- "security": "[N]",
690
- "test": "[N]",
691
- "observation": "[N]",
692
- "deficiency": "[N]",
693
- "ambiguity": "[N]"
694
- }
695
- }
696
- }
697
- ```
520
+
698
521
  ```
699
522
 
700
523
  ## Output Examples
@@ -860,44 +683,6 @@ API contracts are aligned when ALL of the following are true
860
683
  - No breaking changes without versioning or deprecation
861
684
  - No auto-fail conditions triggered
862
685
 
863
- ## Priority & Severity Mapping
864
-
865
- When generating the JSON OUTPUT section, map issues as follows:
866
-
867
- **Priority (for triage):**
868
- | Severity | Priority | Meaning |
869
- |----------|----------|---------|
870
- | Critical | `critical` | Blocks progression, must fix now |
871
- | High | `critical` | Should fix before next phase |
872
- | Medium | `suggested` | Should fix soon |
873
- | Low | `backlog` | Optional improvement |
874
- | Info | `backlog` | Informational only |
875
-
876
- **Severity is derived from failure_code suffix:**
877
- | Suffix | Severity | Priority |
878
- |--------|----------|----------|
879
- | `/C` | critical | critical |
880
- | `/H` | high | critical |
881
- | `/M` | medium | suggested |
882
- | `/L` | low | backlog |
883
- | `/I` | info | backlog |
884
-
885
- ## Failure Code Selection
886
-
887
- **1. Use the default code from the criterion that failed** (e.g., `→ SEM-COM/H`)
888
-
889
- **2. Adjust severity letter based on actual impact:**
890
- - `/C` - Security vulnerabilities, data loss risk, crashes, blocks all functionality
891
- - `/H` - Broken functionality, missing critical tests, significant user impact
892
- - `/M` - Code quality issues, maintainability concerns, moderate impact
893
- - `/L` - Style issues, minor improvements, low impact
894
- - `/I` - Suggestions, informational, no functional impact
895
-
896
- **3. Consider context when adjusting:**
897
- - A naming issue in a public API → elevate to `/M` or `/H`
898
- - A complexity issue in rarely-used code → may stay at `/L`
899
- - Missing error handling in user-facing code → `/H` or `/C`
900
- - Missing error handling in internal utility → `/M`
901
686
 
902
687
  ## Edge Case Handling
903
688
 
@@ -938,10 +723,6 @@ When generating the JSON OUTPUT section, map issues as follows:
938
723
  **Runs after:** code-validator
939
724
  **Recommends:** type-safety-validator
940
725
 
941
- ### Handoff: What This Agent Passes Downstream
942
-
943
- ### Handoff: What This Agent Expects From Predecessors
944
- **From code-validator:** Validation results from code-validator
945
726
 
946
727
  ---
947
728