wyrm-mcp 7.2.2 → 7.2.4
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/dist/activation.d.ts +8 -9
- package/dist/activation.d.ts.map +1 -1
- package/dist/activation.js.map +1 -1
- package/dist/agent-daemon.d.ts +1 -1
- package/dist/agent-loop.d.ts +1 -1
- package/dist/analytics.d.ts +1 -1
- package/dist/attribution.d.ts +1 -1
- package/dist/audit.d.ts +1 -1
- package/dist/auto-orchestrator.d.ts +1 -1
- package/dist/autoconfig.d.ts +1 -1
- package/dist/autoconfig.js +5 -5
- package/dist/autoconfig.js.map +1 -1
- package/dist/buddy-runner.d.ts +1 -1
- package/dist/buddy.d.ts +1 -1
- package/dist/build-flags.d.ts +6 -8
- package/dist/build-flags.d.ts.map +1 -1
- package/dist/build-flags.js.map +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/capture.d.ts +1 -1
- package/dist/causality.d.ts +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cloud/client.js +1 -1
- package/dist/cloud/client.js.map +1 -1
- package/dist/cloud/machine-id.d.ts +1 -1
- package/dist/cloud/sync-engine.d.ts.map +1 -1
- package/dist/cloud/sync-engine.js +6 -6
- package/dist/cloud/sync-engine.js.map +1 -1
- package/dist/cloud-backup.d.ts +1 -1
- package/dist/cloud-profile.d.ts +1 -1
- package/dist/cloud-sync-entrypoint.d.ts +1 -1
- package/dist/cloud-sync.d.ts +1 -1
- package/dist/constellation.d.ts +1 -1
- package/dist/context-build-budgeted.d.ts +1 -1
- package/dist/context-ranking.d.ts +1 -1
- package/dist/crypto.d.ts +1 -1
- package/dist/daemon-write-endpoint.d.ts +1 -1
- package/dist/daemon-writer.d.ts +1 -1
- package/dist/database.d.ts +88 -1
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +61 -20
- package/dist/database.js.map +1 -1
- package/dist/design.d.ts +1 -1
- package/dist/event-replication.d.ts +1 -1
- package/dist/events-sse.d.ts +1 -1
- package/dist/failure-patterns.d.ts +1 -1
- package/dist/federation.d.ts +1 -1
- package/dist/goals.d.ts +1 -1
- package/dist/handlers/agent.d.ts +1 -1
- package/dist/handlers/alias-adapters.d.ts +1 -1
- package/dist/handlers/aliases.d.ts +1 -1
- package/dist/handlers/audit.d.ts +1 -1
- package/dist/handlers/boundary.d.ts +1 -1
- package/dist/handlers/capture.d.ts +1 -1
- package/dist/handlers/causality.d.ts +1 -1
- package/dist/handlers/cloud.d.ts +1 -1
- package/dist/handlers/companion.d.ts +1 -1
- package/dist/handlers/datalake.d.ts +1 -1
- package/dist/handlers/dispatch-context.d.ts +1 -1
- package/dist/handlers/entity.d.ts +1 -1
- package/dist/handlers/events.d.ts +1 -1
- package/dist/handlers/failure.d.ts +1 -1
- package/dist/handlers/goals.d.ts +1 -1
- package/dist/handlers/intelligence.d.ts +1 -1
- package/dist/handlers/intelligence.d.ts.map +1 -1
- package/dist/handlers/intelligence.js +16 -16
- package/dist/handlers/intelligence.js.map +1 -1
- package/dist/handlers/invoicing.d.ts +1 -1
- package/dist/handlers/mcpclient.d.ts +1 -1
- package/dist/handlers/orchestration.d.ts +1 -1
- package/dist/handlers/output-schemas.d.ts +1 -1
- package/dist/handlers/presence.d.ts +1 -1
- package/dist/handlers/project.d.ts +1 -1
- package/dist/handlers/prompts.d.ts +1 -1
- package/dist/handlers/quest.d.ts +1 -1
- package/dist/handlers/recall.d.ts +1 -1
- package/dist/handlers/registry.d.ts +1 -1
- package/dist/handlers/resources.d.ts +1 -1
- package/dist/handlers/review.d.ts +1 -1
- package/dist/handlers/run.d.ts +1 -1
- package/dist/handlers/search.d.ts +1 -1
- package/dist/handlers/search.d.ts.map +1 -1
- package/dist/handlers/search.js +2 -2
- package/dist/handlers/search.js.map +1 -1
- package/dist/handlers/session.d.ts +1 -1
- package/dist/handlers/session.d.ts.map +1 -1
- package/dist/handlers/session.js +21 -18
- package/dist/handlers/session.js.map +1 -1
- package/dist/handlers/share.d.ts +1 -1
- package/dist/handlers/shims.d.ts +1 -1
- package/dist/handlers/skill.d.ts +1 -1
- package/dist/handlers/survivors.d.ts +1 -1
- package/dist/handlers/symbols.d.ts +1 -1
- package/dist/handlers/syncops.d.ts +1 -1
- package/dist/handlers/types.d.ts +2 -2
- package/dist/handlers/types.d.ts.map +1 -1
- package/dist/harvest.d.ts +1 -1
- package/dist/hours.d.ts +1 -1
- package/dist/http-auth.d.ts +1 -1
- package/dist/http-fast.d.ts.map +1 -1
- package/dist/http-fast.js +18 -17
- package/dist/http-fast.js.map +1 -1
- package/dist/icons.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/indexer.d.ts +1 -1
- package/dist/intelligence.d.ts +1 -1
- package/dist/internal-dispatch.d.ts +1 -1
- package/dist/keyset.d.ts +1 -1
- package/dist/knowledge-graph.d.ts +1 -1
- package/dist/license.d.ts +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/maintenance.d.ts +1 -1
- package/dist/mcp-client.d.ts +1 -1
- package/dist/memory-artifacts.d.ts +46 -2
- package/dist/memory-artifacts.d.ts.map +1 -1
- package/dist/memory-artifacts.js +34 -24
- package/dist/memory-artifacts.js.map +1 -1
- package/dist/migrate-prompt.d.ts +1 -1
- package/dist/migrations.d.ts +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +24 -0
- package/dist/migrations.js.map +1 -1
- package/dist/presence.d.ts +1 -1
- package/dist/priority-embed.d.ts +1 -1
- package/dist/providers/embedding-provider.d.ts +1 -1
- package/dist/rehydration.d.ts +1 -1
- package/dist/reindex.d.ts +1 -1
- package/dist/render-target.d.ts +1 -1
- package/dist/render.d.ts +1 -1
- package/dist/repl-guard.d.ts +1 -1
- package/dist/replication-daemon-entrypoint.d.ts +1 -1
- package/dist/replication-daemon.d.ts +1 -1
- package/dist/rerank.d.ts +59 -0
- package/dist/rerank.d.ts.map +1 -0
- package/dist/rerank.js +1 -0
- package/dist/rerank.js.map +1 -0
- package/dist/resilience.d.ts +1 -1
- package/dist/reverse-bridge.d.ts +1 -1
- package/dist/security.d.ts +1 -1
- package/dist/session-seen.d.ts +1 -1
- package/dist/setup.d.ts +1 -1
- package/dist/skill-author.d.ts +1 -1
- package/dist/spec-kit.d.ts +1 -1
- package/dist/sqlite-busy.d.ts +1 -1
- package/dist/statusline.d.ts +1 -1
- package/dist/statusline.js +10 -10
- package/dist/statusline.js.map +1 -1
- package/dist/sub-agent.d.ts +1 -1
- package/dist/symbols.d.ts +1 -1
- package/dist/sync.d.ts +1 -1
- package/dist/token-budget.d.ts +1 -1
- package/dist/tool-analytics.d.ts +1 -1
- package/dist/tool-manifest-v2.json +1 -1
- package/dist/tool-manifest.json +1 -1
- package/dist/tool-profiles.d.ts +1 -1
- package/dist/trace-harvest.d.ts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/ui-dashboard.d.ts +1 -1
- package/dist/ulid.d.ts +1 -1
- package/dist/validate.d.ts +1 -1
- package/dist/vectors.d.ts +1 -1
- package/dist/version-check.d.ts +1 -1
- package/dist/visibility.d.ts +1 -1
- package/dist/wyrm-cli.d.ts +1 -1
- package/dist/wyrm-cli.js +5 -5
- package/dist/wyrm-cli.js.map +1 -1
- package/dist/wyrm-guard.d.ts +1 -1
- package/dist/wyrm-manifest.json +1 -1
- package/dist/wyrm-ui.d.ts +1 -1
- package/package.json +1 -1
package/dist/rerank.d.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-encoder rerank stage for hybrid recall — Ghost Protocol local
|
|
3
|
+
* multi-model ROUTER, subsystem wyrm-routing-rerank.
|
|
4
|
+
*
|
|
5
|
+
* The optional final leg of `recallHybrid`: FTS ⊕ vector fusion produces a
|
|
6
|
+
* top-K candidate set, this re-scores each candidate AGAINST the query with a
|
|
7
|
+
* true cross-encoder (query+document attend jointly, unlike the bi-encoder
|
|
8
|
+
* cosine the fusion uses), and the caller keeps the top-N. Cross-encoders are
|
|
9
|
+
* the strongest reranking signal in IR; the cost is a forward pass per
|
|
10
|
+
* candidate, which is why this is depth-bounded (top-K, not the whole corpus)
|
|
11
|
+
* and OFF by default.
|
|
12
|
+
*
|
|
13
|
+
* MODEL: bge-reranker-v2-m3 served by llama.cpp's OpenAI-style `/v1/rerank`
|
|
14
|
+
* endpoint (Jina/Cohere reranker wire shape:
|
|
15
|
+
* POST { model, query, documents: string[], top_n } ->
|
|
16
|
+
* { results: [{ index, relevance_score }, ...] }).
|
|
17
|
+
* Configured ENTIRELY by environment so Wyrm carries NO new dependency and the
|
|
18
|
+
* reranker is opt-in:
|
|
19
|
+
* WYRM_RERANK_MODEL — model id passed to /v1/rerank. UNSET ⇒ rerank is a
|
|
20
|
+
* no-op (the whole feature is gated on this).
|
|
21
|
+
* WYRM_RERANK_URL — base URL of the llama.cpp server
|
|
22
|
+
* (default http://localhost:8088).
|
|
23
|
+
* WYRM_RERANK_TIMEOUT — per-request timeout in ms (default 500).
|
|
24
|
+
*
|
|
25
|
+
* RESILIENCE CONTRACT (the recallHybrid `rerank:true` promise): this NEVER
|
|
26
|
+
* throws and NEVER hangs. On ANY error — model unset, endpoint down, timeout,
|
|
27
|
+
* malformed body, partial coverage — it returns null and the caller falls back
|
|
28
|
+
* to the fusion order. A reranker that is slow or absent must degrade recall to
|
|
29
|
+
* "exactly the fusion result", never to an error or a stall.
|
|
30
|
+
*
|
|
31
|
+
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
32
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
33
|
+
*/
|
|
34
|
+
/** One candidate handed to the reranker: an opaque id + the text to score. */
|
|
35
|
+
export interface RerankCandidate {
|
|
36
|
+
id: number;
|
|
37
|
+
text: string;
|
|
38
|
+
}
|
|
39
|
+
/** True when a rerank model is configured (the feature is opt-in via env). */
|
|
40
|
+
export declare function rerankConfigured(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Rerank `candidates` against `query` with the configured cross-encoder and
|
|
43
|
+
* return them ordered best-first (highest relevance_score). Sends <=batchSize
|
|
44
|
+
* documents per /v1/rerank call (sequential batches). Returns null — the
|
|
45
|
+
* signal for "fall back to fusion order" — when:
|
|
46
|
+
* - no model is configured (WYRM_RERANK_MODEL unset),
|
|
47
|
+
* - there are no candidates,
|
|
48
|
+
* - the endpoint is unreachable/slow/erroring for EVERY batch,
|
|
49
|
+
* - or no candidate received a usable score.
|
|
50
|
+
* A PARTIAL success (some batches scored, some not) still returns an order:
|
|
51
|
+
* scored candidates rank by their cross-encoder score, unscored ones keep
|
|
52
|
+
* their original (fusion) order and trail the scored set — strictly no worse
|
|
53
|
+
* than the fusion order, and never a thrown error.
|
|
54
|
+
*/
|
|
55
|
+
export declare function rerankCandidates(query: string, candidates: RerankCandidate[], opts?: {
|
|
56
|
+
batchSize?: number;
|
|
57
|
+
timeoutMs?: number;
|
|
58
|
+
}): Promise<RerankCandidate[] | null>;
|
|
59
|
+
//# sourceMappingURL=rerank.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rerank.d.ts","sourceRoot":"","sources":["../src/rerank.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAUH,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAwDD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,eAAe,EAAE,EAC7B,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,OAAO,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,CA6BnC"}
|
package/dist/rerank.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const E=5,h=500,M="http://localhost:8088";function T(){return!!(process.env.WYRM_RERANK_MODEL&&process.env.WYRM_RERANK_MODEL.trim())}function m(){const t=Number(process.env.WYRM_RERANK_TIMEOUT);return Number.isFinite(t)&&t>0?t:500}function p(){return((process.env.WYRM_RERANK_URL||"").trim()||M).replace(/\/+$/,"")}async function A(t,o,l,s,f){try{const a=await fetch(`${o}/v1/rerank`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:t,query:l,documents:s.map(n=>n.text),top_n:s.length}),signal:AbortSignal.timeout(f)});if(!a.ok)return null;const r=(await a.json())?.results;if(!Array.isArray(r)||r.length===0)return null;const i=new Map;for(const n of r){if(typeof n.index!="number"||n.index<0||n.index>=s.length)continue;const e=typeof n.relevance_score=="number"?n.relevance_score:typeof n.score=="number"?n.score:null;e==null||!Number.isFinite(e)||i.set(s[n.index].id,e)}return i.size>0?i:null}catch{return null}}async function d(t,o,l={}){const s=process.env.WYRM_RERANK_MODEL?.trim();if(!s||!t||o.length===0)return null;const f=p(),a=l.timeoutMs??m(),R=Math.max(1,Math.min(5,l.batchSize??5)),r=new Map;for(let n=0;n<o.length;n+=R){const e=o.slice(n,n+R),c=await A(s,f,t,e,a);if(c)for(const[u,_]of c)r.set(u,_)}if(r.size===0)return null;const i=new Map(o.map((n,e)=>[n.id,e]));return[...o].sort((n,e)=>{const c=r.get(n.id),u=r.get(e.id);return c!=null&&u!=null?u-c:c!=null?-1:u!=null?1:(i.get(n.id)??0)-(i.get(e.id)??0)})}export{d as rerankCandidates,T as rerankConfigured};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rerank.js","sourceRoot":"","sources":["../src/rerank.ts"],"names":[],"mappings":"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"}
|
package/dist/resilience.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Wyrm Resilience Module - Professional-grade fault tolerance
|
|
3
3
|
*
|
|
4
4
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
5
|
-
* @license
|
|
5
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
6
6
|
* @module resilience
|
|
7
7
|
* @version 3.0.0
|
|
8
8
|
*
|
package/dist/reverse-bridge.d.ts
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* one file never aborts the sweep.
|
|
28
28
|
*
|
|
29
29
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
30
|
-
* @license
|
|
30
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
31
31
|
*/
|
|
32
32
|
import { type RenderClient } from './render-target.js';
|
|
33
33
|
import type { ArtifactKind } from './memory-artifacts.js';
|
package/dist/security.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Wyrm Security Module - Input validation and path security
|
|
3
3
|
*
|
|
4
4
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
5
|
-
* @license
|
|
5
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
6
6
|
* @module security
|
|
7
7
|
* @version 3.0.0
|
|
8
8
|
*/
|
package/dist/session-seen.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* them to stub references. Backed by the migration-12 table.
|
|
7
7
|
*
|
|
8
8
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
9
|
-
* @license
|
|
9
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
10
10
|
*/
|
|
11
11
|
import type Database from 'better-sqlite3';
|
|
12
12
|
export type ArtifactKind = 'memory' | 'truth' | 'scaffold' | 'failure';
|
package/dist/setup.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* wyrm-setup --list List all supported AI clients
|
|
14
14
|
*
|
|
15
15
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
16
|
-
* @license
|
|
16
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
17
17
|
* @module setup
|
|
18
18
|
* @version 3.0.0
|
|
19
19
|
*/
|
package/dist/skill-author.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* from kitchen-sink mega-skills toward small composable ones.
|
|
13
13
|
*
|
|
14
14
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
15
|
-
* @license
|
|
15
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
16
16
|
*/
|
|
17
17
|
/** Where skills live. Overridable for tests / non-default layouts. */
|
|
18
18
|
export declare function getSkillsDir(): string;
|
package/dist/spec-kit.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* filesystem reads only — no DB coupling, so it's trivially unit-testable.
|
|
7
7
|
*
|
|
8
8
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
9
|
-
* @license
|
|
9
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
10
10
|
*/
|
|
11
11
|
export interface ParsedSpecTask {
|
|
12
12
|
/** Stable task id when the line has one (e.g. 'T001'), else a synthesized 'L<n>' from the ordinal. */
|
package/dist/sqlite-busy.d.ts
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
* better-sqlite3 error code; the retry hint is a fixed documented constant.
|
|
31
31
|
*
|
|
32
32
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
33
|
-
* @license
|
|
33
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
34
34
|
*/
|
|
35
35
|
/** Machine-readable error code subagents key their retry logic on. */
|
|
36
36
|
export declare const WYRM_BUSY_CODE: "WYRM_BUSY";
|
package/dist/statusline.d.ts
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* WYRM_STATUSLINE_PRIVATE=1 — collapse to "<brand> ●●●" for screen-share safety
|
|
25
25
|
*
|
|
26
26
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
27
|
-
* @license
|
|
27
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
28
28
|
*/
|
|
29
29
|
import type Database from 'better-sqlite3';
|
|
30
30
|
export interface StatuslineRequest {
|
package/dist/statusline.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import{existsSync as C,mkdirSync as I,unlinkSync as x,writeFileSync as k,realpathSync as M}from"fs";import{join as S}from"path";import{homedir as h}from"os";import{createServer as $,createConnection as A}from"net";import{spawn as N}from"child_process";import{WyrmDB as L}from"./database.js";import{ICON as d}from"./icons.js";const y=S(h(),".wyrm","statusline.sock"),v=S(h(),".wyrm","statusline.pid"),
|
|
2
|
-
WHERE last_seen >= (SELECT created_at FROM sessions WHERE id = ?)`,n.sessionId):c=f(
|
|
1
|
+
import{existsSync as C,mkdirSync as I,unlinkSync as x,writeFileSync as k,realpathSync as M}from"fs";import{join as S}from"path";import{homedir as h}from"os";import{createServer as $,createConnection as A}from"net";import{spawn as N}from"child_process";import{WyrmDB as D,resolveDbPath as L}from"./database.js";import{ICON as d}from"./icons.js";const y=S(h(),".wyrm","statusline.sock"),v=S(h(),".wyrm","statusline.pid"),W=300*1e3,U="\x1B[38;2;192;192;192m",j="\x1B[0m",m=d.brand?`${U}${d.brand}${j}`:"";function b(t,n){if(!n)return null;let o=n;for(let e=0;e<12;e++){const r=t.prepare("SELECT id, name FROM projects WHERE path = ?").get(o);if(r)return r;const s=S(o,"..");if(s===o)break;o=s}return null}function f(t,n,...o){try{return t.prepare(n).get(...o)?.n??0}catch{return 0}}function H(t,n){if(n.privateMode??process.env.WYRM_STATUSLINE_PRIVATE==="1")return{text:`${m} \u25CF\u25CF\u25CF`,raw:{project:null,activeQuests:0,contextTokensUsed:0,contextBudget:0,blockedThisSession:0,truthCount:0,tokensSaved:null}};const e=b(t,n.cwd),r=e?.id,s=n.showSavings??process.env.WYRM_STATUSLINE_SHOW_SAVINGS==="1",i=r?f(t,"SELECT COUNT(*) AS n FROM quests WHERE project_id = ? AND status = 'pending'",r):0,a=r?f(t,"SELECT COUNT(*) AS n FROM ground_truths WHERE project_id = ?",r):0;let c=0;n.sessionId?c=f(t,`SELECT COALESCE(SUM(occurrences), 0) AS n FROM failure_patterns
|
|
2
|
+
WHERE last_seen >= (SELECT created_at FROM sessions WHERE id = ?)`,n.sessionId):c=f(t,"SELECT COALESCE(SUM(occurrences), 0) AS n FROM failure_patterns WHERE last_seen >= datetime('now', '-1 day')");let l=0;const w=2e5;try{l=t.prepare(`
|
|
3
3
|
SELECT estimated_tokens AS n FROM token_savings_log
|
|
4
4
|
WHERE category = 'cached_preamble' AND session_id = ?
|
|
5
5
|
ORDER BY id DESC LIMIT 1
|
|
6
|
-
`).get(n.sessionId??-1)?.n??0}catch{}let p=null;if(s)try{p=
|
|
6
|
+
`).get(n.sessionId??-1)?.n??0}catch{}let p=null;if(s)try{p=t.prepare(`
|
|
7
7
|
SELECT COALESCE(SUM(estimated_tokens), 0) AS n FROM token_savings_log
|
|
8
8
|
WHERE session_id = ?
|
|
9
|
-
`).get(n.sessionId??-1).n}catch{p=0}const u=[`${m} Wyrm`];return
|
|
9
|
+
`).get(n.sessionId??-1).n}catch{p=0}const u=[`${m} Wyrm`];return e&&u.push(e.name),u.push(`${i} ${d.questOpen}`),l>0&&u.push(`${g(l)}/${g(w)}`),p!==null&&p>0&&u.push(`~${g(p)} saved`),c>0&&u.push(`${d.blocked} ${c}`),a>0&&u.push(`${d.truth} ${a}`),{text:u.join(" \xB7 "),raw:{project:e?.name??null,activeQuests:i,contextTokensUsed:l,contextBudget:w,blockedThisSession:c,truthCount:a,tokensSaved:p}}}function g(t){return t>=1e3?`${Math.round(t/100)/10}k`:String(t)}function K(t,n,o,e,r,s="conservative"){try{t.prepare(`
|
|
10
10
|
INSERT INTO token_savings_log (session_id, tool_name, category, estimated_tokens, confidence)
|
|
11
11
|
VALUES (?, ?, ?, ?, ?)
|
|
12
|
-
`).run(r??null,n,o,
|
|
13
|
-
`);if(i===-1)return;const a=r.slice(0,i);r=r.slice(i+1);try{const c=JSON.parse(a),l=H(o,c);
|
|
14
|
-
`)}catch(c){
|
|
15
|
-
`)}
|
|
12
|
+
`).run(r??null,n,o,e,s)}catch{}}let _=null,T=null;function O(){_&&clearTimeout(_),_=setTimeout(()=>{try{T?.close()}catch{}E(),process.exit(0)},W)}function E(){try{x(y)}catch{}try{x(v)}catch{}}function z(){const t=S(h(),".wyrm");C(t)||I(t,{recursive:!0}),E();const o=new D(L()).getDatabase();T=$(e=>{let r="";e.on("data",s=>{r+=s.toString();const i=r.indexOf(`
|
|
13
|
+
`);if(i===-1)return;const a=r.slice(0,i);r=r.slice(i+1);try{const c=JSON.parse(a),l=H(o,c);e.write(`${JSON.stringify(l)}
|
|
14
|
+
`)}catch(c){e.write(`${JSON.stringify({text:`${m} Wyrm`,error:String(c)})}
|
|
15
|
+
`)}e.end(),O()}),e.on("error",()=>{})}),T.on("error",e=>{e.code==="EADDRINUSE"&&process.exit(0),console.error("wyrm-statusline-daemon: socket error",e),E(),process.exit(1)}),T.listen(y,()=>{try{k(v,String(process.pid))}catch{}O()}),process.on("SIGTERM",()=>{E(),process.exit(0)}),process.on("SIGINT",()=>{E(),process.exit(0)})}async function X(t){return new Promise(n=>{const o=e=>{const r=A({path:y},()=>{let s="";r.on("data",i=>{if(s+=i.toString(),s.includes(`
|
|
16
16
|
`)){const a=s.split(`
|
|
17
|
-
`)[0];try{const c=JSON.parse(a);n(c)}catch{n({text:`${m} Wyrm`,raw:{project:null,activeQuests:0,contextTokensUsed:0,contextBudget:2e5,blockedThisSession:0,truthCount:0,tokensSaved:null}})}r.end()}}),r.write(`${JSON.stringify(
|
|
18
|
-
`)});r.on("error",()=>{
|
|
17
|
+
`)[0];try{const c=JSON.parse(a);n(c)}catch{n({text:`${m} Wyrm`,raw:{project:null,activeQuests:0,contextTokensUsed:0,contextBudget:2e5,blockedThisSession:0,truthCount:0,tokensSaved:null}})}r.end()}}),r.write(`${JSON.stringify(t)}
|
|
18
|
+
`)});r.on("error",()=>{e===0?(F(),setTimeout(()=>o(1),300)):n({text:`${m} Wyrm`,raw:{project:null,activeQuests:0,contextTokensUsed:0,contextBudget:2e5,blockedThisSession:0,truthCount:0,tokensSaved:null}})})};o(0)})}function F(t){let n=t;if(!n){let e=process.argv[1]||"";try{e&&(e=M(e))}catch{}n=S(S(e,".."),"wyrm-statusline-daemon.js")}N(process.execPath,[n],{detached:!0,stdio:"ignore"}).unref()}export{H as computeStatusline,K as logSavings,X as queryDaemon,z as runDaemon};
|
package/dist/statusline.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AACpF,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAe,MAAM,KAAK,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
|
package/dist/sub-agent.d.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* quality analysis.
|
|
16
16
|
*
|
|
17
17
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
18
|
-
* @license
|
|
18
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
19
19
|
*/
|
|
20
20
|
import type Database from 'better-sqlite3';
|
|
21
21
|
export interface AskInput {
|
package/dist/symbols.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* - Ruby (.rb)
|
|
17
17
|
*
|
|
18
18
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
19
|
-
* @license
|
|
19
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
20
20
|
*/
|
|
21
21
|
import type Database from 'better-sqlite3';
|
|
22
22
|
export type SymbolKind = 'function' | 'class' | 'type' | 'interface' | 'const' | 'export';
|
package/dist/sync.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Wyrm File Sync - Watches and syncs .wyrm folder with database
|
|
3
3
|
*
|
|
4
4
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
5
|
-
* @license
|
|
5
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
6
6
|
*
|
|
7
7
|
* - Watches for changes to markdown files
|
|
8
8
|
* - Syncs changes to SQLite database
|
package/dist/token-budget.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* the session are demoted to a "seen" elision bucket.
|
|
14
14
|
*
|
|
15
15
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
16
|
-
* @license
|
|
16
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
17
17
|
*/
|
|
18
18
|
export interface TokenEstimator {
|
|
19
19
|
count(text: string): number;
|
package/dist/tool-analytics.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* analysis, never full payloads.
|
|
20
20
|
*
|
|
21
21
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
22
|
-
* @license
|
|
22
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
23
23
|
*/
|
|
24
24
|
import type Database from 'better-sqlite3';
|
|
25
25
|
export interface ToolCallRow {
|
package/dist/tool-manifest.json
CHANGED
package/dist/tool-profiles.d.ts
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* byte-stability suite — update together.)
|
|
24
24
|
*
|
|
25
25
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
26
|
-
* @license
|
|
26
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
27
27
|
*/
|
|
28
28
|
export type ProfileName = 'essential' | 'standard' | 'legacy';
|
|
29
29
|
/**
|
package/dist/trace-harvest.d.ts
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* RNG). The MCP handler injects the DB writes + the extractor.
|
|
29
29
|
*
|
|
30
30
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
31
|
-
* @license
|
|
31
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
32
32
|
*/
|
|
33
33
|
/** A normalized chunk of trace text, ready for extraction. */
|
|
34
34
|
export interface TraceSegment {
|
package/dist/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Wyrm Types - Core type definitions
|
|
3
3
|
*
|
|
4
4
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
5
|
-
* @license
|
|
5
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
6
6
|
* @module types
|
|
7
7
|
* @version 3.0.0
|
|
8
8
|
*/
|
package/dist/ui-dashboard.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Wyrm Visual Web Dashboard — Self-contained HTML SPA
|
|
3
3
|
*
|
|
4
4
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
5
|
-
* @license
|
|
5
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
6
6
|
*/
|
|
7
7
|
export declare function getUIDashboardHTML(): string;
|
|
8
8
|
//# sourceMappingURL=ui-dashboard.d.ts.map
|
package/dist/ulid.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Wyrm ULID — crypto-based monotonic ULID generator (v7 F2, T008).
|
|
3
3
|
*
|
|
4
4
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
5
|
-
* @license
|
|
5
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
6
6
|
*
|
|
7
7
|
* 26-char Crockford-base32 identifier: 10 chars of millisecond timestamp +
|
|
8
8
|
* 16 chars (80 bits) of crypto randomness. Used as `runs.run_id` (migration 20)
|
package/dist/validate.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* advisory only, so this is the real enforcement layer.
|
|
13
13
|
*
|
|
14
14
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
15
|
-
* @license
|
|
15
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
16
16
|
*/
|
|
17
17
|
export declare class ValidationError extends Error {
|
|
18
18
|
readonly field: string;
|
package/dist/vectors.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Wyrm Vector Embeddings — Semantic Search Support
|
|
3
3
|
*
|
|
4
4
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
5
|
-
* @license
|
|
5
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
6
6
|
*
|
|
7
7
|
* Features:
|
|
8
8
|
* - Provider-agnostic embeddings (local, OpenAI, Ollama)
|
package/dist/version-check.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - `fetch` is the Node 22+ global; no extra deps.
|
|
13
13
|
*
|
|
14
14
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
15
|
-
* @license
|
|
15
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
16
16
|
*/
|
|
17
17
|
import type Database from 'better-sqlite3';
|
|
18
18
|
export interface UpdateStatus {
|
package/dist/visibility.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* highlights from the operator's actual usage data.
|
|
15
15
|
*
|
|
16
16
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
17
|
-
* @license
|
|
17
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
18
18
|
*/
|
|
19
19
|
import type Database from 'better-sqlite3';
|
|
20
20
|
export interface DigestPeriod {
|
package/dist/wyrm-cli.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Usage: wyrm <command> [options]
|
|
6
6
|
*
|
|
7
7
|
* @copyright 2026 Ghost Protocol (Pvt) Ltd.
|
|
8
|
-
* @license
|
|
8
|
+
* @license Proprietary — (c) 2026 Ghost Protocol (Pvt) Ltd. All rights reserved. See LICENSE.
|
|
9
9
|
*/
|
|
10
10
|
export {};
|
|
11
11
|
//# sourceMappingURL=wyrm-cli.d.ts.map
|
package/dist/wyrm-cli.js
CHANGED
|
@@ -50,20 +50,20 @@ import{join as oe,dirname as ae}from"path";import{homedir as Ee}from"os";import{
|
|
|
50
50
|
_... brief truncated at ${t} chars, run \`wyrm show session:${m.session_id}\` for the full record._`),process.stdout.write(y+`
|
|
51
51
|
`)}finally{o.close(),console.log=a}}async function Oe(l){const{flags:i}=x(l),e=i.path,s=i.project,r=i.out,t=i.brief===!0,n=i.force===!0,a=i.quiet===!0,o=(typeof i.client=="string"?i.client:"").split(",").map(g=>g.trim().toLowerCase()).filter(Boolean),u=["claude","cursor","copilot","agents"],c=o.filter(g=>u.includes(g)),m=o.filter(g=>!u.includes(g));m.length>0&&(p(`Unknown --client value(s): ${m.join(", ")} (valid: ${u.join("|")})`),process.exit(1));const y=console.log;t&&(console.log=()=>{});const f=E();try{let g=e?f.getProject(e):void 0;!g&&s&&(g=P(f,s)??void 0),g||(g=f.getProject(process.cwd())),g||(console.log=y,p("wyrm render: no Wyrm project for this directory (use --path or --project)."),process.exit(1));const w=pe(f.getDatabase()),h={wyrm_version:O().version??"unknown",compiled_at:new Date().toISOString()};if(t){const $=se(w,g,h);console.log=y,process.stdout.write($.sessionBrief+`
|
|
52
52
|
`);return}const b=r??g.path;{const $=await import("./reverse-bridge.js"),T=se(w,g,h),Y={"MEMORY.md":T.memoryMd};for(const q of c){const A=ue(q,T.model,h);Y[A.relPath]=A.block}try{const q=$.makeBridgeDeps(f.getDatabase()),A=await $.sweepProject(q,{id:g.id,path:g.path},Y,{rootDir:b});A.added>0&&!a&&console.log(` ${L.warning} harvested ${A.added} human edit(s) \u2192 review queue before overwrite`)}catch{}}const{plan:_,writes:S}=Re(w,g,h,{rootDir:b,clients:c,force:n});if(!a){v(`Rendered ${g.name} memory (${_.model.truths.length} truths, ${_.model.failures.length} failures, ${_.model.quests.length} quests, ${_.model.artifacts.length} patterns) to ${b}`);for(const $ of S){const T=$.action==="created"?L.success:$.action==="updated"?L.info:L.warning;console.log(` ${T} ${$.action.padEnd(7)} ${$.path}${$.reason?` (${$.reason})`:""}`)}}}finally{f.close(),console.log=y}}async function We(l){const{flags:i}=x(l),e=i.path,s=i.project,r=i.root,t=i["dry-run"]===!0||i.dry===!0,n=(typeof i.client=="string"?i.client:"").split(",").map(m=>m.trim().toLowerCase()).filter(Boolean),a=["claude","cursor","copilot","agents"],o=n.filter(m=>a.includes(m)),u=await import("./reverse-bridge.js"),c=E();try{let m=e?c.getProject(e):void 0;if(!m&&s&&(m=P(c,s)??void 0),m||(m=c.getProject(process.cwd())),!m){p("wyrm reverse-bridge: no Wyrm project for this directory (use --path or --project)."),process.exitCode=1;return}const y=pe(c.getDatabase()),f={wyrm_version:O().version??"unknown",compiled_at:new Date().toISOString()},g=se(y,m,f),w={"MEMORY.md":g.memoryMd};for(const _ of o){const S=ue(_,g.model,f);w[S.relPath]=S.block}const h=u.makeBridgeDeps(c.getDatabase()),b=await u.sweepProject(h,{id:m.id,path:m.path},w,{dryRun:t,rootDir:r});j(`Reverse bridge ${t?"(dry run) ":""}\u2014 ${b.added} candidate(s) queued, ${b.skipped} already present (${b.filesWithEdits}/${b.filesScanned} file(s) with edits)`);for(const _ of b.sample)console.log(` ${L.bullet} ${_}`);!t&&b.added>0&&v("Review with: wyrm review")}finally{c.close()}}async function Ye(l){const{positional:i,flags:e}=x(l.slice(1)),s=l[0],r=e.project;if(s==="git"){const t=R(e.last,20),n=E(),a=n.getDatabase();let o=null;if(r){const g=P(n,r);g||(p(`Project not found: ${r}`),n.close(),process.exit(1)),o=g.id}else{const g=a.prepare("SELECT p.* FROM projects p JOIN sessions s ON s.project_id = p.id ORDER BY s.created_at DESC LIMIT 1").get();g&&(o=g.id)}o||(p("No project found. Use --project <name>"),n.close(),process.exit(1));const u=B("git",["log","--pretty=format:%H%x1f%s%x1f%an%x1f%ai",`-${t}`],{cwd:process.cwd(),encoding:"utf-8",timeout:1e4,shell:!1});(u.error||u.status!==0)&&(p("git log failed. Make sure you are in a git repository."),n.close(),process.exit(1));const c=u.stdout.split(`
|
|
53
|
-
`).filter(g=>g.trim()),m=new G(a);let y=0,f=0;for(const g of c){const[,w,h,b]=g.split(""),_=w??"";if(/^Merge /i.test(_)||/^(chore|bump|release|version)/i.test(_)){f++;continue}let S="pattern";/^fix(\(.+\))?:/i.test(_)?S="lesson":/^refactor(\(.+\))?:/i.test(_)&&(S="heuristic");const $=_.split(":")[0]??"commit";m.add(o,{kind:S,problem:_,whyItWorked:`Committed by ${h??"unknown"} on ${b??"unknown"}`,tags:["git","commit",$.toLowerCase()],confidence:.6,needsReview:1}),y++}n.close(),v(`Imported ${y} commits (${f} skipped). Run ${d.cyan("wyrm review")} to activate.`)}else if(s==="rules"){const t=i[0],n=e.format??"plain";t||(p("Usage: wyrm import rules <path> [--project <name>] [--format cursorrules|copilot|plain]"),process.exit(1)),ce(t)||(p(`File not found: ${t}`),process.exit(1));const a=V(t,"utf-8"),o=E(),u=o.getDatabase();let c=null;if(r){const $=P(o,r);$||(p(`Project not found: ${r}`),o.close(),process.exit(1)),c=$.id}else{const $=u.prepare("SELECT p.* FROM projects p JOIN sessions s ON s.project_id = p.id ORDER BY s.created_at DESC LIMIT 1").get();$&&(c=$.id)}c||(p("No project found. Use --project <name>"),o.close(),process.exit(1));const m=t.split("/").pop()??"rules",y=["imported",n,m],f=a.split(/\n(?=#)/),g=a.split(/\n\n+/),w=(f.length>=g.length?f:g).map($=>$.trim()).filter($=>$.length>=15),h=new G(u),b=new de(u);let _=0,S=0;for(const $ of w)/\b(always|never|must|use|don't|avoid|prefer)\b/i.test($)?(b.set(c,{category:"constraint",key:$.slice(0,50).replace(/\n/g," "),value:$,source:m}),_++):(h.add(c,{kind:"heuristic",problem:$,tags:y,confidence:.7,needsReview:1}),S++);o.close(),v(`Imported ${_} ground truths + ${S} artifacts (pending review).`)}else p("Usage: wyrm import git [--project <name>] [--last N]"),p(" wyrm import rules <path> [--project <name>] [--format cursorrules|copilot|plain]"),process.exit(1)}async function qe(l){const{flags:i}=x(l),e=i.project,s=E(),r=s.getDatabase();if(j("Wyrm Statistics"),e){const t=P(s,e);t||(p(`Project not found: ${e}`),s.close(),process.exit(1));const n=s.getProjectStats(t.id),a=[["Sessions",String(n.sessions)],["Quests (pending)",String(n.quests.pending)],["Quests (completed)",String(n.quests.completed)],["Data Points",String(n.dataPoints)]];console.log(M(["Metric","Value"],a))}else{const t=s.getStats(),n=[["Projects",String(t.projects)],["Sessions",String(t.sessions)],["Quests",String(t.quests)],["Data Points",String(t.dataPoints)],["DB Size",t.dbSize]],a=r.prepare("SELECT COUNT(*) as n FROM memory_artifacts").get().n,o=r.prepare("SELECT COUNT(*) as n FROM ground_truths WHERE is_current = 1").get().n;n.push(["Memories",String(a)],["Ground Truths",String(o)]),console.log(M(["Metric","Value"],n))}s.close()}async function
|
|
53
|
+
`).filter(g=>g.trim()),m=new G(a);let y=0,f=0;for(const g of c){const[,w,h,b]=g.split(""),_=w??"";if(/^Merge /i.test(_)||/^(chore|bump|release|version)/i.test(_)){f++;continue}let S="pattern";/^fix(\(.+\))?:/i.test(_)?S="lesson":/^refactor(\(.+\))?:/i.test(_)&&(S="heuristic");const $=_.split(":")[0]??"commit";m.add(o,{kind:S,problem:_,whyItWorked:`Committed by ${h??"unknown"} on ${b??"unknown"}`,tags:["git","commit",$.toLowerCase()],confidence:.6,needsReview:1}),y++}n.close(),v(`Imported ${y} commits (${f} skipped). Run ${d.cyan("wyrm review")} to activate.`)}else if(s==="rules"){const t=i[0],n=e.format??"plain";t||(p("Usage: wyrm import rules <path> [--project <name>] [--format cursorrules|copilot|plain]"),process.exit(1)),ce(t)||(p(`File not found: ${t}`),process.exit(1));const a=V(t,"utf-8"),o=E(),u=o.getDatabase();let c=null;if(r){const $=P(o,r);$||(p(`Project not found: ${r}`),o.close(),process.exit(1)),c=$.id}else{const $=u.prepare("SELECT p.* FROM projects p JOIN sessions s ON s.project_id = p.id ORDER BY s.created_at DESC LIMIT 1").get();$&&(c=$.id)}c||(p("No project found. Use --project <name>"),o.close(),process.exit(1));const m=t.split("/").pop()??"rules",y=["imported",n,m],f=a.split(/\n(?=#)/),g=a.split(/\n\n+/),w=(f.length>=g.length?f:g).map($=>$.trim()).filter($=>$.length>=15),h=new G(u),b=new de(u);let _=0,S=0;for(const $ of w)/\b(always|never|must|use|don't|avoid|prefer)\b/i.test($)?(b.set(c,{category:"constraint",key:$.slice(0,50).replace(/\n/g," "),value:$,source:m}),_++):(h.add(c,{kind:"heuristic",problem:$,tags:y,confidence:.7,needsReview:1}),S++);o.close(),v(`Imported ${_} ground truths + ${S} artifacts (pending review).`)}else p("Usage: wyrm import git [--project <name>] [--last N]"),p(" wyrm import rules <path> [--project <name>] [--format cursorrules|copilot|plain]"),process.exit(1)}async function qe(l){const{flags:i}=x(l),e=i.project,s=E(),r=s.getDatabase();if(j("Wyrm Statistics"),e){const t=P(s,e);t||(p(`Project not found: ${e}`),s.close(),process.exit(1));const n=s.getProjectStats(t.id),a=[["Sessions",String(n.sessions)],["Quests (pending)",String(n.quests.pending)],["Quests (completed)",String(n.quests.completed)],["Data Points",String(n.dataPoints)]];console.log(M(["Metric","Value"],a))}else{const t=s.getStats(),n=[["Projects",String(t.projects)],["Sessions",String(t.sessions)],["Quests",String(t.quests)],["Data Points",String(t.dataPoints)],["DB Size",t.dbSize]],a=r.prepare("SELECT COUNT(*) as n FROM memory_artifacts").get().n,o=r.prepare("SELECT COUNT(*) as n FROM ground_truths WHERE is_current = 1").get().n;n.push(["Memories",String(a)],["Ground Truths",String(o)]),console.log(M(["Metric","Value"],n))}s.close()}async function Ue(l){const{flags:i}=x(l),e=i.project,s=E(),r=s.getDatabase();let t=null;if(e){const c=P(s,e);c||(p(`Project not found: ${e}`),s.close(),process.exit(1)),t=c.id}const n=t?`AND project_id = ${t}`:"",a=r.prepare(`
|
|
54
54
|
SELECT id, kind, problem FROM memory_artifacts
|
|
55
55
|
WHERE needs_review = 1 ${n}
|
|
56
56
|
ORDER BY created_at ASC
|
|
57
57
|
`).all();if(a.length===0){console.log(d.dim(` No artifacts pending review${e?` for ${e}`:""}.`)),s.close();return}j(`Review Queue (${a.length} items)`);const o=K({input:process.stdin,output:process.stdout}),u=c=>new Promise(m=>{o.question(c,m)});for(const c of a){console.log(`
|
|
58
58
|
${d.bold(`[${c.kind}] #${c.id}`)}`),console.log(d.dim("\u2500".repeat(60))),console.log(c.problem.slice(0,300)),console.log(d.dim("\u2500".repeat(60)));const y=(await u(`${d.cyan("[a]")}pprove / ${d.red("[r]")}eject / ${d.yellow("[s]")}kip? `)).trim().toLowerCase();y==="a"?(r.prepare("UPDATE memory_artifacts SET needs_review = 0, updated_at = datetime('now') WHERE id = ?").run(c.id),v(`Approved #${c.id}`)):y==="r"?(r.prepare("DELETE FROM memory_artifacts WHERE id = ?").run(c.id),console.log(`${L.cross} Rejected #${c.id}`)):console.log(d.dim(` Skipped #${c.id}`))}o.close(),s.close(),console.log(`
|
|
59
|
-
Review complete.`)}async function
|
|
59
|
+
Review complete.`)}async function Fe(l){const{positional:i,flags:e}=x(l),s=i[0];(!s||!["export","import","preview"].includes(s))&&(p("Usage: wyrm sync export --out <path> | wyrm sync import --from <path> | wyrm sync preview --from <path>"),process.exit(1));const{randomBytes:r,pbkdf2Sync:t,createCipheriv:n,createDecipheriv:a}=await import("crypto"),{readFileSync:o,writeFileSync:u,copyFileSync:c,unlinkSync:m,existsSync:y,chmodSync:f}=await import("fs"),{homedir:g}=await import("os"),{join:w}=await import("path"),h=(await import("better-sqlite3")).default;let b=process.env.WYRM_SYNC_PASSPHRASE??"";if(!b){const C=K({input:process.stdin,output:process.stdout});b=await new Promise(D=>{process.stdout.write("Passphrase: "),process.stdin.isTTY&&process.stdin.setRawMode?.(!0),C.question("",N=>{process.stdin.isTTY&&process.stdin.setRawMode?.(!1),console.log(""),C.close(),D(N)})})}b||(p("Passphrase is required. Set WYRM_SYNC_PASSPHRASE or enter interactively."),process.exit(1));const _=w(g(),".wyrm"),S=E();if(s==="export"){const C=e.out;C||(p("--out <path> is required"),process.exit(1));const D=w(_,"wyrm_cli_export_temp.db");try{const N=S.getDatabase();y(D)&&m(D),N.prepare("VACUUM INTO ?").run(D);const F=o(D),W=r(32),H=r(16),$e=t(b,W,6e5,32,"sha256"),te=n("aes-256-gcm",$e,H),ke=Buffer.concat([te.update(F),te.final()]),Se=te.getAuthTag(),je=Buffer.from("WYRM"),ne=Buffer.alloc(1);ne.writeUInt8(1,0);const ie=Buffer.concat([je,ne,W,H,Se,ke]);u(C,ie);try{f(C,384)}catch{}try{m(D)}catch{}const _e=(ie.length/(1024*1024)).toFixed(2);v(`Exported to ${C} (${_e} MB)`)}catch(N){try{y(D)&&m(D)}catch{}p(`Export failed: ${N}`)}S.close();return}const $=e.from;$||(p("--from <path> is required"),process.exit(1));const T=o($);T.subarray(0,4).toString("ascii")!=="WYRM"&&(p("Invalid Wyrm snapshot file."),process.exit(1));const Y=T.readUInt8(4);Y!==1&&(p(`Unsupported snapshot version: ${Y}`),process.exit(1));const q=T.subarray(5,37),A=T.subarray(37,53),ge=T.subarray(53,69),he=T.subarray(69),we=t(b,q,6e5,32,"sha256"),Q=a("aes-256-gcm",we,A);Q.setAuthTag(ge);let X;try{X=Buffer.concat([Q.update(he),Q.final()])}catch{p("Decryption failed \u2014 wrong passphrase or corrupted file."),process.exit(1)}if(s==="preview"){const C=w(_,"wyrm_cli_preview_temp.db");y(C)&&m(C),u(C,X);try{const D=new h(C,{readonly:!0}),N=["projects","sessions","ground_truths","memory_artifacts","quests"];j("Snapshot Preview");const F=[];for(const W of N)try{const H=D.prepare(`SELECT COUNT(*) as n FROM ${W}`).get();F.push([W,String(H.n)])}catch{F.push([W,"?"])}console.log(M(["Table","Count"],F)),D.close()}catch(D){p(`Preview failed: ${D}`)}try{y(C)&&m(C)}catch{}S.close();return}const U=S.getDatabasePath(),re=K({input:process.stdin,output:process.stdout}),be=await new Promise(C=>{re.question("This will REPLACE your current database. Type CONFIRM to proceed: ",C)});if(re.close(),be.trim()!=="CONFIRM"){console.log(d.dim("Aborted.")),S.close();return}const ve=new Date().toISOString().replace(/[:.]/g,"-"),Z=`${U}.backup.${ve}`;c(U,Z),v(`Backed up to ${Z}`);const ee=w(_,"wyrm_cli_restore_temp.db");u(ee,X),S.getDatabase().close(),c(ee,U);for(const C of["-wal","-shm"])try{y(U+C)&&m(U+C)}catch{}try{m(ee)}catch{}v(`Restored from ${$}. Backup at ${Z}`)}async function He(l){const{flags:i}=x(l),e=i.project,s=i.path,r=z(i["min-confidence"],.3),t=R(i["older-than"],90),n=i["no-dry-run"]===!0,a=i.yes===!0,o=E(),u=o.getDatabase();let c=null;if(s||e){const w=s?o.getProject(s):P(o,e);w||(p(`Project not found: ${s??e}`),o.close(),process.exit(1)),c=w.id}const m=new G(u),{candidates:y}=m.pruneStale({projectId:c,minConfidence:r,olderThanDays:t,dryRun:!0});if(j(`Prune Candidates${n?" (LIVE DELETE)":" (dry-run)"}`),y.length===0){console.log(d.dim(" No artifacts match prune criteria.")),o.close();return}const f=y.map(w=>[String(w.id),w.kind,w.problem.slice(0,60),(w.confidence*100).toFixed(0)+"%",w.last_accessed_at??"never"]);if(console.log(M(["ID","Kind","Problem","Conf","Last Accessed"],f)),console.log(`
|
|
60
60
|
Total: ${y.length} candidate(s)`),!n){console.log(d.dim(`
|
|
61
61
|
This is a dry run. Use --no-dry-run to delete (confirm each ID).`)),o.close();return}if(!a){const w=K({input:process.stdin,output:process.stdout}),h=await new Promise(b=>{w.question(`
|
|
62
62
|
Delete these ${y.length} artifact(s)? Type CONFIRM to proceed: `,b)});if(w.close(),h.trim()!=="CONFIRM"){console.log(d.dim("Aborted.")),o.close();return}}const g=m.deleteArtifacts(y.map(w=>w.id));v(`Deleted ${g} artifact(s).`),o.close()}function me(){return V(0,"utf-8").trim()}async function Ve(){const{initializeLicense:l,getLicenseInfo:i,getTier:e}=await import("./license.js");l();const s=i();j("Wyrm License");const r=[["Tier",e()],["Status",s.valid?"valid":"free tier (no license key)"]];s.valid&&s.key&&(r.push(["Key",s.key]),r.push(["Issued to",s.issuedTo??"unknown"]),r.push(["Expires",s.expiresAt?new Date(s.expiresAt).toLocaleDateString():"never"])),r.push(["Features",s.features.join(", ")||"(free)"]),console.log(M(["Field","Value"],r)),s.valid||console.log(d.dim(`
|
|
63
63
|
Activate with: wyrm login (free) \xB7 or: wyrm activate <license.json | key>`)),console.log(d.dim(`
|
|
64
|
-
|
|
64
|
+
\xA9 2026 Ghost Protocol (Pvt) Ltd \xB7 Proprietary \xB7 https://wyrm.ghosts.lk`)),console.log(d.dim(" Licensed under the Wyrm Terms of Service. No open-source license is granted."))}async function Be(){const l=(process.env.WYRM_ACCOUNT_URL??"https://account.ghosts.lk").replace(/\/$/,""),i=(()=>{try{return O().version??"unknown"}catch{return"unknown"}})();let e;try{const c=await fetch(`${l}/api/v1/cli/auth/start`,{method:"POST",headers:{"x-wyrm-version":i}});if(!c.ok)throw new Error(`HTTP ${c.status}`);e=await c.json()}catch(c){p(`Couldn't reach ${l} (${c instanceof Error?c.message:"network error"}).`),process.exitCode=1;return}const s=e.verification_uri_complete||e.verification_uri||`${l}/cli`;console.log(`
|
|
65
65
|
${d.cyan("Sign in to activate Wyrm (free):")}`),console.log(` 1. Open ${d.cyan(s)}`),console.log(` 2. Approve the code ${d.cyan(e.user_code)}`),console.log(d.dim(`
|
|
66
|
-
Waiting for approval\u2026 (Ctrl-C to cancel)`));const r=(e.interval??3)*1e3,t=Date.now()+(e.expires_in??600)*1e3;let n="";for(;Date.now()<t;){await new Promise(c=>setTimeout(c,r));try{const m=await(await fetch(`${l}/api/v1/cli/auth/poll`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({device_code:e.device_code})})).json();if(m.status==="approved"&&m.token){n=m.token;break}if(m.status==="denied"||m.error==="expired"){p("Login was denied or the code expired. Run `wyrm login` again."),process.exitCode=1;return}}catch{}}if(!n){p("Login timed out. Run `wyrm login` again."),process.exitCode=1;return}let a;try{const c=await fetch(`${l}/api/v1/license/free`,{method:"POST",headers:{authorization:`Bearer ${n}`,"x-wyrm-version":i}});if(!c.ok){const m=await c.json().catch(()=>({}));p(`Activation failed (${c.status}): ${m.hint||m.error||"unknown error"}`),process.exitCode=1;return}a=JSON.stringify(await c.json())}catch(c){p(`Activation request failed (${c instanceof Error?c.message:"network error"}).`),process.exitCode=1;return}const{activateLicense:o}=await import("./license.js"),u=o(a);u.valid?(v(`Signed in & activated \u2014 ${u.tier} tier (expires ${u.expiresAt??"never"}).`),console.log(d.dim(" Restart the Wyrm MCP server / daemon to apply."))):(p(`Activation failed: ${u.error??"unknown error"}`),process.exitCode=1)}async function Ke(l){const{positional:i}=x(l),e=i[0];let s;e&&ce(e)?s=V(e,"utf-8"):e?s=e:process.stdin.isTTY?(p("Usage: wyrm activate <license.json path | license JSON> (or pipe the JSON on stdin)"),process.exit(1)):s=me();const{activateLicense:r}=await import("./license.js");try{const t=r(s);t.valid?(v(`License activated \u2014 ${t.tier} tier (${t.features.join(", ")})`),console.log(d.dim(" Restart Wyrm (MCP server / daemon) to apply all features."))):(p(`License activation failed: ${t.error??"unknown error"}`),process.exitCode=1)}catch{p("Invalid license format. Please verify your license key."),process.exitCode=1}}async function Ge(l){const{flags:i}=x(l),{runMaintenance:e}=await import("./maintenance.js"),{FailurePatterns:s}=await import("./failure-patterns.js"),{SessionSeen:r}=await import("./session-seen.js"),{AgentPresence:t}=await import("./presence.js"),n=E();try{const a=n.getDatabase(),o=R(i["archive-days"],0),u=e({db:n,sessionSeen:new r(a),failures:new s(a),presence:new t(a)},{vacuum:i.vacuum===!0,archiveDays:o>0?o:void 0});j("Maintenance complete");for(const c of u.lines)console.log(` - ${c}`);console.log(d.dim(`
|
|
66
|
+
Waiting for approval\u2026 (Ctrl-C to cancel)`));const r=(e.interval??3)*1e3,t=Date.now()+(e.expires_in??600)*1e3;let n="";for(;Date.now()<t;){await new Promise(c=>{setTimeout(c,r)});try{const m=await(await fetch(`${l}/api/v1/cli/auth/poll`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({device_code:e.device_code})})).json();if(m.status==="approved"&&m.token){n=m.token;break}if(m.status==="denied"||m.error==="expired"){p("Login was denied or the code expired. Run `wyrm login` again."),process.exitCode=1;return}}catch{}}if(!n){p("Login timed out. Run `wyrm login` again."),process.exitCode=1;return}let a;try{const c=await fetch(`${l}/api/v1/license/free`,{method:"POST",headers:{authorization:`Bearer ${n}`,"x-wyrm-version":i}});if(!c.ok){const m=await c.json().catch(()=>({}));p(`Activation failed (${c.status}): ${m.hint||m.error||"unknown error"}`),process.exitCode=1;return}a=JSON.stringify(await c.json())}catch(c){p(`Activation request failed (${c instanceof Error?c.message:"network error"}).`),process.exitCode=1;return}const{activateLicense:o}=await import("./license.js"),u=o(a);u.valid?(v(`Signed in & activated \u2014 ${u.tier} tier (expires ${u.expiresAt??"never"}).`),console.log(d.dim(" Restart the Wyrm MCP server / daemon to apply."))):(p(`Activation failed: ${u.error??"unknown error"}`),process.exitCode=1)}async function Ke(l){const{positional:i}=x(l),e=i[0];let s;e&&ce(e)?s=V(e,"utf-8"):e?s=e:process.stdin.isTTY?(p("Usage: wyrm activate <license.json path | license JSON> (or pipe the JSON on stdin)"),process.exit(1)):s=me();const{activateLicense:r}=await import("./license.js");try{const t=r(s);t.valid?(v(`License activated \u2014 ${t.tier} tier (${t.features.join(", ")})`),console.log(d.dim(" Restart Wyrm (MCP server / daemon) to apply all features."))):(p(`License activation failed: ${t.error??"unknown error"}`),process.exitCode=1)}catch{p("Invalid license format. Please verify your license key."),process.exitCode=1}}async function Ge(l){const{flags:i}=x(l),{runMaintenance:e}=await import("./maintenance.js"),{FailurePatterns:s}=await import("./failure-patterns.js"),{SessionSeen:r}=await import("./session-seen.js"),{AgentPresence:t}=await import("./presence.js"),n=E();try{const a=n.getDatabase(),o=R(i["archive-days"],0),u=e({db:n,sessionSeen:new r(a),failures:new s(a),presence:new t(a)},{vacuum:i.vacuum===!0,archiveDays:o>0?o:void 0});j("Maintenance complete");for(const c of u.lines)console.log(` - ${c}`);console.log(d.dim(`
|
|
67
67
|
Database size: ${u.dbSize}`))}finally{n.close()}}async function Je(l){const{positional:i,flags:e}=x(l),s=i[0]??"status",{createVectorStore:r}=await import("./vectors.js"),n={provider:e.provider??process.env.WYRM_VECTOR_PROVIDER??"auto",model:e.model,apiKey:e["api-key"]??process.env.OPENAI_API_KEY,ollamaUrl:e["ollama-url"]};if(s==="setup"){const{createProvider:o}=await import("./providers/embedding-provider.js"),u=o(n);if(!await u.isReady()&&n.provider!=="none"){p(`Provider not ready: ${u.name}. Check the configuration and try again.`),process.exitCode=1;return}v(`Vector provider verified: ${u.name} (model ${u.model}, ${u.dimensions}d)`),console.log(d.dim(" The MCP server reads WYRM_VECTOR_PROVIDER (and provider-specific env) at boot \u2014")),console.log(d.dim(` set WYRM_VECTOR_PROVIDER=${u.name==="none"?"none":n.provider} in the server env, then: wyrm index rebuild`));return}const a=E();try{const o=a.getDatabase(),u=r(n,o);if(s==="status"){const c=u.getStats();j("Vector index");const m=[["Provider",c.provider],["Model",c.model],["Vectors",String(c.total)],...Object.entries(c.byType).map(([y,f])=>[` ${y}`,String(f)])];console.log(M(["Field","Value"],m));return}if(s==="rebuild"){const{reindexProjects:c}=await import("./reindex.js"),m=e["dry-run"]===!0,y=e.project;let f;if(y){const h=a.getProject(y)??P(a,y);if(!h){p(`Project not found: ${y}`),process.exitCode=1;return}f=[h.id]}else f=a.getAllProjects(1e3).map(h=>h.id);const{indexed:g,skipped:w}=await c(o,u,f,{dryRun:m,onError:(h,b)=>p(`${h}: ${JSON.stringify(b)}`)});v(`Reindex ${m?"(dry run) ":""}\u2014 ${f.length} project(s), ${g} indexed, ${w} skipped`);return}p("Usage: wyrm index <setup|rebuild|status> [--provider auto|local|ollama|openai|none] [--model M] [--project P] [--dry-run]"),process.exitCode=1}finally{a.close()}}async function ze(l){const{flags:i}=x(l),{getUpdateStatus:e}=await import("./version-check.js"),s=O().version??"0.0.0",r=E();let t;try{t=await e(r.getDatabase(),s,{force:i.force===!0||i.check===!0})}finally{r.close()}if(j("Wyrm update"),console.log(M(["Field","Value"],[["Current",t.current],["Latest",t.latest??"unknown (offline?)"],["Update available",t.updateAvailable?"yes":"no"],["Checked",`${t.checkedAt} (${t.source})`]])),i.check===!0)return;if(!t.updateAvailable&&i.force!==!0){console.log(d.dim(`
|
|
68
68
|
Already up to date. (Use --force to reinstall anyway.)`));return}console.log(d.dim(`
|
|
69
69
|
Running: npm install -g wyrm-mcp@latest
|
|
@@ -144,4 +144,4 @@ ${d.bold("Examples:")}
|
|
|
144
144
|
private = never replicates . cloud = your own cloud backup . team = federates to a team Wyrm`),c>0&&console.log(d.red(`
|
|
145
145
|
! ${c} private grove(s) hold rows marked to leave. Re-private those rows or change the grove lane.`)),e.close();return}if(i==="policy"||i==="set"){const t=l[1],n=l[2];(!t||!["private","cloud","team"].includes(n))&&(p("Usage: wyrm grove policy <project|id> <private|cloud|team>"),e.close(),process.exit(1));let a=P(e,t);!a&&/^\d+$/.test(t)&&(a=s.prepare("SELECT id, name FROM projects WHERE id = ?").get(Number(t))),a||(p(`Grove not found: ${t}`),e.close(),process.exit(1)),s.prepare("UPDATE projects SET sync_policy = ? WHERE id = ?").run(n,a.id),v(`Grove "${a.name}" set to '${n}'.`),n!=="private"&&console.log(` Rows still only leave when also marked ${n==="team"?"is_shared (team)":"org/public (cloud)"}. The grove is the outer gate.`),e.close();return}p(`Unknown grove subcommand: ${i}`),console.log(`Usage:
|
|
146
146
|
wyrm grove status
|
|
147
|
-
wyrm grove policy <project|id> <private|cloud|team>`),e.close(),process.exit(1)}if(I==="--version"||I==="-v"||I==="version"){const l=O();console.log(`${l.name??"wyrm-mcp"} v${l.version??"unknown"}`)}else!I||I==="--help"||I==="-h"||I==="help"?fe():(async()=>{try{switch(I){case"search":await Me(k);break;case"ls":await Ie(k);break;case"show":await Ae(k);break;case"capture":await Ne(k);break;case"rehydrate":await Le(k);break;case"render":await Oe(k);break;case"reverse-bridge":await We(k);break;case"import":await Ye(k);break;case"stats":await qe(k);break;case"review":await
|
|
147
|
+
wyrm grove policy <project|id> <private|cloud|team>`),e.close(),process.exit(1)}if(I==="--version"||I==="-v"||I==="version"){const l=O();console.log(`${l.name??"wyrm-mcp"} v${l.version??"unknown"}`)}else!I||I==="--help"||I==="-h"||I==="help"?fe():(async()=>{try{switch(I){case"search":await Me(k);break;case"ls":await Ie(k);break;case"show":await Ae(k);break;case"capture":await Ne(k);break;case"rehydrate":await Le(k);break;case"render":await Oe(k);break;case"reverse-bridge":await We(k);break;case"import":await Ye(k);break;case"stats":await qe(k);break;case"review":await Ue(k);break;case"sync":await Fe(k);break;case"cloud":{const{cmdCloud:l}=await import("./cloud/cli.js");await l(k);break}case"grove":await ct(k);break;case"skill":await at(k);break;case"prune":await He(k);break;case"license":await Ve();break;case"login":await Be();break;case"activate":await Ke(k);break;case"maintenance":await Ge(k);break;case"index":await Je(k);break;case"update":await ze(k);break;case"prompt":await Qe(k);break;case"hours":await Xe(k);break;case"invoice":await Ze(k);break;case"agent":await et(k);break;case"setup":await tt(k);break;case"intro":{const{renderIntro:l}=await import("./visibility.js");console.log(l(O().version??"unknown"));break}case"events":await ot(k);break;case"watch":await st(k);break;case"embed":await rt(k);break;case"harvest":await nt(k);break;case"vault":await it(k);break;case"statusline":{const{installClaudeStatusline:l,removeClaudeStatusline:i}=await import("./autoconfig.js"),e=k.includes("--remove")?i():l();e?v(e.message):p("Claude Code not detected (~/.claude missing).");break}case"ui":case"dashboard":k.includes("--ui")||k.push("--ui");case"serve":{const l=k.includes("--ui");if(l){const{enableDevMode:r}=await import("./http-auth.js");r()}const{server:i}=await import("./http-fast.js"),e=parseInt(process.env.WYRM_PORT??process.env.PORT??"3333",10),s=process.env.WYRM_BIND_HOST||"127.0.0.1";i.listen(e,s,()=>{if(v(`Wyrm HTTP server running on ${s}:${e}`),process.env.WYRM_UI_READONLY==="1"&&console.log("\u{1F512} READ-ONLY mode: writes + off-box egress are blocked; safe to expose."),l){const r=`http://localhost:${e}/ui`;console.log(`\u{1F5A5}\uFE0F Dashboard: ${r}`),import("child_process").then(({spawn:t})=>{const n=process.platform;try{const a=n==="darwin"?t("open",[r],{stdio:"ignore",detached:!0}):n==="win32"?t("cmd",["/c","start","",r],{stdio:"ignore",detached:!0}):t("xdg-open",[r],{stdio:"ignore",detached:!0});a.on("error",()=>{}),a.unref()}catch{}}).catch(()=>{})}});break}default:p(`Unknown command: ${I}`),fe(),process.exit(1)}}catch(l){p(String(l)),process.exit(1)}})();
|