claude-nexus 0.28.1 → 0.28.2
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/VERSION +1 -1
- package/dist/hooks/agent-bootstrap.js +19 -3
- package/dist/hooks/agent-finalize.js +19 -3
- package/dist/hooks/prompt-router.js +39 -3
- package/dist/hooks/session-init.js +19 -3
- package/package.json +2 -2
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.28.
|
|
1
|
+
0.28.2
|
|
@@ -100,6 +100,22 @@ ${ruleContent}
|
|
|
100
100
|
`) };
|
|
101
101
|
};
|
|
102
102
|
var handler_default = handler;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
};
|
|
103
|
+
|
|
104
|
+
// ../../../../../tmp/nexus-hook-entry-agent-bootstrap-1776672660252/agent-bootstrap-entry.ts
|
|
105
|
+
import { readFileSync as readFileSync2 } from "node:fs";
|
|
106
|
+
async function main() {
|
|
107
|
+
let raw = "";
|
|
108
|
+
try {
|
|
109
|
+
raw = readFileSync2(0, "utf-8");
|
|
110
|
+
} catch {}
|
|
111
|
+
const input = raw ? JSON.parse(raw) : {};
|
|
112
|
+
const result = await handler_default(input);
|
|
113
|
+
if (result != null && result !== undefined) {
|
|
114
|
+
process.stdout.write(JSON.stringify(result));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
main().then(() => process.exit(0), (err) => {
|
|
118
|
+
process.stderr.write(String(err?.stack ?? err) + `
|
|
119
|
+
`);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
});
|
|
@@ -159,6 +159,22 @@ Subagent "${agent_type}" finished. Tasks still pending with this role: ${ids}. R
|
|
|
159
159
|
}
|
|
160
160
|
};
|
|
161
161
|
var handler_default = handler;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
};
|
|
162
|
+
|
|
163
|
+
// ../../../../../tmp/nexus-hook-entry-agent-finalize-1776672660245/agent-finalize-entry.ts
|
|
164
|
+
import { readFileSync as readFileSync2 } from "node:fs";
|
|
165
|
+
async function main() {
|
|
166
|
+
let raw = "";
|
|
167
|
+
try {
|
|
168
|
+
raw = readFileSync2(0, "utf-8");
|
|
169
|
+
} catch {}
|
|
170
|
+
const input = raw ? JSON.parse(raw) : {};
|
|
171
|
+
const result = await handler_default(input);
|
|
172
|
+
if (result != null && result !== undefined) {
|
|
173
|
+
process.stdout.write(JSON.stringify(result));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
main().then(() => process.exit(0), (err) => {
|
|
177
|
+
process.stderr.write(String(err?.stack ?? err) + `
|
|
178
|
+
`);
|
|
179
|
+
process.exit(1);
|
|
180
|
+
});
|
|
@@ -7141,6 +7141,11 @@ var _invocationsCache = null;
|
|
|
7141
7141
|
function loadInvocations() {
|
|
7142
7142
|
if (_invocationsCache)
|
|
7143
7143
|
return _invocationsCache;
|
|
7144
|
+
const inlined = globalThis.__NEXUS_INLINE_INVOCATIONS__;
|
|
7145
|
+
if (inlined) {
|
|
7146
|
+
_invocationsCache = inlined;
|
|
7147
|
+
return inlined;
|
|
7148
|
+
}
|
|
7144
7149
|
const selfDir = new URL(".", import.meta.url).pathname;
|
|
7145
7150
|
let dir = selfDir;
|
|
7146
7151
|
while (dir !== "/") {
|
|
@@ -7175,6 +7180,9 @@ function expand(template, harness) {
|
|
|
7175
7180
|
return expandInvocations(template, harness, loadInvocations());
|
|
7176
7181
|
}
|
|
7177
7182
|
function loadValidRuleTargets(cwd) {
|
|
7183
|
+
const inlined = globalThis.__NEXUS_INLINE_RULE_TARGETS__;
|
|
7184
|
+
if (inlined && inlined.length > 0)
|
|
7185
|
+
return inlined;
|
|
7178
7186
|
const targets = [];
|
|
7179
7187
|
for (const dir of ["assets/agents", "assets/skills"]) {
|
|
7180
7188
|
const absDir = join(cwd, dir);
|
|
@@ -7295,6 +7303,34 @@ var handler = async (input) => {
|
|
|
7295
7303
|
`) };
|
|
7296
7304
|
};
|
|
7297
7305
|
var handler_default = handler;
|
|
7298
|
-
|
|
7299
|
-
|
|
7300
|
-
};
|
|
7306
|
+
|
|
7307
|
+
// ../../../../../tmp/nexus-hook-entry-prompt-router-1776672660215/prompt-router-entry.ts
|
|
7308
|
+
import { readFileSync as readFileSync2 } from "node:fs";
|
|
7309
|
+
globalThis.__NEXUS_INLINE_INVOCATIONS__ = { subagent_spawn: { args: ["target_role", "prompt", "name"], templates: { claude: 'Agent({ subagent_type: "{target_role}", prompt: "{prompt}", description: "{name}" })', opencode: 'task({ subagent_type: "{target_role}", prompt: "{prompt}", description: "{name}" })', codex: 'spawn_agent("{target_role}", "{prompt}")' }, notes: { claude: `description field is optional; omit when name arg is absent. model field may be added to override the spawned agent's model.
|
|
7310
|
+
`, opencode: `description is required by OpenCode's Zod schema — use target_role as fallback when name is absent. task_id param enables session resume (§15).
|
|
7311
|
+
`, codex: `Agent role must be pre-registered in config.toml [agents.<target_role>]. No description equivalent in spawn_agent call signature.
|
|
7312
|
+
` } }, skill_activation: { args: ["skill", "mode"], templates: { claude: 'Skill({ command: "{skill}" })', opencode: 'skill({ name: "{skill}" })', codex: "${skill}" }, notes: { claude: "The Skill tool accepts only the `command` string; mode/args cannot be passed as a separate parameter. Mode must be embedded in the SKILL.md body via $ARGUMENTS placeholder substitution.\n", opencode: "The skill tool accepts only `name`; args passing is unconfirmed per source review. Design skills to be args-free or embed defaults in SKILL.md body.\n", codex: `Positional args: "$skill-name {mode}". Named args: "$skill-name MODE={mode}". Confirmed only for Custom Prompts; treat as best-effort for Skills. $ prefix is literal in composer input, not a tool call.
|
|
7313
|
+
` } }, task_register: { args: ["label", "state"], templates: { claude: 'TaskCreate({ subject: "{label}" }) then nx_task_update({ taskId, status: "{state}" })', opencode: 'nx_task_add({ subject: "{label}" }) then nx_task_update({ taskId, status: "{state}" })', codex: 'update_plan([{ name: "{label}", state: "{state}" }])' }, notes: { claude: `TaskCreate is a Claude Code native tool (not MCP). nx_task_update is the nexus-core MCP tool — full name mcp__plugin_claude-nexus_nx__nx_task_update. taskId is returned by TaskCreate and must be threaded to the update call.
|
|
7314
|
+
`, opencode: `Both nx_task_add and nx_task_update are nexus-core MCP tools exposed via the nexus MCP server. task_id returned by nx_task_add must be threaded to update.
|
|
7315
|
+
`, codex: `update_plan subsumes creation and update in a single call via plan/step/status fields. No separate create/update step is needed.
|
|
7316
|
+
` } }, user_question: { args: ["question", "options"], templates: { claude: 'AskUserQuestion({ questions: [{ question: "{question}", options: {options} }] })', opencode: 'question({ question: "{question}", choices: {options} })', codex: 'request_user_input({ prompt: "{question}", options: {options} })' }, notes: { claude: `options is a JSON array of strings. Omit the options field (not an empty array) for free-text responses. Multiple questions can be batched in the questions[] array.
|
|
7317
|
+
`, opencode: `choices field name (not options). Omit choices for free-text input.
|
|
7318
|
+
`, codex: `Exact request_user_input schema (options field name, types) is not fully documented — treat as best-effort. Verified as a native Codex tool in external-codex-hooks-tools.md §7-4.
|
|
7319
|
+
` } } };
|
|
7320
|
+
globalThis.__NEXUS_INLINE_RULE_TARGETS__ = ["architect", "designer", "engineer", "reviewer", "strategist", "researcher", "postdoc", "lead", "tester", "writer", "nx-run", "nx-init", "nx-sync", "nx-plan"];
|
|
7321
|
+
async function main() {
|
|
7322
|
+
let raw = "";
|
|
7323
|
+
try {
|
|
7324
|
+
raw = readFileSync2(0, "utf-8");
|
|
7325
|
+
} catch {}
|
|
7326
|
+
const input = raw ? JSON.parse(raw) : {};
|
|
7327
|
+
const result = await handler_default(input);
|
|
7328
|
+
if (result != null && result !== undefined) {
|
|
7329
|
+
process.stdout.write(JSON.stringify(result));
|
|
7330
|
+
}
|
|
7331
|
+
}
|
|
7332
|
+
main().then(() => process.exit(0), (err) => {
|
|
7333
|
+
process.stderr.write(String(err?.stack ?? err) + `
|
|
7334
|
+
`);
|
|
7335
|
+
process.exit(1);
|
|
7336
|
+
});
|
|
@@ -16,6 +16,22 @@ var handler = async (input) => {
|
|
|
16
16
|
writeFileSync(join(sessionDir, "tool-log.jsonl"), "");
|
|
17
17
|
};
|
|
18
18
|
var handler_default = handler;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
19
|
+
|
|
20
|
+
// ../../../../../tmp/nexus-hook-entry-session-init-1776672660208/session-init-entry.ts
|
|
21
|
+
import { readFileSync } from "node:fs";
|
|
22
|
+
async function main() {
|
|
23
|
+
let raw = "";
|
|
24
|
+
try {
|
|
25
|
+
raw = readFileSync(0, "utf-8");
|
|
26
|
+
} catch {}
|
|
27
|
+
const input = raw ? JSON.parse(raw) : {};
|
|
28
|
+
const result = await handler_default(input);
|
|
29
|
+
if (result != null && result !== undefined) {
|
|
30
|
+
process.stdout.write(JSON.stringify(result));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
main().then(() => process.exit(0), (err) => {
|
|
34
|
+
process.stderr.write(String(err?.stack ?? err) + `
|
|
35
|
+
`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-nexus",
|
|
3
|
-
"version": "0.28.
|
|
3
|
+
"version": "0.28.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agent orchestration plugin for Claude Code — optimized context injection per role",
|
|
6
6
|
"author": "kih",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"VERSION"
|
|
37
37
|
],
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@moreih29/nexus-core": "^0.
|
|
39
|
+
"@moreih29/nexus-core": "^0.16.1"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {}
|
|
42
42
|
}
|