@chorus-aidlc/chorus-openclaw-plugin 0.17.2 → 0.18.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.
- package/README.md +3 -2
- package/bin/resolve-spec-mode.sh +107 -0
- package/dist/commands.d.ts +2 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +49 -7
- package/dist/commands.js.map +1 -1
- package/dist/event-router.d.ts +16 -5
- package/dist/event-router.d.ts.map +1 -1
- package/dist/event-router.js +33 -6
- package/dist/event-router.js.map +1 -1
- package/dist/spec-mode.d.ts +81 -0
- package/dist/spec-mode.d.ts.map +1 -0
- package/dist/spec-mode.js +153 -0
- package/dist/spec-mode.js.map +1 -0
- package/package.json +2 -1
- package/skills/brainstorm/SKILL.md +1 -1
- package/skills/chorus/SKILL.md +9 -6
- package/skills/chorus-cli/SKILL.md +1 -1
- package/skills/code-reviewer/SKILL.md +2 -1
- package/skills/develop/SKILL.md +11 -9
- package/skills/docs/SKILL.md +1 -1
- package/skills/idea/SKILL.md +1 -1
- package/skills/openspec-aware/SKILL.md +46 -34
- package/skills/orchestrate/SKILL.md +9 -1
- package/skills/proposal/SKILL.md +13 -10
- package/skills/proposal-reviewer/SKILL.md +4 -2
- package/skills/quick-dev/SKILL.md +3 -3
- package/skills/review/SKILL.md +5 -5
- package/skills/spec-lite/SKILL.md +159 -0
- package/skills/task-reviewer/SKILL.md +5 -1
- package/skills/yolo/SKILL.md +37 -22
- package/src/commands.ts +58 -7
- package/src/event-router.ts +43 -6
- package/src/spec-mode.ts +208 -0
package/README.md
CHANGED
|
@@ -191,7 +191,8 @@ Skills are bundled under `skills/` and auto-discovered by OpenClaw. On OpenClaw
|
|
|
191
191
|
| `quick-dev` | `/quick-dev` | Skip Idea→Proposal — create tasks directly, execute, and verify |
|
|
192
192
|
| `review` | `/review` | Approve/reject proposals, verify tasks, and manage project governance |
|
|
193
193
|
| `yolo` | `/yolo` | Full-auto AI-DLC pipeline — from prompt to done |
|
|
194
|
-
| `openspec-aware` | `/openspec-aware` |
|
|
194
|
+
| `openspec-aware` | `/openspec-aware` | OpenSpec-mode authoring for PM workflows — the default whenever OpenSpec is usable (`openspec/` + CLI present, not disabled) |
|
|
195
|
+
| `spec-lite` | `/spec-lite` | Chorus-native lightweight local specs (`.chorus/specs/<slug>/`) — the fallback when OpenSpec isn't usable |
|
|
195
196
|
| `proposal-reviewer` | `/proposal-reviewer` | Read-only adversarial proposal review; ends with a `VERDICT:` comment |
|
|
196
197
|
| `task-reviewer` | `/task-reviewer` | Read-only adversarial task verification (read-only bash for tests); ends with a `VERDICT:` comment |
|
|
197
198
|
|
|
@@ -205,7 +206,7 @@ They are meant to run inside a **spawned sub-agent**: the orchestrating skill (`
|
|
|
205
206
|
|
|
206
207
|
| Skill | Description |
|
|
207
208
|
|-------|-------------|
|
|
208
|
-
| `/proposal-reviewer` | Reviews submitted proposals — document completeness, task granularity, AC alignment, cross-task dependencies.
|
|
209
|
+
| `/proposal-reviewer` | Reviews submitted proposals — document completeness, task granularity, AC alignment, cross-task dependencies. Read-only Bash allowed for inspection only (`cat`/`grep`/`ls`/`find`, `git ls-files`/`log`/`show`/`diff`) — no file writes, git write ops, installs, or test/build runs. |
|
|
209
210
|
| `/task-reviewer` | Verifies submitted tasks against the AC and proposal documents. Read-only Bash allowed for verification only (tests/build, `cat`/`grep`/`ls`, `git diff`/`log`/`show`). |
|
|
210
211
|
|
|
211
212
|
---
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# resolve-spec-mode.sh — resolve the active Chorus spec mode for a repo.
|
|
3
|
+
#
|
|
4
|
+
# Pure (env + filesystem only; no network). Sourced by on-session-start.sh and
|
|
5
|
+
# driven directly by tests/test-spec-mode-resolution.sh. Bash 3.2 compatible.
|
|
6
|
+
#
|
|
7
|
+
# Inputs (env):
|
|
8
|
+
# CHORUS_SPEC_MODE explicit override: lite | openspec | off (else unset)
|
|
9
|
+
# CHORUS_OPENSPEC_MODE legacy opt-out: "off" disables OpenSpec
|
|
10
|
+
# CLAUDE_PLUGIN_OPTION_ENABLEOPENSPEC plugin toggle: "false" disables OpenSpec (default "true")
|
|
11
|
+
# PROJECT_ROOT repo root to probe for openspec/ (defaults to $PWD)
|
|
12
|
+
# command -v openspec OpenSpec CLI presence on PATH
|
|
13
|
+
#
|
|
14
|
+
# Outputs (vars set in the caller's shell when sourced):
|
|
15
|
+
# SPEC_MODE lite | openspec | off (value surfaced to Claude)
|
|
16
|
+
# SPEC_REASON human-readable one-liner
|
|
17
|
+
# SPEC_FAIL non-empty => stage skill MUST halt (unsatisfiable explicit openspec)
|
|
18
|
+
# OPENSPEC_USABLE 1 | 0
|
|
19
|
+
# OPENSPEC_USABLE_REASON human-readable
|
|
20
|
+
# OPENSPEC_HINT install hint when OpenSpec is merely missing (else empty)
|
|
21
|
+
# CHORUS_OPENSPEC_ACTIVE 1 only when the resolved mode is a USABLE openspec
|
|
22
|
+
#
|
|
23
|
+
# Resolution (per owner): an explicit CHORUS_SPEC_MODE wins; when UNSET, OpenSpec
|
|
24
|
+
# stays the default whenever it is usable (openspec/ dir + CLI, not disabled), and
|
|
25
|
+
# lite is the fallback only when OpenSpec is absent or disabled.
|
|
26
|
+
|
|
27
|
+
: "${PROJECT_ROOT:=$PWD}"
|
|
28
|
+
|
|
29
|
+
# --- Is OpenSpec usable? (needs openspec/ dir + CLI on PATH + not disabled) ---
|
|
30
|
+
OPENSPEC_DISABLED=0
|
|
31
|
+
OPENSPEC_DISABLED_REASON=""
|
|
32
|
+
if [ "${CLAUDE_PLUGIN_OPTION_ENABLEOPENSPEC:-true}" != "true" ]; then
|
|
33
|
+
OPENSPEC_DISABLED=1
|
|
34
|
+
OPENSPEC_DISABLED_REASON="enableOpenSpec userConfig=false (plugin-level opt-out)"
|
|
35
|
+
elif [ "${CHORUS_OPENSPEC_MODE:-}" = "off" ]; then
|
|
36
|
+
OPENSPEC_DISABLED=1
|
|
37
|
+
OPENSPEC_DISABLED_REASON="CHORUS_OPENSPEC_MODE=off (legacy opt-out)"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
OPENSPEC_USABLE=0
|
|
41
|
+
OPENSPEC_USABLE_REASON=""
|
|
42
|
+
OPENSPEC_HINT=""
|
|
43
|
+
if [ "$OPENSPEC_DISABLED" = "1" ]; then
|
|
44
|
+
OPENSPEC_USABLE_REASON="$OPENSPEC_DISABLED_REASON"
|
|
45
|
+
elif [ ! -d "${PROJECT_ROOT}/openspec" ]; then
|
|
46
|
+
OPENSPEC_USABLE_REASON="no openspec/ directory at ${PROJECT_ROOT}/openspec"
|
|
47
|
+
OPENSPEC_HINT="npm i -g @fission-ai/openspec && openspec init"
|
|
48
|
+
elif ! command -v openspec >/dev/null 2>&1; then
|
|
49
|
+
OPENSPEC_USABLE_REASON="openspec/ directory present but \`openspec\` CLI not on PATH"
|
|
50
|
+
OPENSPEC_HINT="npm i -g @fission-ai/openspec"
|
|
51
|
+
else
|
|
52
|
+
OPENSPEC_USABLE=1
|
|
53
|
+
OPENSPEC_USABLE_REASON="openspec/ directory + openspec CLI both present"
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
# --- Resolve CHORUS_SPEC_MODE ---
|
|
57
|
+
SPEC_FAIL=""
|
|
58
|
+
case "${CHORUS_SPEC_MODE:-}" in
|
|
59
|
+
lite)
|
|
60
|
+
SPEC_MODE="lite"
|
|
61
|
+
SPEC_REASON="explicit — Chorus-native lightweight specs in .chorus/specs/<slug>/"
|
|
62
|
+
;;
|
|
63
|
+
off)
|
|
64
|
+
SPEC_MODE="off"
|
|
65
|
+
SPEC_REASON="explicit — free-form, no spec artifact"
|
|
66
|
+
;;
|
|
67
|
+
openspec)
|
|
68
|
+
SPEC_MODE="openspec"
|
|
69
|
+
if [ "$OPENSPEC_USABLE" = "1" ]; then
|
|
70
|
+
SPEC_REASON="explicit; ${OPENSPEC_USABLE_REASON}"
|
|
71
|
+
elif [ "$OPENSPEC_DISABLED" = "1" ]; then
|
|
72
|
+
SPEC_REASON="explicit, but OpenSpec is disabled: ${OPENSPEC_USABLE_REASON}"
|
|
73
|
+
SPEC_FAIL="config conflict — CHORUS_SPEC_MODE=openspec vs OpenSpec disabled (${OPENSPEC_USABLE_REASON}); re-enable OpenSpec or set CHORUS_SPEC_MODE=lite"
|
|
74
|
+
else
|
|
75
|
+
SPEC_REASON="explicit, but OpenSpec is not installed: ${OPENSPEC_USABLE_REASON}"
|
|
76
|
+
SPEC_FAIL="OpenSpec not usable (${OPENSPEC_USABLE_REASON})"
|
|
77
|
+
fi
|
|
78
|
+
;;
|
|
79
|
+
"")
|
|
80
|
+
# Unset: OpenSpec is the default when usable; lite is the fallback otherwise.
|
|
81
|
+
if [ "$OPENSPEC_USABLE" = "1" ]; then
|
|
82
|
+
SPEC_MODE="openspec"
|
|
83
|
+
SPEC_REASON="default — ${OPENSPEC_USABLE_REASON}; set CHORUS_SPEC_MODE=lite for Chorus-native specs, =off to disable"
|
|
84
|
+
else
|
|
85
|
+
SPEC_MODE="lite"
|
|
86
|
+
SPEC_REASON="default — OpenSpec not usable (${OPENSPEC_USABLE_REASON}); using Chorus-native lightweight specs in .chorus/specs/<slug>/"
|
|
87
|
+
fi
|
|
88
|
+
;;
|
|
89
|
+
*)
|
|
90
|
+
# Unrecognized value: treat like unset (OpenSpec-if-usable, else lite).
|
|
91
|
+
if [ "$OPENSPEC_USABLE" = "1" ]; then
|
|
92
|
+
SPEC_MODE="openspec"
|
|
93
|
+
SPEC_REASON="CHORUS_SPEC_MODE='${CHORUS_SPEC_MODE}' unrecognized; falling back to default (${OPENSPEC_USABLE_REASON})"
|
|
94
|
+
else
|
|
95
|
+
SPEC_MODE="lite"
|
|
96
|
+
SPEC_REASON="CHORUS_SPEC_MODE='${CHORUS_SPEC_MODE}' unrecognized; OpenSpec not usable, defaulting to lite"
|
|
97
|
+
fi
|
|
98
|
+
;;
|
|
99
|
+
esac
|
|
100
|
+
|
|
101
|
+
# Back-compat flag for the openspec-aware skill: active only when the resolved
|
|
102
|
+
# mode is a USABLE openspec.
|
|
103
|
+
if [ "$SPEC_MODE" = "openspec" ] && [ -z "$SPEC_FAIL" ]; then
|
|
104
|
+
CHORUS_OPENSPEC_ACTIVE=1
|
|
105
|
+
else
|
|
106
|
+
CHORUS_OPENSPEC_ACTIVE=0
|
|
107
|
+
fi
|
package/dist/commands.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ChorusMcpClient } from "./mcp-client.js";
|
|
2
|
+
import { type SpecModeResult } from "./spec-mode.js";
|
|
2
3
|
export declare function registerChorusCommands(api: {
|
|
3
4
|
registerCommand: (command: unknown) => void;
|
|
4
|
-
}, mcpClient: ChorusMcpClient, getStatus: () => string): void;
|
|
5
|
+
}, mcpClient: ChorusMcpClient, getStatus: () => string, resolveSpec?: () => SpecModeResult): void;
|
|
5
6
|
//# sourceMappingURL=commands.d.ts.map
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyN7E,wBAAgB,sBAAsB,CACpC,GAAG,EAAE;IAAE,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,EACpD,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,MAAM,MAAM,EACvB,WAAW,GAAE,MAAM,cAAmC,GACrD,IAAI,CA0DN"}
|
package/dist/commands.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { resolveSpecModeFromEnv } from "./spec-mode.js";
|
|
1
2
|
// ===== Skill catalog =====
|
|
2
3
|
//
|
|
3
|
-
// All
|
|
4
|
+
// All 11 skills bundled with the Chorus OpenClaw plugin
|
|
4
5
|
// (packages/openclaw-plugin/skills/*/SKILL.md). The `name` here matches each
|
|
5
6
|
// skill's SKILL.md frontmatter `name`, which is exactly the slash command
|
|
6
7
|
// OpenClaw exposes (see invocation hint below).
|
|
@@ -13,7 +14,8 @@ const PLUGIN_SKILLS = [
|
|
|
13
14
|
{ name: "quick-dev", description: "Skip Idea→Proposal — create tasks directly, execute, verify" },
|
|
14
15
|
{ name: "review", description: "Approve/reject proposals, verify tasks, project governance" },
|
|
15
16
|
{ name: "yolo", description: "Full-auto AI-DLC pipeline — from prompt to done" },
|
|
16
|
-
{ name: "openspec-aware", description: "
|
|
17
|
+
{ name: "openspec-aware", description: "OpenSpec-mode authoring for PM workflows (the default when openspec/ + CLI present)" },
|
|
18
|
+
{ name: "spec-lite", description: "Chorus-native lightweight local specs (.chorus/specs/<slug>/) — the fallback when OpenSpec isn't usable" },
|
|
17
19
|
{ name: "chorus-cli", description: "Install, configure agents (chorus agents add|remove|list), env vars, and chorus mcp operations" },
|
|
18
20
|
];
|
|
19
21
|
// ===== Formatting helpers =====
|
|
@@ -35,7 +37,23 @@ function formatSkillsList() {
|
|
|
35
37
|
"Invoke a skill with its slash command, e.g. /develop or /idea.",
|
|
36
38
|
].join("\n");
|
|
37
39
|
}
|
|
38
|
-
|
|
40
|
+
// Spec-mode lines for the status block. Since OpenClaw has no SessionStart hook
|
|
41
|
+
// to precompute the mode, `/chorus` is the resolver's real runtime caller and the
|
|
42
|
+
// user-visible surface: it prints `CHORUS_SPEC_MODE=<mode> (<reason>)`, the
|
|
43
|
+
// `CHORUS_OPENSPEC_ACTIVE=1` line only for a usable OpenSpec, and a halt warning
|
|
44
|
+
// when an explicit `=openspec` cannot be honored. The stage skills resolve the
|
|
45
|
+
// SAME contract inline (see src/spec-mode.ts — the single source of truth).
|
|
46
|
+
function specModeLines(spec) {
|
|
47
|
+
const lines = [`CHORUS_SPEC_MODE=${spec.specMode} (${spec.specReason})`];
|
|
48
|
+
if (spec.chorusOpenspecActive) {
|
|
49
|
+
lines.push(`CHORUS_OPENSPEC_ACTIVE=1 (${spec.openspecUsableReason})`);
|
|
50
|
+
}
|
|
51
|
+
if (spec.specFail) {
|
|
52
|
+
lines.push(`WARNING: spec-mode halt — ${spec.specFail}`);
|
|
53
|
+
}
|
|
54
|
+
return lines;
|
|
55
|
+
}
|
|
56
|
+
function formatStatus(checkin, connectionStatus, spec) {
|
|
39
57
|
const projects = Object.values(checkin?.activeProjects ?? {});
|
|
40
58
|
const activeIdeaTotal = projects.reduce((total, p) => total + (p.activeIdeaCount ?? 0), 0);
|
|
41
59
|
const lines = [
|
|
@@ -44,10 +62,24 @@ function formatStatus(checkin, connectionStatus) {
|
|
|
44
62
|
`Active projects: ${projects.length} (${activeIdeaTotal} active idea(s))`,
|
|
45
63
|
...projects.map((p) => ` - ${p.name ?? "(unnamed)"}: ${p.activeIdeaCount ?? 0}`),
|
|
46
64
|
`Notifications: ${checkin?.notifications?.unread ?? 0} unread`,
|
|
65
|
+
...specModeLines(spec),
|
|
47
66
|
`Skills: ${PLUGIN_SKILLS.map((s) => s.name).join(", ")}`,
|
|
48
67
|
];
|
|
49
68
|
return lines.join("\n");
|
|
50
69
|
}
|
|
70
|
+
// Detailed spec-mode view for `/chorus spec` — the mode + reason, the openspec
|
|
71
|
+
// usability breakdown, and the install hint when OpenSpec is merely missing.
|
|
72
|
+
function formatSpec(spec) {
|
|
73
|
+
const lines = [
|
|
74
|
+
"Spec mode (resolved inline — OpenClaw has no SessionStart hook):",
|
|
75
|
+
...specModeLines(spec).map((l) => ` ${l}`),
|
|
76
|
+
` OpenSpec usable: ${spec.openspecUsable ? "yes" : "no"} (${spec.openspecUsableReason})`,
|
|
77
|
+
];
|
|
78
|
+
if (spec.openspecHint) {
|
|
79
|
+
lines.push(` Enable OpenSpec: ${spec.openspecHint}`);
|
|
80
|
+
}
|
|
81
|
+
return lines.join("\n");
|
|
82
|
+
}
|
|
51
83
|
function formatTaskList(taskTracker) {
|
|
52
84
|
const lines = [];
|
|
53
85
|
let total = 0;
|
|
@@ -83,6 +115,7 @@ const HELP_TEXT = [
|
|
|
83
115
|
"Chorus commands:",
|
|
84
116
|
" /chorus Show connection status and summary",
|
|
85
117
|
" /chorus status Same as above",
|
|
118
|
+
" /chorus spec Show the resolved spec mode (OpenSpec / spec-lite / off)",
|
|
86
119
|
" /chorus tasks List assigned tasks",
|
|
87
120
|
" /chorus ideas List assigned ideas",
|
|
88
121
|
" /chorus skills List available Chorus skills",
|
|
@@ -92,23 +125,32 @@ function errorText(prefix, err) {
|
|
|
92
125
|
return `${prefix}: ${detail}`;
|
|
93
126
|
}
|
|
94
127
|
// ===== Registration =====
|
|
95
|
-
|
|
128
|
+
// Default spec-mode resolver: wires the real env + cwd. Injectable so the
|
|
129
|
+
// command test can pass a deterministic result without touching the disk/PATH.
|
|
130
|
+
function defaultResolveSpec() {
|
|
131
|
+
return resolveSpecModeFromEnv(process.env, process.cwd());
|
|
132
|
+
}
|
|
133
|
+
export function registerChorusCommands(api, mcpClient, getStatus, resolveSpec = defaultResolveSpec) {
|
|
96
134
|
api.registerCommand({
|
|
97
135
|
name: "chorus",
|
|
98
|
-
description: "Chorus plugin commands: status, tasks, ideas, skills",
|
|
136
|
+
description: "Chorus plugin commands: status, spec, tasks, ideas, skills",
|
|
99
137
|
acceptsArgs: true,
|
|
100
138
|
async handler(ctx) {
|
|
101
139
|
const sub = (ctx.args ?? "").trim().toLowerCase();
|
|
102
|
-
// /chorus or /chorus status — connection + checkin
|
|
140
|
+
// /chorus or /chorus status — connection + checkin + spec-mode summary.
|
|
103
141
|
if (!sub || sub === "status") {
|
|
104
142
|
try {
|
|
105
143
|
const checkin = (await mcpClient.callTool("chorus_checkin", {}));
|
|
106
|
-
return { text: formatStatus(checkin, getStatus()) };
|
|
144
|
+
return { text: formatStatus(checkin, getStatus(), resolveSpec()) };
|
|
107
145
|
}
|
|
108
146
|
catch (err) {
|
|
109
147
|
return { text: errorText("Failed to check in", err), isError: true };
|
|
110
148
|
}
|
|
111
149
|
}
|
|
150
|
+
// /chorus spec — the resolved spec mode (the resolver's user-visible surface).
|
|
151
|
+
if (sub === "spec") {
|
|
152
|
+
return { text: formatSpec(resolveSpec()) };
|
|
153
|
+
}
|
|
112
154
|
// /chorus tasks — assigned tasks via chorus_get_my_assignments.
|
|
113
155
|
if (sub === "tasks") {
|
|
114
156
|
try {
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/event-router.d.ts
CHANGED
|
@@ -75,11 +75,22 @@ export declare class ChorusEventRouter {
|
|
|
75
75
|
*/
|
|
76
76
|
private buildOrchestratorGuidance;
|
|
77
77
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
78
|
+
* Waker-session advisory for a wake — the OpenClaw twin of the daemon's
|
|
79
|
+
* wakerSessionGuidance in cli/prompts.mjs. KEEP THE TWO WORDINGS IN SYNC. Returns null
|
|
80
|
+
* unless the notification carries a `wakerSession` anchor (surfaced by the server only when
|
|
81
|
+
* the waking agent has a live, ONLINE-origin session for this resource's idea). It tells the
|
|
82
|
+
* woken peer that replying on this resource reaches the waker's existing live session — an
|
|
83
|
+
* ADVISORY only, not an enforced server route. A SIBLING of buildOrchestratorGuidance:
|
|
84
|
+
* independent, so either/both/neither may render on one wake.
|
|
85
|
+
*/
|
|
86
|
+
private buildWakerSessionGuidance;
|
|
87
|
+
/**
|
|
88
|
+
* Append orchestrator-handoff guidance (when the resource has an agent orchestrator) and the
|
|
89
|
+
* waker-session advisory (when the wake carries an online waker anchor) to a wake message and
|
|
90
|
+
* dispatch it. Every handler routes its wake through this so both instructions ride EVERY
|
|
91
|
+
* action — parity with the daemon, which appends orchestratorGuidance + wakerSessionGuidance
|
|
92
|
+
* in buildPrompt (cli/prompts.mjs). The two blocks are independent: either, both, or neither
|
|
93
|
+
* may append; with neither the message is dispatched unchanged.
|
|
83
94
|
*/
|
|
84
95
|
private wakeWithHandoff;
|
|
85
96
|
private handleTaskAssigned;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-router.d.ts","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,eAAe,KAC1B,IAAI,CAAC;AAEV,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CACpG;
|
|
1
|
+
{"version":3,"file":"event-router.d.ts","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,eAAe,KAC1B,IAAI,CAAC;AAEV,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,eAAe,CAAC;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CACpG;AAqCD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAEhD,IAAI,EAAE,wBAAwB;IAO1C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAgC3C;;;;OAIG;IACH,OAAO,CAAC,aAAa;YAIP,aAAa;IA8F3B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;;;;;;;OAQG;IACH,OAAO,CAAC,yBAAyB;IAajC;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,0BAA0B;IASlC,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,sBAAsB;IAc9B;;;;;;;;OAQG;IACH,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,yBAAyB;IAgBjC;;;;;;OAMG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;CAgB5B"}
|
package/dist/event-router.js
CHANGED
|
@@ -164,15 +164,42 @@ export class ChorusEventRouter {
|
|
|
164
164
|
`orchestrator for ordinary internal progress.`);
|
|
165
165
|
}
|
|
166
166
|
/**
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
167
|
+
* Waker-session advisory for a wake — the OpenClaw twin of the daemon's
|
|
168
|
+
* wakerSessionGuidance in cli/prompts.mjs. KEEP THE TWO WORDINGS IN SYNC. Returns null
|
|
169
|
+
* unless the notification carries a `wakerSession` anchor (surfaced by the server only when
|
|
170
|
+
* the waking agent has a live, ONLINE-origin session for this resource's idea). It tells the
|
|
171
|
+
* woken peer that replying on this resource reaches the waker's existing live session — an
|
|
172
|
+
* ADVISORY only, not an enforced server route. A SIBLING of buildOrchestratorGuidance:
|
|
173
|
+
* independent, so either/both/neither may render on one wake.
|
|
174
|
+
*/
|
|
175
|
+
buildWakerSessionGuidance(n) {
|
|
176
|
+
if (!n.wakerSession)
|
|
177
|
+
return null;
|
|
178
|
+
const { agentName, agentUuid } = n.wakerSession;
|
|
179
|
+
return (`@[${agentName}](agent:${agentUuid}) woke you and has a live session open on this ` +
|
|
180
|
+
`resource. If you reply by commenting on this same resource, your reply reaches that ` +
|
|
181
|
+
`agent's live session, keeping the exchange on one thread. This is advisory, not an ` +
|
|
182
|
+
`enforced server route — there is no automatic subscription and nothing is force-delivered; ` +
|
|
183
|
+
`replying here is simply where a reply lands via the normal return path. Prefer replying ` +
|
|
184
|
+
`on this resource over opening a new session.`);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Append orchestrator-handoff guidance (when the resource has an agent orchestrator) and the
|
|
188
|
+
* waker-session advisory (when the wake carries an online waker anchor) to a wake message and
|
|
189
|
+
* dispatch it. Every handler routes its wake through this so both instructions ride EVERY
|
|
190
|
+
* action — parity with the daemon, which appends orchestratorGuidance + wakerSessionGuidance
|
|
191
|
+
* in buildPrompt (cli/prompts.mjs). The two blocks are independent: either, both, or neither
|
|
192
|
+
* may append; with neither the message is dispatched unchanged.
|
|
172
193
|
*/
|
|
173
194
|
wakeWithHandoff(message, contextKey, n, attr) {
|
|
174
195
|
const handoff = this.buildOrchestratorGuidance(n);
|
|
175
|
-
this.
|
|
196
|
+
const anchor = this.buildWakerSessionGuidance(n);
|
|
197
|
+
let msg = message;
|
|
198
|
+
if (handoff)
|
|
199
|
+
msg += `\n\n${handoff}`;
|
|
200
|
+
if (anchor)
|
|
201
|
+
msg += `\n\n${anchor}`;
|
|
202
|
+
this.wake(msg, contextKey, attr);
|
|
176
203
|
}
|
|
177
204
|
handleTaskAssigned(n, attr) {
|
|
178
205
|
const mentionGuidance = this.buildMentionGuidance(n, "task");
|
package/dist/event-router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-router.js","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"event-router.js","sourceRoot":"","sources":["../src/event-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spec-mode resolver for the Chorus OpenClaw plugin.
|
|
3
|
+
*
|
|
4
|
+
* This is the TypeScript reimplementation of the canonical bash resolver
|
|
5
|
+
* `public/chorus-plugin/bin/resolve-spec-mode.sh` (which the bash ports copy
|
|
6
|
+
* byte-identically; the TS ports reimplement + ship a same-contract test). It
|
|
7
|
+
* mirrors the chorus-pi port's `resolveSpecMode` in
|
|
8
|
+
* `packages/chorus-pi/lib/lib.ts` and is the **single source of truth** for the
|
|
9
|
+
* spec mode on OpenClaw.
|
|
10
|
+
*
|
|
11
|
+
* OpenClaw has no SessionStart hook and no per-session context-injection
|
|
12
|
+
* channel, so nothing precomputes the mode into the agent's context. Instead:
|
|
13
|
+
* - the `/chorus` command calls `resolveSpecModeFromEnv` so the resolved mode
|
|
14
|
+
* is a user-visible surface (its one real runtime caller), and
|
|
15
|
+
* - the stage skills (proposal / develop / yolo / openspec-aware) resolve the
|
|
16
|
+
* SAME contract inline, pointing back at this file as the authoritative rule.
|
|
17
|
+
*
|
|
18
|
+
* `resolveSpecMode` itself is pure given injectable fs + execSync, so it can be
|
|
19
|
+
* unit-tested without touching the disk or PATH.
|
|
20
|
+
*/
|
|
21
|
+
/** Minimal fs surface needed by the resolver (injectable for tests). */
|
|
22
|
+
export interface FsLike {
|
|
23
|
+
existsSync(p: string): boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Minimal execSync surface — used only to probe `command -v openspec`. */
|
|
26
|
+
export type ExecSync = (cmd: string, opts: {
|
|
27
|
+
stdio: "ignore";
|
|
28
|
+
}) => void;
|
|
29
|
+
/**
|
|
30
|
+
* The resolved spec mode surfaced to the agent. `openspec` = the OpenSpec
|
|
31
|
+
* (openspec-aware) path; `lite` = Chorus-native lightweight specs
|
|
32
|
+
* (`.chorus/specs/<slug>/`); `off` = free-form, no spec artifact.
|
|
33
|
+
*/
|
|
34
|
+
export type SpecMode = "lite" | "openspec" | "off";
|
|
35
|
+
/**
|
|
36
|
+
* Inputs to the spec-mode resolver (env values + repo root). Mirrors the
|
|
37
|
+
* canonical bash resolver `public/chorus-plugin/bin/resolve-spec-mode.sh`.
|
|
38
|
+
*/
|
|
39
|
+
export interface SpecModeInputs {
|
|
40
|
+
/** CHORUS_SPEC_MODE — explicit override: "lite" | "openspec" | "off" (else unset/""). */
|
|
41
|
+
specMode?: string;
|
|
42
|
+
/** CHORUS_OPENSPEC_MODE — legacy opt-out: "off" disables OpenSpec. */
|
|
43
|
+
openspecMode?: string;
|
|
44
|
+
/** CLAUDE_PLUGIN_OPTION_ENABLEOPENSPEC — plugin toggle: "false" disables OpenSpec (default "true"). */
|
|
45
|
+
enableOpenSpec?: string;
|
|
46
|
+
/** Repo root to probe for openspec/. */
|
|
47
|
+
projectRoot: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolved spec mode for a repo — the TS mirror of the bash resolver's output
|
|
51
|
+
* vars. `specFail` non-empty ⇒ a stage skill MUST halt (an explicit
|
|
52
|
+
* `CHORUS_SPEC_MODE=openspec` that cannot be honored); `chorusOpenspecActive`
|
|
53
|
+
* is true only when the resolved mode is a USABLE openspec.
|
|
54
|
+
*/
|
|
55
|
+
export interface SpecModeResult {
|
|
56
|
+
specMode: SpecMode;
|
|
57
|
+
specReason: string;
|
|
58
|
+
specFail: string;
|
|
59
|
+
openspecUsable: boolean;
|
|
60
|
+
openspecUsableReason: string;
|
|
61
|
+
openspecHint: string;
|
|
62
|
+
chorusOpenspecActive: boolean;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Resolve the active Chorus spec mode for a repo. Pure given injectable fs +
|
|
66
|
+
* execSync.
|
|
67
|
+
*
|
|
68
|
+
* Rule (per owner): an explicit `CHORUS_SPEC_MODE` wins; when unset, OpenSpec
|
|
69
|
+
* stays the default whenever it is usable (openspec/ dir + CLI, not disabled),
|
|
70
|
+
* and lite is the fallback only when OpenSpec is absent or disabled. An explicit
|
|
71
|
+
* `=openspec` that isn't usable fails fast (`specFail`).
|
|
72
|
+
*/
|
|
73
|
+
export declare function resolveSpecMode(inputs: SpecModeInputs, fs: FsLike, execSync: ExecSync): SpecModeResult;
|
|
74
|
+
/**
|
|
75
|
+
* Convenience wrapper that wires the real Node `fs.existsSync` + `child_process.execSync`
|
|
76
|
+
* and reads the spec-mode env vars off a process-env-shaped bag. This is the
|
|
77
|
+
* `/chorus` command's real runtime caller. Kept out of `resolveSpecMode` so the
|
|
78
|
+
* core stays pure/injectable for tests.
|
|
79
|
+
*/
|
|
80
|
+
export declare function resolveSpecModeFromEnv(env: NodeJS.ProcessEnv, projectRoot: string): SpecModeResult;
|
|
81
|
+
//# sourceMappingURL=spec-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-mode.d.ts","sourceRoot":"","sources":["../src/spec-mode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,wEAAwE;AACxE,MAAM,WAAW,MAAM;IACrB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAED,2EAA2E;AAC3E,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,KAAK,IAAI,CAAC;AAExE;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uGAAuG;IACvG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,QAAQ,GACjB,cAAc,CAyFhB;AAWD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,WAAW,EAAE,MAAM,GAClB,cAAc,CAehB"}
|