allye-opencode 1.2.4 → 1.2.6
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 +28 -0
- package/dist/index.js +53 -44
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# allye-opencode
|
|
2
|
+
|
|
3
|
+
An [OpenCode](https://opencode.ai) plugin that registers 6 specialized Allye agents for the guided delivery workflow:
|
|
4
|
+
|
|
5
|
+
- **Allye — Router** — initializes context, detects the workflow phase, and delegates to the agent below
|
|
6
|
+
- **Allye Plan** — product planning (epics/features/stories) and technical planning (discussion phase, trade-offs, tasks)
|
|
7
|
+
- **Allye Orchestrator** — coordinates delivery of an already-planned feature: assigns work, tracks status, drives review
|
|
8
|
+
- **Allye Build** — TDD implementation of tasks
|
|
9
|
+
- **Allye Review** — code review with full context
|
|
10
|
+
- **Allye Deliver** — finalizes delivery, closes stories, updates docs
|
|
11
|
+
|
|
12
|
+
It also injects live Allye account/session context into every conversation via a system-prompt transform hook.
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
This package is not typically installed standalone. It's installed automatically as part of the main [`allye-plugin`](https://github.com/allye-app/allye-plugin) install flow (`install.sh`), which detects OpenCode and adds `allye-opencode` to the `plugin` array in your `opencode.json` alongside the Allye MCP server configuration.
|
|
17
|
+
|
|
18
|
+
If you do need to add it manually, add it to the `plugin` array in your OpenCode config:
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"plugin": ["allye-opencode"]
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Documentation
|
|
27
|
+
|
|
28
|
+
For full workflow documentation — the guided delivery methodology, the phase skills, and the handover protocol this plugin implements — see the main repo: [github.com/allye-app/allye-plugin](https://github.com/allye-app/allye-plugin).
|
package/dist/index.js
CHANGED
|
@@ -149,6 +149,7 @@ Detect what the user needs and delegate to the right agent using the \`task\` to
|
|
|
149
149
|
|
|
150
150
|
| User intent | Delegate to |
|
|
151
151
|
|-------------|-------------|
|
|
152
|
+
| Explore ideas, research before committing to scope, think out loud | **allye-plan** (exploration only \u2014 do NOT create work items yet) |
|
|
152
153
|
| Define requirements, plan features, create epics/stories, break stories into tasks | **allye-plan** |
|
|
153
154
|
| Coordinate delivery of an already-planned feature \u2014 assign work, track status, drive review | **allye-orchestrator** |
|
|
154
155
|
| Implement code, write tests, fix bugs, develop features | **allye-build** |
|
|
@@ -157,6 +158,7 @@ Detect what the user needs and delegate to the right agent using the \`task\` to
|
|
|
157
158
|
|
|
158
159
|
### How to detect the phase
|
|
159
160
|
|
|
161
|
+
- **Exploring** \u2014 User wants to: think out loud, explore ideas, research a problem space, weigh directions before committing to scope. Nothing should be created yet \u2014 no epics, features, or stories. Delegate to allye-plan but tell it explicitly this is open-ended exploration, not work-item creation.
|
|
160
162
|
- **Planning** \u2014 User talks about: requirements, business needs, features, epics, user stories, scope, MVP, tasks, approach, options, trade-offs
|
|
161
163
|
- **Orchestrating** \u2014 User wants to: coordinate delivery, assign work items, track story/task status, drive review for an already-planned feature
|
|
162
164
|
- **Building** \u2014 User wants to: write code, implement a task, fix a bug, add functionality, write tests
|
|
@@ -179,8 +181,8 @@ If the user's request is simple and doesn't match any phase (general questions,
|
|
|
179
181
|
`.trim();
|
|
180
182
|
var allyeAgent = {
|
|
181
183
|
...SHARED_CONFIG,
|
|
182
|
-
description: "Allye
|
|
183
|
-
prompt: buildPrompt("Allye \u2014
|
|
184
|
+
description: "Allye router \u2014 initializes context, detects workflow phase, and delegates to specialized Allye agents (Plan, Orchestrator, Build, Review, Deliver)",
|
|
185
|
+
prompt: buildPrompt("Allye \u2014 Router", [
|
|
184
186
|
LANGUAGE_DETECTION,
|
|
185
187
|
ALLYE_INIT_PROTOCOL,
|
|
186
188
|
MEMORY_SEARCH_PROTOCOL,
|
|
@@ -747,9 +749,15 @@ You drive delivery. You don't plan \u2014 that already happened in Technical Pla
|
|
|
747
749
|
|
|
748
750
|
## 1. On start
|
|
749
751
|
|
|
750
|
-
If you arrived via a \`technical-to-orchestration\` handover (see \`handover-protocol\`), read it in full \u2014 it's your only context, there is no prior conversation to fall back on.
|
|
752
|
+
If you arrived via a \`technical-to-orchestration\` handover (see \`handover-protocol\`), read it in full \u2014 it's your only context, there is no prior conversation to fall back on.
|
|
751
753
|
|
|
752
|
-
|
|
754
|
+
Then load the actual work. **The handover's list is an index to verify against, not a substitute for reading:**
|
|
755
|
+
|
|
756
|
+
1. **Read the full subtree under the handover's parent item.** \`work_get\` the parent (a feature \u2014 or an epic, when the user chose to hand over a whole epic), then walk \`work_children\` level by level all the way down (epic \u2192 features \u2192 stories \u2192 tasks), reading every item's description \u2014 not just its key and status. Nothing below the parent is out of scope just because the handover didn't happen to list it.
|
|
757
|
+
2. **Consult every reference the handover names.** Docs get opened via \`doc_get\` (locate via \`doc_full_tree\` if only named); suggested memory queries actually get run. A reference listed but never opened is a briefing you skipped.
|
|
758
|
+
3. **Cross-check against the handover's list.** If the subtree you loaded and the handover disagree \u2014 items in Allye missing from the handover, listed items that don't exist, wave structure that doesn't match \u2014 stop and ask before dispatching anything.
|
|
759
|
+
|
|
760
|
+
If you arrived without a handover (the user just wants to resume coordinating an in-progress feature), ask for the feature or epic key if it isn't already clear, then do the same full subtree read via \`work_get\`/\`work_children\`.
|
|
753
761
|
|
|
754
762
|
Search memories for relevant prior context (\`memory_search("Session State {feature key}")\`, \`memory_search("decision {feature key}")\`) \u2014 a delivery already in progress may have decisions and blockers recorded from earlier sessions.
|
|
755
763
|
|
|
@@ -785,6 +793,7 @@ Once the report is genuinely complete, dispatch the \`reviewer\` subagent \u2014
|
|
|
785
793
|
Reviewer returns its standard \u2705/\u26A0\uFE0F/\u274C-per-task output (unchanged from the \`review\` skill \u2014 no new format to learn).
|
|
786
794
|
|
|
787
795
|
- **All \u2705** \u2192 move each approved task the rest of the way to \`done\` yourself \u2014 the Executor only advanced it as far as \`review\` \u2014 then proceed to the status cascade (\xA77).
|
|
796
|
+
- **\u26A0\uFE0F warnings only, no \u274C** \u2192 a warning isn't a blocker: proceed to the status cascade (\xA77) the same as All \u2705. Don't silently discard the warnings and don't force an unnecessary correction round either \u2014 record them as a note (in the task's context, or as a memory) so they're not lost.
|
|
788
797
|
- **Any \u274C** \u2192 the failed task simply stays at \`review\` while the correction round runs. No backward move is needed (or possible \u2014 \`work_status_next\` only moves forward, per \`allye-board-progression\`): the task never reached \`done\`, because reaching \`done\` requires your move after Reviewer \u2705. Send corrections back using \`references/correction.md\`'s exact fields (only the failed findings, the correction-round count, the story reference \u2014 never a full re-brief of the story): emit it as a \`correction\` handover. Loop back to \xA75 once the next execution report arrives.
|
|
789
798
|
|
|
790
799
|
<!-- adapted from bmad-code-org/BMAD-METHOD correct-course (MIT) \u2014 structured change-impact analysis for corrections that ripple beyond one task -->
|
|
@@ -811,7 +820,7 @@ Unclear assignee, no active sprint to assign into, conflicting or unexpected sta
|
|
|
811
820
|
|
|
812
821
|
## 10. Memory
|
|
813
822
|
|
|
814
|
-
Search at start (\xA71). Save session state before ending \u2014 current position in the feature (which story/wave), what's been dispatched, what's pending review, any escalations raised. If a correction round revealed something worth remembering beyond this session (a wrong assumption, a pattern), save it as its own memory in the appropriate sector, per the \`allye-memory-protocol\` skill \u2014 don't let it live only in this session's state snapshot.`;
|
|
823
|
+
Search at start (\xA71). Save session state before ending \u2014 current position in the feature (which story/wave), what's been dispatched, what's pending review, any escalations raised, correction-round count per task (so the 2-correction-max escalation rule survives a resumed session). If a correction round revealed something worth remembering beyond this session (a wrong assumption, a pattern), save it as its own memory in the appropriate sector, per the \`allye-memory-protocol\` skill \u2014 don't let it live only in this session's state snapshot.`;
|
|
815
824
|
var TECHNICAL_DEVELOPMENT = `# Technical Development Workflow
|
|
816
825
|
|
|
817
826
|
This skill guides you through implementing a task with discipline: read existing code first, write tests, implement, refactor, and track progress in Allye.
|
|
@@ -914,12 +923,14 @@ This is not optional. Writing code without reading the context leads to:
|
|
|
914
923
|
### Analysis Paralysis Guard
|
|
915
924
|
|
|
916
925
|
<HARD-GATE>
|
|
917
|
-
|
|
926
|
+
This checkpoint applies to exploratory reads beyond what the task already named \u2014 reading every file the task itself points you to (see "What to read" above) is still mandatory, not capped by this count.
|
|
927
|
+
|
|
928
|
+
If you have read 5+ files *beyond those named/implied by the task* without writing any code, STOP and ask yourself:
|
|
918
929
|
|
|
919
930
|
1. **Do I have enough context to start?** \u2192 If yes, start writing. Perfect understanding is not required.
|
|
920
931
|
2. **Am I blocked by missing information?** \u2192 If yes, tell the user what's blocking you.
|
|
921
932
|
|
|
922
|
-
Do not read endlessly. Reading is preparation, not implementation.
|
|
933
|
+
Do not read endlessly in search of additional context. Reading is preparation, not implementation.
|
|
923
934
|
</HARD-GATE>
|
|
924
935
|
|
|
925
936
|
---
|
|
@@ -1061,16 +1072,14 @@ Only save if there's genuinely useful context. Don't save trivial implementation
|
|
|
1061
1072
|
|
|
1062
1073
|
## Step 9: Pick Next Task
|
|
1063
1074
|
|
|
1064
|
-
After completing a task,
|
|
1065
|
-
|
|
1066
|
-
\`\`\`
|
|
1067
|
-
work_children(id: "{story uuid}")
|
|
1068
|
-
\`\`\`
|
|
1075
|
+
After completing a task, pick the next one from the **handover's own wave-ordered task list** \u2014 not from a live API call. The \`story-execution\` handover already contains every task across every wave for the whole story, so it's the authoritative scope; going back to the API for *new* tasks would risk pulling in tasks added to the story after the handover was dispatched, which are out of scope (see line ~14).
|
|
1069
1076
|
|
|
1070
|
-
- If there are more tasks in the current wave \u2192 pick one
|
|
1071
|
-
- If the current wave is done \u2192 move to the next wave
|
|
1077
|
+
- If there are more tasks in the current wave (per the handover's list) \u2192 pick one
|
|
1078
|
+
- If the current wave is done \u2192 move to the next wave (per the handover's list)
|
|
1072
1079
|
- If every task in the story has reached \`review\` (implementation complete, awaiting Reviewer) \u2192 emit an **\`execution-report\`** handover (see the \`handover-protocol\` skill) back to the Orchestrator
|
|
1073
1080
|
|
|
1081
|
+
Use \`work_children(id: "{story uuid}")\` only to **verify/check the status** of tasks already in the handover's list (e.g. confirming a dependency reached \`review\`) \u2014 never to discover new tasks to work on. If \`work_children\` reveals a task under this story that is **not** in the handover's task list, do not execute it \u2014 it wasn't in scope when the handover was dispatched. Instead, note it as an open question ("Open questions") in the \`execution-report\` handover so the Orchestrator can decide whether to bring it into scope.
|
|
1082
|
+
|
|
1074
1083
|
---
|
|
1075
1084
|
|
|
1076
1085
|
## Workflow Checklist
|
|
@@ -2003,29 +2012,29 @@ Generate a complete handoff using the shared marker format \u2014 same shape Cla
|
|
|
2003
2012
|
|
|
2004
2013
|
\`\`\`
|
|
2005
2014
|
## \uD83D\uDD04 Allye Handover \u2014 technical-to-orchestration
|
|
2006
|
-
**Skill
|
|
2015
|
+
**Skill to load:** orchestrator
|
|
2007
2016
|
|
|
2008
|
-
###
|
|
2009
|
-
|
|
2017
|
+
### Objective
|
|
2018
|
+
Drive delivery of {FEATURE-KEY} \u2014 {feature title}
|
|
2010
2019
|
|
|
2011
|
-
###
|
|
2020
|
+
### Required reading
|
|
2012
2021
|
- Epic: {EPIC-KEY}
|
|
2013
2022
|
- Feature: {FEATURE-KEY}
|
|
2014
|
-
- Stories
|
|
2023
|
+
- Stories and tasks by wave:
|
|
2015
2024
|
- {STORY-KEY} \u2014 {title}
|
|
2016
2025
|
- Wave 1: {TASK-KEY}, {TASK-KEY}
|
|
2017
2026
|
- Wave 2: {TASK-KEY}
|
|
2018
2027
|
|
|
2019
|
-
###
|
|
2028
|
+
### Locked architecture decisions
|
|
2020
2029
|
- {decision 1}: {rationale}
|
|
2021
2030
|
- {decision 2}: {rationale}
|
|
2022
2031
|
|
|
2023
|
-
###
|
|
2032
|
+
### Additional context
|
|
2024
2033
|
- {anything the user mentioned}
|
|
2025
2034
|
- {relevant memories saved during planning}
|
|
2026
2035
|
|
|
2027
2036
|
---
|
|
2028
|
-
|
|
2037
|
+
If anything is unclear, STOP and ask \u2014 don't proceed on a guess.
|
|
2029
2038
|
\`\`\`
|
|
2030
2039
|
|
|
2031
2040
|
### Step 4: Instruct the user
|
|
@@ -2038,9 +2047,9 @@ After generating the handoff, say:
|
|
|
2038
2047
|
> 3. The Orchestrator will coordinate implementation and review from here"
|
|
2039
2048
|
|
|
2040
2049
|
### Important:
|
|
2041
|
-
- ALWAYS generate the handoff prompt \u2014 don't just say "switch to
|
|
2042
|
-
- The prompt must be COMPLETE \u2014 the
|
|
2043
|
-
- Include ALL locked decisions \u2014
|
|
2050
|
+
- ALWAYS generate the handoff prompt \u2014 don't just say "switch to Orchestrator"
|
|
2051
|
+
- The prompt must be COMPLETE \u2014 the Orchestrator agent starts from zero, it has no memory of this conversation
|
|
2052
|
+
- Include ALL locked decisions \u2014 Orchestrator must respect them
|
|
2044
2053
|
- Include the specific task key to start with \u2014 don't leave it vague
|
|
2045
2054
|
`.trim();
|
|
2046
2055
|
var allyePlanAgent = {
|
|
@@ -2087,7 +2096,7 @@ Generate a handoff scoped to exactly ONE story and its tasks \u2014 never a whol
|
|
|
2087
2096
|
|
|
2088
2097
|
\`\`\`
|
|
2089
2098
|
## \uD83D\uDD04 Allye Handover \u2014 story-execution
|
|
2090
|
-
**Skill
|
|
2099
|
+
**Skill to load:** execution
|
|
2091
2100
|
|
|
2092
2101
|
### Story
|
|
2093
2102
|
{STORY-KEY} \u2014 {title}, with acceptance criteria copied in full
|
|
@@ -2095,11 +2104,11 @@ Generate a handoff scoped to exactly ONE story and its tasks \u2014 never a whol
|
|
|
2095
2104
|
### Tasks
|
|
2096
2105
|
{TASK-KEY list with acceptance criteria}
|
|
2097
2106
|
|
|
2098
|
-
###
|
|
2107
|
+
### Applicable locked decisions
|
|
2099
2108
|
{locked decisions from planning}
|
|
2100
2109
|
|
|
2101
2110
|
---
|
|
2102
|
-
|
|
2111
|
+
If anything is unclear, STOP and ask \u2014 don't proceed on a guess.
|
|
2103
2112
|
\`\`\`
|
|
2104
2113
|
|
|
2105
2114
|
### Step 2: Receive the execution report, dispatch Review
|
|
@@ -2121,16 +2130,16 @@ Review returns its standard \u2705/\u26A0\uFE0F/\u274C-per-task output.
|
|
|
2121
2130
|
|
|
2122
2131
|
\`\`\`
|
|
2123
2132
|
## \uD83D\uDD04 Allye Handover \u2014 correction
|
|
2124
|
-
**Skill
|
|
2133
|
+
**Skill to load:** execution
|
|
2125
2134
|
|
|
2126
|
-
###
|
|
2135
|
+
### Findings to fix (\u274C only)
|
|
2127
2136
|
- {TASK-KEY}: "{finding, quoted literally}"
|
|
2128
2137
|
|
|
2129
|
-
###
|
|
2130
|
-
|
|
2138
|
+
### Correction round
|
|
2139
|
+
This is correction attempt {N} for this story.
|
|
2131
2140
|
|
|
2132
2141
|
---
|
|
2133
|
-
|
|
2142
|
+
Fix ONLY what's listed above \u2014 don't redo the whole story.
|
|
2134
2143
|
\`\`\`
|
|
2135
2144
|
|
|
2136
2145
|
**Escalate to the user instead of emitting a 4th correction handoff if the same task fails review 3 times.** Two rounds failing for different specific reasons is normal; three usually means something deeper is being missed.
|
|
@@ -2222,26 +2231,26 @@ When all tasks in the current story are done \u2014 or you've hit a genuine bloc
|
|
|
2222
2231
|
|
|
2223
2232
|
\`\`\`
|
|
2224
2233
|
## \uD83D\uDD04 Allye Handover \u2014 execution-report
|
|
2225
|
-
**Skill
|
|
2234
|
+
**Skill to load:** orchestrator
|
|
2226
2235
|
|
|
2227
|
-
### Story
|
|
2236
|
+
### Story implemented
|
|
2228
2237
|
{STORY-KEY} \u2014 {title}
|
|
2229
2238
|
|
|
2230
|
-
### Tasks
|
|
2231
|
-
- {TASK-KEY}: {\u2705
|
|
2232
|
-
- {
|
|
2239
|
+
### Tasks and status per acceptance criterion
|
|
2240
|
+
- {TASK-KEY}: {\u2705 done | \u26A0\uFE0F partial | \u274C blocked}
|
|
2241
|
+
- {criterion}: {met | not met \u2014 why}
|
|
2233
2242
|
|
|
2234
|
-
###
|
|
2243
|
+
### Files changed
|
|
2235
2244
|
- {path} \u2014 {what changed}
|
|
2236
2245
|
|
|
2237
|
-
###
|
|
2238
|
-
- {decision}, or "
|
|
2246
|
+
### New decisions made during implementation
|
|
2247
|
+
- {decision}, or "No new decision"
|
|
2239
2248
|
|
|
2240
|
-
###
|
|
2241
|
-
{anything unresolved, or "
|
|
2249
|
+
### Open questions
|
|
2250
|
+
{anything unresolved, or "None"}
|
|
2242
2251
|
|
|
2243
2252
|
---
|
|
2244
|
-
|
|
2253
|
+
If anything is unclear, STOP and ask \u2014 don't proceed on a guess.
|
|
2245
2254
|
\`\`\`
|
|
2246
2255
|
|
|
2247
2256
|
> "Story {STORY-KEY} is implemented. Switch to **Allye Orchestrator** (Ctrl+T \u2192 Allye Orchestrator) and paste the handover above \u2014 it'll dispatch review and handle status from here."
|
package/package.json
CHANGED