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.
Files changed (70) hide show
  1. package/THE-ARKAOS-GUIDE.md +1 -1
  2. package/VERSION +1 -1
  3. package/bin/arka-menubar.py +407 -0
  4. package/config/install-profiles.json +75 -0
  5. package/core/runtime/opencode.py +113 -0
  6. package/core/runtime/registry.py +6 -1
  7. package/harness/codex/AGENTS.md +1 -1
  8. package/harness/copilot/copilot-instructions.md +1 -1
  9. package/harness/cursor/rules/arkaos.mdc +2 -2
  10. package/harness/gemini/GEMINI.md +1 -1
  11. package/harness/opencode/AGENTS.md +1 -1
  12. package/harness/opencode/agents/arka-architect-gabriel.md +12 -0
  13. package/harness/opencode/agents/arka-brand-director-valentina.md +12 -0
  14. package/harness/opencode/agents/arka-cfo-helena.md +12 -0
  15. package/harness/opencode/agents/arka-chief-of-staff-afonso.md +12 -0
  16. package/harness/opencode/agents/arka-community-strategist-beatriz.md +12 -0
  17. package/harness/opencode/agents/arka-content-strategist-rafael.md +12 -0
  18. package/harness/opencode/agents/arka-conversion-strategist-ines.md +12 -0
  19. package/harness/opencode/agents/arka-coo-sofia.md +12 -0
  20. package/harness/opencode/agents/arka-copy-director-eduardo.md +12 -0
  21. package/harness/opencode/agents/arka-cqo-marta.md +12 -0
  22. package/harness/opencode/agents/arka-cto-marco.md +12 -0
  23. package/harness/opencode/agents/arka-design-ops-lead-iris.md +12 -0
  24. package/harness/opencode/agents/arka-ecom-director-ricardo.md +12 -0
  25. package/harness/opencode/agents/arka-knowledge-director-clara.md +12 -0
  26. package/harness/opencode/agents/arka-leadership-director-rodrigo.md +12 -0
  27. package/harness/opencode/agents/arka-marketing-director-luna.md +12 -0
  28. package/harness/opencode/agents/arka-ops-lead-daniel.md +12 -0
  29. package/harness/opencode/agents/arka-pm-director-carolina.md +12 -0
  30. package/harness/opencode/agents/arka-revops-lead-vicente.md +12 -0
  31. package/harness/opencode/agents/arka-saas-strategist-tiago.md +12 -0
  32. package/harness/opencode/agents/arka-sales-director-miguel.md +12 -0
  33. package/harness/opencode/agents/arka-strategy-director-tomas.md +12 -0
  34. package/harness/opencode/agents/arka-tech-director-francisca.md +12 -0
  35. package/harness/opencode/agents/arka-tech-lead-paulo.md +12 -0
  36. package/harness/opencode/agents/arka-video-producer-simao.md +12 -0
  37. package/harness/opencode/commands/arka-brand.md +9 -0
  38. package/harness/opencode/commands/arka-community.md +9 -0
  39. package/harness/opencode/commands/arka-content.md +9 -0
  40. package/harness/opencode/commands/arka-dev.md +9 -0
  41. package/harness/opencode/commands/arka-ecom.md +9 -0
  42. package/harness/opencode/commands/arka-fin.md +9 -0
  43. package/harness/opencode/commands/arka-kb.md +9 -0
  44. package/harness/opencode/commands/arka-landing.md +9 -0
  45. package/harness/opencode/commands/arka-lead.md +9 -0
  46. package/harness/opencode/commands/arka-mkt.md +9 -0
  47. package/harness/opencode/commands/arka-ops.md +9 -0
  48. package/harness/opencode/commands/arka-org.md +9 -0
  49. package/harness/opencode/commands/arka-pm.md +9 -0
  50. package/harness/opencode/commands/arka-saas.md +9 -0
  51. package/harness/opencode/commands/arka-sales.md +9 -0
  52. package/harness/opencode/commands/arka-strat.md +9 -0
  53. package/harness/opencode/opencode.json +16 -0
  54. package/harness/zed/.rules +1 -1
  55. package/installer/adapters/opencode.js +118 -0
  56. package/installer/cli.js +31 -1
  57. package/installer/detect-runtime.js +18 -0
  58. package/installer/doctor.js +202 -2
  59. package/installer/index.js +174 -88
  60. package/installer/menubar.js +262 -0
  61. package/installer/product-stats.js +93 -0
  62. package/installer/profile.js +75 -0
  63. package/installer/prompts.js +303 -41
  64. package/installer/services.js +487 -0
  65. package/installer/ui.js +190 -0
  66. package/installer/update.js +212 -95
  67. package/knowledge/skills-manifest.json +1 -1
  68. package/package.json +6 -1
  69. package/pyproject.toml +1 -1
  70. package/scripts/harness_gen.py +98 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "_meta": {
3
3
  "generator": "scripts/marketplace_gen.py",
4
- "version": "4.34.0",
4
+ "version": "4.35.0",
5
5
  "marketplace": "arkaos"
6
6
  },
7
7
  "structural": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkaos",
3
- "version": "4.34.0",
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "arkaos-core"
3
- version = "4.34.0"
3
+ version = "4.35.0"
4
4
  description = "Core engine for ArkaOS — The Operating System for AI Agent Teams"
5
5
  readme = "README.md"
6
6
  license = {text = "MIT"}
@@ -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, 6 targets, "
378
+ f"harness generated: {len(files)} files, {targets} targets, "
282
379
  f"{total} bytes total")
283
380
  return 0
284
381