feat(cli): extract Obelisk runtime into npm package

Add @obelisk-apps/cli with the existing build, search, query, and attune contract plus official skill installation.

Separate the docs-only skill artifact, bootstrap installer, release layout, cross-platform CI, and package-level regression coverage.
This commit is contained in:
tommy0103
2026-07-16 17:26:23 +08:00
parent 49158e9b9c
commit 90191e4604
64 changed files with 1112 additions and 745 deletions
+7 -6
View File
@@ -10,8 +10,9 @@ not a spec.
**Runtime interface**:
The public contract, expressed as four verbs — `build`, `search(text)`,
`query(code)`, `attune(code)`. Skill, CLI, and MCP are transports over this same
shape; none of them add their own retrieval surface.
`query(code)`, `attune(code)`. CLI and a future MCP server are transports over
this same shape; neither adds its own retrieval surface. The agent skill is
docs-only guidance that invokes the CLI rather than a transport of its own.
_Avoid_: API, tool surface
**CodeAct**:
@@ -44,7 +45,7 @@ persistence happens.
**Persist layer**:
The single shared, provider- and binding-agnostic writer that consumes records
from any adapter and writes them into an injected SQLite handle inside a
transaction. The binding is injected — `node:sqlite` (skill/CLI) or
transaction. The binding is injected — `node:sqlite` (CLI) or
`better-sqlite3` (app) — so there is one persist implementation, not one per
binding.
_Avoid_: writer, sink, DAO
@@ -56,8 +57,8 @@ as files change.
_Avoid_: watcher mode, live indexing
**Passive pull mode**:
On-demand incremental indexing performed by the skill when there is no active
daemon: an invocation of the runtime brings the index up to date, then answers.
On-demand incremental indexing performed by a CLI invocation when there is no
active daemon: the command brings the index up to date, then answers.
_Avoid_: lazy indexing, on-read indexing
**index_state**:
@@ -68,7 +69,7 @@ arbitration.
**Daemon arbitration**:
The policy by which the passive pull mode detects a fresh daemon from the
`__app_heartbeat__` marker and skips every skill-side mutation, including schema
`__app_heartbeat__` marker and skips every CLI-side mutation, including schema
setup, indexing, checkpointing, and `attune`. The heartbeat alone means “the
daemon should write”; `__app_last_successful_build__` records coverage/freshness,
not ownership. Both indexing modes use the same persist layer.