@moreih29/nexus-core 0.12.0 → 0.14.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 (245) hide show
  1. package/README.md +76 -57
  2. package/assets/agents/architect/body.ko.md +177 -0
  3. package/{agents → assets/agents}/architect/body.md +16 -0
  4. package/assets/agents/designer/body.ko.md +125 -0
  5. package/{agents → assets/agents}/designer/body.md +16 -0
  6. package/assets/agents/engineer/body.ko.md +106 -0
  7. package/{agents → assets/agents}/engineer/body.md +14 -0
  8. package/assets/agents/lead/body.ko.md +70 -0
  9. package/assets/agents/lead/body.md +70 -0
  10. package/assets/agents/postdoc/body.ko.md +122 -0
  11. package/{agents → assets/agents}/postdoc/body.md +16 -0
  12. package/assets/agents/researcher/body.ko.md +137 -0
  13. package/{agents → assets/agents}/researcher/body.md +15 -0
  14. package/assets/agents/reviewer/body.ko.md +138 -0
  15. package/{agents → assets/agents}/reviewer/body.md +15 -0
  16. package/assets/agents/strategist/body.ko.md +116 -0
  17. package/{agents → assets/agents}/strategist/body.md +16 -0
  18. package/assets/agents/tester/body.ko.md +195 -0
  19. package/{agents → assets/agents}/tester/body.md +15 -0
  20. package/assets/agents/writer/body.ko.md +122 -0
  21. package/{agents → assets/agents}/writer/body.md +14 -0
  22. package/assets/capability-matrix.yml +198 -0
  23. package/assets/hooks/agent-bootstrap/handler.test.ts +368 -0
  24. package/assets/hooks/agent-bootstrap/handler.ts +119 -0
  25. package/assets/hooks/agent-bootstrap/meta.yml +10 -0
  26. package/assets/hooks/agent-finalize/handler.test.ts +368 -0
  27. package/assets/hooks/agent-finalize/handler.ts +76 -0
  28. package/assets/hooks/agent-finalize/meta.yml +10 -0
  29. package/assets/hooks/capability-matrix.yml +313 -0
  30. package/assets/hooks/post-tool-telemetry/handler.test.ts +302 -0
  31. package/assets/hooks/post-tool-telemetry/handler.ts +49 -0
  32. package/assets/hooks/post-tool-telemetry/meta.yml +11 -0
  33. package/assets/hooks/prompt-router/handler.test.ts +801 -0
  34. package/assets/hooks/prompt-router/handler.ts +261 -0
  35. package/assets/hooks/prompt-router/meta.yml +11 -0
  36. package/assets/hooks/session-init/handler.test.ts +274 -0
  37. package/assets/hooks/session-init/handler.ts +30 -0
  38. package/assets/hooks/session-init/meta.yml +9 -0
  39. package/assets/lsp-servers.json +55 -0
  40. package/assets/schema/lsp-servers.schema.json +67 -0
  41. package/assets/skills/nx-init/body.ko.md +197 -0
  42. package/{skills → assets/skills}/nx-init/body.md +11 -0
  43. package/assets/skills/nx-plan/body.ko.md +361 -0
  44. package/{skills → assets/skills}/nx-plan/body.md +13 -0
  45. package/assets/skills/nx-run/body.ko.md +161 -0
  46. package/{skills → assets/skills}/nx-run/body.md +11 -0
  47. package/assets/skills/nx-sync/body.ko.md +92 -0
  48. package/{skills → assets/skills}/nx-sync/body.md +10 -0
  49. package/assets/tools/tool-name-map.yml +353 -0
  50. package/dist/assets/hooks/agent-bootstrap/handler.d.ts +4 -0
  51. package/dist/assets/hooks/agent-bootstrap/handler.d.ts.map +1 -0
  52. package/dist/assets/hooks/agent-bootstrap/handler.js +100 -0
  53. package/dist/assets/hooks/agent-bootstrap/handler.js.map +1 -0
  54. package/dist/assets/hooks/agent-finalize/handler.d.ts +4 -0
  55. package/dist/assets/hooks/agent-finalize/handler.d.ts.map +1 -0
  56. package/dist/assets/hooks/agent-finalize/handler.js +63 -0
  57. package/dist/assets/hooks/agent-finalize/handler.js.map +1 -0
  58. package/dist/assets/hooks/post-tool-telemetry/handler.d.ts +4 -0
  59. package/dist/assets/hooks/post-tool-telemetry/handler.d.ts.map +1 -0
  60. package/dist/assets/hooks/post-tool-telemetry/handler.js +40 -0
  61. package/dist/assets/hooks/post-tool-telemetry/handler.js.map +1 -0
  62. package/dist/assets/hooks/prompt-router/handler.d.ts +4 -0
  63. package/dist/assets/hooks/prompt-router/handler.d.ts.map +1 -0
  64. package/dist/assets/hooks/prompt-router/handler.js +204 -0
  65. package/dist/assets/hooks/prompt-router/handler.js.map +1 -0
  66. package/dist/assets/hooks/session-init/handler.d.ts +4 -0
  67. package/dist/assets/hooks/session-init/handler.d.ts.map +1 -0
  68. package/dist/assets/hooks/session-init/handler.js +23 -0
  69. package/dist/assets/hooks/session-init/handler.js.map +1 -0
  70. package/dist/hooks/agent-bootstrap.js +105 -0
  71. package/dist/hooks/agent-finalize.js +164 -0
  72. package/dist/hooks/post-tool-telemetry.js +55 -0
  73. package/dist/hooks/prompt-router.js +7300 -0
  74. package/dist/hooks/session-init.js +21 -0
  75. package/dist/manifests/claude-hooks.json +52 -0
  76. package/dist/manifests/codex-hooks.json +28 -0
  77. package/dist/manifests/opencode-manifest.json +44 -0
  78. package/dist/manifests/portability-report.json +87 -0
  79. package/dist/scripts/build-agents.d.ts +157 -0
  80. package/dist/scripts/build-agents.d.ts.map +1 -0
  81. package/dist/scripts/build-agents.js +737 -0
  82. package/dist/scripts/build-agents.js.map +1 -0
  83. package/dist/scripts/build-hooks.d.ts +16 -0
  84. package/dist/scripts/build-hooks.d.ts.map +1 -0
  85. package/dist/scripts/build-hooks.js +388 -0
  86. package/dist/scripts/build-hooks.js.map +1 -0
  87. package/dist/scripts/cli.d.ts +54 -0
  88. package/dist/scripts/cli.d.ts.map +1 -0
  89. package/dist/scripts/cli.js +467 -0
  90. package/dist/scripts/cli.js.map +1 -0
  91. package/dist/src/hooks/opencode-mount.d.ts +35 -0
  92. package/dist/src/hooks/opencode-mount.d.ts.map +1 -0
  93. package/dist/src/hooks/opencode-mount.js +352 -0
  94. package/dist/src/hooks/opencode-mount.js.map +1 -0
  95. package/dist/src/hooks/runtime.d.ts +37 -0
  96. package/dist/src/hooks/runtime.d.ts.map +1 -0
  97. package/dist/src/hooks/runtime.js +274 -0
  98. package/dist/src/hooks/runtime.js.map +1 -0
  99. package/dist/src/hooks/types.d.ts +196 -0
  100. package/dist/src/hooks/types.d.ts.map +1 -0
  101. package/dist/src/hooks/types.js +85 -0
  102. package/dist/src/hooks/types.js.map +1 -0
  103. package/dist/src/lsp/cache.d.ts +9 -0
  104. package/dist/src/lsp/cache.d.ts.map +1 -0
  105. package/dist/src/lsp/cache.js +216 -0
  106. package/dist/src/lsp/cache.js.map +1 -0
  107. package/dist/src/lsp/client.d.ts +24 -0
  108. package/dist/src/lsp/client.d.ts.map +1 -0
  109. package/dist/src/lsp/client.js +166 -0
  110. package/dist/src/lsp/client.js.map +1 -0
  111. package/dist/src/lsp/detect.d.ts +77 -0
  112. package/dist/src/lsp/detect.d.ts.map +1 -0
  113. package/dist/src/lsp/detect.js +116 -0
  114. package/dist/src/lsp/detect.js.map +1 -0
  115. package/dist/src/mcp/server.d.ts +5 -0
  116. package/dist/src/mcp/server.d.ts.map +1 -0
  117. package/dist/src/mcp/server.js +34 -0
  118. package/dist/src/mcp/server.js.map +1 -0
  119. package/dist/src/mcp/tools/artifact.d.ts +4 -0
  120. package/dist/src/mcp/tools/artifact.d.ts.map +1 -0
  121. package/dist/src/mcp/tools/artifact.js +36 -0
  122. package/dist/src/mcp/tools/artifact.js.map +1 -0
  123. package/dist/src/mcp/tools/history.d.ts +3 -0
  124. package/dist/src/mcp/tools/history.d.ts.map +1 -0
  125. package/dist/src/mcp/tools/history.js +29 -0
  126. package/dist/src/mcp/tools/history.js.map +1 -0
  127. package/dist/src/mcp/tools/lsp.d.ts +13 -0
  128. package/dist/src/mcp/tools/lsp.d.ts.map +1 -0
  129. package/dist/src/mcp/tools/lsp.js +225 -0
  130. package/dist/src/mcp/tools/lsp.js.map +1 -0
  131. package/dist/src/mcp/tools/plan.d.ts +3 -0
  132. package/dist/src/mcp/tools/plan.d.ts.map +1 -0
  133. package/dist/src/mcp/tools/plan.js +317 -0
  134. package/dist/src/mcp/tools/plan.js.map +1 -0
  135. package/dist/src/mcp/tools/task.d.ts +3 -0
  136. package/dist/src/mcp/tools/task.d.ts.map +1 -0
  137. package/dist/src/mcp/tools/task.js +252 -0
  138. package/dist/src/mcp/tools/task.js.map +1 -0
  139. package/dist/src/shared/invocations.d.ts +74 -0
  140. package/dist/src/shared/invocations.d.ts.map +1 -0
  141. package/dist/src/shared/invocations.js +247 -0
  142. package/dist/src/shared/invocations.js.map +1 -0
  143. package/dist/src/shared/json-store.d.ts +37 -0
  144. package/dist/src/shared/json-store.d.ts.map +1 -0
  145. package/dist/src/shared/json-store.js +163 -0
  146. package/dist/src/shared/json-store.js.map +1 -0
  147. package/dist/src/shared/mcp-utils.d.ts +3 -0
  148. package/dist/src/shared/mcp-utils.d.ts.map +1 -0
  149. package/dist/src/shared/mcp-utils.js +6 -0
  150. package/dist/src/shared/mcp-utils.js.map +1 -0
  151. package/dist/src/shared/paths.d.ts +21 -0
  152. package/dist/src/shared/paths.d.ts.map +1 -0
  153. package/dist/src/shared/paths.js +81 -0
  154. package/dist/src/shared/paths.js.map +1 -0
  155. package/dist/src/shared/tool-log.d.ts +8 -0
  156. package/dist/src/shared/tool-log.d.ts.map +1 -0
  157. package/dist/src/shared/tool-log.js +22 -0
  158. package/dist/src/shared/tool-log.js.map +1 -0
  159. package/dist/src/types/state.d.ts +862 -0
  160. package/dist/src/types/state.d.ts.map +1 -0
  161. package/dist/src/types/state.js +66 -0
  162. package/dist/src/types/state.js.map +1 -0
  163. package/docs/consuming/codex-lead-merge.md +106 -0
  164. package/docs/plugin-guide.md +396 -0
  165. package/docs/plugin-template/claude/.github/workflows/build.yml +60 -0
  166. package/docs/plugin-template/claude/README.md +110 -0
  167. package/docs/plugin-template/claude/package.json +16 -0
  168. package/docs/plugin-template/codex/.github/workflows/build.yml +51 -0
  169. package/docs/plugin-template/codex/README.md +147 -0
  170. package/docs/plugin-template/codex/package.json +17 -0
  171. package/docs/plugin-template/opencode/.github/workflows/build.yml +61 -0
  172. package/docs/plugin-template/opencode/README.md +121 -0
  173. package/docs/plugin-template/opencode/package.json +25 -0
  174. package/package.json +36 -28
  175. package/agents/architect/meta.yml +0 -13
  176. package/agents/designer/meta.yml +0 -13
  177. package/agents/engineer/meta.yml +0 -11
  178. package/agents/postdoc/meta.yml +0 -13
  179. package/agents/researcher/meta.yml +0 -12
  180. package/agents/reviewer/meta.yml +0 -12
  181. package/agents/strategist/meta.yml +0 -13
  182. package/agents/tester/meta.yml +0 -12
  183. package/agents/writer/meta.yml +0 -11
  184. package/conformance/README.md +0 -311
  185. package/conformance/examples/plan.extension.schema.example.json +0 -25
  186. package/conformance/lifecycle/README.md +0 -48
  187. package/conformance/lifecycle/agent-complete.json +0 -44
  188. package/conformance/lifecycle/agent-resume.json +0 -43
  189. package/conformance/lifecycle/agent-spawn.json +0 -36
  190. package/conformance/lifecycle/memory-access-record.json +0 -27
  191. package/conformance/lifecycle/session-end.json +0 -48
  192. package/conformance/scenarios/full-plan-cycle.json +0 -147
  193. package/conformance/scenarios/task-deps-ordering.json +0 -95
  194. package/conformance/schema/fixture.schema.json +0 -354
  195. package/conformance/state-schemas/agent-tracker.schema.json +0 -63
  196. package/conformance/state-schemas/history.schema.json +0 -134
  197. package/conformance/state-schemas/memory-access.schema.json +0 -36
  198. package/conformance/state-schemas/plan.schema.json +0 -77
  199. package/conformance/state-schemas/tasks.schema.json +0 -98
  200. package/conformance/tools/artifact-write.json +0 -97
  201. package/conformance/tools/context.json +0 -172
  202. package/conformance/tools/history-search.json +0 -219
  203. package/conformance/tools/plan-decide.json +0 -139
  204. package/conformance/tools/plan-start.json +0 -81
  205. package/conformance/tools/plan-status.json +0 -127
  206. package/conformance/tools/plan-update.json +0 -341
  207. package/conformance/tools/task-add.json +0 -156
  208. package/conformance/tools/task-close.json +0 -161
  209. package/conformance/tools/task-list.json +0 -177
  210. package/conformance/tools/task-update.json +0 -167
  211. package/docs/behavioral-contracts.md +0 -145
  212. package/docs/consumer-implementation-guide.md +0 -840
  213. package/docs/memory-lifecycle-contract.md +0 -119
  214. package/docs/nexus-layout.md +0 -224
  215. package/docs/nexus-outputs-contract.md +0 -344
  216. package/docs/nexus-state-overview.md +0 -170
  217. package/docs/nexus-tools-contract.md +0 -438
  218. package/manifest.json +0 -448
  219. package/schema/README.md +0 -69
  220. package/schema/agent.schema.json +0 -23
  221. package/schema/common.schema.json +0 -17
  222. package/schema/manifest.schema.json +0 -78
  223. package/schema/memory-policy.schema.json +0 -98
  224. package/schema/skill.schema.json +0 -54
  225. package/schema/task-exceptions.schema.json +0 -40
  226. package/schema/vocabulary.schema.json +0 -167
  227. package/scripts/.gitkeep +0 -0
  228. package/scripts/conformance-coverage.ts +0 -466
  229. package/scripts/import-from-claude-nexus.ts +0 -403
  230. package/scripts/lib/frontmatter.ts +0 -71
  231. package/scripts/lib/lint.ts +0 -348
  232. package/scripts/lib/structure.ts +0 -159
  233. package/scripts/lib/validate.ts +0 -796
  234. package/scripts/validate.ts +0 -90
  235. package/skills/nx-init/meta.yml +0 -8
  236. package/skills/nx-plan/meta.yml +0 -10
  237. package/skills/nx-run/meta.yml +0 -8
  238. package/skills/nx-sync/meta.yml +0 -7
  239. package/vocabulary/capabilities.yml +0 -65
  240. package/vocabulary/categories.yml +0 -11
  241. package/vocabulary/invocations.yml +0 -147
  242. package/vocabulary/memory_policy.yml +0 -88
  243. package/vocabulary/resume-tiers.yml +0 -11
  244. package/vocabulary/tags.yml +0 -60
  245. package/vocabulary/task-exceptions.yml +0 -29
