@skillstate/cli 2.0.2 → 2.0.3

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/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/@skillstate/cli)](https://www.npmjs.com/package/@skillstate/cli)
8
8
  [![node](https://img.shields.io/node/v/@skillstate/cli)](https://www.npmjs.com/package/@skillstate/cli)
9
- [![Tests](https://img.shields.io/badge/tests-755%20passing-brightgreen)](https://github.com/vitalykuzyaev/skillstate)
9
+ [![Tests](https://img.shields.io/badge/tests-831%20passing-brightgreen)](https://github.com/vitalykuzyaev/skillstate)
10
10
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](https://github.com/vitalykuzyaev/skillstate/blob/main/LICENSE)
11
11
 
12
12
  </div>
@@ -26,8 +26,11 @@ JSON or a markdown dashboard.
26
26
 
27
27
  ## Installation
28
28
 
29
+ One command installs the CLI **and** wires skillstate into your host
30
+ (OpenCode, Claude Code, or Codex — auto-detected):
31
+
29
32
  ```bash
30
- npm i @skillstate/core @skillstate/cli
33
+ npm i -g @skillstate/cli && skillstate init
31
34
  ```
32
35
 
33
36
  Requires Node.js >= 20. TypeScript types are bundled. Ships the `skillstate`
@@ -36,14 +39,42 @@ bin.
36
39
  ## Quick start
37
40
 
38
41
  ```bash
39
- npx skillstate init # creates ./skillstate.json + ./skill-spec.json
40
- npx skillstate run # runs the offline stub-LLM against the spec
41
- npx skillstate run --resume # continue from the persisted .skillstate.json
42
- npx skillstate run --config ./my-config.json
43
- npx skillstate report # pretty JSON report
44
- npx skillstate report --format md # markdown dashboard
42
+ skillstate init # full auto-install into the detected host
43
+ skillstate run # runs the offline stub-LLM against the spec
44
+ skillstate run --resume # continue from the persisted .skillstate.json
45
+ skillstate run --config ./my-config.json
46
+ skillstate report # pretty JSON report
47
+ skillstate report --format md # markdown dashboard
48
+ skillstate uninstall # roll the host install back (manifest-driven)
45
49
  ```
46
50
 
51
+ ### `skillstate init` — what it does
52
+
53
+ 1. Detects the host: `opencode` (`~/.config/opencode/opencode.jsonc` or
54
+ `~/.opencode/bin/opencode`), `claude` (`~/.claude`), `codex` (`~/.codex`).
55
+ Override with `--host <opencode|claude|codex>`.
56
+ 2. Creates a per-project runtime dir `./.skillstate/` with the state file
57
+ (`skillstate.json`), an install manifest, and the `skillstate.json` config
58
+ + spec file for `run`/`report`.
59
+ 3. For OpenCode:
60
+ - writes the plugin to `~/.config/opencode/plugins/skillstate.ts` — files
61
+ in `plugins/` are **auto-loaded at startup** by OpenCode 1.17, so no
62
+ `plugin: []` edit is needed;
63
+ - splices a `skillstate` stdio MCP server into the existing `mcp` object of
64
+ `opencode.jsonc` **in place** (comments and unknown keys preserved,
65
+ timestamped `.bak.*` backup written);
66
+ - installs `~/.config/opencode/skills/skillstate/SKILL.md`.
67
+ 4. For Claude Code: installs `~/.claude/skills/skillstate/SKILL.md` and writes
68
+ a project `.mcp.json` (`mcpServers.skillstate`).
69
+ 5. For Codex: installs `~/.codex/skills/skillstate/SKILL.md` (no JSON MCP
70
+ config to edit).
71
+
72
+ Flags: `--host <name>`, `--state-path <path>`, `--max-history <n>`,
73
+ `--no-mcp`, `--no-skill`, `--dry-run`, `--uninstall`. Init is **idempotent** —
74
+ re-running never duplicates config entries. `skillstate uninstall`
75
+ (`--state-dir <dir>`, `--remove-state`, `--dry-run`) removes exactly what the
76
+ manifest records.
77
+
47
78
  Programmatically:
48
79
 
49
80
  ```ts
@@ -64,7 +95,7 @@ Root path `@skillstate/cli` exports the command layer and the dashboard.
64
95
 
65
96
  **Commands (`commands.ts`):**
66
97
 
67
- - `main(argv, cwd?): Promise<number>` — CLI entry; returns a process exit code.
98
+ - `main(argv, cwd?, home?): Promise<number>` — CLI entry; returns a process exit code.
68
99
  - `CLI_USAGE` — the usage string.
69
100
  - `parseRunArgs(args): RunFlags` — `--config <path>`, `--config=<path>`, `--resume`.
70
101
  - `parseReportArgs(args): ReportFlags` — `--format json|md` (default `json`).
@@ -75,6 +106,22 @@ Root path `@skillstate/cli` exports the command layer and the dashboard.
75
106
  - `loadResumeState(cwd, statePath): SkillState | null`.
76
107
  - `stubLlmResponse(): string`.
77
108
 
109
+ **Host install (`install.ts`):**
110
+
111
+ - `autoInstall({ cwd, home, flags }): Promise<number>` — one-shot host install.
112
+ - `uninstall({ cwd, flags }): Promise<number>` — manifest-driven rollback.
113
+ - `detectHost(home): HostId | null` — `opencode | claude | codex` detection.
114
+ - `parseInitArgs(args): InitFlags`, `parseUninstallArgs(args): UninstallFlags`.
115
+ - `buildSkillMd(statePathRel): string`, `buildMcpEntry(stateAbs)`.
116
+ - `addSkillstateMcp(configText, entry)` / `removeSkillstateMcp(configText)` — JSONC surgery.
117
+ - `resolveMcpCommand()`, `defaultHome()`, `HelpRequestedInitError`, `InstallManifest`.
118
+
119
+ **JSONC (`jsonc.ts`):**
120
+
121
+ - `parseJsonc(text)`, `stripJsonc(text)` — tolerant parsing (comments, trailing commas).
122
+ - `scanObject`, `findTopLevelObject`, `skipWsAndComments` — string-aware spans.
123
+ - `insertObjectEntry` / `removeObjectEntry` — comment-preserving key splice.
124
+
78
125
  **Dashboard (`dashboard.ts`):**
79
126
 
80
127
  - `generateReport(input: ReportInput): string` — full markdown report.
@@ -1,6 +1,6 @@
1
1
  import type { SkillStateConfig } from '@skillstate/core';
2
2
  import type { ProceduralSpec, SkillState } from '@skillstate/core';
3
- export declare const CLI_USAGE = "Usage: skillstate init | run [--config <path>] [--resume] | report [--format json|md]";
3
+ export declare const CLI_USAGE: string;
4
4
  /** Parsed `run` flags. */
5
5
  export interface RunFlags {
6
6
  configPath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOzD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnE,eAAO,MAAM,SAAS,0FACmE,CAAC;AAE1F,0BAA0B;AAC1B,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAMD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,cAGC;CACF;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAOD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CA4BrD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAyB3D;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAWhF;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAoBzE;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAOjF;AAED,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AA6ID;;;;GAIG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqCxE"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOzD,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAYnE,eAAO,MAAM,SAAS,QACgD,CAAC;AAEvE,0BAA0B;AAC1B,MAAM,WAAW,QAAQ;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAMD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,cAGC;CACF;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAOD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CA4BrD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAyB3D;AAED,gFAAgF;AAChF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAWhF;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAoBzE;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAOjF;AAED,yEAAyE;AACzE,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAoJD;;;;GAIG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCxE"}
package/dist/commands.js CHANGED
@@ -1,4 +1,4 @@
1
- // skillstate CLI — init | run [--config <path>] [--resume] | report [--format json|md].
1
+ // skillstate CLI — init [--host ...] [--dry-run] [--uninstall] | uninstall | run | report.
2
2
  //
3
3
  // @non-paper Wave-4 DX layer (additive): thin file orchestration over the
4
4
  // paper-exact runtime. `run` uses a deterministic offline stub LLM (empty
@@ -17,7 +17,9 @@ import { atomicWriteFile } from '@skillstate/core';
17
17
  import { migrate } from '@skillstate/core';
18
18
  import { generateReport } from './dashboard.js';
19
19
  import { INTERCODE_CTF_SPEC } from '@skillstate/core/schemas';
20
- export const CLI_USAGE = 'Usage: skillstate init | run [--config <path>] [--resume] | report [--format json|md]';
20
+ import { autoInstall, CLI_USAGE_INSTALL, defaultHome, HelpRequestedInitError, parseInitArgs, parseUninstallArgs, uninstall, } from './install.js';
21
+ export const CLI_USAGE = `Usage: skillstate init [flags] | uninstall [flags] | run [--config <path>] [--resume] | report [--format json|md]
22
+ init flags: ${CLI_USAGE_INSTALL.slice('Usage: skillstate '.length)}`;
21
23
  function isRecord(value) {
22
24
  return typeof value === 'object' && value !== null && !Array.isArray(value);
23
25
  }
@@ -166,7 +168,14 @@ export function loadResumeState(cwd, statePath) {
166
168
  export function stubLlmResponse() {
167
169
  return `noop step\n\n\`\`\`json\n${JSON.stringify({ state_patch: {}, action: 'noop' })}\n\`\`\``;
168
170
  }
169
- async function cmdInit(cwd) {
171
+ async function cmdInit(cwd, flags) {
172
+ if (flags.uninstall) {
173
+ return uninstall({ cwd, flags: { removeState: false, dryRun: flags.dryRun } });
174
+ }
175
+ if (flags.dryRun) {
176
+ console.log('[dry-run] would create ./skillstate.json + ./skill-spec.json (if missing)');
177
+ return autoInstall({ cwd, home: defaultHome(), flags });
178
+ }
170
179
  const configPath = path.join(cwd, CONFIG_FILE_NAME);
171
180
  const defaults = defaultConfig();
172
181
  if (fs.existsSync(configPath) === false) {
@@ -183,7 +192,7 @@ async function cmdInit(cwd) {
183
192
  fs.writeFileSync(specAbs, `${JSON.stringify(INTERCODE_CTF_SPEC, null, 2)}\n`, 'utf-8');
184
193
  console.log(`Created ${defaults.specPath}`);
185
194
  }
186
- return 0;
195
+ return autoInstall({ cwd, home: defaultHome(), flags });
187
196
  }
188
197
  async function cmdRun(cwd, flags) {
189
198
  const config = loadCliConfig(cwd, flags.configPath);
@@ -308,15 +317,10 @@ export async function main(argv, cwd) {
308
317
  }
309
318
  try {
310
319
  if (command === 'init') {
311
- if (wantsHelp(rest)) {
312
- console.log(CLI_USAGE);
313
- return 0;
314
- }
315
- if (rest.length > 0) {
316
- console.error(`Unknown flag for init: ${rest[0]}\n${CLI_USAGE}`);
317
- return 2;
318
- }
319
- return await cmdInit(dir);
320
+ return await cmdInit(dir, parseInitArgs(rest));
321
+ }
322
+ if (command === 'uninstall') {
323
+ return await uninstall({ cwd: dir, flags: parseUninstallArgs(rest) });
320
324
  }
321
325
  if (command === 'run') {
322
326
  return await cmdRun(dir, parseRunArgs(rest));
@@ -328,7 +332,7 @@ export async function main(argv, cwd) {
328
332
  return 2;
329
333
  }
330
334
  catch (error) {
331
- if (error instanceof HelpRequestedError) {
335
+ if (error instanceof HelpRequestedError || error instanceof HelpRequestedInitError) {
332
336
  console.log(CLI_USAGE);
333
337
  return 0;
334
338
  }
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export * from './commands.js';
2
+ export * from './install.js';
3
+ export * from './jsonc.js';
2
4
  export * from './dashboard.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  // @skillstate/cli — skillstate CLI commands + dashboard.
2
2
  export * from './commands.js';
3
+ export * from './install.js';
4
+ export * from './jsonc.js';
3
5
  export * from './dashboard.js';
4
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,129 @@
1
+ /** Supported hosts. */
2
+ export type HostId = 'opencode' | 'claude' | 'codex';
3
+ /** Project runtime directory created by init. */
4
+ export declare const STATE_DIR_NAME = ".skillstate";
5
+ /** Install manifest file name inside the state dir. */
6
+ export declare const MANIFEST_FILE_NAME = "install-manifest.json";
7
+ /** Parsed `init` flags. */
8
+ export interface InitFlags {
9
+ /** Forced host (`--host`); auto-detected when omitted. */
10
+ host?: HostId;
11
+ /** State file path (`--state-path`); default `<cwd>/.skillstate/skillstate.json`. */
12
+ statePath?: string;
13
+ /** Non-system messages kept by the plugin (`--max-history`, default 3). */
14
+ maxHistory?: number;
15
+ /** Skip MCP server registration (`--no-mcp`). */
16
+ noMcp: boolean;
17
+ /** Skip SKILL.md installation (`--no-skill`). */
18
+ noSkill: boolean;
19
+ /** Print the plan without touching anything (`--dry-run`). */
20
+ dryRun: boolean;
21
+ /** Accepted alias for the default auto behavior (`--auto`). */
22
+ auto: boolean;
23
+ /** Roll the install back instead of installing (`--uninstall`). */
24
+ uninstall: boolean;
25
+ }
26
+ /** Parsed `uninstall` flags. */
27
+ export interface UninstallFlags {
28
+ /** Directory holding the manifest (`--state-dir`; the `.skillstate` dir itself, default `<cwd>/.skillstate`). */
29
+ stateDir?: string;
30
+ /** Also delete the state directory (`--remove-state`). */
31
+ removeState: boolean;
32
+ /** Print the plan without touching anything (`--dry-run`). */
33
+ dryRun: boolean;
34
+ }
35
+ /** What was installed, where — persisted for a precise uninstall. */
36
+ export interface InstallManifest {
37
+ version: 1;
38
+ host: HostId;
39
+ installedAt: string;
40
+ statePath: string;
41
+ maxHistoryMessages: number;
42
+ pluginPath?: string;
43
+ skillPath?: string;
44
+ mcp?: {
45
+ configPath: string;
46
+ format: 'opencode-jsonc' | 'claude-mcp-json';
47
+ };
48
+ }
49
+ /** Default home (`$HOME`, else `os.homedir()`); the `main` entry uses this. */
50
+ export declare function defaultHome(): string;
51
+ /**
52
+ * Detect the host from marker files under `home` (opencode first):
53
+ * - opencode: `~/.config/opencode/opencode.jsonc|opencode.json` or `~/.opencode/bin/opencode`;
54
+ * - claude: `~/.claude`;
55
+ * - codex: `~/.codex`.
56
+ * Returns null when nothing matches.
57
+ */
58
+ export declare function detectHost(home: string): HostId | null;
59
+ /**
60
+ * Parse `init` flags: `--host <h>`, `--state-path <path>`, `--max-history <n>`,
61
+ * `--no-mcp`, `--no-skill`, `--dry-run`, `--auto`, `--uninstall` (`=`-forms
62
+ * accepted). Throws an `Error` with the usage line on unknown/invalid flags.
63
+ */
64
+ export declare function parseInitArgs(args: string[]): InitFlags;
65
+ /**
66
+ * Parse `uninstall` flags: `--state-dir <path>`, `--remove-state`,
67
+ * `--dry-run`. Throws an `Error` with the usage line on unknown flags.
68
+ */
69
+ export declare function parseUninstallArgs(args: string[]): UninstallFlags;
70
+ /** Thrown by `parseInitArgs`/`parseUninstallArgs` on `--help`/`-h`. */
71
+ export declare class HelpRequestedInitError extends Error {
72
+ constructor();
73
+ }
74
+ /** Usage line for init/uninstall (composed with the CLI usage in commands.ts). */
75
+ export declare const CLI_USAGE_INSTALL = "Usage: skillstate init [--host opencode|claude|codex] [--state-path <path>] [--max-history <n>] [--no-mcp] [--no-skill] [--dry-run] | init --uninstall | uninstall [--state-dir <path>] [--remove-state] [--dry-run]";
76
+ /** Resolve the MCP server command: the `@skillstate/mcp` bin via `node`, or the global `skillstate-mcp` bin. */
77
+ export declare function resolveMcpCommandWith(resolve: (id: string) => string): {
78
+ command: string;
79
+ args: string[];
80
+ };
81
+ /** `resolveMcpCommandWith` bound to this module's require resolver. */
82
+ export declare function resolveMcpCommand(): {
83
+ command: string;
84
+ args: string[];
85
+ };
86
+ /** SKILL.md with a short frontmatter description + the adapter-generated body. */
87
+ export declare function buildSkillMd(statePathRel: string): string;
88
+ /** Skillstate MCP entry shaped like the host's existing local-server entries. */
89
+ export declare function buildMcpEntry(stateAbs: string): Record<string, unknown>;
90
+ /**
91
+ * Splice the `skillstate` server into the `mcp` object of OpenCode config
92
+ * text. Returns the (possibly unchanged) text and whether anything changed.
93
+ */
94
+ export declare function addSkillstateMcp(configText: string, entry: Record<string, unknown>): {
95
+ text: string;
96
+ changed: boolean;
97
+ };
98
+ /**
99
+ * Splice the `skillstate` server back out of the `mcp` object. Missing
100
+ * `mcp` key / non-object `mcp` / missing `skillstate` are all no-ops.
101
+ */
102
+ export declare function removeSkillstateMcp(configText: string): {
103
+ text: string;
104
+ changed: boolean;
105
+ };
106
+ /** Options for {@link autoInstall}. */
107
+ export interface InstallOptions {
108
+ cwd: string;
109
+ home: string;
110
+ flags: InitFlags;
111
+ }
112
+ /**
113
+ * Full one-shot install for the detected (or forced) host. Never throws for
114
+ * expected conditions; returns a process exit code (0 ok, 1 no host).
115
+ */
116
+ export declare function autoInstall(options: InstallOptions): Promise<number>;
117
+ /** Options for {@link uninstall}. */
118
+ export interface UninstallOptions {
119
+ cwd: string;
120
+ flags: UninstallFlags;
121
+ }
122
+ /**
123
+ * Roll back exactly what an install recorded in the manifest: plugin file,
124
+ * SKILL.md, `mcp.skillstate` entry (with a config backup), and optionally
125
+ * the whole state directory. Returns a process exit code (0 ok, 1 no/manifest
126
+ * unreadable).
127
+ */
128
+ export declare function uninstall(options: UninstallOptions): Promise<number>;
129
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,470 @@
1
+ // skillstate host auto-install (additive, @non-paper Wave-4 DX).
2
+ //
3
+ // `skillstate init` detects the host (opencode | claude | codex) and installs
4
+ // everything in one shot:
5
+ // - state dir `./.skillstate/` in the project (per-project state + manifest);
6
+ // - OpenCode: plugin into `~/.config/opencode/plugins/` (auto-loaded at
7
+ // startup), `mcp.skillstate` entry spliced into `opencode.jsonc` (with a
8
+ // timestamped backup), `SKILL.md` into `~/.config/opencode/skills/`;
9
+ // - Claude: `SKILL.md` into `~/.claude/skills/` + `.mcp.json` in the project;
10
+ // - Codex: `SKILL.md` into `~/.codex/skills/` (no MCP — TOML config untouched).
11
+ //
12
+ // An install manifest (`<stateDir>/install-manifest.json`) records every path
13
+ // touched so `skillstate uninstall` (or `init --uninstall`) can roll it all
14
+ // back exactly.
15
+ /// <reference types="node" />
16
+ import * as fs from 'node:fs';
17
+ import * as os from 'node:os';
18
+ import * as path from 'node:path';
19
+ import { createRequire } from 'node:module';
20
+ import { atomicWriteFile } from '@skillstate/core';
21
+ import { INTERCODE_CTF_SPEC } from '@skillstate/core/schemas';
22
+ import { OpenCodeAdapter } from '@skillstate/opencode';
23
+ import { findTopLevelObject, insertObjectEntry, removeObjectEntry } from './jsonc.js';
24
+ import { resolveInCwd } from './commands.js';
25
+ const HOSTS = ['opencode', 'claude', 'codex'];
26
+ /** Project runtime directory created by init. */
27
+ export const STATE_DIR_NAME = '.skillstate';
28
+ /** Install manifest file name inside the state dir. */
29
+ export const MANIFEST_FILE_NAME = 'install-manifest.json';
30
+ /** Short skill description used for the SKILL.md frontmatter. */
31
+ const SKILL_DESCRIPTION = 'State-based execution: persist agent state to a JSON file, keep the prompt O(1), and resume any procedure from disk.';
32
+ function isRecord(value) {
33
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
34
+ }
35
+ /** Default home (`$HOME`, else `os.homedir()`); the `main` entry uses this. */
36
+ export function defaultHome() {
37
+ return process.env['HOME'] ?? os.homedir();
38
+ }
39
+ /**
40
+ * Detect the host from marker files under `home` (opencode first):
41
+ * - opencode: `~/.config/opencode/opencode.jsonc|opencode.json` or `~/.opencode/bin/opencode`;
42
+ * - claude: `~/.claude`;
43
+ * - codex: `~/.codex`.
44
+ * Returns null when nothing matches.
45
+ */
46
+ export function detectHost(home) {
47
+ const configDir = path.join(home, '.config', 'opencode');
48
+ if (fs.existsSync(path.join(configDir, 'opencode.jsonc')) ||
49
+ fs.existsSync(path.join(configDir, 'opencode.json')) ||
50
+ fs.existsSync(path.join(home, '.opencode', 'bin', 'opencode'))) {
51
+ return 'opencode';
52
+ }
53
+ if (fs.existsSync(path.join(home, '.claude'))) {
54
+ return 'claude';
55
+ }
56
+ if (fs.existsSync(path.join(home, '.codex'))) {
57
+ return 'codex';
58
+ }
59
+ return null;
60
+ }
61
+ /**
62
+ * Parse `init` flags: `--host <h>`, `--state-path <path>`, `--max-history <n>`,
63
+ * `--no-mcp`, `--no-skill`, `--dry-run`, `--auto`, `--uninstall` (`=`-forms
64
+ * accepted). Throws an `Error` with the usage line on unknown/invalid flags.
65
+ */
66
+ export function parseInitArgs(args) {
67
+ if (wantsHelpInit(args)) {
68
+ throw new HelpRequestedInitError();
69
+ }
70
+ const flags = { noMcp: false, noSkill: false, dryRun: false, auto: false, uninstall: false };
71
+ for (let i = 0; i < args.length; i += 1) {
72
+ const arg = args[i];
73
+ if (arg === '--auto') {
74
+ flags.auto = true;
75
+ }
76
+ else if (arg === '--dry-run') {
77
+ flags.dryRun = true;
78
+ }
79
+ else if (arg === '--no-mcp') {
80
+ flags.noMcp = true;
81
+ }
82
+ else if (arg === '--no-skill') {
83
+ flags.noSkill = true;
84
+ }
85
+ else if (arg === '--uninstall') {
86
+ flags.uninstall = true;
87
+ }
88
+ else if (arg === '--host' || arg.startsWith('--host=')) {
89
+ const value = arg === '--host' ? args[++i] : arg.slice('--host='.length);
90
+ if (value === undefined ||
91
+ (value !== 'opencode' && value !== 'claude' && value !== 'codex')) {
92
+ throw new Error(`Invalid --host (want opencode|claude|codex)\n${CLI_USAGE_INSTALL}`);
93
+ }
94
+ flags.host = value;
95
+ }
96
+ else if (arg === '--state-path' || arg.startsWith('--state-path=')) {
97
+ const value = arg === '--state-path' ? args[++i] : arg.slice('--state-path='.length);
98
+ if (value === undefined || value.length === 0) {
99
+ throw new Error(`Missing value for --state-path\n${CLI_USAGE_INSTALL}`);
100
+ }
101
+ flags.statePath = value;
102
+ }
103
+ else if (arg === '--max-history' || arg.startsWith('--max-history=')) {
104
+ const value = arg === '--max-history' ? args[++i] : arg.slice('--max-history='.length);
105
+ const parsed = typeof value === 'string' ? Number(value) : NaN;
106
+ if (value === undefined || !Number.isInteger(parsed) || parsed < 1) {
107
+ throw new Error(`Invalid --max-history (want a positive integer)\n${CLI_USAGE_INSTALL}`);
108
+ }
109
+ flags.maxHistory = parsed;
110
+ }
111
+ else {
112
+ throw new Error(`Unknown flag for init: ${arg}\n${CLI_USAGE_INSTALL}`);
113
+ }
114
+ }
115
+ return flags;
116
+ }
117
+ /**
118
+ * Parse `uninstall` flags: `--state-dir <path>`, `--remove-state`,
119
+ * `--dry-run`. Throws an `Error` with the usage line on unknown flags.
120
+ */
121
+ export function parseUninstallArgs(args) {
122
+ if (wantsHelpInit(args)) {
123
+ throw new HelpRequestedInitError();
124
+ }
125
+ const flags = { removeState: false, dryRun: false };
126
+ for (let i = 0; i < args.length; i += 1) {
127
+ const arg = args[i];
128
+ if (arg === '--remove-state') {
129
+ flags.removeState = true;
130
+ }
131
+ else if (arg === '--dry-run') {
132
+ flags.dryRun = true;
133
+ }
134
+ else if (arg === '--state-dir' || arg.startsWith('--state-dir=')) {
135
+ const value = arg === '--state-dir' ? args[++i] : arg.slice('--state-dir='.length);
136
+ if (value === undefined || value.length === 0) {
137
+ throw new Error(`Missing value for --state-dir\n${CLI_USAGE_INSTALL}`);
138
+ }
139
+ flags.stateDir = value;
140
+ }
141
+ else {
142
+ throw new Error(`Unknown flag for uninstall: ${arg}\n${CLI_USAGE_INSTALL}`);
143
+ }
144
+ }
145
+ return flags;
146
+ }
147
+ /** Help marker for init/uninstall flags (kept local to avoid a commands.ts cycle). */
148
+ function wantsHelpInit(args) {
149
+ return args.includes('--help') || args.includes('-h');
150
+ }
151
+ /** Thrown by `parseInitArgs`/`parseUninstallArgs` on `--help`/`-h`. */
152
+ export class HelpRequestedInitError extends Error {
153
+ constructor() {
154
+ super('help requested');
155
+ this.name = 'HelpRequestedInitError';
156
+ }
157
+ }
158
+ /** Usage line for init/uninstall (composed with the CLI usage in commands.ts). */
159
+ export const CLI_USAGE_INSTALL = 'Usage: skillstate init [--host opencode|claude|codex] [--state-path <path>] [--max-history <n>] [--no-mcp] [--no-skill] [--dry-run] | init --uninstall | uninstall [--state-dir <path>] [--remove-state] [--dry-run]';
160
+ /** Resolve the MCP server command: the `@skillstate/mcp` bin via `node`, or the global `skillstate-mcp` bin. */
161
+ export function resolveMcpCommandWith(resolve) {
162
+ try {
163
+ const pkg = resolve('@skillstate/mcp/package.json');
164
+ return { command: 'node', args: [path.join(path.dirname(pkg), 'bin', 'mcp.js')] };
165
+ }
166
+ catch {
167
+ return { command: 'skillstate-mcp', args: [] };
168
+ }
169
+ }
170
+ /** `resolveMcpCommandWith` bound to this module's require resolver. */
171
+ export function resolveMcpCommand() {
172
+ return resolveMcpCommandWith((id) => createRequire(import.meta.url).resolve(id));
173
+ }
174
+ function backupPathFor(file) {
175
+ return `${file}.bak.${new Date().toISOString().replace(/[:.]/g, '-')}`;
176
+ }
177
+ /** Path of the OpenCode host config: existing `.jsonc`, else `.json`, else the canonical `.jsonc`. */
178
+ function resolveOpencodeConfig(home) {
179
+ const dir = path.join(home, '.config', 'opencode');
180
+ const jsonc = path.join(dir, 'opencode.jsonc');
181
+ if (fs.existsSync(jsonc)) {
182
+ return jsonc;
183
+ }
184
+ const json = path.join(dir, 'opencode.json');
185
+ return fs.existsSync(json) ? json : jsonc;
186
+ }
187
+ function skillDirFor(host, home) {
188
+ if (host === 'opencode') {
189
+ return path.join(home, '.config', 'opencode', 'skills', 'skillstate');
190
+ }
191
+ if (host === 'claude') {
192
+ return path.join(home, '.claude', 'skills', 'skillstate');
193
+ }
194
+ return path.join(home, '.codex', 'skills', 'skillstate');
195
+ }
196
+ /** SKILL.md with a short frontmatter description + the adapter-generated body. */
197
+ export function buildSkillMd(statePathRel) {
198
+ const generated = new OpenCodeAdapter().generateSkillMd(INTERCODE_CTF_SPEC, statePathRel);
199
+ const body = generated.slice(generated.indexOf('\n---', 3) + '\n---\n'.length);
200
+ return `---
201
+ name: skillstate
202
+ description: ${JSON.stringify(SKILL_DESCRIPTION)}
203
+ ---
204
+ ${body}`;
205
+ }
206
+ /** Skillstate MCP entry shaped like the host's existing local-server entries. */
207
+ export function buildMcpEntry(stateAbs) {
208
+ const cmd = resolveMcpCommand();
209
+ return {
210
+ type: 'local',
211
+ command: [cmd.command, ...cmd.args],
212
+ enabled: true,
213
+ environment: { SKILLSTATE_STATE_PATH: stateAbs },
214
+ };
215
+ }
216
+ /**
217
+ * Splice the `skillstate` server into the `mcp` object of OpenCode config
218
+ * text. Returns the (possibly unchanged) text and whether anything changed.
219
+ */
220
+ export function addSkillstateMcp(configText, entry) {
221
+ const root = findTopLevelObject(configText);
222
+ if (root === null) {
223
+ return { text: configText, changed: false };
224
+ }
225
+ const mcp = root.entries.find((e) => e.key === 'mcp');
226
+ if (mcp === undefined) {
227
+ return insertObjectEntry(configText, root.braceStart, 'mcp', JSON.stringify({ skillstate: entry }, null, 2));
228
+ }
229
+ if (configText[mcp.valueStart] !== '{') {
230
+ return { text: configText, changed: false };
231
+ }
232
+ return insertObjectEntry(configText, mcp.valueStart, 'skillstate', JSON.stringify(entry, null, 2));
233
+ }
234
+ /**
235
+ * Splice the `skillstate` server back out of the `mcp` object. Missing
236
+ * `mcp` key / non-object `mcp` / missing `skillstate` are all no-ops.
237
+ */
238
+ export function removeSkillstateMcp(configText) {
239
+ const root = findTopLevelObject(configText);
240
+ if (root === null) {
241
+ return { text: configText, changed: false };
242
+ }
243
+ const mcp = root.entries.find((e) => e.key === 'mcp');
244
+ if (mcp === undefined || configText[mcp.valueStart] !== '{') {
245
+ return { text: configText, changed: false };
246
+ }
247
+ return removeObjectEntry(configText, mcp.valueStart, 'skillstate');
248
+ }
249
+ /**
250
+ * Full one-shot install for the detected (or forced) host. Never throws for
251
+ * expected conditions; returns a process exit code (0 ok, 1 no host).
252
+ */
253
+ export async function autoInstall(options) {
254
+ const { cwd, home, flags } = options;
255
+ const host = flags.host ?? detectHost(home);
256
+ if (host === null) {
257
+ console.error('No supported host detected (~/.config/opencode, ~/.claude, ~/.codex). Install one or pass --host.');
258
+ return 1;
259
+ }
260
+ const dry = flags.dryRun;
261
+ const say = (line) => {
262
+ console.log(dry ? `[dry-run] ${line}` : line);
263
+ };
264
+ const maxHistory = flags.maxHistory ?? 3;
265
+ const stateDir = path.join(cwd, STATE_DIR_NAME);
266
+ const stateAbs = flags.statePath !== undefined ? resolveInCwd(cwd, flags.statePath) : path.join(stateDir, 'skillstate.json');
267
+ const stateCreated = !dry && !fs.existsSync(stateAbs);
268
+ if (!dry) {
269
+ fs.mkdirSync(path.dirname(stateAbs), { recursive: true });
270
+ if (stateCreated) {
271
+ await atomicWriteFile(stateAbs, `${JSON.stringify({ version: 1, state: {} }, null, 2)}\n`);
272
+ }
273
+ }
274
+ say(`host: ${host}${flags.host === undefined ? ' (detected)' : ''}`);
275
+ say(`state: ${stateAbs}${stateCreated ? ' (created)' : ''}`);
276
+ const manifest = {
277
+ version: 1,
278
+ host,
279
+ installedAt: new Date().toISOString(),
280
+ statePath: stateAbs,
281
+ maxHistoryMessages: maxHistory,
282
+ };
283
+ if (host === 'opencode') {
284
+ const pluginAbs = path.join(home, '.config', 'opencode', 'plugins', 'skillstate.ts');
285
+ if (!dry) {
286
+ await new OpenCodeAdapter().savePluginCode(pluginAbs, stateAbs, { maxHistoryMessages: maxHistory });
287
+ }
288
+ say(`plugin: ${pluginAbs} (auto-loaded from plugins/)`);
289
+ manifest.pluginPath = pluginAbs;
290
+ }
291
+ if (!flags.noSkill) {
292
+ const skillAbs = path.join(skillDirFor(host, home), 'SKILL.md');
293
+ if (!dry) {
294
+ await atomicWriteFile(skillAbs, buildSkillMd(relativeStatePath(cwd, stateAbs)));
295
+ }
296
+ say(`skill: ${skillAbs}`);
297
+ manifest.skillPath = skillAbs;
298
+ }
299
+ else {
300
+ say('skill: skipped (--no-skill)');
301
+ }
302
+ if (flags.noMcp) {
303
+ say('mcp: skipped (--no-mcp)');
304
+ }
305
+ else if (host === 'opencode') {
306
+ const configPath = resolveOpencodeConfig(home);
307
+ let text;
308
+ try {
309
+ text = fs.readFileSync(configPath, 'utf-8');
310
+ }
311
+ catch {
312
+ text = '{\n}\n';
313
+ }
314
+ const result = addSkillstateMcp(text, buildMcpEntry(stateAbs));
315
+ if (result.changed) {
316
+ const backup = backupPathFor(configPath);
317
+ if (!dry) {
318
+ await atomicWriteFile(backup, text);
319
+ await atomicWriteFile(configPath, result.text);
320
+ }
321
+ say(`mcp: ${configPath} (skillstate server added)`);
322
+ say(`mcp backup: ${backup}`);
323
+ manifest.mcp = { configPath, format: 'opencode-jsonc' };
324
+ }
325
+ else {
326
+ say(`mcp: ${configPath} (skillstate already registered)`);
327
+ }
328
+ }
329
+ else if (host === 'claude') {
330
+ const mcpJson = path.join(cwd, '.mcp.json');
331
+ let doc = {};
332
+ if (fs.existsSync(mcpJson)) {
333
+ try {
334
+ doc = JSON.parse(fs.readFileSync(mcpJson, 'utf-8'));
335
+ }
336
+ catch {
337
+ doc = {};
338
+ }
339
+ }
340
+ if (!isRecord(doc.mcpServers) || doc.mcpServers['skillstate'] === undefined) {
341
+ const servers = isRecord(doc.mcpServers) ? doc.mcpServers : {};
342
+ const backup = fs.existsSync(mcpJson) ? backupPathFor(mcpJson) : null;
343
+ if (!dry) {
344
+ if (backup !== null) {
345
+ await atomicWriteFile(backup, fs.readFileSync(mcpJson, 'utf-8'));
346
+ }
347
+ await atomicWriteFile(mcpJson, `${JSON.stringify({ mcpServers: { ...servers, skillstate: buildMcpEntry(stateAbs) } }, null, 2)}\n`);
348
+ }
349
+ say(`mcp: ${mcpJson} (skillstate server added)`);
350
+ manifest.mcp = { configPath: mcpJson, format: 'claude-mcp-json' };
351
+ }
352
+ else {
353
+ say(`mcp: ${mcpJson} (skillstate already registered)`);
354
+ }
355
+ }
356
+ else {
357
+ say('mcp: skipped (codex has no JSON MCP config; register the server manually if needed)');
358
+ }
359
+ const manifestAbs = path.join(stateDir, MANIFEST_FILE_NAME);
360
+ if (!dry) {
361
+ await atomicWriteFile(manifestAbs, `${JSON.stringify(manifest, null, 2)}\n`);
362
+ }
363
+ say(`manifest: ${manifestAbs}`);
364
+ say(dry ? 'dry run complete — nothing was written.' : 'Done. Next: `skillstate run` in this project, then open your host.');
365
+ return 0;
366
+ }
367
+ /** State path as the SKILL.md should reference it: relative when inside cwd, absolute otherwise. */
368
+ function relativeStatePath(cwd, stateAbs) {
369
+ const rel = path.relative(cwd, stateAbs);
370
+ return rel.startsWith('..') ? stateAbs : `./${rel}`;
371
+ }
372
+ /**
373
+ * Roll back exactly what an install recorded in the manifest: plugin file,
374
+ * SKILL.md, `mcp.skillstate` entry (with a config backup), and optionally
375
+ * the whole state directory. Returns a process exit code (0 ok, 1 no/manifest
376
+ * unreadable).
377
+ */
378
+ export async function uninstall(options) {
379
+ const { cwd, flags } = options;
380
+ const dry = flags.dryRun;
381
+ const say = (line) => {
382
+ console.log(dry ? `[dry-run] ${line}` : line);
383
+ };
384
+ const stateDir = flags.stateDir !== undefined ? resolveInCwd(cwd, flags.stateDir) : path.join(cwd, STATE_DIR_NAME);
385
+ const manifestAbs = path.join(stateDir, MANIFEST_FILE_NAME);
386
+ let raw;
387
+ try {
388
+ raw = fs.readFileSync(manifestAbs, 'utf-8');
389
+ }
390
+ catch {
391
+ console.error(`No install manifest at ${manifestAbs} — nothing to uninstall.`);
392
+ return 1;
393
+ }
394
+ let manifest;
395
+ try {
396
+ manifest = JSON.parse(raw);
397
+ }
398
+ catch {
399
+ console.error(`Corrupt install manifest at ${manifestAbs}`);
400
+ return 1;
401
+ }
402
+ if (!isRecord(manifest) ||
403
+ manifest['version'] !== 1 ||
404
+ typeof manifest['host'] !== 'string' ||
405
+ typeof manifest['statePath'] !== 'string') {
406
+ console.error(`Corrupt install manifest at ${manifestAbs}`);
407
+ return 1;
408
+ }
409
+ const m = manifest;
410
+ say(`uninstall (${m.host})`);
411
+ if (m.pluginPath !== undefined && fs.existsSync(m.pluginPath)) {
412
+ if (!dry) {
413
+ fs.rmSync(m.pluginPath);
414
+ }
415
+ say(`removed plugin: ${m.pluginPath}`);
416
+ }
417
+ if (m.skillPath !== undefined && fs.existsSync(m.skillPath)) {
418
+ if (!dry) {
419
+ fs.rmSync(m.skillPath);
420
+ }
421
+ say(`removed skill: ${m.skillPath}`);
422
+ }
423
+ if (m.mcp !== undefined && fs.existsSync(m.mcp.configPath)) {
424
+ const configPath = m.mcp.configPath;
425
+ if (m.mcp.format === 'claude-mcp-json') {
426
+ try {
427
+ const doc = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
428
+ if (isRecord(doc.mcpServers) && doc.mcpServers['skillstate'] !== undefined) {
429
+ const { ['skillstate']: _removed, ...rest } = doc.mcpServers;
430
+ const backup = backupPathFor(configPath);
431
+ if (!dry) {
432
+ await atomicWriteFile(backup, fs.readFileSync(configPath, 'utf-8'));
433
+ await atomicWriteFile(configPath, `${JSON.stringify({ mcpServers: rest }, null, 2)}\n`);
434
+ }
435
+ say(`removed mcp entry: ${configPath} (backup: ${backup})`);
436
+ }
437
+ }
438
+ catch {
439
+ console.error(`Skipping mcp: ${configPath} is unreadable`);
440
+ }
441
+ }
442
+ else {
443
+ const text = fs.readFileSync(configPath, 'utf-8');
444
+ const result = removeSkillstateMcp(text);
445
+ if (result.changed) {
446
+ const backup = backupPathFor(configPath);
447
+ if (!dry) {
448
+ await atomicWriteFile(backup, text);
449
+ await atomicWriteFile(configPath, result.text);
450
+ }
451
+ say(`removed mcp entry: ${configPath} (backup: ${backup})`);
452
+ }
453
+ }
454
+ }
455
+ if (dry) {
456
+ say('dry run complete — nothing was written.');
457
+ return 0;
458
+ }
459
+ if (flags.removeState) {
460
+ fs.rmSync(stateDir, { recursive: true, force: true });
461
+ say(`removed state dir: ${stateDir}`);
462
+ }
463
+ else {
464
+ fs.rmSync(manifestAbs, { force: true });
465
+ say(`kept state: ${stateDir} (use --remove-state to delete)`);
466
+ }
467
+ say('Uninstalled.');
468
+ return 0;
469
+ }
470
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /** One `"key": <value>` entry inside a scanned object. */
2
+ export interface JsoncEntry {
3
+ key: string;
4
+ /** Index of the opening quote of the key. */
5
+ entryStart: number;
6
+ /** Index just past the value's trailing comma (when present). */
7
+ entryEnd: number;
8
+ /** Index of the first char of the value. */
9
+ valueStart: number;
10
+ /** Index just past the value's last char. */
11
+ valueEnd: number;
12
+ }
13
+ /** Span of a `{ ... }` object in JSONC text. */
14
+ export interface JsoncObjectSpan {
15
+ braceStart: number;
16
+ braceEnd: number;
17
+ entries: JsoncEntry[];
18
+ }
19
+ /** Result of an in-place entry insertion/removal. */
20
+ export interface JsoncEditResult {
21
+ text: string;
22
+ changed: boolean;
23
+ }
24
+ /** Skip whitespace and line/block comments starting at `i`. */
25
+ export declare function skipWsAndComments(text: string, i: number): number;
26
+ /** Scan the object whose `{` sits at `objStart` into a span with entry positions. */
27
+ export declare function scanObject(text: string, objStart: number): JsoncObjectSpan;
28
+ /** Span of the document's root object, or null when the root is not an object. */
29
+ export declare function findTopLevelObject(text: string): JsoncObjectSpan | null;
30
+ /** Strip line/block comments and trailing commas so `JSON.parse` can read the rest. */
31
+ export declare function stripJsonc(text: string): string;
32
+ /** Parse JSONC text (comments + trailing commas tolerated) via JSON.parse. */
33
+ export declare function parseJsonc(text: string): unknown;
34
+ /**
35
+ * Splice one `"key": <valueJson>` entry into the object at `objStart`,
36
+ * preserving all surrounding text (comments included). Idempotent: when the
37
+ * key already exists the text is returned unchanged.
38
+ */
39
+ export declare function insertObjectEntry(text: string, objStart: number, key: string, valueJson: string): JsoncEditResult;
40
+ /**
41
+ * Splice the `"key"` entry out of the object at `objStart`, keeping the rest
42
+ * valid (the entry's trailing comma, or the previous entry's comma for a last
43
+ * entry, goes with it). Idempotent: a missing key returns the text unchanged.
44
+ */
45
+ export declare function removeObjectEntry(text: string, objStart: number, key: string): JsoncEditResult;
46
+ //# sourceMappingURL=jsonc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonc.d.ts","sourceRoot":"","sources":["../src/jsonc.ts"],"names":[],"mappings":"AAUA,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,qDAAqD;AACrD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAMD,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAqBjE;AAuDD,qFAAqF;AACrF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CA6B1E;AAED,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAMvE;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkC/C;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AA4BD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,eAAe,CAoBjB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,eAAe,CAqBjB"}
package/dist/jsonc.js ADDED
@@ -0,0 +1,255 @@
1
+ // @non-paper JSONC surgery for host-config edits (additive).
2
+ //
3
+ // OpenCode's `opencode.jsonc` may carry comments and trailing commas, and
4
+ // rewriting the whole document would destroy them. This module scans JSONC
5
+ // text string-aware (quotes, escapes, line and block comments), locates
6
+ // object entries by span, and splices single keys in/out so everything
7
+ // around the edit point is preserved byte-for-byte.
8
+ //
9
+ // Zero dependencies, Node >= 20, ESM.
10
+ function isWs(ch) {
11
+ return ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r';
12
+ }
13
+ /** Skip whitespace and line/block comments starting at `i`. */
14
+ export function skipWsAndComments(text, i) {
15
+ while (i < text.length) {
16
+ const ch = text[i];
17
+ if (isWs(ch)) {
18
+ i += 1;
19
+ }
20
+ else if (ch === '/' && text[i + 1] === '/') {
21
+ i += 2;
22
+ while (i < text.length && text[i] !== '\n') {
23
+ i += 1;
24
+ }
25
+ }
26
+ else if (ch === '/' && text[i + 1] === '*') {
27
+ i += 2;
28
+ while (i < text.length && !(text[i] === '*' && text[i + 1] === '/')) {
29
+ i += 1;
30
+ }
31
+ i = Math.min(i + 2, text.length);
32
+ }
33
+ else {
34
+ break;
35
+ }
36
+ }
37
+ return i;
38
+ }
39
+ /** Scan a `"string"` literal starting at `i` (must be `"`); returns the index past the closing quote. */
40
+ function scanString(text, i) {
41
+ i += 1;
42
+ while (i < text.length) {
43
+ const ch = text[i];
44
+ if (ch === '\\') {
45
+ i += 2;
46
+ }
47
+ else if (ch === '"') {
48
+ return i + 1;
49
+ }
50
+ else {
51
+ i += 1;
52
+ }
53
+ }
54
+ throw new Error('Unterminated string in JSONC');
55
+ }
56
+ /** Index just past the JSON value starting at `i` (object, array, string, or primitive). */
57
+ function scanValueEnd(text, i) {
58
+ const ch = text[i];
59
+ if (ch === '{' || ch === '[') {
60
+ let depth = 0;
61
+ while (i < text.length) {
62
+ const c = text[i];
63
+ if (c === '"') {
64
+ i = scanString(text, i);
65
+ }
66
+ else if (c === '{' || c === '[') {
67
+ depth += 1;
68
+ i += 1;
69
+ }
70
+ else if (c === '}' || c === ']') {
71
+ depth -= 1;
72
+ i += 1;
73
+ if (depth === 0) {
74
+ return i;
75
+ }
76
+ }
77
+ else {
78
+ i += 1;
79
+ }
80
+ }
81
+ throw new Error('Unterminated object/array in JSONC');
82
+ }
83
+ if (ch === '"') {
84
+ return scanString(text, i);
85
+ }
86
+ while (i < text.length) {
87
+ const c = text[i];
88
+ if (c === ',' || c === '}' || c === ']' || isWs(c)) {
89
+ return i;
90
+ }
91
+ i += 1;
92
+ }
93
+ return i;
94
+ }
95
+ /** Scan the object whose `{` sits at `objStart` into a span with entry positions. */
96
+ export function scanObject(text, objStart) {
97
+ let i = skipWsAndComments(text, objStart + 1);
98
+ const entries = [];
99
+ while (i < text.length) {
100
+ if (text[i] === '}') {
101
+ return { braceStart: objStart, braceEnd: i, entries };
102
+ }
103
+ if (text[i] !== '"') {
104
+ throw new Error('Expected object key in JSONC');
105
+ }
106
+ const entryStart = i;
107
+ const keyEnd = scanString(text, i);
108
+ const key = JSON.parse(text.slice(entryStart, keyEnd));
109
+ i = skipWsAndComments(text, keyEnd);
110
+ if (text[i] !== ':') {
111
+ throw new Error('Expected colon after key in JSONC');
112
+ }
113
+ i = skipWsAndComments(text, i + 1);
114
+ const valueStart = i;
115
+ const valueEnd = scanValueEnd(text, i);
116
+ i = skipWsAndComments(text, valueEnd);
117
+ let entryEnd = valueEnd;
118
+ if (text[i] === ',') {
119
+ entryEnd = i + 1;
120
+ i = skipWsAndComments(text, i + 1);
121
+ }
122
+ entries.push({ key, entryStart, entryEnd, valueStart, valueEnd });
123
+ }
124
+ throw new Error('Unterminated object in JSONC');
125
+ }
126
+ /** Span of the document's root object, or null when the root is not an object. */
127
+ export function findTopLevelObject(text) {
128
+ const i = skipWsAndComments(text, 0);
129
+ if (i >= text.length || text[i] !== '{') {
130
+ return null;
131
+ }
132
+ return scanObject(text, i);
133
+ }
134
+ /** Strip line/block comments and trailing commas so `JSON.parse` can read the rest. */
135
+ export function stripJsonc(text) {
136
+ let out = '';
137
+ let i = 0;
138
+ while (i < text.length) {
139
+ const ch = text[i];
140
+ if (ch === '"') {
141
+ const end = scanString(text, i);
142
+ out += text.slice(i, end);
143
+ i = end;
144
+ }
145
+ else if (ch === '/' && text[i + 1] === '/') {
146
+ i += 2;
147
+ while (i < text.length && text[i] !== '\n') {
148
+ i += 1;
149
+ }
150
+ }
151
+ else if (ch === '/' && text[i + 1] === '*') {
152
+ i += 2;
153
+ while (i < text.length && !(text[i] === '*' && text[i + 1] === '/')) {
154
+ i += 1;
155
+ }
156
+ i = Math.min(i + 2, text.length);
157
+ }
158
+ else if (ch === ',') {
159
+ const next = skipWsAndComments(text, i + 1);
160
+ if (next >= text.length || text[next] === '}' || text[next] === ']') {
161
+ i += 1;
162
+ }
163
+ else {
164
+ out += ch;
165
+ i += 1;
166
+ }
167
+ }
168
+ else {
169
+ out += ch;
170
+ i += 1;
171
+ }
172
+ }
173
+ return out;
174
+ }
175
+ /** Parse JSONC text (comments + trailing commas tolerated) via JSON.parse. */
176
+ export function parseJsonc(text) {
177
+ return JSON.parse(stripJsonc(text));
178
+ }
179
+ /** Leading whitespace of the line containing `index`. */
180
+ function lineIndentAt(text, index) {
181
+ const lineStart = text.lastIndexOf('\n', index - 1) + 1;
182
+ let indent = '';
183
+ let j = lineStart;
184
+ while (j < text.length && (text[j] === ' ' || text[j] === '\t')) {
185
+ indent += text[j];
186
+ j += 1;
187
+ }
188
+ return indent;
189
+ }
190
+ /** Indent for entries inside `span`: the first entry's indent, or the closing brace's indent + two spaces. */
191
+ function entryIndent(text, span) {
192
+ if (span.entries.length > 0) {
193
+ return lineIndentAt(text, span.entries[0].entryStart);
194
+ }
195
+ return `${lineIndentAt(text, span.braceEnd)} `;
196
+ }
197
+ /** Re-indent a pretty-printed JSON block so its first line stays in place. */
198
+ function reindent(json, indent) {
199
+ const lines = json.split('\n');
200
+ return [lines[0], ...lines.slice(1).map((l) => indent + l)].join('\n');
201
+ }
202
+ /**
203
+ * Splice one `"key": <valueJson>` entry into the object at `objStart`,
204
+ * preserving all surrounding text (comments included). Idempotent: when the
205
+ * key already exists the text is returned unchanged.
206
+ */
207
+ export function insertObjectEntry(text, objStart, key, valueJson) {
208
+ const span = scanObject(text, objStart);
209
+ if (span.entries.some((e) => e.key === key)) {
210
+ return { text, changed: false };
211
+ }
212
+ const indent = entryIndent(text, span);
213
+ const body = reindent(`"${key}": ${valueJson}`, indent);
214
+ if (span.entries.length === 0) {
215
+ const closeIndent = lineIndentAt(text, span.braceEnd);
216
+ const inserted = `\n${indent}${body}\n${closeIndent}`;
217
+ return {
218
+ text: text.slice(0, span.braceStart + 1) + inserted + text.slice(span.braceEnd),
219
+ changed: true,
220
+ };
221
+ }
222
+ const inserted = `\n${indent}${body},`;
223
+ return {
224
+ text: text.slice(0, span.braceStart + 1) + inserted + text.slice(span.braceStart + 1),
225
+ changed: true,
226
+ };
227
+ }
228
+ /**
229
+ * Splice the `"key"` entry out of the object at `objStart`, keeping the rest
230
+ * valid (the entry's trailing comma, or the previous entry's comma for a last
231
+ * entry, goes with it). Idempotent: a missing key returns the text unchanged.
232
+ */
233
+ export function removeObjectEntry(text, objStart, key) {
234
+ const span = scanObject(text, objStart);
235
+ const entry = span.entries.find((e) => e.key === key);
236
+ if (entry === undefined) {
237
+ return { text, changed: false };
238
+ }
239
+ let start = entry.entryStart;
240
+ let end = entry.entryEnd;
241
+ if (end === entry.valueEnd) {
242
+ let j = start - 1;
243
+ while (j >= 0 && isWs(text[j])) {
244
+ j -= 1;
245
+ }
246
+ if (j >= 0 && text[j] === ',') {
247
+ start = j;
248
+ }
249
+ }
250
+ return {
251
+ text: text.slice(0, start) + text.slice(end),
252
+ changed: true,
253
+ };
254
+ }
255
+ //# sourceMappingURL=jsonc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonc.js","sourceRoot":"","sources":["../src/jsonc.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillstate/cli",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "skillstate CLI — init | run | report.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -25,6 +25,8 @@
25
25
  },
26
26
  "license": "MIT",
27
27
  "dependencies": {
28
- "@skillstate/core": "^2.0.0"
28
+ "@skillstate/core": "^2.0.0",
29
+ "@skillstate/mcp": "^2.0.0",
30
+ "@skillstate/opencode": "^2.0.0"
29
31
  }
30
32
  }