arkaos 4.34.0 → 4.35.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/THE-ARKAOS-GUIDE.md +1 -1
- package/VERSION +1 -1
- package/bin/arka-menubar.py +407 -0
- package/config/install-profiles.json +75 -0
- package/core/runtime/opencode.py +113 -0
- package/core/runtime/registry.py +6 -1
- package/harness/codex/AGENTS.md +1 -1
- package/harness/copilot/copilot-instructions.md +1 -1
- package/harness/cursor/rules/arkaos.mdc +2 -2
- package/harness/gemini/GEMINI.md +1 -1
- package/harness/opencode/AGENTS.md +1 -1
- package/harness/opencode/agents/arka-architect-gabriel.md +12 -0
- package/harness/opencode/agents/arka-brand-director-valentina.md +12 -0
- package/harness/opencode/agents/arka-cfo-helena.md +12 -0
- package/harness/opencode/agents/arka-chief-of-staff-afonso.md +12 -0
- package/harness/opencode/agents/arka-community-strategist-beatriz.md +12 -0
- package/harness/opencode/agents/arka-content-strategist-rafael.md +12 -0
- package/harness/opencode/agents/arka-conversion-strategist-ines.md +12 -0
- package/harness/opencode/agents/arka-coo-sofia.md +12 -0
- package/harness/opencode/agents/arka-copy-director-eduardo.md +12 -0
- package/harness/opencode/agents/arka-cqo-marta.md +12 -0
- package/harness/opencode/agents/arka-cto-marco.md +12 -0
- package/harness/opencode/agents/arka-design-ops-lead-iris.md +12 -0
- package/harness/opencode/agents/arka-ecom-director-ricardo.md +12 -0
- package/harness/opencode/agents/arka-knowledge-director-clara.md +12 -0
- package/harness/opencode/agents/arka-leadership-director-rodrigo.md +12 -0
- package/harness/opencode/agents/arka-marketing-director-luna.md +12 -0
- package/harness/opencode/agents/arka-ops-lead-daniel.md +12 -0
- package/harness/opencode/agents/arka-pm-director-carolina.md +12 -0
- package/harness/opencode/agents/arka-revops-lead-vicente.md +12 -0
- package/harness/opencode/agents/arka-saas-strategist-tiago.md +12 -0
- package/harness/opencode/agents/arka-sales-director-miguel.md +12 -0
- package/harness/opencode/agents/arka-strategy-director-tomas.md +12 -0
- package/harness/opencode/agents/arka-tech-director-francisca.md +12 -0
- package/harness/opencode/agents/arka-tech-lead-paulo.md +12 -0
- package/harness/opencode/agents/arka-video-producer-simao.md +12 -0
- package/harness/opencode/commands/arka-brand.md +9 -0
- package/harness/opencode/commands/arka-community.md +9 -0
- package/harness/opencode/commands/arka-content.md +9 -0
- package/harness/opencode/commands/arka-dev.md +9 -0
- package/harness/opencode/commands/arka-ecom.md +9 -0
- package/harness/opencode/commands/arka-fin.md +9 -0
- package/harness/opencode/commands/arka-kb.md +9 -0
- package/harness/opencode/commands/arka-landing.md +9 -0
- package/harness/opencode/commands/arka-lead.md +9 -0
- package/harness/opencode/commands/arka-mkt.md +9 -0
- package/harness/opencode/commands/arka-ops.md +9 -0
- package/harness/opencode/commands/arka-org.md +9 -0
- package/harness/opencode/commands/arka-pm.md +9 -0
- package/harness/opencode/commands/arka-saas.md +9 -0
- package/harness/opencode/commands/arka-sales.md +9 -0
- package/harness/opencode/commands/arka-strat.md +9 -0
- package/harness/opencode/opencode.json +16 -0
- package/harness/zed/.rules +1 -1
- package/installer/adapters/opencode.js +118 -0
- package/installer/cli.js +31 -1
- package/installer/detect-runtime.js +18 -0
- package/installer/doctor.js +202 -2
- package/installer/index.js +174 -88
- package/installer/menubar.js +262 -0
- package/installer/product-stats.js +93 -0
- package/installer/profile.js +75 -0
- package/installer/prompts.js +303 -41
- package/installer/services.js +487 -0
- package/installer/ui.js +190 -0
- package/installer/update.js +212 -95
- package/knowledge/skills-manifest.json +1 -1
- package/package.json +6 -1
- package/pyproject.toml +1 -1
- package/scripts/harness_gen.py +98 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "arkaos",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.35.0",
|
|
4
4
|
"description": "The Operating System for AI Agent Teams",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
"bin/arka-claude.cmd",
|
|
53
53
|
"bin/arka-claude.ps1",
|
|
54
54
|
"bin/arka-doctor",
|
|
55
|
+
"bin/arka-menubar.py",
|
|
55
56
|
"bin/arka-providers",
|
|
56
57
|
"bin/arka-py",
|
|
57
58
|
"bin/arka-py.cmd",
|
|
@@ -77,6 +78,10 @@
|
|
|
77
78
|
"!**/.DS_Store",
|
|
78
79
|
"!departments/dev/skills/diagram/vendor/test/"
|
|
79
80
|
],
|
|
81
|
+
"optionalDependencies": {
|
|
82
|
+
"@clack/prompts": "^1.7.0",
|
|
83
|
+
"picocolors": "^1.1.1"
|
|
84
|
+
},
|
|
80
85
|
"devDependencies": {
|
|
81
86
|
"eslint": "^8.57.1"
|
|
82
87
|
}
|
package/pyproject.toml
CHANGED
package/scripts/harness_gen.py
CHANGED
|
@@ -11,6 +11,13 @@ Targets (v1): codex (AGENTS.md), opencode (AGENTS.md), gemini
|
|
|
11
11
|
(GEMINI.md), zed (.rules), copilot (copilot-instructions.md), cursor
|
|
12
12
|
(rules/*.mdc with path-scoped stack rules).
|
|
13
13
|
|
|
14
|
+
OpenCode first-class (Foundation PR-6): beyond AGENTS.md, the opencode
|
|
15
|
+
target emits its native surfaces — agents/*.md (curated cut: C-suite +
|
|
16
|
+
squad leads, frontmatter per opencode.ai/docs/agents), commands/*.md
|
|
17
|
+
(one router command per department, $ARGUMENTS template per
|
|
18
|
+
opencode.ai/docs/commands), and opencode.json (reference fragment the
|
|
19
|
+
installer adapter merges NON-destructively into the user's config).
|
|
20
|
+
|
|
14
21
|
Honesty note baked into every bundle: these are instruction-level
|
|
15
22
|
exports — the full ArkaOS engine (Synapse, hooks, Quality Gate
|
|
16
23
|
enforcement) runs on runtimes with an adapter; instructions carry the
|
|
@@ -231,6 +238,92 @@ def _cursor_files() -> dict[str, str]:
|
|
|
231
238
|
return files
|
|
232
239
|
|
|
233
240
|
|
|
241
|
+
def _curated_agents(agents: list[dict]) -> list[dict]:
|
|
242
|
+
"""C-suite (tier 0) + squad leads (tier 1) — the cut that becomes
|
|
243
|
+
native agent files. Specialists stay in the AGENTS.md index; 89
|
|
244
|
+
files would blow the harness read budget."""
|
|
245
|
+
cut = [a for a in agents if a["tier"] <= 1]
|
|
246
|
+
return sorted(cut, key=lambda a: (a["tier"], a["department"], a["name"]))
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def _agent_markdown(agent: dict) -> str:
|
|
250
|
+
version = read_version(ROOT)
|
|
251
|
+
prefix = DIR_TO_PREFIX.get(agent["department"], agent["department"])
|
|
252
|
+
domains = ", ".join(agent.get("expertise_domains", [])[:6])
|
|
253
|
+
traits = " · ".join(
|
|
254
|
+
t for t in (
|
|
255
|
+
agent.get("disc", {}).get("label", ""),
|
|
256
|
+
agent.get("enneagram", {}).get("label", ""),
|
|
257
|
+
agent.get("mbti", ""),
|
|
258
|
+
) if t
|
|
259
|
+
)
|
|
260
|
+
lines = [
|
|
261
|
+
"---",
|
|
262
|
+
f'description: "{agent["role"]} — ArkaOS /{prefix} department"',
|
|
263
|
+
"mode: subagent",
|
|
264
|
+
"---",
|
|
265
|
+
"",
|
|
266
|
+
f"You are {agent['name']}, {agent['role']} of the ArkaOS /{prefix} "
|
|
267
|
+
f"department (v{version}; generated by scripts/harness_gen.py — "
|
|
268
|
+
"do not edit).",
|
|
269
|
+
]
|
|
270
|
+
if domains:
|
|
271
|
+
lines += ["", f"Expertise: {domains}."]
|
|
272
|
+
if traits:
|
|
273
|
+
lines += ["", f"Behavioral profile: {traits}."]
|
|
274
|
+
lines += [
|
|
275
|
+
"",
|
|
276
|
+
"Work the ArkaOS way: announce routing "
|
|
277
|
+
f"(`[arka:routing] {prefix} -> {DEPT_LEADS.get(prefix, agent['name'])}`), "
|
|
278
|
+
"plan before code, report real exit codes over narration, and "
|
|
279
|
+
"state honestly what is unfinished before delivering.",
|
|
280
|
+
"",
|
|
281
|
+
]
|
|
282
|
+
return "\n".join(lines)
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def _opencode_agent_files() -> dict[str, str]:
|
|
286
|
+
return {
|
|
287
|
+
f"opencode/agents/arka-{agent['id']}.md": _agent_markdown(agent)
|
|
288
|
+
for agent in _curated_agents(_load_agents())
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
def _opencode_command_files() -> dict[str, str]:
|
|
293
|
+
"""One router command per department: /arka-<prefix> <request>."""
|
|
294
|
+
files: dict[str, str] = {}
|
|
295
|
+
for prefix, lead in DEPT_LEADS.items():
|
|
296
|
+
files[f"opencode/commands/arka-{prefix}.md"] = (
|
|
297
|
+
"---\n"
|
|
298
|
+
f'description: "ArkaOS /{prefix} department ({lead})"\n'
|
|
299
|
+
"---\n\n"
|
|
300
|
+
f"[arka:routing] {prefix} -> {lead}\n\n"
|
|
301
|
+
f"Handle the following as the ArkaOS /{prefix} department, "
|
|
302
|
+
f"orchestrated by {lead}. Follow the AGENTS.md contract "
|
|
303
|
+
"(plan approval, evidence over narration, quality gate; "
|
|
304
|
+
"generated by scripts/harness_gen.py):\n\n"
|
|
305
|
+
"$ARGUMENTS\n"
|
|
306
|
+
)
|
|
307
|
+
return files
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def _opencode_config() -> str:
|
|
311
|
+
"""Reference opencode.json fragment. The installer adapter merges it
|
|
312
|
+
NON-destructively — user keys always win; this file is never copied
|
|
313
|
+
over an existing config verbatim."""
|
|
314
|
+
config = {
|
|
315
|
+
"$schema": "https://opencode.ai/config.json",
|
|
316
|
+
"mcp": {
|
|
317
|
+
"arka-tools": {
|
|
318
|
+
"type": "local",
|
|
319
|
+
"command": ["npx", "-y", "arkaos", "mcp", "start"],
|
|
320
|
+
"enabled": True,
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
}
|
|
324
|
+
return json.dumps(config, indent=2) + "\n"
|
|
325
|
+
|
|
326
|
+
|
|
234
327
|
def generate() -> dict[str, str]:
|
|
235
328
|
"""Return {relative path under harness/: content}."""
|
|
236
329
|
body = _contract_body()
|
|
@@ -243,6 +336,9 @@ def generate() -> dict[str, str]:
|
|
|
243
336
|
}
|
|
244
337
|
for rel, content in _cursor_files().items():
|
|
245
338
|
files[f"cursor/{rel}"] = content
|
|
339
|
+
files["opencode/opencode.json"] = _opencode_config()
|
|
340
|
+
files.update(_opencode_agent_files())
|
|
341
|
+
files.update(_opencode_command_files())
|
|
246
342
|
return files
|
|
247
343
|
|
|
248
344
|
|
|
@@ -277,8 +373,9 @@ def main() -> int:
|
|
|
277
373
|
return 1
|
|
278
374
|
write_bundle(files, HARNESS_DIR)
|
|
279
375
|
total = sum(len(c.encode()) for c in files.values())
|
|
376
|
+
targets = len({rel.split("/")[0] for rel in files})
|
|
280
377
|
print(
|
|
281
|
-
f"harness generated: {len(files)} files,
|
|
378
|
+
f"harness generated: {len(files)} files, {targets} targets, "
|
|
282
379
|
f"{total} bytes total")
|
|
283
380
|
return 0
|
|
284
381
|
|