@@ -0,0 +1,467 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * scripts/cli.ts
4
+ *
5
+ * nexus-core CLI — subcommand dispatcher.
6
+ *
7
+ * Usage:
8
+ * nexus-core <command> [flags]
9
+ * bun run scripts/cli.ts <command> [flags]
10
+ *
11
+ * Commands:
12
+ * sync Build agents + hooks (build-agents + build-hooks pipeline)
13
+ * init Copy plugin template to a target directory
14
+ * list List agents, skills, and hooks from assets/
15
+ * validate Validate frontmatter and YAML assets
16
+ * mcp Start the MCP stdio server (same as nexus-mcp)
17
+ *
18
+ * Flags:
19
+ * --help, -h Show help for the current command
20
+ */
21
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
22
+ import { join, resolve, dirname } from "node:path";
23
+ import { fileURLToPath } from "node:url";
24
+ import { parse as parseYaml } from "yaml";
25
+ // ---------------------------------------------------------------------------
26
+ // Constants
27
+ // ---------------------------------------------------------------------------
28
+ const __dirname = dirname(fileURLToPath(import.meta.url));
29
+ export const ROOT = resolve(__dirname, "..");
30
+ export const ASSETS_DIR = join(ROOT, "assets");
31
+ export function parseFlags(argv) {
32
+ const flags = {
33
+ dryRun: false,
34
+ force: false,
35
+ strict: false,
36
+ help: false,
37
+ remaining: [],
38
+ };
39
+ for (const arg of argv) {
40
+ if (arg === "--help" || arg === "-h") {
41
+ flags.help = true;
42
+ }
43
+ else if (arg.startsWith("--harness=")) {
44
+ flags.harness = arg.slice("--harness=".length);
45
+ }
46
+ else if (arg.startsWith("--target=")) {
47
+ flags.target = resolve(arg.slice("--target=".length));
48
+ }
49
+ else if (arg === "--dry-run") {
50
+ flags.dryRun = true;
51
+ }
52
+ else if (arg === "--force") {
53
+ flags.force = true;
54
+ }
55
+ else if (arg === "--strict") {
56
+ flags.strict = true;
57
+ }
58
+ else if (arg.startsWith("--only=")) {
59
+ flags.only = arg.slice("--only=".length);
60
+ }
61
+ else {
62
+ flags.remaining.push(arg);
63
+ }
64
+ }
65
+ return flags;
66
+ }
67
+ // ---------------------------------------------------------------------------
68
+ // Help messages
69
+ // ---------------------------------------------------------------------------
70
+ const HELP_MAIN = `
71
+ nexus-core — Nexus ecosystem CLI
72
+
73
+ Usage:
74
+ nexus-core <command> [flags]
75
+
76
+ Commands:
77
+ sync Build agents + hooks (runs build-agents + build-hooks pipelines)
78
+ init Copy plugin template to a target directory
79
+ list List agents, skills, and hooks from assets/
80
+ validate Validate frontmatter and YAML assets
81
+ mcp Start the MCP stdio server (same as nexus-mcp)
82
+
83
+ Flags:
84
+ --help, -h Show help for the current command
85
+
86
+ Run \`nexus-core <command> --help\` for command-specific flags.
87
+ `.trim();
88
+ const HELP_SYNC = `
89
+ nexus-core sync — Build agents + hooks
90
+
91
+ Usage:
92
+ nexus-core sync [flags]
93
+
94
+ Flags:
95
+ --harness=<claude|opencode|codex> Restrict to one harness (default: all)
96
+ --target=<dir> Output directory (default: dist/)
97
+ --dry-run Print affected files, no writes
98
+ --force Force template file overwrite
99
+ --strict Error if managed output has untracked modifications
100
+ --only=<name> Restrict to a single agent or skill name
101
+ `.trim();
102
+ const HELP_INIT = `
103
+ nexus-core init — Copy plugin template to target directory
104
+
105
+ Usage:
106
+ nexus-core init [flags]
107
+
108
+ Flags:
109
+ --harness=<claude|opencode|codex> Harness template to copy (default: claude)
110
+ --target=<dir> Destination directory (required)
111
+ `.trim();
112
+ const HELP_LIST = `
113
+ nexus-core list — List assets from assets/
114
+
115
+ Usage:
116
+ nexus-core list [flags]
117
+
118
+ Flags:
119
+ (none currently)
120
+
121
+ Prints agents, skills, and hooks with their descriptions.
122
+ `.trim();
123
+ const HELP_VALIDATE = `
124
+ nexus-core validate — Validate frontmatter and YAML assets
125
+
126
+ Usage:
127
+ nexus-core validate [flags]
128
+
129
+ Flags:
130
+ (none currently)
131
+
132
+ Validates:
133
+ - assets/agents/*/body.md frontmatter (required fields: id, name, category, model_tier)
134
+ - assets/skills/*/body.md frontmatter (required fields: id, name)
135
+ - assets/capability-matrix.yml YAML parse
136
+ - assets/tools/tool-name-map.yml YAML parse
137
+ `.trim();
138
+ const HELP_MCP = `
139
+ nexus-core mcp — Start the MCP stdio server
140
+
141
+ Usage:
142
+ nexus-core mcp
143
+
144
+ Starts the nexus-core MCP server on stdio. Equivalent to running nexus-mcp directly.
145
+ `.trim();
146
+ // ---------------------------------------------------------------------------
147
+ // Subcommand: sync
148
+ // ---------------------------------------------------------------------------
149
+ export async function runSync(argv) {
150
+ const flags = parseFlags(argv);
151
+ if (flags.help) {
152
+ console.log(HELP_SYNC);
153
+ return;
154
+ }
155
+ // Build argv for build-agents: reconstruct flags as process.argv-style
156
+ // build-agents.parseArgs expects process.argv (slices [2:])
157
+ const fakeArgv = ["node", "build-agents.ts"];
158
+ if (flags.harness)
159
+ fakeArgv.push(`--harness=${flags.harness}`);
160
+ if (flags.target)
161
+ fakeArgv.push(`--target=${flags.target}`);
162
+ if (flags.dryRun)
163
+ fakeArgv.push("--dry-run");
164
+ if (flags.force)
165
+ fakeArgv.push("--force");
166
+ if (flags.strict)
167
+ fakeArgv.push("--strict");
168
+ if (flags.only)
169
+ fakeArgv.push(`--only=${flags.only}`);
170
+ const { buildAgents, parseArgs: parseAgentArgs } = await import("./build-agents.js");
171
+ const agentOpts = parseAgentArgs(fakeArgv);
172
+ await buildAgents(agentOpts);
173
+ if (flags.dryRun) {
174
+ console.log(`[nexus-core sync] --dry-run: skipping buildHooks (no writes)`);
175
+ return;
176
+ }
177
+ const { buildHooks } = await import("./build-hooks.js");
178
+ await buildHooks();
179
+ }
180
+ // ---------------------------------------------------------------------------
181
+ // Subcommand: init
182
+ // ---------------------------------------------------------------------------
183
+ export async function runInit(argv) {
184
+ const flags = parseFlags(argv);
185
+ if (flags.help) {
186
+ console.log(HELP_INIT);
187
+ return;
188
+ }
189
+ const harness = flags.harness ?? "claude";
190
+ const target = flags.target;
191
+ if (!target) {
192
+ process.stderr.write(`[nexus-core init] --target=<dir> is required\n`);
193
+ process.exit(1);
194
+ }
195
+ const templateDir = join(ROOT, "docs", "plugin-template", harness);
196
+ if (!existsSync(templateDir)) {
197
+ process.stderr.write(`[nexus-core init] Template not yet available for harness "${harness}".\n` +
198
+ ` Expected path: ${templateDir}\n` +
199
+ ` Templates are generated by the T5 phase. Use "nexus-core sync" to build dist/ first.\n`);
200
+ process.exit(1);
201
+ }
202
+ // Copy template directory to target using recursive copy
203
+ const { cpSync } = await import("node:fs");
204
+ cpSync(templateDir, target, { recursive: true });
205
+ console.log(`[nexus-core init] Initialized ${harness} plugin template → ${target}`);
206
+ }
207
+ // ---------------------------------------------------------------------------
208
+ // Frontmatter parsing (lightweight, no dependency on build-agents)
209
+ // ---------------------------------------------------------------------------
210
+ const FRONTMATTER_RE = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/;
211
+ function parseFrontmatterRaw(raw) {
212
+ const match = FRONTMATTER_RE.exec(raw);
213
+ if (!match)
214
+ return null;
215
+ try {
216
+ return parseYaml(match[1]);
217
+ }
218
+ catch {
219
+ return null;
220
+ }
221
+ }
222
+ export function collectListEntries() {
223
+ const entries = [];
224
+ // Agents
225
+ const agentsDir = join(ASSETS_DIR, "agents");
226
+ if (existsSync(agentsDir)) {
227
+ for (const entry of readdirSync(agentsDir, { withFileTypes: true })) {
228
+ if (!entry.isDirectory())
229
+ continue;
230
+ const bodyPath = join(agentsDir, entry.name, "body.md");
231
+ if (!existsSync(bodyPath))
232
+ continue;
233
+ const fm = parseFrontmatterRaw(readFileSync(bodyPath, "utf-8"));
234
+ entries.push({
235
+ kind: "agent",
236
+ name: entry.name,
237
+ description: typeof fm?.description === "string" ? fm.description : "",
238
+ });
239
+ }
240
+ }
241
+ // Skills
242
+ const skillsDir = join(ASSETS_DIR, "skills");
243
+ if (existsSync(skillsDir)) {
244
+ for (const entry of readdirSync(skillsDir, { withFileTypes: true })) {
245
+ if (!entry.isDirectory())
246
+ continue;
247
+ const bodyPath = join(skillsDir, entry.name, "body.md");
248
+ if (!existsSync(bodyPath))
249
+ continue;
250
+ const fm = parseFrontmatterRaw(readFileSync(bodyPath, "utf-8"));
251
+ entries.push({
252
+ kind: "skill",
253
+ name: entry.name,
254
+ description: typeof fm?.description === "string" ? fm.description : "",
255
+ });
256
+ }
257
+ }
258
+ // Hooks
259
+ const hooksDir = join(ASSETS_DIR, "hooks");
260
+ if (existsSync(hooksDir)) {
261
+ for (const entry of readdirSync(hooksDir, { withFileTypes: true })) {
262
+ if (!entry.isDirectory())
263
+ continue;
264
+ const metaPath = join(hooksDir, entry.name, "meta.yml");
265
+ if (!existsSync(metaPath))
266
+ continue;
267
+ let description = "";
268
+ try {
269
+ const meta = parseYaml(readFileSync(metaPath, "utf-8"));
270
+ description = typeof meta?.description === "string" ? meta.description : "";
271
+ }
272
+ catch {
273
+ // ignore parse errors in list
274
+ }
275
+ entries.push({ kind: "hook", name: entry.name, description });
276
+ }
277
+ }
278
+ return entries;
279
+ }
280
+ export async function runList(argv) {
281
+ const flags = parseFlags(argv);
282
+ if (flags.help) {
283
+ console.log(HELP_LIST);
284
+ return;
285
+ }
286
+ const entries = collectListEntries();
287
+ const agents = entries.filter((e) => e.kind === "agent");
288
+ const skills = entries.filter((e) => e.kind === "skill");
289
+ const hooks = entries.filter((e) => e.kind === "hook");
290
+ console.log(`Agents (${agents.length}):`);
291
+ for (const e of agents) {
292
+ console.log(` ${e.name.padEnd(20)} ${e.description}`);
293
+ }
294
+ console.log(`\nSkills (${skills.length}):`);
295
+ for (const e of skills) {
296
+ console.log(` ${e.name.padEnd(20)} ${e.description}`);
297
+ }
298
+ console.log(`\nHooks (${hooks.length}):`);
299
+ for (const e of hooks) {
300
+ console.log(` ${e.name.padEnd(20)} ${e.description}`);
301
+ }
302
+ }
303
+ export function runValidateSync() {
304
+ const errors = [];
305
+ const warnings = [];
306
+ let checked = 0;
307
+ // Validate agents
308
+ const agentsDir = join(ASSETS_DIR, "agents");
309
+ if (existsSync(agentsDir)) {
310
+ for (const entry of readdirSync(agentsDir, { withFileTypes: true })) {
311
+ if (!entry.isDirectory())
312
+ continue;
313
+ const bodyPath = join(agentsDir, entry.name, "body.md");
314
+ if (!existsSync(bodyPath)) {
315
+ errors.push(`agents/${entry.name}: missing body.md`);
316
+ continue;
317
+ }
318
+ checked++;
319
+ const raw = readFileSync(bodyPath, "utf-8");
320
+ const fm = parseFrontmatterRaw(raw);
321
+ if (!fm) {
322
+ errors.push(`agents/${entry.name}/body.md: missing or malformed frontmatter`);
323
+ continue;
324
+ }
325
+ for (const field of ["id", "name", "category", "model_tier"]) {
326
+ if (!fm[field]) {
327
+ errors.push(`agents/${entry.name}/body.md: missing required field "${field}"`);
328
+ }
329
+ }
330
+ }
331
+ }
332
+ // Validate skills
333
+ const skillsDir = join(ASSETS_DIR, "skills");
334
+ if (existsSync(skillsDir)) {
335
+ for (const entry of readdirSync(skillsDir, { withFileTypes: true })) {
336
+ if (!entry.isDirectory())
337
+ continue;
338
+ const bodyPath = join(skillsDir, entry.name, "body.md");
339
+ if (!existsSync(bodyPath)) {
340
+ errors.push(`skills/${entry.name}: missing body.md`);
341
+ continue;
342
+ }
343
+ checked++;
344
+ const raw = readFileSync(bodyPath, "utf-8");
345
+ const fm = parseFrontmatterRaw(raw);
346
+ if (!fm) {
347
+ errors.push(`skills/${entry.name}/body.md: missing or malformed frontmatter`);
348
+ continue;
349
+ }
350
+ for (const field of ["id", "name"]) {
351
+ if (!fm[field]) {
352
+ errors.push(`skills/${entry.name}/body.md: missing required field "${field}"`);
353
+ }
354
+ }
355
+ }
356
+ }
357
+ // Validate capability-matrix.yml
358
+ const capMatrixPath = join(ASSETS_DIR, "capability-matrix.yml");
359
+ if (!existsSync(capMatrixPath)) {
360
+ warnings.push(`capability-matrix.yml: not found at ${capMatrixPath}`);
361
+ }
362
+ else {
363
+ checked++;
364
+ try {
365
+ const parsed = parseYaml(readFileSync(capMatrixPath, "utf-8"));
366
+ if (!parsed?.capabilities) {
367
+ errors.push(`capability-matrix.yml: missing 'capabilities' top-level key`);
368
+ }
369
+ }
370
+ catch (err) {
371
+ errors.push(`capability-matrix.yml: YAML parse error — ${String(err)}`);
372
+ }
373
+ }
374
+ // Validate tools/tool-name-map.yml
375
+ const toolMapPath = join(ASSETS_DIR, "tools", "tool-name-map.yml");
376
+ if (!existsSync(toolMapPath)) {
377
+ warnings.push(`tool-name-map.yml: not found at ${toolMapPath}`);
378
+ }
379
+ else {
380
+ checked++;
381
+ try {
382
+ const parsed = parseYaml(readFileSync(toolMapPath, "utf-8"));
383
+ if (!parsed?.tools && !parsed?.invocations) {
384
+ warnings.push(`tool-name-map.yml: neither 'tools' nor 'invocations' top-level key found`);
385
+ }
386
+ }
387
+ catch (err) {
388
+ errors.push(`tool-name-map.yml: YAML parse error — ${String(err)}`);
389
+ }
390
+ }
391
+ return { ok: errors.length === 0, errors, warnings, checked };
392
+ }
393
+ export async function runValidate(argv) {
394
+ const flags = parseFlags(argv);
395
+ if (flags.help) {
396
+ console.log(HELP_VALIDATE);
397
+ return;
398
+ }
399
+ const result = runValidateSync();
400
+ console.log(`[nexus-core validate] Checked ${result.checked} assets`);
401
+ for (const w of result.warnings) {
402
+ process.stderr.write(` WARN ${w}\n`);
403
+ }
404
+ if (result.ok) {
405
+ console.log(` OK — no errors found`);
406
+ }
407
+ else {
408
+ for (const e of result.errors) {
409
+ process.stderr.write(` ERROR ${e}\n`);
410
+ }
411
+ process.stderr.write(`[nexus-core validate] ${result.errors.length} error(s) found\n`);
412
+ process.exit(1);
413
+ }
414
+ }
415
+ // ---------------------------------------------------------------------------
416
+ // Subcommand: mcp
417
+ // ---------------------------------------------------------------------------
418
+ export async function runMcp(argv) {
419
+ const flags = parseFlags(argv);
420
+ if (flags.help) {
421
+ console.log(HELP_MCP);
422
+ return;
423
+ }
424
+ // Forward to MCP server main()
425
+ const { main } = await import("../src/mcp/server.js");
426
+ await main();
427
+ }
428
+ // ---------------------------------------------------------------------------
429
+ // Main dispatcher
430
+ // ---------------------------------------------------------------------------
431
+ export async function main(argv) {
432
+ const cmd = argv[0];
433
+ const rest = argv.slice(1);
434
+ switch (cmd) {
435
+ case "sync":
436
+ return runSync(rest);
437
+ case "init":
438
+ return runInit(rest);
439
+ case "list":
440
+ return runList(rest);
441
+ case "validate":
442
+ return runValidate(rest);
443
+ case "mcp":
444
+ return runMcp(rest);
445
+ case "--help":
446
+ case "-h":
447
+ case undefined:
448
+ console.log(HELP_MAIN);
449
+ return;
450
+ default:
451
+ process.stderr.write(`[nexus-core] Unknown command: ${cmd}\n`);
452
+ process.stderr.write(`Run \`nexus-core --help\` for available commands.\n`);
453
+ process.exit(1);
454
+ }
455
+ }
456
+ // ---------------------------------------------------------------------------
457
+ // Direct execution
458
+ // ---------------------------------------------------------------------------
459
+ if (import.meta.url === `file://${process.argv[1]}` ||
460
+ process.argv[1]?.endsWith("cli.ts") ||
461
+ process.argv[1]?.endsWith("cli.js")) {
462
+ main(process.argv.slice(2)).catch((err) => {
463
+ process.stderr.write(`[nexus-core] FATAL: ${String(err)}\n`);
464
+ process.exit(1);
465
+ });
466
+ }
467
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../scripts/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAiB/C,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,MAAM,KAAK,GAAgB;QACzB,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,EAAE;KACd,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACtB,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;CAiBjB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,SAAS,GAAG;;;;;;;;;;;;;CAajB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,SAAS,GAAG;;;;;;;;;CASjB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,SAAS,GAAG;;;;;;;;;;CAUjB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,aAAa,GAAG;;;;;;;;;;;;;;CAcrB,CAAC,IAAI,EAAE,CAAC;AAET,MAAM,QAAQ,GAAG;;;;;;;CAOhB,CAAC,IAAI,EAAE,CAAC;AAET,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,uEAAuE;IACvE,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,OAAO;QAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,IAAI,KAAK,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,KAAK;QAAE,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM;QAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,IAAI;QAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAEtD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAErF,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,WAAW,CAAC,SAAS,CAAC,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO;IACT,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACxD,MAAM,UAAU,EAAE,CAAC;AACrB,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAEnE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6DAA6D,OAAO,MAAM;YACxE,oBAAoB,WAAW,IAAI;YACnC,0FAA0F,CAC7F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yDAAyD;IACzD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,sBAAsB,MAAM,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,8EAA8E;AAE9E,MAAM,cAAc,GAAG,oCAAoC,CAAC;AAE5D,SAAS,mBAAmB,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAA4B,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAYD,MAAM,UAAU,kBAAkB;IAChC,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,SAAS;IACT,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACpC,MAAM,EAAE,GAAG,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,OAAO,EAAE,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;aACvE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,SAAS;IACT,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACpC,MAAM,EAAE,GAAG,mBAAmB,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,OAAO,EAAE,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;aACvE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,QAAQ;IACR,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACpC,IAAI,WAAW,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAA4B,CAAC;gBACnF,WAAW,GAAG,OAAO,IAAI,EAAE,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAc;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAaD,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,kBAAkB;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC;gBACrD,SAAS;YACX,CAAC;YACD,OAAO,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,4CAA4C,CAAC,CAAC;gBAC9E,SAAS;YACX,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,CAAU,EAAE,CAAC;gBACtE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,qCAAqC,KAAK,GAAG,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;gBAAE,SAAS;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC;gBACrD,SAAS;YACX,CAAC;YACD,OAAO,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,4CAA4C,CAAC,CAAC;gBAC9E,SAAS;YACX,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,CAAC,IAAI,EAAE,MAAM,CAAU,EAAE,CAAC;gBAC5C,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,qCAAqC,KAAK,GAAG,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;IAChE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,uCAAuC,aAAa,EAAE,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAA4B,CAAC;YAC1F,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,6CAA6C,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,mCAAmC,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;QACV,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAA4B,CAAC;YACxF,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;gBAC3C,QAAQ,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,yCAAyC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,iCAAiC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;IAEtE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,MAAM,CAAC,MAAM,mBAAmB,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACtD,MAAM,IAAI,EAAE,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAc;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QAEvB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QAEvB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QAEvB,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAE3B,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QAEtB,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO;QAET;YACE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,GAAG,IAAI,CAAC,CAAC;YAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,IACE,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,EACnC,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * OpenCode plugin adapter — mounts nexus hooks into OpenCode's plugin API.
3
+ *
4
+ * 결정 참조: plan.json Issue #1 (3-레이어 책임 분담),
5
+ * Issue #3 (OpenCode 2단 처리 — SubagentStart/Stop, agent-tracker),
6
+ * Issue #6 (additional_context 주입 우회 — SubagentStop output.output append)
7
+ */
8
+ export interface OpenCodeHookManifestEntry {
9
+ name: string;
10
+ /** Nexus standard event names (PascalCase). */
11
+ events: string[];
12
+ /** Glob/regex pattern matched against tool_name or source. */
13
+ matcher: string;
14
+ /** Absolute path to the compiled handler .js shell wrapper. */
15
+ handlerPath: string;
16
+ priority: number;
17
+ /** Timeout in seconds; defaults to 30. */
18
+ timeout?: number;
19
+ }
20
+ export interface OpenCodeHookManifest {
21
+ hooks: OpenCodeHookManifestEntry[];
22
+ }
23
+ /**
24
+ * Mount nexus hooks into OpenCode's plugin API.
25
+ *
26
+ * Returns an object whose keys are OpenCode plugin hook names. Each value is
27
+ * the async handler function OpenCode calls when the corresponding event fires.
28
+ *
29
+ * @param pluginCtx OpenCode plugin context (must expose `.directory: string`)
30
+ * @param manifest Hook manifest produced by build-hooks.ts
31
+ */
32
+ export declare function mountHooks(pluginCtx: {
33
+ directory: string;
34
+ }, manifest: OpenCodeHookManifest): Record<string, (...args: unknown[]) => Promise<void>>;
35
+ //# sourceMappingURL=opencode-mount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-mount.d.ts","sourceRoot":"","sources":["../../../src/hooks/opencode-mount.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,yBAAyB,EAAE,CAAC;CACpC;AAuBD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAChC,QAAQ,EAAE,oBAAoB,GAC7B,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAoKvD"}