oh-my-codex 0.4.4 → 0.5.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 +22 -20
- package/dist/agents/definitions.d.ts.map +1 -1
- package/dist/agents/definitions.js +7 -13
- package/dist/agents/definitions.js.map +1 -1
- package/dist/agents/native-config.d.ts +1 -0
- package/dist/agents/native-config.d.ts.map +1 -1
- package/dist/agents/native-config.js +1 -6
- package/dist/agents/native-config.js.map +1 -1
- package/dist/catalog/__tests__/generator.test.d.ts +2 -0
- package/dist/catalog/__tests__/generator.test.d.ts.map +1 -0
- package/dist/catalog/__tests__/generator.test.js +42 -0
- package/dist/catalog/__tests__/generator.test.js.map +1 -0
- package/dist/catalog/__tests__/schema.test.d.ts +2 -0
- package/dist/catalog/__tests__/schema.test.d.ts.map +1 -0
- package/dist/catalog/__tests__/schema.test.js +33 -0
- package/dist/catalog/__tests__/schema.test.js.map +1 -0
- package/dist/catalog/reader.d.ts +19 -0
- package/dist/catalog/reader.d.ts.map +1 -0
- package/dist/catalog/reader.js +63 -0
- package/dist/catalog/reader.js.map +1 -0
- package/dist/catalog/schema.d.ts +32 -0
- package/dist/catalog/schema.d.ts.map +1 -0
- package/dist/catalog/schema.js +101 -0
- package/dist/catalog/schema.js.map +1 -0
- package/dist/cli/__tests__/index.test.js +115 -1
- package/dist/cli/__tests__/index.test.js.map +1 -1
- package/dist/cli/__tests__/session-scoped-runtime.test.js +91 -12
- package/dist/cli/__tests__/session-scoped-runtime.test.js.map +1 -1
- package/dist/cli/__tests__/setup-scope.test.d.ts +2 -0
- package/dist/cli/__tests__/setup-scope.test.d.ts.map +1 -0
- package/dist/cli/__tests__/setup-scope.test.js +164 -0
- package/dist/cli/__tests__/setup-scope.test.js.map +1 -0
- package/dist/cli/__tests__/team.test.d.ts +2 -0
- package/dist/cli/__tests__/team.test.d.ts.map +1 -0
- package/dist/cli/__tests__/team.test.js +31 -0
- package/dist/cli/__tests__/team.test.js.map +1 -0
- package/dist/cli/catalog-contract.d.ts +10 -0
- package/dist/cli/catalog-contract.d.ts.map +1 -0
- package/dist/cli/catalog-contract.js +24 -0
- package/dist/cli/catalog-contract.js.map +1 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -4
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/index.d.ts +11 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +226 -136
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/ralph.d.ts +2 -0
- package/dist/cli/ralph.d.ts.map +1 -0
- package/dist/cli/ralph.js +41 -0
- package/dist/cli/ralph.js.map +1 -0
- package/dist/cli/setup.d.ts +3 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +189 -35
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/team.d.ts +13 -0
- package/dist/cli/team.d.ts.map +1 -1
- package/dist/cli/team.js +16 -6
- package/dist/cli/team.js.map +1 -1
- package/dist/config/__tests__/generator-notify.test.js +28 -0
- package/dist/config/__tests__/generator-notify.test.js.map +1 -1
- package/dist/config/generator.d.ts +1 -0
- package/dist/config/generator.d.ts.map +1 -1
- package/dist/config/generator.js +12 -8
- package/dist/config/generator.js.map +1 -1
- package/dist/hooks/__tests__/agents-overlay.test.js +17 -10
- package/dist/hooks/__tests__/agents-overlay.test.js.map +1 -1
- package/dist/hooks/__tests__/codebase-map.test.d.ts +8 -0
- package/dist/hooks/__tests__/codebase-map.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/codebase-map.test.js +156 -0
- package/dist/hooks/__tests__/codebase-map.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.d.ts +2 -0
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js +93 -0
- package/dist/hooks/__tests__/notify-hook-cross-worktree-heartbeat.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-linked-sync.test.js +43 -5
- package/dist/hooks/__tests__/notify-hook-linked-sync.test.js.map +1 -1
- package/dist/hooks/__tests__/notify-hook-modules.test.d.ts +9 -0
- package/dist/hooks/__tests__/notify-hook-modules.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-modules.test.js +251 -0
- package/dist/hooks/__tests__/notify-hook-modules.test.js.map +1 -0
- package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts +9 -0
- package/dist/hooks/__tests__/notify-hook-regression-205.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js +97 -0
- package/dist/hooks/__tests__/notify-hook-regression-205.test.js.map +1 -0
- package/dist/hooks/agents-overlay.d.ts +1 -0
- package/dist/hooks/agents-overlay.d.ts.map +1 -1
- package/dist/hooks/agents-overlay.js +39 -24
- package/dist/hooks/agents-overlay.js.map +1 -1
- package/dist/hooks/code-simplifier/__tests__/index.test.d.ts +2 -0
- package/dist/hooks/code-simplifier/__tests__/index.test.d.ts.map +1 -0
- package/dist/hooks/code-simplifier/__tests__/index.test.js +135 -0
- package/dist/hooks/code-simplifier/__tests__/index.test.js.map +1 -0
- package/dist/hooks/code-simplifier/index.d.ts +74 -0
- package/dist/hooks/code-simplifier/index.d.ts.map +1 -0
- package/dist/hooks/code-simplifier/index.js +145 -0
- package/dist/hooks/code-simplifier/index.js.map +1 -0
- package/dist/hooks/codebase-map.d.ts +23 -0
- package/dist/hooks/codebase-map.d.ts.map +1 -0
- package/dist/hooks/codebase-map.js +178 -0
- package/dist/hooks/codebase-map.js.map +1 -0
- package/dist/hooks/emulator.d.ts.map +1 -1
- package/dist/hooks/emulator.js +0 -1
- package/dist/hooks/emulator.js.map +1 -1
- package/dist/hooks/extensibility/sdk.js +1 -1
- package/dist/hooks/extensibility/sdk.js.map +1 -1
- package/dist/hooks/keyword-detector.d.ts.map +1 -1
- package/dist/hooks/keyword-detector.js +0 -4
- package/dist/hooks/keyword-detector.js.map +1 -1
- package/dist/hud/__tests__/state.test.js +74 -2
- package/dist/hud/__tests__/state.test.js.map +1 -1
- package/dist/hud/state.d.ts.map +1 -1
- package/dist/hud/state.js +16 -6
- package/dist/hud/state.js.map +1 -1
- package/dist/mcp/__tests__/path-traversal.test.d.ts +2 -0
- package/dist/mcp/__tests__/path-traversal.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/path-traversal.test.js +246 -0
- package/dist/mcp/__tests__/path-traversal.test.js.map +1 -0
- package/dist/mcp/__tests__/state-server-ralph-phase.test.d.ts +2 -0
- package/dist/mcp/__tests__/state-server-ralph-phase.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/state-server-ralph-phase.test.js +59 -0
- package/dist/mcp/__tests__/state-server-ralph-phase.test.js.map +1 -0
- package/dist/mcp/__tests__/state-server-schema.test.d.ts +2 -0
- package/dist/mcp/__tests__/state-server-schema.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/state-server-schema.test.js +31 -0
- package/dist/mcp/__tests__/state-server-schema.test.js.map +1 -0
- package/dist/mcp/__tests__/state-server-team-tools.test.js +83 -1
- package/dist/mcp/__tests__/state-server-team-tools.test.js.map +1 -1
- package/dist/mcp/__tests__/trace-server.test.js +33 -1
- package/dist/mcp/__tests__/trace-server.test.js.map +1 -1
- package/dist/mcp/state-paths.d.ts +24 -0
- package/dist/mcp/state-paths.d.ts.map +1 -1
- package/dist/mcp/state-paths.js +88 -1
- package/dist/mcp/state-paths.js.map +1 -1
- package/dist/mcp/state-server.d.ts.map +1 -1
- package/dist/mcp/state-server.js +615 -420
- package/dist/mcp/state-server.js.map +1 -1
- package/dist/mcp/trace-server.d.ts.map +1 -1
- package/dist/mcp/trace-server.js +31 -35
- package/dist/mcp/trace-server.js.map +1 -1
- package/dist/notifications/__tests__/formatter.test.js +71 -1
- package/dist/notifications/__tests__/formatter.test.js.map +1 -1
- package/dist/notifications/__tests__/notifier.test.js +48 -1
- package/dist/notifications/__tests__/notifier.test.js.map +1 -1
- package/dist/notifications/__tests__/reply-listener.test.js +39 -1
- package/dist/notifications/__tests__/reply-listener.test.js.map +1 -1
- package/dist/notifications/__tests__/tmux-detector.test.js +40 -1
- package/dist/notifications/__tests__/tmux-detector.test.js.map +1 -1
- package/dist/notifications/__tests__/tmux.test.js +98 -1
- package/dist/notifications/__tests__/tmux.test.js.map +1 -1
- package/dist/notifications/__tests__/verbosity.test.d.ts +2 -0
- package/dist/notifications/__tests__/verbosity.test.d.ts.map +1 -0
- package/dist/notifications/__tests__/verbosity.test.js +202 -0
- package/dist/notifications/__tests__/verbosity.test.js.map +1 -0
- package/dist/notifications/config.d.ts +14 -1
- package/dist/notifications/config.d.ts.map +1 -1
- package/dist/notifications/config.js +52 -0
- package/dist/notifications/config.js.map +1 -1
- package/dist/notifications/formatter.d.ts +10 -0
- package/dist/notifications/formatter.d.ts.map +1 -1
- package/dist/notifications/formatter.js +41 -0
- package/dist/notifications/formatter.js.map +1 -1
- package/dist/notifications/index.d.ts +3 -3
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +14 -4
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notifier.d.ts +5 -0
- package/dist/notifications/notifier.d.ts.map +1 -1
- package/dist/notifications/notifier.js +36 -15
- package/dist/notifications/notifier.js.map +1 -1
- package/dist/notifications/reply-listener.d.ts +6 -0
- package/dist/notifications/reply-listener.d.ts.map +1 -1
- package/dist/notifications/reply-listener.js +35 -1
- package/dist/notifications/reply-listener.js.map +1 -1
- package/dist/notifications/tmux-detector.d.ts +6 -0
- package/dist/notifications/tmux-detector.d.ts.map +1 -1
- package/dist/notifications/tmux-detector.js +10 -2
- package/dist/notifications/tmux-detector.js.map +1 -1
- package/dist/notifications/tmux.d.ts +6 -0
- package/dist/notifications/tmux.d.ts.map +1 -1
- package/dist/notifications/tmux.js +33 -4
- package/dist/notifications/tmux.js.map +1 -1
- package/dist/notifications/types.d.ts +13 -0
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/ralph/__tests__/persistence.test.d.ts +2 -0
- package/dist/ralph/__tests__/persistence.test.d.ts.map +1 -0
- package/dist/ralph/__tests__/persistence.test.js +69 -0
- package/dist/ralph/__tests__/persistence.test.js.map +1 -0
- package/dist/ralph/contract.d.ts +17 -0
- package/dist/ralph/contract.d.ts.map +1 -0
- package/dist/ralph/contract.js +96 -0
- package/dist/ralph/contract.js.map +1 -0
- package/dist/ralph/persistence.d.ts +8 -0
- package/dist/ralph/persistence.d.ts.map +1 -0
- package/dist/ralph/persistence.js +182 -0
- package/dist/ralph/persistence.js.map +1 -0
- package/dist/team/__tests__/model-contract.test.d.ts +2 -0
- package/dist/team/__tests__/model-contract.test.d.ts.map +1 -0
- package/dist/team/__tests__/model-contract.test.js +66 -0
- package/dist/team/__tests__/model-contract.test.js.map +1 -0
- package/dist/team/__tests__/phase-controller.test.d.ts +2 -0
- package/dist/team/__tests__/phase-controller.test.d.ts.map +1 -0
- package/dist/team/__tests__/phase-controller.test.js +36 -0
- package/dist/team/__tests__/phase-controller.test.js.map +1 -0
- package/dist/team/__tests__/runtime.test.js +37 -8
- package/dist/team/__tests__/runtime.test.js.map +1 -1
- package/dist/team/__tests__/state.test.js +262 -1
- package/dist/team/__tests__/state.test.js.map +1 -1
- package/dist/team/__tests__/tmux-session.test.js +110 -1
- package/dist/team/__tests__/tmux-session.test.js.map +1 -1
- package/dist/team/__tests__/worker-bootstrap.test.js +8 -3
- package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
- package/dist/team/__tests__/worktree.test.d.ts +2 -0
- package/dist/team/__tests__/worktree.test.d.ts.map +1 -0
- package/dist/team/__tests__/worktree.test.js +161 -0
- package/dist/team/__tests__/worktree.test.js.map +1 -0
- package/dist/team/model-contract.d.ts +19 -0
- package/dist/team/model-contract.d.ts.map +1 -0
- package/dist/team/model-contract.js +121 -0
- package/dist/team/model-contract.js.map +1 -0
- package/dist/team/orchestrator.d.ts.map +1 -1
- package/dist/team/orchestrator.js +0 -1
- package/dist/team/orchestrator.js.map +1 -1
- package/dist/team/phase-controller.d.ts +10 -0
- package/dist/team/phase-controller.d.ts.map +1 -0
- package/dist/team/phase-controller.js +128 -0
- package/dist/team/phase-controller.js.map +1 -0
- package/dist/team/runtime.d.ts +9 -4
- package/dist/team/runtime.d.ts.map +1 -1
- package/dist/team/runtime.js +141 -73
- package/dist/team/runtime.js.map +1 -1
- package/dist/team/state.d.ts +38 -5
- package/dist/team/state.d.ts.map +1 -1
- package/dist/team/state.js +167 -25
- package/dist/team/state.js.map +1 -1
- package/dist/team/team-ops.d.ts +3 -1
- package/dist/team/team-ops.d.ts.map +1 -1
- package/dist/team/team-ops.js +2 -0
- package/dist/team/team-ops.js.map +1 -1
- package/dist/team/tmux-session.d.ts +30 -2
- package/dist/team/tmux-session.d.ts.map +1 -1
- package/dist/team/tmux-session.js +67 -9
- package/dist/team/tmux-session.js.map +1 -1
- package/dist/team/worker-bootstrap.d.ts +4 -1
- package/dist/team/worker-bootstrap.d.ts.map +1 -1
- package/dist/team/worker-bootstrap.js +28 -20
- package/dist/team/worker-bootstrap.js.map +1 -1
- package/dist/team/worktree.d.ts +54 -0
- package/dist/team/worktree.d.ts.map +1 -0
- package/dist/team/worktree.js +275 -0
- package/dist/team/worktree.js.map +1 -0
- package/dist/utils/__tests__/dep-versions.test.d.ts +2 -0
- package/dist/utils/__tests__/dep-versions.test.d.ts.map +1 -0
- package/dist/utils/__tests__/dep-versions.test.js +29 -0
- package/dist/utils/__tests__/dep-versions.test.js.map +1 -0
- package/dist/verification/__tests__/ralph-persistence-gate.test.d.ts +2 -0
- package/dist/verification/__tests__/ralph-persistence-gate.test.d.ts.map +1 -0
- package/dist/verification/__tests__/ralph-persistence-gate.test.js +58 -0
- package/dist/verification/__tests__/ralph-persistence-gate.test.js.map +1 -0
- package/package.json +8 -4
- package/prompts/product-analyst.md +7 -7
- package/scripts/generate-catalog-docs.js +111 -0
- package/scripts/notify-hook/auto-nudge.js +200 -0
- package/scripts/notify-hook/linked-sync.js +61 -0
- package/scripts/notify-hook/log.js +11 -0
- package/scripts/notify-hook/payload-parser.js +122 -0
- package/scripts/notify-hook/process-runner.js +44 -0
- package/scripts/notify-hook/state-io.js +97 -0
- package/scripts/notify-hook/team-leader-nudge.js +205 -0
- package/scripts/notify-hook/team-worker.js +212 -0
- package/scripts/notify-hook/tmux-injection.js +373 -0
- package/scripts/notify-hook/utils.js +31 -0
- package/scripts/notify-hook.js +88 -1293
- package/skills/build-fix/SKILL.md +3 -3
- package/skills/cancel/SKILL.md +23 -0
- package/skills/code-review/SKILL.md +3 -3
- package/skills/help/SKILL.md +4 -4
- package/skills/omx-setup/SKILL.md +24 -15
- package/skills/plan/SKILL.md +25 -16
- package/skills/ralph/SKILL.md +10 -3
- package/skills/ralph-init/SKILL.md +7 -0
- package/skills/ralplan/SKILL.md +17 -5
- package/skills/security-review/SKILL.md +3 -3
- package/skills/team/SKILL.md +9 -3
- package/skills/worker/SKILL.md +18 -13
- package/templates/AGENTS.md +1 -10
- package/templates/catalog-manifest.json +389 -0
- package/prompts/deep-executor.md +0 -19
- package/prompts/scientist.md +0 -89
- package/skills/deepinit/SKILL.md +0 -320
- package/skills/learn-about-omx/SKILL.md +0 -37
- package/skills/learner/SKILL.md +0 -135
- package/skills/pipeline/SKILL.md +0 -407
- package/skills/project-session-manager/SKILL.md +0 -560
- package/skills/psm/SKILL.md +0 -20
- package/skills/release/SKILL.md +0 -83
- package/skills/research/SKILL.md +0 -505
- package/skills/ultrapilot/SKILL.md +0 -627
- package/skills/writer-memory/SKILL.md +0 -443
package/README.md
CHANGED
|
@@ -63,17 +63,12 @@ Recommended trusted-environment launch profile:
|
|
|
63
63
|
omx --xhigh --madmax
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
## New in v0.
|
|
66
|
+
## New in v0.5.0
|
|
67
67
|
|
|
68
|
-
- **
|
|
69
|
-
- **
|
|
70
|
-
- **
|
|
71
|
-
|
|
72
|
-
Try it:
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
OMX_HOOK_PLUGINS=1 omx hooks test
|
|
76
|
-
```
|
|
68
|
+
- **Scope-aware setup** with `omx setup --scope user|project-local|project` for flexible install modes.
|
|
69
|
+
- **Spark worker routing** via `--spark` / `--madmax-spark` so team workers can use `gpt-5.3-codex-spark` without forcing the leader model.
|
|
70
|
+
- **Catalog consolidation** — removed deprecated prompts (`deep-executor`, `scientist`) and 9 deprecated skills for a leaner surface.
|
|
71
|
+
- **Notifier verbosity levels** for fine-grained CCNotifier output control.
|
|
77
72
|
|
|
78
73
|
## First Session
|
|
79
74
|
|
|
@@ -102,8 +97,8 @@ OMX installs and wires these layers:
|
|
|
102
97
|
User
|
|
103
98
|
-> Codex CLI
|
|
104
99
|
-> AGENTS.md (orchestration brain)
|
|
105
|
-
-> ~/.codex/prompts/*.md (
|
|
106
|
-
-> ~/.agents/skills/*/SKILL.md (
|
|
100
|
+
-> ~/.codex/prompts/*.md (agent prompt catalog)
|
|
101
|
+
-> ~/.agents/skills/*/SKILL.md (skill catalog)
|
|
107
102
|
-> ~/.codex/config.toml (features, notify, MCP)
|
|
108
103
|
-> .omx/ (runtime state, memory, plans, logs)
|
|
109
104
|
```
|
|
@@ -112,7 +107,7 @@ User
|
|
|
112
107
|
|
|
113
108
|
```bash
|
|
114
109
|
omx # Launch Codex (+ HUD in tmux when available)
|
|
115
|
-
omx setup # Install prompts
|
|
110
|
+
omx setup # Install prompts/skills/config by scope + project AGENTS.md/.omx
|
|
116
111
|
omx doctor # Installation/runtime diagnostics
|
|
117
112
|
omx doctor --team # Team/swarm diagnostics
|
|
118
113
|
omx team ... # Start/status/resume/shutdown tmux team workers
|
|
@@ -146,6 +141,7 @@ See `docs/hooks-extension.md` for the full extension workflow and event model.
|
|
|
146
141
|
--force
|
|
147
142
|
--dry-run
|
|
148
143
|
--verbose
|
|
144
|
+
--scope <user|project-local|project> # setup only
|
|
149
145
|
```
|
|
150
146
|
|
|
151
147
|
`--madmax` maps to Codex `--dangerously-bypass-approvals-and-sandbox`.
|
|
@@ -192,9 +188,14 @@ Important rule: do not shutdown while tasks are still `in_progress` unless abort
|
|
|
192
188
|
|
|
193
189
|
## What `omx setup` writes
|
|
194
190
|
|
|
195
|
-
-
|
|
196
|
-
-
|
|
197
|
-
- `~/.codex/config.toml
|
|
191
|
+
- `.omx/setup-scope.json` (persisted setup scope)
|
|
192
|
+
- Scope-dependent installs:
|
|
193
|
+
- `user`: `~/.codex/prompts/`, `~/.agents/skills/`, `~/.codex/config.toml`, `~/.omx/agents/`
|
|
194
|
+
- `project-local`: `./.codex/prompts/`, `./.agents/skills/`, `./.codex/config.toml`, `./.omx/agents/`
|
|
195
|
+
- `project`: skips prompt/skill/config/native-agent installs
|
|
196
|
+
- Launch behavior: if persisted scope is `project-local`, `omx` launch auto-uses `CODEX_HOME=./.codex` (unless `CODEX_HOME` is already set).
|
|
197
|
+
- Existing `AGENTS.md` is preserved unless `--force` is used (and active-session safety checks still apply).
|
|
198
|
+
- `config.toml` updates (for `user`/`project-local` scopes):
|
|
198
199
|
- `notify = ["node", "..."]`
|
|
199
200
|
- `model_reasoning_effort = "high"`
|
|
200
201
|
- `developer_instructions = "..."`
|
|
@@ -206,13 +207,12 @@ Important rule: do not shutdown while tasks are still `in_progress` unless abort
|
|
|
206
207
|
|
|
207
208
|
## Agents and Skills
|
|
208
209
|
|
|
209
|
-
- Prompts: `prompts/*.md` (installed to `~/.codex/prompts/`)
|
|
210
|
-
- Skills: `skills/*/SKILL.md` (installed to `~/.agents/skills/`)
|
|
210
|
+
- Prompts: `prompts/*.md` (installed to `~/.codex/prompts/` for `user`, `./.codex/prompts/` for `project-local`)
|
|
211
|
+
- Skills: `skills/*/SKILL.md` (installed to `~/.agents/skills/` for `user`, `./.agents/skills/` for `project-local`)
|
|
211
212
|
|
|
212
213
|
Examples:
|
|
213
214
|
- Agents: `architect`, `planner`, `executor`, `debugger`, `verifier`, `security-reviewer`
|
|
214
|
-
- `
|
|
215
|
-
- Skills: `autopilot`, `plan`, `team`, `ralph`, `ultrawork`, `ultrapilot`, `research`, `cancel`
|
|
215
|
+
- Skills: `autopilot`, `plan`, `team`, `ralph`, `ultrawork`, `cancel`
|
|
216
216
|
|
|
217
217
|
## Project Layout
|
|
218
218
|
|
|
@@ -247,6 +247,8 @@ npm test
|
|
|
247
247
|
|
|
248
248
|
## Notes
|
|
249
249
|
|
|
250
|
+
- Release notes: `CHANGELOG.md`
|
|
251
|
+
- Migration guide (post-v0.4.4 mainline): `docs/migration-mainline-post-v0.4.4.md`
|
|
250
252
|
- Coverage and parity notes: `COVERAGE.md`
|
|
251
253
|
- Hook extension workflow: `docs/hooks-extension.md`
|
|
252
254
|
- Setup and contribution details: `CONTRIBUTING.md`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,0BAA0B;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;CACtE;
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,0BAA0B;IAC1B,KAAK,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACvD,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;CACtE;AAUD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA+M7D,CAAC;AAEF,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAElE;AAED,mCAAmC;AACnC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,eAAe,EAAE,CAE5F;AAED,0BAA0B;AAC1B,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
|
|
@@ -10,11 +10,6 @@ const EXECUTOR_AGENT = {
|
|
|
10
10
|
tools: 'execution',
|
|
11
11
|
category: 'build',
|
|
12
12
|
};
|
|
13
|
-
const DEEP_EXECUTOR_ALIAS_AGENT = {
|
|
14
|
-
...EXECUTOR_AGENT,
|
|
15
|
-
name: 'deep-executor',
|
|
16
|
-
description: '[Deprecated] Backward-compatible alias of executor',
|
|
17
|
-
};
|
|
18
13
|
export const AGENT_DEFINITIONS = {
|
|
19
14
|
// Build/Analysis Lane
|
|
20
15
|
'explore': {
|
|
@@ -53,7 +48,6 @@ export const AGENT_DEFINITIONS = {
|
|
|
53
48
|
category: 'build',
|
|
54
49
|
},
|
|
55
50
|
'executor': EXECUTOR_AGENT,
|
|
56
|
-
'deep-executor': DEEP_EXECUTOR_ALIAS_AGENT,
|
|
57
51
|
'verifier': {
|
|
58
52
|
name: 'verifier',
|
|
59
53
|
description: 'Completion evidence, claim validation, test adequacy',
|
|
@@ -154,13 +148,6 @@ export const AGENT_DEFINITIONS = {
|
|
|
154
148
|
tools: 'execution',
|
|
155
149
|
category: 'domain',
|
|
156
150
|
},
|
|
157
|
-
'scientist': {
|
|
158
|
-
name: 'scientist',
|
|
159
|
-
description: 'Data/statistical analysis and hypothesis testing',
|
|
160
|
-
model: 'sonnet',
|
|
161
|
-
tools: 'data',
|
|
162
|
-
category: 'domain',
|
|
163
|
-
},
|
|
164
151
|
'git-master': {
|
|
165
152
|
name: 'git-master',
|
|
166
153
|
description: 'Commit strategy, history hygiene, rebasing',
|
|
@@ -168,6 +155,13 @@ export const AGENT_DEFINITIONS = {
|
|
|
168
155
|
tools: 'execution',
|
|
169
156
|
category: 'domain',
|
|
170
157
|
},
|
|
158
|
+
'code-simplifier': {
|
|
159
|
+
name: 'code-simplifier',
|
|
160
|
+
description: 'Simplifies recently modified code for clarity and consistency without changing behavior',
|
|
161
|
+
model: 'opus',
|
|
162
|
+
tools: 'execution',
|
|
163
|
+
category: 'domain',
|
|
164
|
+
},
|
|
171
165
|
'researcher': {
|
|
172
166
|
name: 'researcher',
|
|
173
167
|
description: 'External documentation and reference research',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,cAAc,GAAoB;IACtC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,gDAAgD;IAC7D,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEF,MAAM,
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/agents/definitions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,cAAc,GAAoB;IACtC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,gDAAgD;IAC7D,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,WAAW;IAClB,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAoC;IAChE,sBAAsB;IACtB,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,OAAO;KAClB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,+DAA+D;QAC5E,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;KAClB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;KAClB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,+DAA+D;QAC5E,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,OAAO;KAClB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,8DAA8D;QAC3E,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;KAClB;IACD,UAAU,EAAE,cAAc;IAC1B,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,OAAO;KAClB;IAED,cAAc;IACd,gBAAgB,EAAE;QAChB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,8CAA8C;QAC3D,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,mDAAmD;QAChE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,gDAAgD;QAC7D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,mDAAmD;QAChE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IAED,qBAAqB;IACrB,mBAAmB,EAAE;QACnB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,qCAAqC;QAClD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,QAAQ;KACnB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,sDAAsD;QACnE,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,QAAQ;KACnB;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,0CAA0C;QACvD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,wCAAwC;QACrD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,yFAAyF;QACtG,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,QAAQ;KACnB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,QAAQ;KACnB;IAED,eAAe;IACf,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;KACpB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,4CAA4C;QACzD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;KACpB;IACD,uBAAuB,EAAE;QACvB,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;KACpB;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,+CAA+C;QAC5D,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,SAAS;KACpB;IAED,eAAe;IACf,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,2CAA2C;QACxD,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,cAAc;KACzB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAE,QAAQ;QACf,KAAK,EAAE,WAAW;QAClB,QAAQ,EAAE,cAAc;KACzB;CACF,CAAC;AAEF,mCAAmC;AACnC,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,mBAAmB,CAAC,QAAqC;IACvE,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAC/E,CAAC;AAED,0BAA0B;AAC1B,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-config.d.ts","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAqB,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"native-config.d.ts","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAqB,eAAe,EAAE,MAAM,kBAAkB,CAAC;AA8BtE;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAavF;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACzF,OAAO,CAAC,MAAM,CAAC,CAsCjB"}
|
|
@@ -13,8 +13,6 @@ const REASONING_EFFORT_MAP = {
|
|
|
13
13
|
sonnet: 'medium',
|
|
14
14
|
opus: 'high',
|
|
15
15
|
};
|
|
16
|
-
// Agents to skip (deprecated aliases)
|
|
17
|
-
const SKIP_AGENTS = new Set(['deep-executor']);
|
|
18
16
|
/**
|
|
19
17
|
* Strip YAML frontmatter (between --- markers) from markdown content
|
|
20
18
|
*/
|
|
@@ -54,15 +52,12 @@ export function generateAgentToml(agent, promptContent) {
|
|
|
54
52
|
* Returns the number of agents installed
|
|
55
53
|
*/
|
|
56
54
|
export async function installNativeAgentConfigs(pkgRoot, options = {}) {
|
|
57
|
-
const { force = false, dryRun = false, verbose = false } = options;
|
|
58
|
-
const agentsDir = omxAgentsConfigDir();
|
|
55
|
+
const { force = false, dryRun = false, verbose = false, agentsDir = omxAgentsConfigDir(), } = options;
|
|
59
56
|
if (!dryRun) {
|
|
60
57
|
await mkdir(agentsDir, { recursive: true });
|
|
61
58
|
}
|
|
62
59
|
let count = 0;
|
|
63
60
|
for (const [name, agent] of Object.entries(AGENT_DEFINITIONS)) {
|
|
64
|
-
if (SKIP_AGENTS.has(name))
|
|
65
|
-
continue;
|
|
66
61
|
const promptPath = join(pkgRoot, 'prompts', `${name}.md`);
|
|
67
62
|
if (!existsSync(promptPath)) {
|
|
68
63
|
if (verbose)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-config.js","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAmB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,uDAAuD;AACvD,MAAM,oBAAoB,GAA6C;IACrE,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;CACb,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"native-config.js","sourceRoot":"","sources":["../../src/agents/native-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.test.d.ts","sourceRoot":"","sources":["../../../src/catalog/__tests__/generator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdir, mkdtemp, readFile, writeFile } from 'fs/promises';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { tmpdir } from 'os';
|
|
6
|
+
import { readCatalogManifest, toPublicCatalogContract } from '../reader.js';
|
|
7
|
+
async function readSourceManifestRaw() {
|
|
8
|
+
return readFile(join(process.cwd(), 'src', 'catalog', 'manifest.json'), 'utf8');
|
|
9
|
+
}
|
|
10
|
+
async function readSourceManifestCounts() {
|
|
11
|
+
const raw = await readSourceManifestRaw();
|
|
12
|
+
const parsed = JSON.parse(raw);
|
|
13
|
+
return {
|
|
14
|
+
skills: parsed.skills.length,
|
|
15
|
+
agents: parsed.agents.length,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
describe('catalog reader/contract', () => {
|
|
19
|
+
it('prefers template manifest path when present', async () => {
|
|
20
|
+
const root = await mkdtemp(join(tmpdir(), 'omx-catalog-'));
|
|
21
|
+
await mkdir(join(root, 'templates'), { recursive: true });
|
|
22
|
+
await writeFile(join(root, 'templates', 'catalog-manifest.json'), await readSourceManifestRaw());
|
|
23
|
+
const parsed = readCatalogManifest(root);
|
|
24
|
+
assert.equal(parsed.schemaVersion, 1);
|
|
25
|
+
assert.ok(parsed.skills.length > 0);
|
|
26
|
+
});
|
|
27
|
+
it('builds public contract with aliases and internalHidden', async () => {
|
|
28
|
+
const contract = toPublicCatalogContract(readCatalogManifest());
|
|
29
|
+
const expected = await readSourceManifestCounts();
|
|
30
|
+
assert.equal(contract.counts.skillCount, expected.skills);
|
|
31
|
+
assert.equal(contract.counts.promptCount, expected.agents);
|
|
32
|
+
assert.ok(contract.aliases.some((a) => a.name === 'swarm' && a.canonical === 'team'));
|
|
33
|
+
assert.ok(contract.internalHidden.includes('worker'));
|
|
34
|
+
assert.ok(contract.coreSkills.includes('autopilot'));
|
|
35
|
+
});
|
|
36
|
+
it('template manifest can be synced from source manifest', async () => {
|
|
37
|
+
const sourceRaw = await readFile(join(process.cwd(), 'src', 'catalog', 'manifest.json'), 'utf8');
|
|
38
|
+
const targetRaw = await readFile(join(process.cwd(), 'templates', 'catalog-manifest.json'), 'utf8');
|
|
39
|
+
assert.equal(JSON.parse(targetRaw).catalogVersion, JSON.parse(sourceRaw).catalogVersion);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=generator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.test.js","sourceRoot":"","sources":["../../../src/catalog/__tests__/generator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../../../src/catalog/__tests__/schema.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { readFileSync } from 'node:fs';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { summarizeCatalogCounts, validateCatalogManifest } from '../schema.js';
|
|
6
|
+
function readSourceManifest() {
|
|
7
|
+
const path = join(process.cwd(), 'src', 'catalog', 'manifest.json');
|
|
8
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
9
|
+
}
|
|
10
|
+
describe('catalog schema', () => {
|
|
11
|
+
it('validates repository manifest', () => {
|
|
12
|
+
const parsed = validateCatalogManifest(readSourceManifest());
|
|
13
|
+
assert.equal(parsed.schemaVersion, 1);
|
|
14
|
+
assert.ok(parsed.catalogVersion.length > 0);
|
|
15
|
+
assert.ok(parsed.skills.length > 0);
|
|
16
|
+
assert.ok(parsed.agents.length > 0);
|
|
17
|
+
});
|
|
18
|
+
it('enforces required core skills as active', () => {
|
|
19
|
+
const broken = JSON.parse(JSON.stringify(readSourceManifest()));
|
|
20
|
+
const idx = broken.skills.findIndex((s) => s.name === 'team');
|
|
21
|
+
broken.skills[idx].status = 'deprecated';
|
|
22
|
+
assert.throws(() => validateCatalogManifest(broken), /missing_core_skill:team/);
|
|
23
|
+
});
|
|
24
|
+
it('summarizes counts', () => {
|
|
25
|
+
const parsed = validateCatalogManifest(readSourceManifest());
|
|
26
|
+
const counts = summarizeCatalogCounts(parsed);
|
|
27
|
+
assert.equal(counts.skillCount, parsed.skills.length);
|
|
28
|
+
assert.equal(counts.promptCount, parsed.agents.length);
|
|
29
|
+
assert.ok(counts.activeSkillCount > 0);
|
|
30
|
+
assert.ok(counts.activeAgentCount > 0);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../src/catalog/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE/E,SAAS,kBAAkB;IACzB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAChE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAC7D,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type CatalogManifest, type CatalogCounts } from './schema.js';
|
|
2
|
+
export declare function readCatalogManifest(packageRoot?: string): CatalogManifest;
|
|
3
|
+
export declare function tryReadCatalogManifest(packageRoot?: string): CatalogManifest | null;
|
|
4
|
+
export declare function getCatalogCounts(packageRoot?: string): CatalogCounts;
|
|
5
|
+
export interface PublicCatalogContract {
|
|
6
|
+
generatedAt: string;
|
|
7
|
+
version: string;
|
|
8
|
+
counts: CatalogCounts;
|
|
9
|
+
coreSkills: string[];
|
|
10
|
+
skills: CatalogManifest['skills'];
|
|
11
|
+
agents: CatalogManifest['agents'];
|
|
12
|
+
aliases: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
canonical: string;
|
|
15
|
+
}>;
|
|
16
|
+
internalHidden: string[];
|
|
17
|
+
}
|
|
18
|
+
export declare function toPublicCatalogContract(manifest: CatalogManifest): PublicCatalogContract;
|
|
19
|
+
//# sourceMappingURL=reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/catalog/reader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,eAAe,EAA0B,KAAK,aAAa,EAA2B,MAAM,aAAa,CAAC;AAmBxH,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAyB,GAAG,eAAe,CAa3F;AAED,wBAAgB,sBAAsB,CAAC,WAAW,GAAE,MAAyB,GAAG,eAAe,GAAG,IAAI,CAMrG;AAED,wBAAgB,gBAAgB,CAAC,WAAW,GAAE,MAAyB,GAAG,aAAa,CAGtF;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,eAAe,GAAG,qBAAqB,CAkBxF"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { getPackageRoot } from '../utils/package.js';
|
|
4
|
+
import { summarizeCatalogCounts, validateCatalogManifest } from './schema.js';
|
|
5
|
+
const MANIFEST_CANDIDATE_PATHS = [
|
|
6
|
+
['templates', 'catalog-manifest.json'],
|
|
7
|
+
['src', 'catalog', 'manifest.json'],
|
|
8
|
+
['dist', 'catalog', 'manifest.json'],
|
|
9
|
+
];
|
|
10
|
+
let cachedManifest = null;
|
|
11
|
+
let cachedPath = null;
|
|
12
|
+
function resolveManifestPath(packageRoot) {
|
|
13
|
+
for (const segments of MANIFEST_CANDIDATE_PATHS) {
|
|
14
|
+
const fullPath = join(packageRoot, ...segments);
|
|
15
|
+
if (existsSync(fullPath))
|
|
16
|
+
return fullPath;
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
export function readCatalogManifest(packageRoot = getPackageRoot()) {
|
|
21
|
+
const path = resolveManifestPath(packageRoot);
|
|
22
|
+
if (!path) {
|
|
23
|
+
throw new Error('catalog_manifest_missing');
|
|
24
|
+
}
|
|
25
|
+
if (cachedManifest && cachedPath === path)
|
|
26
|
+
return cachedManifest;
|
|
27
|
+
const raw = JSON.parse(readFileSync(path, 'utf8'));
|
|
28
|
+
const manifest = validateCatalogManifest(raw);
|
|
29
|
+
cachedManifest = manifest;
|
|
30
|
+
cachedPath = path;
|
|
31
|
+
return manifest;
|
|
32
|
+
}
|
|
33
|
+
export function tryReadCatalogManifest(packageRoot = getPackageRoot()) {
|
|
34
|
+
try {
|
|
35
|
+
return readCatalogManifest(packageRoot);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function getCatalogCounts(packageRoot = getPackageRoot()) {
|
|
42
|
+
const manifest = readCatalogManifest(packageRoot);
|
|
43
|
+
return summarizeCatalogCounts(manifest);
|
|
44
|
+
}
|
|
45
|
+
export function toPublicCatalogContract(manifest) {
|
|
46
|
+
const aliases = manifest.skills
|
|
47
|
+
.filter((s) => (s.status === 'alias' || s.status === 'merged') && typeof s.canonical === 'string')
|
|
48
|
+
.map((s) => ({ name: s.name, canonical: s.canonical }));
|
|
49
|
+
const internalHidden = manifest.skills
|
|
50
|
+
.filter((s) => s.status === 'internal')
|
|
51
|
+
.map((s) => s.name);
|
|
52
|
+
return {
|
|
53
|
+
generatedAt: new Date().toISOString(),
|
|
54
|
+
version: manifest.catalogVersion,
|
|
55
|
+
counts: summarizeCatalogCounts(manifest),
|
|
56
|
+
coreSkills: manifest.skills.filter((s) => s.core).map((s) => s.name),
|
|
57
|
+
skills: manifest.skills,
|
|
58
|
+
agents: manifest.agents,
|
|
59
|
+
aliases,
|
|
60
|
+
internalHidden,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/catalog/reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type CatalogSkillCategory = 'execution' | 'planning' | 'shortcut' | 'utility';
|
|
2
|
+
export type CatalogAgentCategory = 'build' | 'review' | 'domain' | 'product' | 'coordination';
|
|
3
|
+
export type CatalogEntryStatus = 'active' | 'alias' | 'merged' | 'deprecated' | 'internal';
|
|
4
|
+
export interface CatalogSkillEntry {
|
|
5
|
+
name: string;
|
|
6
|
+
category: CatalogSkillCategory;
|
|
7
|
+
status: CatalogEntryStatus;
|
|
8
|
+
canonical?: string;
|
|
9
|
+
core?: boolean;
|
|
10
|
+
internalRequired?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface CatalogAgentEntry {
|
|
13
|
+
name: string;
|
|
14
|
+
category: CatalogAgentCategory;
|
|
15
|
+
status: CatalogEntryStatus;
|
|
16
|
+
canonical?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface CatalogManifest {
|
|
19
|
+
schemaVersion: number;
|
|
20
|
+
catalogVersion: string;
|
|
21
|
+
skills: CatalogSkillEntry[];
|
|
22
|
+
agents: CatalogAgentEntry[];
|
|
23
|
+
}
|
|
24
|
+
export declare function validateCatalogManifest(input: unknown): CatalogManifest;
|
|
25
|
+
export interface CatalogCounts {
|
|
26
|
+
skillCount: number;
|
|
27
|
+
promptCount: number;
|
|
28
|
+
activeSkillCount: number;
|
|
29
|
+
activeAgentCount: number;
|
|
30
|
+
}
|
|
31
|
+
export declare function summarizeCatalogCounts(manifest: CatalogManifest): CatalogCounts;
|
|
32
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/catalog/schema.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AACrF,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,cAAc,CAAC;AAC9F,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC;AAE3F,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAiBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAuFvE;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,aAAa,CAO/E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const SKILL_CATEGORIES = new Set(['execution', 'planning', 'shortcut', 'utility']);
|
|
2
|
+
const AGENT_CATEGORIES = new Set(['build', 'review', 'domain', 'product', 'coordination']);
|
|
3
|
+
const ENTRY_STATUSES = new Set(['active', 'alias', 'merged', 'deprecated', 'internal']);
|
|
4
|
+
const REQUIRED_CORE_SKILLS = new Set(['ralplan', 'team', 'ralph', 'ultrawork', 'autopilot']);
|
|
5
|
+
function isObject(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function assertNonEmptyString(value, field) {
|
|
9
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
10
|
+
throw new Error(`catalog_manifest_invalid:${field}`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function validateCatalogManifest(input) {
|
|
14
|
+
if (!isObject(input))
|
|
15
|
+
throw new Error('catalog_manifest_invalid:root');
|
|
16
|
+
if (typeof input.schemaVersion !== 'number' || !Number.isInteger(input.schemaVersion)) {
|
|
17
|
+
throw new Error('catalog_manifest_invalid:schemaVersion');
|
|
18
|
+
}
|
|
19
|
+
assertNonEmptyString(input.catalogVersion, 'catalogVersion');
|
|
20
|
+
if (!Array.isArray(input.skills))
|
|
21
|
+
throw new Error('catalog_manifest_invalid:skills');
|
|
22
|
+
if (!Array.isArray(input.agents))
|
|
23
|
+
throw new Error('catalog_manifest_invalid:agents');
|
|
24
|
+
const seenSkills = new Set();
|
|
25
|
+
const skills = input.skills.map((entry, index) => {
|
|
26
|
+
if (!isObject(entry))
|
|
27
|
+
throw new Error(`catalog_manifest_invalid:skills[${index}]`);
|
|
28
|
+
assertNonEmptyString(entry.name, `skills[${index}].name`);
|
|
29
|
+
assertNonEmptyString(entry.category, `skills[${index}].category`);
|
|
30
|
+
assertNonEmptyString(entry.status, `skills[${index}].status`);
|
|
31
|
+
if (!SKILL_CATEGORIES.has(entry.category)) {
|
|
32
|
+
throw new Error(`catalog_manifest_invalid:skills[${index}].category`);
|
|
33
|
+
}
|
|
34
|
+
if (!ENTRY_STATUSES.has(entry.status)) {
|
|
35
|
+
throw new Error(`catalog_manifest_invalid:skills[${index}].status`);
|
|
36
|
+
}
|
|
37
|
+
const name = entry.name.trim();
|
|
38
|
+
if (seenSkills.has(name))
|
|
39
|
+
throw new Error(`catalog_manifest_invalid:duplicate_skill:${name}`);
|
|
40
|
+
seenSkills.add(name);
|
|
41
|
+
const canonical = typeof entry.canonical === 'string' && entry.canonical.trim() !== ''
|
|
42
|
+
? entry.canonical.trim()
|
|
43
|
+
: undefined;
|
|
44
|
+
return {
|
|
45
|
+
name,
|
|
46
|
+
category: entry.category,
|
|
47
|
+
status: entry.status,
|
|
48
|
+
canonical,
|
|
49
|
+
core: entry.core === true,
|
|
50
|
+
internalRequired: entry.internalRequired === true,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
const seenAgents = new Set();
|
|
54
|
+
const agents = input.agents.map((entry, index) => {
|
|
55
|
+
if (!isObject(entry))
|
|
56
|
+
throw new Error(`catalog_manifest_invalid:agents[${index}]`);
|
|
57
|
+
assertNonEmptyString(entry.name, `agents[${index}].name`);
|
|
58
|
+
assertNonEmptyString(entry.category, `agents[${index}].category`);
|
|
59
|
+
assertNonEmptyString(entry.status, `agents[${index}].status`);
|
|
60
|
+
if (!AGENT_CATEGORIES.has(entry.category)) {
|
|
61
|
+
throw new Error(`catalog_manifest_invalid:agents[${index}].category`);
|
|
62
|
+
}
|
|
63
|
+
if (!ENTRY_STATUSES.has(entry.status)) {
|
|
64
|
+
throw new Error(`catalog_manifest_invalid:agents[${index}].status`);
|
|
65
|
+
}
|
|
66
|
+
const name = entry.name.trim();
|
|
67
|
+
if (seenAgents.has(name))
|
|
68
|
+
throw new Error(`catalog_manifest_invalid:duplicate_agent:${name}`);
|
|
69
|
+
seenAgents.add(name);
|
|
70
|
+
const canonical = typeof entry.canonical === 'string' && entry.canonical.trim() !== ''
|
|
71
|
+
? entry.canonical.trim()
|
|
72
|
+
: undefined;
|
|
73
|
+
return {
|
|
74
|
+
name,
|
|
75
|
+
category: entry.category,
|
|
76
|
+
status: entry.status,
|
|
77
|
+
canonical,
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
for (const coreSkill of REQUIRED_CORE_SKILLS) {
|
|
81
|
+
const skill = skills.find((s) => s.name === coreSkill);
|
|
82
|
+
if (!skill || skill.status !== 'active') {
|
|
83
|
+
throw new Error(`catalog_manifest_invalid:missing_core_skill:${coreSkill}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
schemaVersion: input.schemaVersion,
|
|
88
|
+
catalogVersion: input.catalogVersion,
|
|
89
|
+
skills,
|
|
90
|
+
agents,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export function summarizeCatalogCounts(manifest) {
|
|
94
|
+
return {
|
|
95
|
+
skillCount: manifest.skills.length,
|
|
96
|
+
promptCount: manifest.agents.length,
|
|
97
|
+
activeSkillCount: manifest.skills.filter((s) => s.status === 'active').length,
|
|
98
|
+
activeAgentCount: manifest.agents.filter((a) => a.status === 'active').length,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/catalog/schema.ts"],"names":[],"mappings":"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"}
|