@syntesseraai/opencode-feature-factory 0.11.14 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -95,9 +95,10 @@ The plugin includes an auto-handoff hook that continues deterministic next steps
95
95
  - The orchestrator (`@feature-factory`) remains the source of truth for workflow progression.
96
96
  - Auto-handoff is a continuation safety net, not a replacement for orchestrator logic.
97
97
  - On `session.idle`, the hook queries `client.session.messages({ path: { id: sessionId } })`, scans messages in reverse order, and parses only the latest assistant message.
98
- - The hook extracts the next prompt only from these exact machine-readable formats:
98
+ - The hook extracts the next prompt only from these machine-readable formats (outer quotes are optional, may be single or double quotes, and are stripped when present):
99
99
  - `RECOMMENDED_NEXT_STEP: "<human-readable next step>"`
100
100
  - `RECOMMENDED_NEXT_STEP="<human-readable next step>"`
101
+ - `RECOMMENDED_NEXT_STEP='<human-readable next step>'`
101
102
 
102
103
  - If the latest assistant message does not include one of those formats, the hook does nothing.
103
104
  - The hook does not buffer streaming assistant chunks and does not enforce a fixed per-session handoff cap.
@@ -248,6 +248,12 @@ or
248
248
  RECOMMENDED_NEXT_STEP="<human-readable next step>"
249
249
  ```
250
250
 
251
+ or
252
+
253
+ ```text
254
+ RECOMMENDED_NEXT_STEP='<human-readable next step>'
255
+ ```
256
+
251
257
  Rules:
252
258
 
253
259
  - Never emit `RECOMMENDED_NEXT_STEP` before the required user confirmation checkpoint.
@@ -2,7 +2,7 @@
2
2
  description: Creates implementation plans and planning gates for pipeline and ad-hoc work. Uses result-based handoff instead of file artifacts.
3
3
  mode: all
4
4
  color: '#3b82f6'
5
- model: opencode/gpt-5.4-pro
5
+ model: openai/gpt-5.4-fast
6
6
  permissions:
7
7
  write: deny
8
8
  edit: deny
@@ -2,7 +2,7 @@
2
2
  description: Unified validation agent for code and documentation. Performs acceptance, quality, security, and architecture review with context-driven scope.
3
3
  mode: all
4
4
  color: '#8b5cf6'
5
- model: opencode/glm-5.1
5
+ model: opencode/claude-opus-4-7
6
6
  permissions:
7
7
  write: deny
8
8
  edit: deny
@@ -1,6 +1,5 @@
1
1
  const SERVICE_NAME = 'feature-factory';
2
- const RECOMMENDED_NEXT_STEP_COLON_RE = /^\s*RECOMMENDED_NEXT_STEP\s*:.*"([^"\r\n]+)".*$/im;
3
- const RECOMMENDED_NEXT_STEP_EQUALS_RE = /^\s*RECOMMENDED_NEXT_STEP\s*=.*"([^"\r\n]+)".*$/im;
2
+ const RECOMMENDED_NEXT_STEP_RE = /^\s*RECOMMENDED_NEXT_STEP\s*[:=](.*)$/i;
4
3
  async function log(client, level, message, extra) {
5
4
  try {
6
5
  await client.app.log({
@@ -36,13 +35,18 @@ function extractMessageText(message) {
36
35
  }
37
36
  export function parseRecommendedNextStep(text) {
38
37
  const normalizedText = text.replace(/\r\n/g, '\n');
39
- const colonMatch = normalizedText.match(RECOMMENDED_NEXT_STEP_COLON_RE);
40
- if (colonMatch?.[1]) {
41
- return colonMatch[1].trim() || null;
42
- }
43
- const equalsMatch = normalizedText.match(RECOMMENDED_NEXT_STEP_EQUALS_RE);
44
- if (equalsMatch?.[1]) {
45
- return equalsMatch[1].trim() || null;
38
+ for (const line of normalizedText.split('\n')) {
39
+ const match = line.match(RECOMMENDED_NEXT_STEP_RE);
40
+ if (!match) {
41
+ continue;
42
+ }
43
+ const rawValue = match[1]?.trim() ?? '';
44
+ const unquotedValue = rawValue.length >= 2 &&
45
+ ((rawValue.startsWith('"') && rawValue.endsWith('"')) ||
46
+ (rawValue.startsWith("'") && rawValue.endsWith("'")))
47
+ ? rawValue.slice(1, -1).trim()
48
+ : rawValue;
49
+ return unquotedValue || null;
46
50
  }
47
51
  return null;
48
52
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@syntesseraai/opencode-feature-factory",
4
- "version": "0.11.14",
4
+ "version": "0.12.1",
5
5
  "type": "module",
6
6
  "description": "OpenCode plugin for Feature Factory agents - provides sub-agents and skills for validation, review, security, and architecture assessment",
7
7
  "license": "MIT",