arkaos 3.74.0 → 3.74.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/VERSION +1 -1
- package/arka/skills/flow/SKILL.md +14 -6
- package/config/agent-ownership.yaml +13 -0
- package/config/hooks/post-tool-use.sh +43 -0
- package/core/governance/__pycache__/agent_experiences.cpython-313.pyc +0 -0
- package/core/governance/__pycache__/cqo_experience_recorder.cpython-313.pyc +0 -0
- package/core/synapse/__pycache__/agent_experiences_layer.cpython-313.pyc +0 -0
- package/core/synapse/__pycache__/engine.cpython-313.pyc +0 -0
- package/core/synapse/engine.py +5 -0
- package/installer/cli.js +5 -2
- package/package.json +1 -1
- package/pyproject.toml +1 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.74.
|
|
1
|
+
3.74.1
|
|
@@ -150,12 +150,20 @@ For each item, in order:
|
|
|
150
150
|
injection, missing auth, data exposure.
|
|
151
151
|
- Fail → back to the todo.
|
|
152
152
|
5. **Quality Gate** — Marta (CQO) orchestrates the right specialists
|
|
153
|
-
for the area.
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
153
|
+
for the area.
|
|
154
|
+
|
|
155
|
+
**CQO dispatch convention (PR3.5 v3.74.1):** when invoking the `cqo`
|
|
156
|
+
subagent, the orchestrator MUST include the marker
|
|
157
|
+
`[arka:reviewing <agent_id>]` in the dispatch prompt, naming the
|
|
158
|
+
agent whose work is under review (e.g.
|
|
159
|
+
`[arka:reviewing tech-lead-paulo]`). On a REJECTED verdict, the
|
|
160
|
+
PostToolUse hook `config/hooks/post-tool-use.sh` reads the marker
|
|
161
|
+
plus the verdict text and auto-appends an `Experience` to that
|
|
162
|
+
agent's log — closing the QG learning loop without manual
|
|
163
|
+
bookkeeping. The L2.6 Synapse layer
|
|
164
|
+
(`core/synapse/agent_experiences_layer.py`) injects the lessons
|
|
165
|
+
into the next dispatch automatically. APPROVED verdicts produce no
|
|
166
|
+
record (only failures are lessons). If a specialist is
|
|
159
167
|
missing, stop and advise the user
|
|
160
168
|
to create one via `/arka personas` + provide the knowledge.
|
|
161
169
|
- Fail → back to the todo.
|
|
@@ -122,6 +122,19 @@ ownership:
|
|
|
122
122
|
owners: [devops-eng]
|
|
123
123
|
reason: "Infrastructure-as-code requires devops specialist"
|
|
124
124
|
|
|
125
|
+
# PR3.5 v3.74.1 — installer + dashboard launcher coverage
|
|
126
|
+
- pattern: "installer/**/*.js"
|
|
127
|
+
owners: [devops-eng, senior-dev]
|
|
128
|
+
reason: "npx arkaos installer surface requires devops + backend review"
|
|
129
|
+
|
|
130
|
+
- pattern: "scripts/start-dashboard*"
|
|
131
|
+
owners: [devops-eng]
|
|
132
|
+
reason: "Dashboard launcher is operational devops surface"
|
|
133
|
+
|
|
134
|
+
- pattern: "scripts/dashboard-api.py"
|
|
135
|
+
owners: [devops-eng, senior-dev]
|
|
136
|
+
reason: "Dashboard API backend bridges installer ops + Python service code"
|
|
137
|
+
|
|
125
138
|
# ─── Core architecture ──────────────────────────────────────────────
|
|
126
139
|
- pattern: "core/workflow/**/*.py"
|
|
127
140
|
owners: [architect, senior-dev]
|
|
@@ -72,6 +72,49 @@ except Exception:
|
|
|
72
72
|
fi
|
|
73
73
|
fi
|
|
74
74
|
|
|
75
|
+
# ─── CQO REJECTED auto-record (PR3.5 v3.74.1) ────────────────────────
|
|
76
|
+
# When a Task/Agent dispatch to subagent_type=cqo returns
|
|
77
|
+
# `Quality Gate Verdict: REJECTED`, append an Experience to the
|
|
78
|
+
# failing agent's log. The agent under review is identified by the
|
|
79
|
+
# `[arka:reviewing <agent_id>]` marker that the orchestrator MUST
|
|
80
|
+
# include in the CQO dispatch prompt (constitution rule
|
|
81
|
+
# `agent-experience-persistence`). Never blocks the hook.
|
|
82
|
+
if [ "$TOOL_NAME" = "Task" ] || [ "$TOOL_NAME" = "Agent" ]; then
|
|
83
|
+
SUBAGENT_TYPE=$(echo "$input" | jq -r '.tool_input.subagent_type // ""' 2>/dev/null)
|
|
84
|
+
if [ "$SUBAGENT_TYPE" = "cqo" ] && echo "$TOOL_OUTPUT" | grep -qE 'Quality Gate Verdict:[[:space:]]*REJECTED'; then
|
|
85
|
+
TOOL_INPUT_PROMPT=$(echo "$input" | jq -r '.tool_input.prompt // ""' 2>/dev/null)
|
|
86
|
+
REVIEWING_TARGET=$(printf '%s' "$TOOL_INPUT_PROMPT" \
|
|
87
|
+
| grep -oE '\[arka:reviewing[[:space:]]+[A-Za-z0-9_.-]+\]' \
|
|
88
|
+
| head -1 \
|
|
89
|
+
| sed -E 's/.*\[arka:reviewing[[:space:]]+([A-Za-z0-9_.-]+)\].*/\1/')
|
|
90
|
+
if [ -n "$REVIEWING_TARGET" ]; then
|
|
91
|
+
_AE_ROOT="${ARKAOS_ROOT:-}"
|
|
92
|
+
if [ -z "$_AE_ROOT" ] && [ -f "$HOME/.arkaos/.repo-path" ]; then
|
|
93
|
+
_AE_ROOT=$(cat "$HOME/.arkaos/.repo-path" 2>/dev/null)
|
|
94
|
+
fi
|
|
95
|
+
[ -z "$_AE_ROOT" ] && _AE_ROOT="$HOME/.arkaos"
|
|
96
|
+
VERDICT_TEXT="$TOOL_OUTPUT" \
|
|
97
|
+
AGENT_ID="$REVIEWING_TARGET" \
|
|
98
|
+
SESSION_ID="$SESSION_ID_PTU" \
|
|
99
|
+
ARKAOS_ROOT="$_AE_ROOT" \
|
|
100
|
+
python3 - <<'PY' 2>/dev/null || true
|
|
101
|
+
import os, sys
|
|
102
|
+
sys.path.insert(0, os.environ["ARKAOS_ROOT"])
|
|
103
|
+
try:
|
|
104
|
+
from core.governance.cqo_experience_recorder import record_from_verdict
|
|
105
|
+
record_from_verdict(
|
|
106
|
+
verdict_text=os.environ.get("VERDICT_TEXT", ""),
|
|
107
|
+
agent_id=os.environ.get("AGENT_ID", ""),
|
|
108
|
+
session_id=os.environ.get("SESSION_ID", ""),
|
|
109
|
+
context="auto-recorded via PostToolUse hook (cqo dispatch REJECTED)",
|
|
110
|
+
)
|
|
111
|
+
except Exception:
|
|
112
|
+
pass
|
|
113
|
+
PY
|
|
114
|
+
fi
|
|
115
|
+
fi
|
|
116
|
+
fi
|
|
117
|
+
|
|
75
118
|
# Only process if there was an error
|
|
76
119
|
if [ "$EXIT_CODE" = "0" ] || [ -z "$EXIT_CODE" ]; then
|
|
77
120
|
# Also check for error patterns in output even with exit code 0
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/core/synapse/engine.py
CHANGED
|
@@ -187,6 +187,7 @@ def create_default_engine(
|
|
|
187
187
|
ForgeContextLayer,
|
|
188
188
|
SessionContextLayer,
|
|
189
189
|
)
|
|
190
|
+
from core.synapse.agent_experiences_layer import AgentExperiencesLayer
|
|
190
191
|
|
|
191
192
|
engine = SynapseEngine()
|
|
192
193
|
|
|
@@ -194,6 +195,10 @@ def create_default_engine(
|
|
|
194
195
|
engine.register_layer(l0)
|
|
195
196
|
engine.register_layer(DepartmentLayer())
|
|
196
197
|
engine.register_layer(AgentLayer(agents_registry=agents_registry))
|
|
198
|
+
# L2.6 (PR3.5 v3.74.1) — injects past Quality Gate experiences for the
|
|
199
|
+
# specialist named in `[arka:dispatch]`, so dispatched agents inherit
|
|
200
|
+
# prior REJECTED lessons across sessions. Closes the PR3 loop.
|
|
201
|
+
engine.register_layer(AgentExperiencesLayer())
|
|
197
202
|
if vector_store is not None or kb_vault_path:
|
|
198
203
|
engine.register_layer(
|
|
199
204
|
KBContextLayer(
|
package/installer/cli.js
CHANGED
|
@@ -21,6 +21,10 @@ const { values, positionals } = parseArgs({
|
|
|
21
21
|
force: { type: "boolean", short: "f" },
|
|
22
22
|
"no-system": { type: "boolean" },
|
|
23
23
|
"with-ollama": { type: "boolean" },
|
|
24
|
+
// PR3.5 v3.74.1 — declared so `npx arkaos doctor --fix` lands in
|
|
25
|
+
// `values.fix` rather than as a free positional under strict:false.
|
|
26
|
+
// Eliminates the dead-branch fallback flagged by Marta in PR2's QG.
|
|
27
|
+
fix: { type: "boolean" },
|
|
24
28
|
},
|
|
25
29
|
allowPositionals: true,
|
|
26
30
|
strict: false,
|
|
@@ -94,8 +98,7 @@ async function main() {
|
|
|
94
98
|
|
|
95
99
|
case "doctor": {
|
|
96
100
|
const { doctor } = await import("./doctor.js");
|
|
97
|
-
|
|
98
|
-
await doctor({ fix: fixMode });
|
|
101
|
+
await doctor({ fix: values.fix === true });
|
|
99
102
|
break;
|
|
100
103
|
}
|
|
101
104
|
|
package/package.json
CHANGED