speexor 0.1.1 → 0.2.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/API-REFERENCE.md +96 -1
- package/ARCHITECTURE.md +83 -32
- package/BENCHMARKS.md +73 -0
- package/CHANGELOG.md +59 -4
- package/CODE-OF-CONDUCT.md +83 -83
- package/CONTRIBUTING.md +92 -97
- package/FAQ.md +132 -105
- package/GLOSSARY.md +34 -0
- package/LICENSE.md +21 -21
- package/PUBLISH.md +82 -77
- package/README.md +220 -6
- package/REFACTOR-LOG.md +40 -40
- package/ROADMAP.md +31 -42
- package/SECURITY-DEFAULTS.md +118 -0
- package/SECURITY.md +80 -79
- package/SUMMARY.md +31 -8
- package/TESTING.md +140 -140
- package/dist/{agent-5D3BVWNK.js → agent-C64T66XT.js} +4 -4
- package/dist/agent-C64T66XT.js.map +1 -0
- package/dist/{chunk-B7WLHC4W.js → chunk-5OD5UWB5.js} +322 -121
- package/dist/chunk-5OD5UWB5.js.map +1 -0
- package/dist/chunk-GOGI3JQD.js +1637 -0
- package/dist/chunk-GOGI3JQD.js.map +1 -0
- package/dist/{chunk-2F66BZYJ.js → chunk-VEZQT5SX.js} +80 -8
- package/dist/chunk-VEZQT5SX.js.map +1 -0
- package/dist/cli/index.js +2058 -18
- package/dist/cli/index.js.map +1 -1
- package/dist/core/index.d.ts +682 -3
- package/dist/core/index.js +1 -1
- package/dist/index.d.ts +102 -14
- package/dist/index.js +55 -29
- package/dist/index.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/types-BOMap-tI.d.ts +389 -0
- package/docs/PRD03.md +119 -0
- package/docs/PRD06.md +125 -0
- package/docs/SETUP.md +94 -94
- package/docs/TROUBLESHOOTING.md +113 -113
- package/docs/adr/0001-record-architecture-decisions.md +44 -0
- package/docs/adr/0002-plugin-architecture.md +53 -0
- package/docs/adr/0003-recursive-task-decomposition.md +57 -0
- package/docs/adr/0004-local-first-security.md +58 -0
- package/docs/adr/0005-data-directory-layout.md +69 -0
- package/examples/basic.yaml +61 -61
- package/package.json +103 -102
- package/schema/config.schema.json +119 -119
- package/speexor.config.yaml.example +30 -30
- package/dist/agent-5D3BVWNK.js.map +0 -1
- package/dist/chunk-2F66BZYJ.js.map +0 -1
- package/dist/chunk-B7WLHC4W.js.map +0 -1
- package/dist/chunk-SXALZEOJ.js +0 -345
- package/dist/chunk-SXALZEOJ.js.map +0 -1
- package/dist/types-0q_okI2g.d.ts +0 -205
package/docs/PRD06.md
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# PRD06: Gap Analysis Menyeluruh & Rencana Pengembangan Lanjutan — Speexor
|
|
2
|
+
|
|
3
|
+
**Codename:** Speexor — Documentation Integrity & Execution-Readiness Pass
|
|
4
|
+
**Versi:** 6.0 — Audit lintas-dokumen (PRD01–PRD05 + 14 file pendukung) dan rencana pengembangan berikutnya
|
|
5
|
+
**Penulis:** Aditya (dengan bantuan Claude)
|
|
6
|
+
**Tanggal:** 30 Juni 2026
|
|
7
|
+
**Status:** Draft untuk validasi sebelum eksekusi
|
|
8
|
+
|
|
9
|
+
> Dokumen ini **bukan** PRD fitur baru di atas tumpukan v1–v5. Ini adalah audit generasi-ke-2: PRD05 sudah mengaudit PRD01–04 dan memperbaiki banyak hal (rebrand, sandboxing, approval model, dst). Dokumen ini mengaudit **seluruh repositori dokumentasi** — termasuk PRD05 sendiri dan 14 file pendukung (README, ARCHITECTURE, API-REFERENCE, SECURITY, TESTING, dll) — untuk inkonsistensi yang muncul _setelah_ v5 ditulis, file yang rusak/kosong, dan klaim yang tidak match antar dokumen. Bagian kedua dokumen ini adalah pipeline pengembangan konkret untuk fase berikutnya.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Bagian A — Temuan Audit (Gap & Masalah)
|
|
14
|
+
|
|
15
|
+
### A.1 Temuan Kritis (blocking, harus diperbaiki sebelum lanjut development)
|
|
16
|
+
|
|
17
|
+
| # | Temuan | Lokasi | Dampak |
|
|
18
|
+
| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
19
|
+
| **C1** | **`PRD03.md` kosong (0 byte, 0 baris).** Seluruh rantai dokumen mengasumsikan kontinuitas v1→v2→v3→v4→v5, tapi v3 hilang total. PRD04 dan PRD05 menyebut diri "dibangun di atas v1, v2, dan v3" tanpa pernah menjelaskan apa isi v3. | `PRD03.md` | Tinggi — rantai keputusan produk terputus; tidak ada yang tahu fitur/keputusan apa yang lahir di v3 sebelum v4 dimulai. Semua FR di PRD04 yang merujuk "per v3 §x" tidak bisa diverifikasi. |
|
|
20
|
+
| **C2** | **`SECURITY-DEFAULTS.md` tidak pernah dibuat**, padahal dirujuk sebagai dependency selesai di 5 tempat berbeda (ROADMAP M22c "✅ Done"-adjacent, SUMMARY.md Quick Links, CHANGELOG 0.2.0 "Added", PRD05 FR-94, PRD05 M22c milestone). CHANGELOG bahkan menulis "5 Architecture Decision Records di `docs/adr/`" dan SUMMARY menautkan `./docs/adr/` — folder ini juga tidak ada di upload manapun. | SUMMARY.md, ROADMAP.md, CHANGELOG.md, PRD05.md | Tinggi — dokumentasi mengklaim sesuatu sudah selesai (✅ Done) padahal artefaknya tidak eksis. Ini "phantom deliverable". |
|
|
21
|
+
| **C3** | **Sandbox model kontradiksi yang belum benar-benar selesai.** PRD05 §"Fix" (sekitar baris 52-53) secara eksplisit mengoreksi PRD04 FR-72 bahwa `worker_threads` BUKAN security boundary, dan merekomendasikan `isolated-vm`/container/VM. CHANGELOG 0.2.0 menulis "IsolatedSandbox reimplemented with `node:vm` (not worker_threads) for true security boundary" — tapi `node:vm` **juga bukan security boundary yang aman** (dokumentasi Node.js sendiri secara eksplisit memperingatkan `vm` module tidak aman untuk menjalankan kode tidak tepercaya). Jadi "perbaikan" di CHANGELOG mengganti satu kesalahan teknis dengan kesalahan teknis lain yang setara. | CHANGELOG.md vs PRD05.md | Tinggi — ini klaim keamanan yang salah, dipakai untuk menjalankan kode AI-generated dari agent pihak ketiga. Berisiko nyata jika diimplementasikan apa adanya. |
|
|
22
|
+
| **C4** | **Versi config schema tidak konsisten.** README.md contoh config memakai `version: "1"`. ARCHITECTURE.md juga memakai `version: "1"`. Tapi PRD04 menulis manifest field `"speexorApiVersion": "^4.0.0"`, dan API-REFERENCE.md (dokumen "final"/konsolidasi) menulis skema config dengan `version: "5"`. Tidak ada migration note yang menjelaskan kapan `version: "1"` di README harus jadi `"5"`, padahal FR-90 (config schema migration tooling) justru ada untuk menangani migrasi versi config — tapi README sendiri tidak pernah diperbarui mengikuti FR ini. | README.md, ARCHITECTURE.md, API-REFERENCE.md, PRD04.md | Sedang-Tinggi — dokumen "cara mulai" (README) akan membuat user generate config yang sudah outdated relatif terhadap schema final. |
|
|
23
|
+
| **C5** | **Branding/package scope tidak final dan saling tumpang tindih.** PUBLISH.md menyebut org npm `@speexjs` dan repo GitHub `github.com/superdevids/speexjs`. CONTRIBUTING.md juga clone dari `speexjs.git`. Tapi README, CHANGELOG, ROADMAP, PRD04, PRD05 semua memakai scope `@speexor/*` (`@speexor/sdk`, `@speexor/ext-*`). Tidak pernah dijelaskan: apakah `speexjs` adalah nama **monorepo/organisasi**, dan `speexor` adalah nama **package/produk** di dalamnya — atau ini sisa rebrand yang belum dibereskan (mirip kasus Konduktor→Speexor di PRD05 yang sudah diaudit, tapi audit itu sendiri melewatkan layer `speexjs`). | PUBLISH.md, CONTRIBUTING.md vs README/CHANGELOG/PRD04/PRD05 | Sedang — risiko publish ke scope npm yang salah, broken link di docs, dan kebingungan kontributor baru. |
|
|
24
|
+
|
|
25
|
+
### A.2 Temuan Mayor (penting, tapi tidak langsung blocking)
|
|
26
|
+
|
|
27
|
+
| # | Temuan | Lokasi | Dampak |
|
|
28
|
+
| ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
29
|
+
| **M1** | **Test count diklaim presisi ("19 test files, ~320 tests") di 3 dokumen berbeda (README, SUMMARY, CHANGELOG) padahal REFACTOR-LOG.md — log historis yang seharusnya jadi sumber kebenaran proses — menyatakan eksplisit "No test files yet (vitest configured but no tests written)" sebagai entri terakhirnya.** Tidak ada entri REFACTOR-LOG susulan yang mencatat _kapan_ 320 tes itu ditulis. Untuk project yang baru "M0.1.0" dirilis di tanggal yang sama (2026-06-30) dengan rebuild dari nol, klaim 320 test yang presisi tanpa jejak proses patut dicurigai sebagai proyeksi/target, bukan fakta terukur. | README.md, SUMMARY.md, CHANGELOG.md vs REFACTOR-LOG.md | Sedang — risiko overclaiming readiness; kalau dipublikasikan sebagai status real, akan menyesatkan kontributor/user yang mengecek coverage. |
|
|
30
|
+
| **M2** | **Tumpang tindih penomoran FR (Functional Requirement).** PRD04 memakai rentang FR-63 s.d. FR-82+ untuk fitur v4-nya. PRD05 lalu memakai FR-83 s.d. FR-97 untuk temuan auditnya sendiri — tapi PRD05 _juga_ memuat referensi balik ke "FR-22" (dari PRD02) dan "FR-39", "FR-72" tanpa namespace versi yang jelas (mis. "v2 FR-22" vs "v4 FR-72"). Karena FR-72 dipakai PRD04 untuk _sandboxing_, sementara dokumen lain merujuk FR-72 secara generik, ada ambiguitas penomoran lintas-versi yang akan menyulitkan traceability begitu jumlah PRD bertambah. | PRD02, PRD04, PRD05 | Sedang — tracing requirement→implementation akan rapuh; butuh ID requirement global yang tidak reset/tumpang tindih per dokumen. |
|
|
31
|
+
| **M3** | **Tech stack di PRD01 (fondasi yang menurut PRD02 "tetap berlaku") tidak sama dengan apa yang benar-benar dibangun.** PRD01 §10 secara eksplisit memilih **NestJS** untuk dashboard backend dan **Next.js** untuk dashboard frontend, plus **SQLite via Prisma** untuk state. Tapi REFACTOR-LOG.md mendokumentasikan keputusan sebaliknya: "Built-in HTTP Dashboard: Using Node.js built-in `http` module instead of Express/NestJS to keep dependencies minimal" dan "Synchronous File I/O for State: `SessionStore` uses `readFileSync`/`writeFileSync`" (bukan SQLite/Prisma). CHANGELOG 0.2.0 baru memperkenalkan SQLite (lewat Task Graph Persistence) — itu pun cuma untuk task graph, bukan general session store. Tidak ada PRD manapun yang secara eksplisit mencabut keputusan tech stack PRD01 §10; ini adalah _silent architecture drift_ yang hanya tercatat di REFACTOR-LOG, bukan di PRD manapun. | PRD01 §10 vs REFACTOR-LOG.md vs CHANGELOG.md | Sedang — pembaca yang hanya baca PRD (bukan REFACTOR-LOG) akan punya ekspektasi stack yang salah total. |
|
|
32
|
+
| **M4** | **Monorepo layout di PRD01 §11 (banyak `packages/*` terpisah: `agent-opencode`, `tracker-github`, dst., masing-masing bisa diinstall independen sesuai FR-14) bertentangan dengan keputusan REFACTOR-LOG "Monorepo as Single Package: v1 lives in a single `speexor` package with internal module separation" dan "No Dynamic Plugin Loading: All built-in plugins are hardcoded in `loadAllPlugins()`."** FR-14 PRD01 eksplisit minta adapter sebagai package terpisah yang bisa diinstall independen (`@speexor/agent-opencode`, dst) — ini secara langsung berlawanan dengan desain final "hardcoded in loadAllPlugins()". | PRD01 FR-14 vs REFACTOR-LOG.md | Sedang — FR-14 belum pernah secara resmi di-deprecate, padahal implementasinya sudah menyimpang total. |
|
|
33
|
+
| **M5** | **CLI command set tidak sinkron antar dokumen.** API-REFERENCE.md (dianggap sumber kebenaran final, M22c "Documentation Consolidation") mendaftar command `speexor config validate` dan `speexor eval decisions`. ROADMAP.md menyebut command yang sama sebagai bagian M22b ("✅ Done" di SUMMARY milestone table). Tapi FAQ.md — dokumen yang seharusnya menjelaskan command ke pengguna baru — sama sekali tidak menyebut `task submit`, `ext search/install/list/update/remove`, `config validate`, atau `eval decisions`, padahal command-command itu sudah "Done" sejak v2/v4/v5. FAQ.md terlihat membeku di level command-set v1 (start, agent spawn, list, stop, logs, config-help). | FAQ.md vs API-REFERENCE.md vs ROADMAP.md | Sedang — dokumen onboarding utama (FAQ) sudah jauh tertinggal dari fitur nyata produk. |
|
|
34
|
+
| **M6** | **Dashboard "no telemetry/no cloud dependency, fully local-first" (SECURITY.md) belum direkonsiliasi dengan Extension Marketplace.** SECURITY.md §"Network Security" menulis "No telemetry or tracking" dan "No cloud dependency — fully local-first." Tapi fitur Extension Manager (CHANGELOG 0.2.0, README §"Extension Marketplace") secara desain butuh `marketplaceIndex` (GitHub-based registry) dan `speexor ext search <query>` yang network call ke registry eksternal. SECURITY.md belum diperbarui untuk mencantumkan exception ini sebagai _expected_ network behavior, sehingga klaim "fully local-first" sudah tidak akurat sejak fitur marketplace ditambahkan di 0.2.0, tanpa update SECURITY.md. | SECURITY.md vs CHANGELOG.md / README.md | Sedang — klaim keamanan/privasi yang sudah stale berisiko menyesatkan user yang menjadikan SECURITY.md acuan compliance. |
|
|
35
|
+
| **M7** | **Approval/governance default belum 100% konsisten penamaan antara GLOSSARY dan API-REFERENCE.** GLOSSARY.md mendefinisikan "Approvals" sebagai _satu_ panel unifikasi (per FR-87) dan eksplisit menandai "Review Queue (deprecated name)". Tapi config schema di API-REFERENCE.md masih punya field terpisah `governance.autoApproveProposedTasks` dan `riskPolicy.autoApprove`/`requireApproval` sebagai dua blok config yang berbeda nama dan struktur (bukan field bersama di bawah satu namespace "approvals"), yang berpotensi membingungkan kontributor yang baru baca GLOSSARY lalu mengharapkan satu blok `approvals:` di YAML. | GLOSSARY.md vs API-REFERENCE.md | Rendah-Sedang — bukan bug, tapi friksi pemahaman: istilah UI sudah disatukan, tapi representasi config belum mengikuti. |
|
|
36
|
+
|
|
37
|
+
### A.3 Temuan Minor (kebersihan dokumentasi)
|
|
38
|
+
|
|
39
|
+
| # | Temuan | Lokasi |
|
|
40
|
+
| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
|
|
41
|
+
| **m1** | `\r\n` (CRLF) line endings campur dengan `\n` (LF) lintas file — PRD01/02/04/05, CONTRIBUTING, PUBLISH, FAQ, SECURITY, dll memakai CRLF; README, ARCHITECTURE, API-REFERENCE, GLOSSARY, BENCHMARKS memakai LF. Tidak fatal, tapi akan memicu diff noise besar dan masalah lint di CI lintas-OS. | Hampir semua file |
|
|
42
|
+
| **m2** | BENCHMARKS.md seluruhnya berisi placeholder `—` (belum ada satupun angka terukur) padahal SUMMARY.md sudah menandai milestone yang relevan (M6 — "Polish & Testing") sebagai ✅ Done, dan ROADMAP juga menempatkan benchmark sebagai bagian Q3 2026 "Done". Target ada, baseline belum pernah dijalankan. | BENCHMARKS.md |
|
|
43
|
+
| **m3** | CHANGELOG mencantumkan dua versi `[0.1.0]` dan `[0.2.0]` dengan **tanggal rilis yang sama persis** (2026-06-30) — realistis untuk "all at once" docs generation, tapi tidak realistis sebagai catatan rilis sungguhan (artinya CHANGELOG ini belum pernah dipakai sebagai jurnal rilis asli, hanya backfill). | CHANGELOG.md |
|
|
44
|
+
| **m4** | SUMMARY.md milestone table mencantumkan `M22a/M22b/M22c` (fix milestones dari v5) **sebelum** `M13 — Hardening & Cost Guard` secara penomoran, tapi keduanya ditandai sejajar tanpa urutan kronologis/dependency yang jelas terhadap M5–M12 yang sudah Done. Penomoran milestone (M0...M13, lalu M22a-c) melompat tanpa M14-M21 — celah penomoran ini tidak dijelaskan di manapun (apakah disengaja untuk reserved future milestones, atau sisa renumbering yang tidak rapi). | SUMMARY.md, ROADMAP.md |
|
|
45
|
+
| **m5** | ROADMAP.md masih mencantumkan milestone M7 ("Recursive Task Decomposition") dan M9 ("Extension Marketplace") sebagai **upcoming** (belum dikerjakan, target Q4 2026/Q1 2027), padahal CHANGELOG 0.2.0 dan SUMMARY.md milestone table menandai kapabilitas yang sama (task decomposition di M7-PRD asli, extension manager) sebagai **sudah selesai** lewat milestone M7-M12 versi SUMMARY yang berbeda penomoran dari versi ROADMAP. ROADMAP dan SUMMARY pakai sistem penomoran M-number yang **berbeda untuk milestone yang sama**, tanpa cross-reference. | ROADMAP.md vs SUMMARY.md |
|
|
46
|
+
| **m6** | GLOSSARY mendefinisikan istilah "Library" tidak konsisten — istilah ini didefinisikan di PRD04 §"Terminologi" (baris 72) sebagai "versioned, installable code dependency... at the Node.js package level", tapi GLOSSARY.md final (hasil konsolidasi M22c) **tidak memuat entri "Library" sama sekali**, padahal PRD04 eksplisit membedakannya dari "Plugin"/"Skill". Istilah hilang di proses konsolidasi. | PRD04.md vs GLOSSARY.md |
|
|
47
|
+
| **m7** | CODE-OF-CONDUCT.md dan CONTRIBUTING.md memakai email kontak yang sama (`opensource@superdevids.com`) — domain `superdevids.com` ini konsisten dengan identitas Aditya (`iniadittt`/SuperJS/`@superdevid/*`), tapi PUBLISH.md & CONTRIBUTING.md merujuk repo di organisasi GitHub `superdevids` sementara README tidak pernah menyebut org GitHub secara eksplisit — sebaiknya disamakan eksplisit di satu tempat (mis. README footer) supaya tidak harus disimpulkan dari email domain. | Lintas file |
|
|
48
|
+
|
|
49
|
+
### A.4 Ringkasan Pola Masalah (root cause, bukan gejala satu-satu)
|
|
50
|
+
|
|
51
|
+
1. **Tidak ada "source of truth" tunggal yang versioned.** Setiap PRD baru (v1→v5) menambah lapisan baru di atas lapisan sebelumnya secara aditif, tapi tidak ada proses _mandatory sync_ yang memaksa dokumen pendukung (README, ARCHITECTURE, FAQ, SECURITY, GLOSSARY) ikut diperbarui setiap kali sebuah PRD baru mengubah keputusan lama. M22c ("Documentation Consolidation") sudah mencoba ini sekali, tapi hanya menyentuh GLOSSARY + API-REFERENCE — README, FAQ, SECURITY, BENCHMARKS terlewat.
|
|
52
|
+
2. **Klaim status "✅ Done" terlalu murah dipakai.** Banyak milestone ditandai selesai padahal artefak pendukungnya (SECURITY-DEFAULTS.md, docs/adr/, benchmark baseline, test suite yang terverifikasi) tidak benar-benar ada di upload. Ini pola "dokumentasi mendahului implementasi" yang wajar untuk draft PRD, tapi berbahaya begitu CHANGELOG/SUMMARY mulai mengklaimnya sebagai fakta rilis.
|
|
53
|
+
3. **PRD05 sendiri (dokumen audit) tidak mengaudit dirinya sendiri/dokumen pendukung** — fokusnya murni ke PRD01-04, sehingga drift di README/FAQ/SECURITY/BENCHMARKS/PUBLISH/CONTRIBUTING tidak pernah masuk radar sampai audit ini (PRD06).
|
|
54
|
+
4. **Penomoran (FR, milestone M-number) tidak global/append-only** sehingga setiap dokumen baru berisiko tabrakan ID atau loncatan tidak konsisten.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Bagian B — Pipeline Pengembangan Lanjutan
|
|
59
|
+
|
|
60
|
+
Pipeline ini dirancang untuk **dieksekusi solo oleh Aditya** (vibe coding + agent assistance), sejalan dengan filosofi v1 ("setup cepat, plugin-first, agent-agnostic") dan konsisten dengan apa yang sudah dibangun (bukan rombak total). Difase jadi 4 track yang bisa jalan semi-paralel.
|
|
61
|
+
|
|
62
|
+
### Track 0 — Dokumentasi & Integritas (wajib duluan, ~1 minggu)
|
|
63
|
+
|
|
64
|
+
| ID | Item | Output |
|
|
65
|
+
| ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
|
|
66
|
+
| T0-1 | Isi ulang `PRD03.md` (rekonstruksi retroaktif) atau **deprecate eksplisit**: tulis 1 paragraf di awal PRD04 yang menyatakan "v3 tidak pernah dipublikasikan terpisah, fitur-fiturnya digabung ke v4 §X" — pilih salah satu, jangan dibiarkan kosong. | PRD03.md terisi atau catatan deprecation resmi |
|
|
67
|
+
| T0-2 | Buat `SECURITY-DEFAULTS.md` yang benar-benar berisi 2-layer model (Extension Permissions vs Action Risk Tiers) seperti dijanjikan FR-94. | File baru |
|
|
68
|
+
| T0-3 | Buat `docs/adr/` dengan minimal 5 ADR riil: (1) pilihan worktree isolation, (2) keputusan sandbox model FINAL (lihat T0-4), (3) single-package vs multi-package monorepo, (4) SQLite vs JSON state store, (5) two-axis approval model. | 5 file ADR |
|
|
69
|
+
| T0-4 | **Putuskan sandbox model final secara teknis benar** — bukan `worker_threads` (M22c klaim awal), bukan `node:vm` saja (klaim CHANGELOG 0.2.0). Opsi realistis: `isolated-vm` (V8 isolate sejati) untuk extension ringan, atau `child_process` dengan OS-level user/permission restriction untuk extension yang butuh akses shell. Dokumentasikan trade-off startup latency vs keamanan secara eksplisit, lalu update CHANGELOG dan FR-72/72(v4)/M22a dengan koreksi resmi. | Update CHANGELOG + ADR + FR correction note |
|
|
70
|
+
| T0-5 | Sinkronkan `version:` di README/ARCHITECTURE config example ke schema final (`"5"` atau apapun versi config schema aktual saat itu), dan jalankan `speexor config validate` sungguhan terhadap contoh tsb sebagai bukti. | README/ARCHITECTURE update |
|
|
71
|
+
| T0-6 | Selesaikan ambiguitas branding `speexjs` (org/monorepo) vs `speexor` (package/produk) vs `speexjs.org` — tulis 1 paragraf definitif di README "Naming" dan terapkan konsisten ke PUBLISH.md & CONTRIBUTING.md. | README + PUBLISH + CONTRIBUTING update |
|
|
72
|
+
| T0-7 | Audit ulang FAQ.md supaya mencerminkan command-set aktual (`task submit`, `ext *`, `config validate`, `eval decisions`). | FAQ.md update |
|
|
73
|
+
| T0-8 | Tambahkan kalimat exception eksplisit di SECURITY.md §Network Security untuk Extension Marketplace (`marketplaceIndex` registry call), supaya klaim "fully local-first" tetap akurat dengan disclaimer jelas. | SECURITY.md update |
|
|
74
|
+
| T0-9 | Normalisasi line ending (LF) lintas semua file `.md` via `.gitattributes` + format pass sekali. | `.gitattributes` + reformat |
|
|
75
|
+
| T0-10 | Perkenalkan skema penomoran requirement **global** (mis. `SPX-FR-001`, append-only, tidak reset per versi PRD) dan migrasikan referensi FR-1...FR-97 yang ada ke index global ini di dokumen baru `REQUIREMENTS-INDEX.md`. | File baru + mapping tabel |
|
|
76
|
+
|
|
77
|
+
### Track 1 — Hardening Eksekusi (M13, lanjutan dari SUMMARY "🔄 In Progress")
|
|
78
|
+
|
|
79
|
+
Fokus: menutup gap antara klaim "production-ready architecture" dan kenyataan implementasi yang masih minim test/benchmark riil.
|
|
80
|
+
|
|
81
|
+
1. **Cost Guard enforcement nyata** — implementasikan `riskPolicy.budgetLimitUSD` benar-benar menghentikan agent (bukan hanya warning di 80%), dengan test integrasi yang memverifikasi halt di 100%.
|
|
82
|
+
2. **Benchmark baseline riil** — jalankan skrip yang sudah ada di BENCHMARKS.md (`hyperfine`, `wrk`, `node benchmarks/store-throughput.js`) dan isi tabel "Benchmark Results History" dengan angka asli versi 0.2.0, bukan placeholder `—`.
|
|
83
|
+
3. **Test suite audit** — verifikasi klaim "19 file / ~320 test" dengan menjalankan `pnpm test:coverage` sungguhan dan menempelkan output coverage report sebagai lampiran/link CI badge di README, supaya klaim M1 (lihat Bagian A.2) berubah dari "diklaim" jadi "terbukti".
|
|
84
|
+
4. **Session store migrasi dari sync I/O ke async** — REFACTOR-LOG sudah menandai ini sebagai technical debt sejak v0.1.0; selesaikan sebelum jumlah agent paralel bertambah (relevan untuk target "≥10 agent aktif paralel" di NFR PRD01).
|
|
85
|
+
5. **`getLiveStream()` implementasi nyata** — REFACTOR-LOG menandai ini "not implemented" di kedua runtime plugin (tmux & process); ini blocking untuk M8 (Real-Time Terminal) di ROADMAP.
|
|
86
|
+
|
|
87
|
+
### Track 2 — Fitur Lanjutan (selaras roadmap M7/M8/M9/M10/M11 yang sudah didefinisikan)
|
|
88
|
+
|
|
89
|
+
Tidak menambah scope baru di luar yang sudah direncanakan — fokus eksekusi prioritas berikut, urut dependency:
|
|
90
|
+
|
|
91
|
+
1. **M8 — Real-Time Terminal** (WebSocket + xterm.js): bergantung langsung pada penyelesaian Track 1.5 (`getLiveStream`). Tanpa ini, Terminal Plugin (sudah didefinisikan interface-nya di API-REFERENCE) tetap kosong.
|
|
92
|
+
2. **M9 — Extension Marketplace**: lanjutkan dari Plugin SDK yang sudah ada scaffold-nya (CHANGELOG 0.2.0), tapi **wajib menuntaskan T0-4 (sandbox model) dulu** sebelum mengizinkan instalasi extension pihak ketiga — urutan ini penting karena marketplace = permukaan serangan terbesar di seluruh sistem (menjalankan kode tak tepercaya dari registry eksternal).
|
|
93
|
+
3. **Skill/CEO-Orchestrator integration** (Open Question #3 di PRD01, belum pernah dijawab di v2-v5): ini adalah diferensiasi besar yang relevan dengan ekosistem yang sudah dibangun Aditya (66-agent/268-skill CEO Orchestrator). Usulan: jadikan CEO Orchestrator skill-set sebagai _Extension_ resmi pertama di Marketplace (`@speexor/ext-ceo-orchestrator`) begitu T0/M9 selesai — bukan core dependency, supaya Speexor tetap agent-agnostic sesuai G4/non-goals.
|
|
94
|
+
4. **M10 — Advanced Security & Compliance**: secret scanning di output agent (penting karena agent menulis & push kode otomatis — risiko kebocoran API key/token via commit otomatis belum dibahas eksplisit di SECURITY.md manapun).
|
|
95
|
+
5. **M11 — Multi-Host**: tunda sampai Track 1 & 2.1-2.4 stabil; ini paling jauh dari kebutuhan solo-dev saat ini (target user primer di PRD01 §4 tetap "kamu sendiri").
|
|
96
|
+
|
|
97
|
+
### Track 3 — Refactor Arsitektural (opsional, evaluasi cost/benefit dulu)
|
|
98
|
+
|
|
99
|
+
| Opsi | Kapan layak dilakukan |
|
|
100
|
+
| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
101
|
+
| Pecah dari single-package `packages/speexor` jadi multi-package sesuai FR-14 asli (per-adapter installable) | Hanya jika benar-benar akan open-source dan komunitas mulai kontribusi adapter baru secara aktif — sebelum itu, single-package lebih murah maintenance untuk solo dev (sejalan keputusan REFACTOR-LOG, M4 di atas tidak perlu "diperbaiki", cukup FR-14 di-deprecate resmi). |
|
|
102
|
+
| Migrasi dashboard backend ke NestJS sesuai PRD01 asli | Tidak direkomendasikan — `http` module built-in sudah terbukti cukup (M4 Dashboard MVP "Done"); NestJS hanya menambah dependency tanpa kebutuhan teknis yang jelas saat ini. Sebaiknya PRD01 §10 di-superscript dengan catatan "superseded by REFACTOR-LOG 2026-06-30" daripada benar-benar dimigrasikan. |
|
|
103
|
+
| SQLite penuh untuk seluruh state (bukan cuma Task Graph) | Layak setelah Track 1.4 (async I/O) selesai dan jumlah project/agent paralel terbukti butuh concurrency tulis tinggi (>100 writes/sec target di BENCHMARKS belum pernah diuji — uji dulu sebelum migrasi besar). |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Bagian C — Prioritas Eksekusi (Ringkas)
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
Minggu 1 : Track 0 (T0-1 s.d. T0-10) — WAJIB, semua kerja lain bergantung pada dokumentasi yang konsisten
|
|
111
|
+
Minggu 2-3 : Track 1 (Cost Guard, Benchmark riil, Test audit, Async store, getLiveStream)
|
|
112
|
+
Minggu 4-6 : Track 2.1 (M8 Real-Time Terminal) → 2.2 (M9 Marketplace, gated oleh T0-4) → 2.3 (CEO Orchestrator extension)
|
|
113
|
+
Minggu 7+ : Track 2.4 (M10 Security/Compliance), evaluasi Track 3 opsional
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Definition of Done untuk Track 0** (gate sebelum lanjut Track 1): tidak ada lagi file `.md` yang kosong, tidak ada lagi link mati (`SECURITY-DEFAULTS.md`, `docs/adr/`), tidak ada lagi klaim "✅ Done" tanpa artefak yang bisa diverifikasi, dan satu sumber kebenaran branding/versioning sudah ditulis eksplisit.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Bagian D — Open Questions Baru (untuk Aditya, sebelum eksekusi Track 0)
|
|
121
|
+
|
|
122
|
+
1. Apakah `PRD03.md` akan direkonstruksi (isi ulang dengan asumsi best-effort dari konteks PRD04), atau cukup dihapus dari rantai referensi dan ditandai "tidak pernah dipublikasikan"?
|
|
123
|
+
2. Untuk sandbox model final (T0-4): apakah startup latency tambahan dari `isolated-vm`/container masih bisa diterima untuk workflow solo-dev kamu, atau prioritas tetap kecepatan dengan risiko keamanan yang didokumentasikan eksplisit (extension marketplace ditunda sampai sandbox benar)?
|
|
124
|
+
3. Apakah nama organisasi final adalah `speexjs` (monorepo/brand payung, sejalan dengan `bjir.tech`/`@superdevid/*` sebagai pola penamaan ekosistem kamu yang lain) dengan `speexor` sebagai satu produk di dalamnya — atau `speexor` berdiri sendiri dan `speexjs` di PUBLISH/CONTRIBUTING adalah sisa nama lama yang harus diganti total?
|
|
125
|
+
4. Integrasi CEO Orchestrator sebagai Extension resmi (Track 2.3) — apakah ini prioritas tinggi (karena jadi diferensiasi besar vs AO) atau tetap dijadikan exploratory setelah M9 stabil?
|
package/docs/SETUP.md
CHANGED
|
@@ -1,94 +1,94 @@
|
|
|
1
|
-
# Speexor Setup Guide
|
|
2
|
-
|
|
3
|
-
## Prerequisites
|
|
4
|
-
|
|
5
|
-
- **Node.js** >= 18.0.0
|
|
6
|
-
- **pnpm** (recommended) or npm
|
|
7
|
-
- **Git** >= 2.30 (for `git worktree` support)
|
|
8
|
-
- **GitHub CLI** (`gh`) — for tracker & SCM plugins (optional for local-only mode)
|
|
9
|
-
- **tmux** >= 3.0 — for tmux runtime (macOS/Linux, optional with process fallback)
|
|
10
|
-
- One or more AI coding agent CLIs:
|
|
11
|
-
- [OpenCode CLI](https://github.com/superdevids/opencode)
|
|
12
|
-
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
|
|
13
|
-
- [Aider](https://aider.chat/)
|
|
14
|
-
- [Codex CLI](https://github.com/openai/codex)
|
|
15
|
-
|
|
16
|
-
## Installation
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Via npm
|
|
20
|
-
npm install -g speexor
|
|
21
|
-
|
|
22
|
-
# Or via pnpm
|
|
23
|
-
pnpm add -g speexor
|
|
24
|
-
|
|
25
|
-
# Or run from the monorepo
|
|
26
|
-
cd speexjs
|
|
27
|
-
pnpm install
|
|
28
|
-
pnpm --filter speexor build
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## Quick Start
|
|
32
|
-
|
|
33
|
-
### 1. Initialize a project
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
cd /path/to/your/project
|
|
37
|
-
speexor start https://github.com/username/repo.git
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
This will:
|
|
41
|
-
- Create `speexor.config.yaml` with default configuration
|
|
42
|
-
- Create `.speexor/` directory for worktrees and logs
|
|
43
|
-
- Start the dashboard at `http://localhost:3000`
|
|
44
|
-
|
|
45
|
-
### 2. Spawn an agent for a task
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
# Using a GitHub issue ID
|
|
49
|
-
speexor agent spawn --task 42 --agent opencode
|
|
50
|
-
|
|
51
|
-
# Using a custom task ID
|
|
52
|
-
speexor agent spawn --task "feature-auth" --agent claude-code
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 3. Monitor progress
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
# Open dashboard in browser
|
|
59
|
-
open http://localhost:3000
|
|
60
|
-
|
|
61
|
-
# List active sessions
|
|
62
|
-
speexor list
|
|
63
|
-
|
|
64
|
-
# View agent logs
|
|
65
|
-
speexor logs <session-id>
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### 4. Stop a session
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
speexor stop <session-id>
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Configuration
|
|
75
|
-
|
|
76
|
-
See `speexor config-help` for full schema reference, or refer to `examples/basic.yaml` in the package.
|
|
77
|
-
|
|
78
|
-
## Plugin Architecture
|
|
79
|
-
|
|
80
|
-
Speexor uses a 7-slot plugin architecture:
|
|
81
|
-
|
|
82
|
-
| Slot | Purpose | Default Plugin |
|
|
83
|
-
|------|---------|---------------|
|
|
84
|
-
| **Agent** | AI coding agent adapter | OpenCode, Claude Code, Aider, Codex |
|
|
85
|
-
| **Runtime** | Process execution environment | tmux (Unix), Process (Windows) |
|
|
86
|
-
| **Workspace** | Code isolation strategy | Git Worktree |
|
|
87
|
-
| **Tracker** | Task/issue source | GitHub Issues |
|
|
88
|
-
| **SCM** | Git/PR operations | GitHub (gh CLI) |
|
|
89
|
-
| **Notifier** | Alert channel | Desktop notifications |
|
|
90
|
-
| **Terminal** | Live session viewer | Web (dashboard) |
|
|
91
|
-
|
|
92
|
-
## Troubleshooting
|
|
93
|
-
|
|
94
|
-
See [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for common issues.
|
|
1
|
+
# Speexor Setup Guide
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
- **Node.js** >= 18.0.0
|
|
6
|
+
- **pnpm** (recommended) or npm
|
|
7
|
+
- **Git** >= 2.30 (for `git worktree` support)
|
|
8
|
+
- **GitHub CLI** (`gh`) — for tracker & SCM plugins (optional for local-only mode)
|
|
9
|
+
- **tmux** >= 3.0 — for tmux runtime (macOS/Linux, optional with process fallback)
|
|
10
|
+
- One or more AI coding agent CLIs:
|
|
11
|
+
- [OpenCode CLI](https://github.com/superdevids/opencode)
|
|
12
|
+
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
|
|
13
|
+
- [Aider](https://aider.chat/)
|
|
14
|
+
- [Codex CLI](https://github.com/openai/codex)
|
|
15
|
+
|
|
16
|
+
## Installation
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Via npm
|
|
20
|
+
npm install -g speexor
|
|
21
|
+
|
|
22
|
+
# Or via pnpm
|
|
23
|
+
pnpm add -g speexor
|
|
24
|
+
|
|
25
|
+
# Or run from the monorepo
|
|
26
|
+
cd speexjs
|
|
27
|
+
pnpm install
|
|
28
|
+
pnpm --filter speexor build
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Quick Start
|
|
32
|
+
|
|
33
|
+
### 1. Initialize a project
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
cd /path/to/your/project
|
|
37
|
+
speexor start https://github.com/username/repo.git
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This will:
|
|
41
|
+
- Create `speexor.config.yaml` with default configuration
|
|
42
|
+
- Create `.speexor/` directory for worktrees and logs
|
|
43
|
+
- Start the dashboard at `http://localhost:3000`
|
|
44
|
+
|
|
45
|
+
### 2. Spawn an agent for a task
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Using a GitHub issue ID
|
|
49
|
+
speexor agent spawn --task 42 --agent opencode
|
|
50
|
+
|
|
51
|
+
# Using a custom task ID
|
|
52
|
+
speexor agent spawn --task "feature-auth" --agent claude-code
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 3. Monitor progress
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Open dashboard in browser
|
|
59
|
+
open http://localhost:3000
|
|
60
|
+
|
|
61
|
+
# List active sessions
|
|
62
|
+
speexor list
|
|
63
|
+
|
|
64
|
+
# View agent logs
|
|
65
|
+
speexor logs <session-id>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 4. Stop a session
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
speexor stop <session-id>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Configuration
|
|
75
|
+
|
|
76
|
+
See `speexor config-help` for full schema reference, or refer to `examples/basic.yaml` in the package.
|
|
77
|
+
|
|
78
|
+
## Plugin Architecture
|
|
79
|
+
|
|
80
|
+
Speexor uses a 7-slot plugin architecture:
|
|
81
|
+
|
|
82
|
+
| Slot | Purpose | Default Plugin |
|
|
83
|
+
|------|---------|---------------|
|
|
84
|
+
| **Agent** | AI coding agent adapter | OpenCode, Claude Code, Aider, Codex |
|
|
85
|
+
| **Runtime** | Process execution environment | tmux (Unix), Process (Windows) |
|
|
86
|
+
| **Workspace** | Code isolation strategy | Git Worktree |
|
|
87
|
+
| **Tracker** | Task/issue source | GitHub Issues |
|
|
88
|
+
| **SCM** | Git/PR operations | GitHub (gh CLI) |
|
|
89
|
+
| **Notifier** | Alert channel | Desktop notifications |
|
|
90
|
+
| **Terminal** | Live session viewer | Web (dashboard) |
|
|
91
|
+
|
|
92
|
+
## Troubleshooting
|
|
93
|
+
|
|
94
|
+
See [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for common issues.
|
package/docs/TROUBLESHOOTING.md
CHANGED
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
# Speexor Troubleshooting Guide
|
|
2
|
-
|
|
3
|
-
## Common Issues
|
|
4
|
-
|
|
5
|
-
### "speexor.config.yaml not found"
|
|
6
|
-
|
|
7
|
-
**Cause:** You ran `speexor list` or `speexor agent spawn` without initializing a project first.
|
|
8
|
-
|
|
9
|
-
**Fix:** Run `speexor start <repo-url>` to create the config file, or manually create `speexor.config.yaml` in your project root.
|
|
10
|
-
|
|
11
|
-
### "Not a git repository"
|
|
12
|
-
|
|
13
|
-
**Cause:** You're running `speexor` outside a git repository.
|
|
14
|
-
|
|
15
|
-
**Fix:** Navigate to a git repository or run `git init` first.
|
|
16
|
-
|
|
17
|
-
### "tmux not available"
|
|
18
|
-
|
|
19
|
-
**Cause:** tmux is not installed on your system.
|
|
20
|
-
|
|
21
|
-
**Fix (macOS):**
|
|
22
|
-
```bash
|
|
23
|
-
brew install tmux
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**Fix (Linux):**
|
|
27
|
-
```bash
|
|
28
|
-
sudo apt install tmux # Debian/Ubuntu
|
|
29
|
-
sudo dnf install tmux # Fedora
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
**Fix (Windows):** Speexor will automatically fall back to the Process runtime on Windows.
|
|
33
|
-
|
|
34
|
-
### "GitHub CLI (gh) not found"
|
|
35
|
-
|
|
36
|
-
**Cause:** The `gh` CLI is not installed but required for GitHub tracker/SCM plugins.
|
|
37
|
-
|
|
38
|
-
**Fix:**
|
|
39
|
-
```bash
|
|
40
|
-
# macOS
|
|
41
|
-
brew install gh
|
|
42
|
-
|
|
43
|
-
# Linux (Debian/Ubuntu)
|
|
44
|
-
sudo apt install gh
|
|
45
|
-
|
|
46
|
-
# Windows (winget)
|
|
47
|
-
winget install GitHub.cli
|
|
48
|
-
|
|
49
|
-
# Or manual: https://cli.github.com/
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Agent spawn fails
|
|
53
|
-
|
|
54
|
-
**Cause:** The specified agent CLI is not installed or not in PATH.
|
|
55
|
-
|
|
56
|
-
**Fix:** Ensure the agent CLI is installed and accessible:
|
|
57
|
-
```bash
|
|
58
|
-
# Verify
|
|
59
|
-
opencode --version
|
|
60
|
-
claude --version
|
|
61
|
-
aider --version
|
|
62
|
-
codex --version
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
### "Worktree already exists"
|
|
66
|
-
|
|
67
|
-
**Cause:** A worktree for the same branch already exists, possibly from a previous interrupted session.
|
|
68
|
-
|
|
69
|
-
**Fix:**
|
|
70
|
-
```bash
|
|
71
|
-
# List worktrees
|
|
72
|
-
git worktree list
|
|
73
|
-
|
|
74
|
-
# Remove stale worktree
|
|
75
|
-
speexor stop <session-id>
|
|
76
|
-
# Or manually:
|
|
77
|
-
git worktree remove --force .speexor/worktrees/<task-id>
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### Dashboard not showing
|
|
81
|
-
|
|
82
|
-
**Cause:** Port 3000 might be in use, or the dashboard was not started.
|
|
83
|
-
|
|
84
|
-
**Fix:**
|
|
85
|
-
```bash
|
|
86
|
-
# Specify a different port
|
|
87
|
-
speexor start --port 4000
|
|
88
|
-
|
|
89
|
-
# Or start dashboard only (if already initialized)
|
|
90
|
-
speexor start
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Windows-Specific Issues
|
|
94
|
-
|
|
95
|
-
### ConPTY Fallback
|
|
96
|
-
|
|
97
|
-
On Windows, tmux is not available. Speexor automatically uses the Process runtime instead. This works for most cases but lacks live terminal streaming.
|
|
98
|
-
|
|
99
|
-
### Shell Path
|
|
100
|
-
|
|
101
|
-
If you use PowerShell, the default shell path detection should work. To customize:
|
|
102
|
-
|
|
103
|
-
```yaml
|
|
104
|
-
# In speexor.config.yaml
|
|
105
|
-
plugins:
|
|
106
|
-
runtime: process
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Getting Help
|
|
110
|
-
|
|
111
|
-
- Open an issue: https://github.com/superdevids/speexjs/issues
|
|
112
|
-
- Check the PRD: [PRD01.md](./PRD01.md)
|
|
113
|
-
- Ask in the SpeexJS community
|
|
1
|
+
# Speexor Troubleshooting Guide
|
|
2
|
+
|
|
3
|
+
## Common Issues
|
|
4
|
+
|
|
5
|
+
### "speexor.config.yaml not found"
|
|
6
|
+
|
|
7
|
+
**Cause:** You ran `speexor list` or `speexor agent spawn` without initializing a project first.
|
|
8
|
+
|
|
9
|
+
**Fix:** Run `speexor start <repo-url>` to create the config file, or manually create `speexor.config.yaml` in your project root.
|
|
10
|
+
|
|
11
|
+
### "Not a git repository"
|
|
12
|
+
|
|
13
|
+
**Cause:** You're running `speexor` outside a git repository.
|
|
14
|
+
|
|
15
|
+
**Fix:** Navigate to a git repository or run `git init` first.
|
|
16
|
+
|
|
17
|
+
### "tmux not available"
|
|
18
|
+
|
|
19
|
+
**Cause:** tmux is not installed on your system.
|
|
20
|
+
|
|
21
|
+
**Fix (macOS):**
|
|
22
|
+
```bash
|
|
23
|
+
brew install tmux
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Fix (Linux):**
|
|
27
|
+
```bash
|
|
28
|
+
sudo apt install tmux # Debian/Ubuntu
|
|
29
|
+
sudo dnf install tmux # Fedora
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Fix (Windows):** Speexor will automatically fall back to the Process runtime on Windows.
|
|
33
|
+
|
|
34
|
+
### "GitHub CLI (gh) not found"
|
|
35
|
+
|
|
36
|
+
**Cause:** The `gh` CLI is not installed but required for GitHub tracker/SCM plugins.
|
|
37
|
+
|
|
38
|
+
**Fix:**
|
|
39
|
+
```bash
|
|
40
|
+
# macOS
|
|
41
|
+
brew install gh
|
|
42
|
+
|
|
43
|
+
# Linux (Debian/Ubuntu)
|
|
44
|
+
sudo apt install gh
|
|
45
|
+
|
|
46
|
+
# Windows (winget)
|
|
47
|
+
winget install GitHub.cli
|
|
48
|
+
|
|
49
|
+
# Or manual: https://cli.github.com/
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Agent spawn fails
|
|
53
|
+
|
|
54
|
+
**Cause:** The specified agent CLI is not installed or not in PATH.
|
|
55
|
+
|
|
56
|
+
**Fix:** Ensure the agent CLI is installed and accessible:
|
|
57
|
+
```bash
|
|
58
|
+
# Verify
|
|
59
|
+
opencode --version
|
|
60
|
+
claude --version
|
|
61
|
+
aider --version
|
|
62
|
+
codex --version
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### "Worktree already exists"
|
|
66
|
+
|
|
67
|
+
**Cause:** A worktree for the same branch already exists, possibly from a previous interrupted session.
|
|
68
|
+
|
|
69
|
+
**Fix:**
|
|
70
|
+
```bash
|
|
71
|
+
# List worktrees
|
|
72
|
+
git worktree list
|
|
73
|
+
|
|
74
|
+
# Remove stale worktree
|
|
75
|
+
speexor stop <session-id>
|
|
76
|
+
# Or manually:
|
|
77
|
+
git worktree remove --force .speexor/worktrees/<task-id>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Dashboard not showing
|
|
81
|
+
|
|
82
|
+
**Cause:** Port 3000 might be in use, or the dashboard was not started.
|
|
83
|
+
|
|
84
|
+
**Fix:**
|
|
85
|
+
```bash
|
|
86
|
+
# Specify a different port
|
|
87
|
+
speexor start --port 4000
|
|
88
|
+
|
|
89
|
+
# Or start dashboard only (if already initialized)
|
|
90
|
+
speexor start
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Windows-Specific Issues
|
|
94
|
+
|
|
95
|
+
### ConPTY Fallback
|
|
96
|
+
|
|
97
|
+
On Windows, tmux is not available. Speexor automatically uses the Process runtime instead. This works for most cases but lacks live terminal streaming.
|
|
98
|
+
|
|
99
|
+
### Shell Path
|
|
100
|
+
|
|
101
|
+
If you use PowerShell, the default shell path detection should work. To customize:
|
|
102
|
+
|
|
103
|
+
```yaml
|
|
104
|
+
# In speexor.config.yaml
|
|
105
|
+
plugins:
|
|
106
|
+
runtime: process
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Getting Help
|
|
110
|
+
|
|
111
|
+
- Open an issue: https://github.com/superdevids/speexjs/issues
|
|
112
|
+
- Check the PRD: [PRD01.md](./PRD01.md)
|
|
113
|
+
- Ask in the SpeexJS community
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# ADR-0001: Use Architecture Decision Records
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
Speexor is a plugin-based, agent-agnostic orchestrator for multi-AI coding agents. As the project grows, contributors and maintainers need a clear historical record of why architectural choices were made. Without this, future developers may reverse decisions without understanding the original rationale, leading to inconsistent architecture.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
We will use Architecture Decision Records (ADRs) in `docs/adr/` to document all significant architectural decisions. Each ADR follows this template:
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
# ADR-NNNN: Title
|
|
17
|
+
|
|
18
|
+
## Status
|
|
19
|
+
|
|
20
|
+
[Proposed | Accepted | Deprecated | Superseded by ADR-NNNN]
|
|
21
|
+
|
|
22
|
+
## Context
|
|
23
|
+
|
|
24
|
+
The background, constraints, and forces that led to this decision.
|
|
25
|
+
|
|
26
|
+
## Decision
|
|
27
|
+
|
|
28
|
+
The architectural choice we made and how it addresses the context.
|
|
29
|
+
|
|
30
|
+
## Consequences
|
|
31
|
+
|
|
32
|
+
The trade-offs, benefits, and costs of this decision.
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
- ADRs are numbered sequentially (0001, 0002, ...).
|
|
36
|
+
- ADRs are written in the present tense as of the decision date.
|
|
37
|
+
- ADRs are never deleted; deprecated ADRs link to their replacement.
|
|
38
|
+
- ADRs are committed alongside the code changes they describe.
|
|
39
|
+
|
|
40
|
+
## Consequences
|
|
41
|
+
|
|
42
|
+
- **Positive:** Clear rationale trail for future contributors; easier onboarding; architectural consistency enforced by explicit record-keeping.
|
|
43
|
+
- **Negative:** Overhead of writing and maintaining ADRs; risk of falling behind if decisions are not documented promptly.
|
|
44
|
+
- **Neutral:** ADRs become a permanent part of the codebase in `docs/adr/`.
|