open-wiki-spec 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +33 -2
  3. package/dist/cli/commands/init.d.ts +1 -1
  4. package/dist/cli/commands/init.d.ts.map +1 -1
  5. package/dist/cli/commands/init.js +14 -2
  6. package/dist/cli/commands/init.js.map +1 -1
  7. package/dist/cli/init/agents/agents-md.d.ts +24 -0
  8. package/dist/cli/init/agents/agents-md.d.ts.map +1 -0
  9. package/dist/cli/init/agents/agents-md.js +100 -0
  10. package/dist/cli/init/agents/agents-md.js.map +1 -0
  11. package/dist/cli/init/agents/claude.d.ts +12 -0
  12. package/dist/cli/init/agents/claude.d.ts.map +1 -0
  13. package/dist/cli/init/agents/claude.js +38 -0
  14. package/dist/cli/init/agents/claude.js.map +1 -0
  15. package/dist/cli/init/agents/codex.d.ts +15 -0
  16. package/dist/cli/init/agents/codex.d.ts.map +1 -0
  17. package/dist/cli/init/agents/codex.js +68 -0
  18. package/dist/cli/init/agents/codex.js.map +1 -0
  19. package/dist/cli/init/agents/detect.d.ts +19 -0
  20. package/dist/cli/init/agents/detect.d.ts.map +1 -0
  21. package/dist/cli/init/agents/detect.js +78 -0
  22. package/dist/cli/init/agents/detect.js.map +1 -0
  23. package/dist/cli/init/agents/index.d.ts +15 -0
  24. package/dist/cli/init/agents/index.d.ts.map +1 -0
  25. package/dist/cli/init/agents/index.js +22 -0
  26. package/dist/cli/init/agents/index.js.map +1 -0
  27. package/dist/cli/init/agents/transform.d.ts +10 -0
  28. package/dist/cli/init/agents/transform.d.ts.map +1 -0
  29. package/dist/cli/init/agents/transform.js +24 -0
  30. package/dist/cli/init/agents/transform.js.map +1 -0
  31. package/dist/cli/init/agents/types.d.ts +19 -0
  32. package/dist/cli/init/agents/types.d.ts.map +1 -0
  33. package/dist/cli/init/agents/types.js +2 -0
  34. package/dist/cli/init/agents/types.js.map +1 -0
  35. package/dist/cli/init/init-engine.d.ts.map +1 -1
  36. package/dist/cli/init/init-engine.js +16 -10
  37. package/dist/cli/init/init-engine.js.map +1 -1
  38. package/dist/cli/init/skill-generator.d.ts +11 -9
  39. package/dist/cli/init/skill-generator.d.ts.map +1 -1
  40. package/dist/cli/init/skill-generator.js +8 -988
  41. package/dist/cli/init/skill-generator.js.map +1 -1
  42. package/dist/cli/init/types.d.ts +8 -0
  43. package/dist/cli/init/types.d.ts.map +1 -1
  44. package/dist/cli/init/types.js +0 -3
  45. package/dist/cli/init/types.js.map +1 -1
  46. package/dist/cli/init/workflow-definitions.d.ts +15 -0
  47. package/dist/cli/init/workflow-definitions.d.ts.map +1 -0
  48. package/dist/cli/init/workflow-definitions.js +75 -0
  49. package/dist/cli/init/workflow-definitions.js.map +1 -0
  50. package/dist/core/embedding/embedder.d.ts +5 -1
  51. package/dist/core/embedding/embedder.d.ts.map +1 -1
  52. package/dist/core/embedding/embedder.js +5 -1
  53. package/dist/core/embedding/embedder.js.map +1 -1
  54. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skill-generator.js","sourceRoot":"","sources":["../../../src/cli/init/skill-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-generator.js","sourceRoot":"","sources":["../../../src/cli/init/skill-generator.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,eAAe,GAAoC,MAAM,CAAC,WAAW,CAChF,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAC7G,CAAC;AAEF,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB,CAAC,QAAyB;IACzD,OAAO,cAAc,QAAQ,CAAC,IAAI,kBAAkB,QAAQ,CAAC,WAAW,YAAY,QAAQ,CAAC,YAAY,IAAI,CAAC;AAChH,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,OAAO,IAAI,aAAa,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;AACzE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Init-related types.
3
3
  */
4
+ import type { AgentId, AgentSelector } from './agents/types.js';
4
5
  export interface InitOptions {
5
6
  /** Target directory path (default: current directory) */
6
7
  path?: string;
@@ -12,6 +13,8 @@ export interface InitOptions {
12
13
  json?: boolean;
13
14
  /** Skip seed note generation */
14
15
  skipSeed?: boolean;
16
+ /** Which agent integration(s) to generate. Default: 'auto' (detect). */
17
+ agent?: AgentSelector;
15
18
  }
16
19
  export interface InitResult {
17
20
  mode: 'fresh' | 'extend';
@@ -19,7 +22,12 @@ export interface InitResult {
19
22
  directoriesCreated: string[];
20
23
  metaFilesCreated: string[];
21
24
  seedFilesCreated: string[];
25
+ /** All agent integration files written (union across agents). */
22
26
  skillFilesGenerated: string[];
27
+ /** Agents that integration files were generated for. */
28
+ agents: AgentId[];
29
+ /** Files written per agent. Only generated agents appear as keys (see `agents`). */
30
+ agentArtifacts: Partial<Record<AgentId, string[]>>;
23
31
  warnings: string[];
24
32
  }
25
33
  export interface SkillDefinition {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/init/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/init/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iEAAiE;IACjE,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,wDAAwD;IACxD,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,oFAAoF;IACpF,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB"}
@@ -1,5 +1,2 @@
1
- /**
2
- * Init-related types.
3
- */
4
1
  export {};
5
2
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/init/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/init/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ /** Agent-neutral workflow definitions — the single source of truth for ows
2
+ * workflow instructions. Adapters (Claude, Codex) render these per agent. */
3
+ export interface WorkflowDefinition {
4
+ /** workflow key, e.g. 'propose' — drives the skill/command name \`ows-<key>\`. */
5
+ key: string;
6
+ /** skill/command name, always \`ows-<key>\`. */
7
+ name: string;
8
+ /** one-line description (frontmatter \`description\`). */
9
+ description: string;
10
+ /** instruction body. Contains \`/ows-<cmd>\` cross-refs and Claude-Code wording
11
+ * in their raw (Claude) form; the CodexAdapter transforms them at render time. */
12
+ body: string;
13
+ }
14
+ export declare const WORKFLOW_DEFINITIONS: WorkflowDefinition[];
15
+ //# sourceMappingURL=workflow-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-definitions.d.ts","sourceRoot":"","sources":["../../../src/cli/init/workflow-definitions.ts"],"names":[],"mappings":"AAAA;8EAC8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,GAAG,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB;qFACiF;IACjF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,oBAAoB,EAAE,kBAAkB,EAyEpD,CAAC"}
@@ -0,0 +1,75 @@
1
+ export const WORKFLOW_DEFINITIONS = [
2
+ {
3
+ key: "propose",
4
+ name: "ows-propose",
5
+ description: "Propose a new change to the codebase wiki.",
6
+ body: "Run the open-wiki-spec propose workflow.\n\n**Input**: The argument after `/ows-propose` is a natural language description of what the user wants to build or change. If omitted, ask what they want to work on.\n\n**Steps**\n\n1. **If no input provided, ask what they want to build**\n\n Ask the user to describe what they want to build or change in the codebase.\n\n **IMPORTANT**: Do NOT proceed without understanding what the user wants.\n\n2. **If input is long natural language, refine it first**\n\n Extract the core from the user's input:\n - **intent**: add / modify / remove / query\n - **keywords**: 3-5 essential keywords (prioritize technical terms, feature names, system names)\n - **summary**: 1-sentence summary\n\n Example: \"우리 앱에서 워치랑 연동해서 수영 기록을 자동으로 가져오는데 HealthKit에서 데이터를 못 가져오는 케이스가 있어서 그걸 Sentry로 추적하고 싶거든\"\n → summary: \"HealthKit 워치 동기화 실패 Sentry 추적\"\n → keywords: \"워치 동기화,HealthKit,Sentry,에러 추적\"\n\n3. **Run preflight retrieval (dry-run first)**\n ```bash\n ows propose \"<summary>\" --keywords \"<keyword1>,<keyword2>,...\" --dry-run --json\n ```\n If the user's input is already concise, skip `--keywords` and use the input directly:\n ```bash\n ows propose \"<user's description>\" --dry-run --json\n ```\n Parse the JSON output to understand:\n - `retrieval.classification`: one of `existing_change`, `existing_feature`, `new_feature`, `needs_confirmation`\n - `retrieval.confidence`: `high`, `medium`, or `low`\n - `retrieval.candidates`: scored candidate list with scores and match reasons\n - `classification.primary_candidate`: the top matching note\n - `sequencing_warnings`: any parallel work conflicts\n\n4. **Act based on classification**\n\n ---\n\n **If `needs_confirmation`**: Show the top candidates with their scores and match reasons. Ask the user to choose:\n - Which existing Feature to attach to, OR\n - Which existing Change to continue, OR\n - Create a new Feature + Change\n\n **If `existing_feature`**: Show which Feature matched and why. Confirm with the user before creating a new Change attached to it.\n\n **If `existing_change`**: Show the matching active Change. Suggest continuing it instead of creating a new one. Offer `/ows-continue` as next step.\n\n **If `new_feature`**: Confirm with the user that nothing similar exists and proceed.\n\n ---\n\n5. **Execute the propose (if confirmed)**\n\n **IMPORTANT**: Use the same `--keywords` from the dry-run step to ensure consistent retrieval results.\n\n For `new_feature` or `existing_feature` classification, run directly:\n ```bash\n ows propose \"<summary>\" --keywords \"<keyword1>,<keyword2>,...\" --json\n ```\n\n For `needs_confirmation` (after user chooses), use `--force-classification` AND `--force-target`:\n ```bash\n # User chose to create new Feature + Change:\n ows propose \"<summary>\" --force-classification new_feature --json\n # User chose an existing Feature (use the candidate id from dry-run):\n ows propose \"<summary>\" --force-classification existing_feature --force-target \"<candidate-id>\" --json\n # User chose to continue an existing Change (hand off to continue):\n /ows-continue <candidate-change-id>\n ```\n **IMPORTANT**: When user picks `existing_feature` or `existing_change`, always include `--force-target <id>` with the candidate's actual id from the dry-run results. Without it, the engine uses the top candidate which may not be what the user chose.\n\n6. **Show results**\n\n Display:\n - Classification decision and reasoning\n - Created/updated Change note path and ID\n - Linked Feature note (if applicable)\n - Next step: \"Run `/ows-continue <changeId>` to fill in Change sections.\"\n\n**Output**\n\nAfter completing, summarize:\n- What was created or updated\n- Why (classification reasoning from retrieval)\n- What to do next\n\n**Retrieval Quality**\n\nThe propose workflow automatically enriches the query with system_terms by matching feature/entity terms against System note titles and aliases in the vault index. This means:\n- System-related queries like \"auth login\" will auto-detect System notes titled \"Authentication\" and use them for scoring\n- Partial title matches are supported: a search for \"auth\" will match \"Feature: Auth Login\" (partial match, +20 points)\n- Title prefix stripping: \"auth login\" matches \"Feature: Auth Login\" (prefix-stripped match, +30 points)\n- Derived aliases are auto-generated from note titles and IDs, improving alias-based matching even when no explicit aliases are set\n\n**Guardrails**\n- Always show dry-run results before creating anything\n- If classification is `needs_confirmation`, NEVER auto-decide — always ask the user\n- If `sequencing_warnings` are present, show them prominently before proceeding\n- If confidence is `low`, warn the user that results may be inaccurate",
7
+ },
8
+ {
9
+ key: "continue",
10
+ name: "ows-continue",
11
+ description: "Continue work on an existing Change.",
12
+ body: "Continue working on an existing Change by filling sections or advancing status.\n\n**Input**: Optionally specify a change ID after `/ows-continue` (e.g., `/ows-continue change-add-auth`). If omitted and only one active change exists, it is auto-selected. If multiple active changes exist, the CLI returns a list and the agent must ask the user to choose.\n\n**Steps**\n\n1. **If no change ID provided**\n\n Run `ows continue --json`. The CLI will:\n - **If 1 active change**: auto-select it and proceed.\n - **If 2+ active changes**: return an error with the list of active changes. Show them and let the user pick, then re-run with the chosen ID.\n - **If 0 active changes**: return an error. Suggest `/ows-propose` to create one.\n\n **IMPORTANT**: When the CLI returns multiple active changes, NEVER auto-select. Always ask the user.\n\n2. **Check current status**\n ```bash\n ows status <changeId> --json\n ```\n Parse the JSON to understand:\n - Current status (proposed, planned, in_progress, applied)\n - Section completeness (which sections are filled vs empty)\n - Task progress (N/M done)\n - `nextAction`: what should be done next (see all 7 types below)\n\n3. **Act based on nextAction**\n\n The nextAction algorithm returns one of 7 deterministic action types based on current status and section/task state:\n\n ---\n\n **If `fill_section`** (status: proposed): A required section is missing. Help the user write the missing section content. Read the Change note, identify what's missing, and draft content. Required sections for planned transition: Why, Delta Summary, Tasks, Validation.\n\n **If `transition`** (status: proposed -> planned): All required sections are filled. Run `ows continue <changeId> --json` to advance the status from proposed to planned.\n\n **If `blocked`** (status: planned): The Change has unresolved `depends_on` entries. Show blocking dependencies (change IDs that are not yet applied) and help resolve them.\n\n **If `start_implementation`** (status: planned -> in_progress): Dependencies are resolved and tasks exist. The CLI will auto-transition to in_progress. Show the first unchecked task and help the user begin implementing.\n\n **If `continue_task`** (status: in_progress): Show the next unchecked task and help the user work through it.\n\n **If `ready_to_apply`** (status: in_progress): All tasks are complete. Suggest running `/ows-apply <changeId>` to apply the Change to canonical Feature notes. Do NOT attempt to transition status here -- the apply workflow owns the in_progress -> applied transition.\n\n **If `verify_then_archive`** (status: applied): The Change has been applied. Suggest running `/ows-verify` and then archiving.\n\n ---\n\n4. **After each action, show updated status**\n ```bash\n ows status <changeId>\n ```\n\n**Output**\n\nAfter each invocation, show:\n- Current status and what changed\n- Section/task progress\n- What to do next\n\n**Context Enrichment**\n\nThe continue result includes a `context` object with real content from linked notes (truncated at 500 chars per section):\n- `context.features[]`: Purpose, Current Behavior, Requirements sections from linked Feature notes\n- `context.decisions[]`: Summary, Context, Decision sections from linked Decision notes\n- `context.systems[]`: Purpose, Boundaries sections from linked System notes\n- `context.sources[]`: Summary, Content sections from linked Source notes\n\nUse this context to inform section writing (especially Why and Delta Summary).\n\n**Guardrails**\n- Perform ONE section fill or ONE status transition per invocation\n- Always read the Change note before modifying it\n- Use the `context` from the continue result to inform your writing — do not ignore linked note content\n- If context is unclear, ask the user before writing\n- Show status after every change\n- The continue workflow owns proposed->planned and planned->in_progress transitions ONLY\n- The in_progress->applied transition is owned exclusively by the apply workflow",
13
+ },
14
+ {
15
+ key: "apply",
16
+ name: "ows-apply",
17
+ description: "Apply a Change to canonical Feature notes.",
18
+ body: "Apply a completed Change to canonical Feature notes, updating the wiki's current state.\n\n**Input**: Specify a change ID after `/ows-apply` (e.g., `/ows-apply change-add-auth`). The change ID is **required** by the CLI. If the user does not provide one, run `ows list --json` and let them choose from changes with status `in_progress`.\n\n**Prerequisites**: The CLI enforces these before applying:\n- Change status MUST be `in_progress` (use `/ows-continue` to advance if needed)\n- ALL tasks in the Change note must be checked (`[x]`)\n\n**Available flags**:\n- `--json`: Output structured JSON result\n- `--dry-run`: Validate without writing any files (use this to preview)\n- `--force-stale`: Apply even when stale base fingerprints are detected\n- `--no-auto-transition`: Keep status as `in_progress` after writing (use when ADDED/MODIFIED markers need manual content before finalizing)\n- `--no-log`: Skip appending to `wiki/00-meta/log.md`\n\n**Steps**\n\n1. **If no change ID provided, prompt for selection**\n\n Run `ows list --json` to get applicable changes. Show only changes with status `in_progress`.\n\n **IMPORTANT**: Do NOT guess or auto-select. Always let the user choose.\n\n2. **Preview with dry-run first**\n ```bash\n ows apply <changeId> --dry-run --json\n ```\n Parse the result to check for stale entries or validation errors before committing.\n\n3. **Handle dry-run results**\n\n ---\n\n **If stale_base detected** (`staleReport.blocked: true`): Show which Feature requirements have changed since the Change was created (base fingerprint mismatch). Ask the user how to resolve:\n - Re-run with `--force-stale` to apply anyway\n - Update the Change's Delta Summary to reflect current state\n - Abort and investigate\n\n **If validation errors**: Show pre-validation errors (e.g., ADDED requirement already exists, MODIFIED requirement not found). These must be fixed in the Change note.\n\n **If clean**: Proceed to actual apply.\n\n ---\n\n4. **Execute the apply (if confirmed)**\n\n **CRITICAL: If the Change has ADDED or MODIFIED operations, use `--no-auto-transition` on the first apply** so the status stays in `in_progress` until you've filled in the marker contents. Example:\n ```bash\n # First apply: insert markers without transitioning to applied\n ows apply <changeId> --no-auto-transition --json\n ```\n Without this flag, the change will transition to `applied` while the Feature note still contains unfilled `<!-- ADDED ... -->` marker comments, and `ows verify` will then report `UNFILLED_APPLY_MARKER` errors.\n\n For changes with ONLY programmatic ops (RENAMED/REMOVED), a single plain apply is fine:\n ```bash\n ows apply <changeId> --json\n ```\n\n The apply uses a **two-phase commit** pattern:\n - **Phase 1** (validate & compute): Parse Delta Summary, stale-check all entries, pre-validate operations. No files written.\n - **Phase 2** (write): Only if Phase 1 passes. Apply operations in **atomic order**: RENAMED -> REMOVED -> MODIFIED -> ADDED.\n\n The apply engine programmatically modifies Feature notes:\n - **RENAMED**: Automatically renames the requirement in the Feature note. Fully automated.\n - **REMOVED**: Automatically removes the requirement from the Feature note. Fully automated.\n - **MODIFIED**: Inserts a `<!-- MODIFIED by change: <changeId> -->` marker after the requirement heading. The agent must then update the requirement text.\n - **ADDED**: Inserts a `<!-- ADDED by change: <changeId>. Fill in normative statement (SHALL/MUST) and scenarios (WHEN/THEN). -->` marker in the Requirements section. The agent must then write the new requirement content.\n\n5. **Fill marker contents (if using --no-auto-transition)**\n\n Open each Feature note listed in `result.modifiedFiles`, find the `<!-- ADDED ... -->` and `<!-- MODIFIED ... -->` marker comments, and replace them with real requirement text (SHALL/MUST normative + WHEN/THEN scenarios). Then remove the marker comment itself.\n\n6. **Finalize apply**\n ```bash\n # Second apply: now that markers are filled, transition to applied\n ows apply <changeId> --json\n ```\n\n7. **Show final state**\n ```bash\n ows status <changeId>\n ```\n\n**Output On Success**\n\n```\n## Apply Complete\n\n**Change:** <changeId>\n**Status:** applied\n\n### Updated Features\n- Feature: Auth Login — updated Requirements section\n- Feature: User Profile — added new requirement\n\nThe canonical wiki state now reflects this change.\n```\n\n**Guardrails**\n- The change ID is required -- always ensure one is provided before calling `ows apply`\n- Always dry-run first to catch stale entries and validation errors\n- If stale_base is detected, NEVER auto-resolve -- always ask the user\n- Show a clear diff of what will change in each Feature before applying\n- After apply, suggest archiving if appropriate\n- Only the apply workflow can transition a Change from in_progress to applied",
19
+ },
20
+ {
21
+ key: "verify",
22
+ name: "ows-verify",
23
+ description: "Verify vault consistency.",
24
+ body: "Verify vault consistency across multiple dimensions.\n\n**Input**: Optionally specify a change ID after `/ows-verify` to verify a specific change. If omitted, verify the entire vault.\n\n**Available flags**:\n- `--json`: Output structured JSON result\n- `--strict`: Treat warnings as errors (both errors and warnings must be zero for pass)\n\n**Steps**\n\n1. **Run verification**\n ```bash\n ows verify --json\n # or for a specific change:\n ows verify <changeId> --json\n # strict mode:\n ows verify --strict --json\n ```\n\n2. **Parse the VerifyReport**\n\n The report includes `pass` (boolean), `total_notes`, `issues` array, and a `summary` object with counts per dimension. The four verification dimensions are:\n\n - **completeness**: Required sections present, feature/change section coverage, minimum headings\n - **correctness**: Status lifecycle validity, stale base detection, operation validation matrix, schema version match, drift detection\n - **coherence**: Parallel change conflict detection (via sequencing engine), description consistency, decision consistency, depends_on integrity\n - **vault_integrity**: Duplicate IDs, missing IDs, unresolved wikilinks, ambiguous aliases, orphan notes, archive placement, invalid frontmatter types\n\n Each issue in the `issues` array has:\n - `dimension`: one of the four dimensions above\n - `severity`: `error`, `warning`, or `info`\n - `code`: machine-readable issue code (e.g., `DUPLICATE_ID`, `STALE_BASE`)\n - `message`: human-readable description\n - `note_path`: file path of the affected note (use for navigation)\n - `note_id`: ID of the affected note\n - `suggestion`: recommended fix\n\n3. **Present results**\n\n **If pass**:\n ```\n ## Vault Verification: PASS\n No issues found across N notes.\n ```\n\n **If issues found**:\n Show errors first, then warnings, then info. Group by dimension for clarity:\n\n ```\n ## Vault Verification: FAIL\n\n ### Errors (must fix)\n - [vault_integrity] Feature: Auth Login — missing required \"id\" in frontmatter\n - [vault_integrity] Change: Add Passkey — wikilink [[Feature: Auth]] does not resolve\n - [correctness] Change: Add Auth — stale base detected for Feature: User Profile\n\n ### Warnings (should fix)\n - [vault_integrity] Ambiguous alias \"login\" matches 2 notes\n - [coherence] Changes \"add-auth\" and \"fix-login\" both touch Feature: Auth Login\n\n ### Info\n - [coherence] Active Feature \"auth\" references archived Decision \"use-jwt\"\n ```\n\n For each issue, include the `suggestion` field and `note_path` from the report.\n\n**Guardrails**\n- Always show the full report, don't summarize away issues\n- Present errors before warnings before info\n- Include file paths (`note_path`) so the user can navigate to issues\n- If verification fails, suggest specific fixes for each issue\n- Use `--strict` when preparing for release or archiving",
25
+ },
26
+ {
27
+ key: "query",
28
+ name: "ows-query",
29
+ description: "Search the vault graph and optionally create a Query note.",
30
+ body: "Search the vault knowledge graph to answer questions or find related notes.\n\n**Input**: The argument after `/ows-query` is a natural language question (e.g., `/ows-query \"how does authentication work?\"`).\n\n**Steps**\n\n1. **Run the query**\n ```bash\n ows query \"<question>\" --json\n ```\n\n2. **Parse the result**\n\n The JSON output includes:\n - `searchResult`: scored candidates from the vault graph\n - `contextDocument`: a synthesized context document built from matching notes\n - `assessment`: whether a Query note should be created (`shouldCreate`, `confidence`, `reasons`)\n\n3. **Present findings**\n\n Show the context document and top matching notes:\n - Note title, type, score, and match reasons\n - Relevant sections from each matching note\n - Links to related notes for further exploration\n\n4. **If assessment recommends note creation**\n\n Ask the user if they want to save the findings as a Query note:\n > \"This query surfaced enough novel findings to be worth saving. Create a Query note?\"\n\n If yes:\n ```bash\n ows query \"<question>\" --json --save\n ```\n\n5. **Offer next steps**\n\n Based on findings, suggest:\n - Reading specific vault notes for deeper context\n - Running `/ows-propose` if the query reveals work to be done\n - Running `/ows-query` with a more specific question\n\n**Guardrails**\n- Always show match reasons so the user understands WHY notes were surfaced\n- Don't auto-save Query notes — always ask the user first\n- If no candidates found, suggest refining the question or checking vault content",
31
+ },
32
+ {
33
+ key: "status",
34
+ name: "ows-status",
35
+ description: "Show the current state of a Change.",
36
+ body: "Show the current state and progress of a Change.\n\n**Input**: Optionally specify a change ID after `/ows-status` (e.g., `/ows-status change-add-auth`). If omitted, show all active changes.\n\n**Steps**\n\n1. **If change ID provided**:\n ```bash\n ows status <changeId> --json\n ```\n\n The JSON output includes:\n - `changeId`: the change's ID\n - `status`: one of `proposed`, `planned`, `in_progress`, `applied`, `archived`\n - `features`: linked Feature IDs\n - `sectionCompleteness`: `{ why, deltaSummary, tasks, validation, designApproach? }`\n - `taskProgress`: `{ total, completed }`\n - `nextAction`: the recommended next step (see below)\n - `blockedBy`: array of blocking change IDs\n\n **nextAction types** (deterministic based on status and progress):\n - `fill_section` (proposed): A required section is missing. `target` names the section.\n - `transition` (proposed): All sections filled. `to` is the target status (planned).\n - `start_implementation` (planned): Ready to begin implementing.\n - `continue_task` (in_progress): Tasks remain. `target` is the next task description.\n - `blocked` (any): `blockers` lists the blocking change IDs.\n - `ready_to_apply` (in_progress): All tasks complete. Suggest `/ows-apply`.\n - `verify_then_archive` (applied): Change applied. Suggest `/ows-verify` then archiving.\n\n2. **If no change ID (list all)**:\n ```bash\n ows list --json\n ```\n\n Show a summary table of all active changes:\n ```\n | Change ID | Status | Tasks | Next Action |\n |---------------------|-------------|-------|---------------------|\n | change-add-auth | in_progress | 3/7 | continue_task |\n | change-fix-routing | proposed | 0/0 | fill_section |\n | change-add-passkey | in_progress | 5/5 | ready_to_apply |\n | change-old-refactor | applied | 4/4 | verify_then_archive |\n ```\n\n**Guardrails**\n- Show actionable next steps, not just raw status\n- If blocked, explain what is blocking and suggest resolution\n- For `ready_to_apply`, suggest `/ows-apply <changeId>`\n- For `verify_then_archive`, suggest `/ows-verify` followed by `ows archive <changeId>`",
37
+ },
38
+ {
39
+ key: "retrieve",
40
+ name: "ows-retrieve",
41
+ description: "Run a standalone retrieval scan against the vault graph (retrieval subagent).",
42
+ body: "Run the open-wiki-spec retrieval subagent.\n\nThis skill is the **retrieval subagent** described in overview.md section 9.3. It delegates vault similarity scan to `ows propose --dry-run --json`, which runs the full retrieval pipeline (lexical retrieval, graph expansion, scoring, classification) without creating or modifying any notes.\n\n**Input**: The argument after `/ows-retrieve` is a natural language description of what the user wants to find or check against the vault.\n\n**When to use**:\n- Before proposing a change, to check what already exists in the vault\n- To answer \"is there already a Feature/Change for X?\" without side effects\n- As a preflight check before any vault-modifying workflow\n- When you need structured search results for decision-making\n\n**Steps**\n\n1. **Run retrieval (dry-run)**\n ```bash\n ows propose \"<user's description>\" --dry-run --json\n ```\n\n2. **Parse the JSON output**\n\n The key fields are:\n - `retrieval.classification`: one of `existing_change`, `existing_feature`, `new_feature`, `needs_confirmation`\n - `retrieval.confidence`: `high`, `medium`, or `low`\n - `retrieval.candidates`: scored candidate list with `id`, `type`, `title`, `score`, `reasons`\n - `retrieval.warnings`: any index quality warnings\n - `retrieval.sequencing`: parallel safety and related change info (`status`: `parallel_safe`, `needs_review`, `conflict_candidate`, `conflict_critical`, or `blocked`)\n\n3. **Present results to user**\n\n Show a summary table of top candidates:\n ```\n ## Retrieval Results: \"<query>\"\n\n Classification: existing_feature (confidence: high)\n\n | # | Note | Type | Score | Key Reasons |\n |---|----------------------------|---------|-------|--------------------------------|\n | 1 | Feature: Auth Login | feature | 87 | alias match, same system |\n | 2 | Change: Improve Auth UX | change | 61 | active overlap, shared source |\n ```\n\n Then explain the classification:\n - `existing_feature`: A matching Feature already exists. Attach new work to it.\n - `existing_change`: An active Change with the same purpose exists. Continue it instead of creating a new one.\n - `new_feature`: Nothing similar found. Safe to create new Feature + Change.\n - `needs_confirmation`: Ambiguous results. Show candidates and ask for user choice.\n\n4. **Suggest next steps**\n\n Based on classification:\n - `existing_feature` / `new_feature`: \"Run `/ows-propose` to create the Change.\"\n - `existing_change`: \"Run `/ows-continue <changeId>` to continue the existing Change.\"\n - `needs_confirmation`: \"Which of these candidates is the right match?\"\n\n**Contract**:\n- **Input**: natural language description (same as `ows propose`)\n- **Output**: structured ProposeResult JSON (in dry-run mode) with `action`, `retrieval`, `classification`, `target_change`, `target_feature`, `prerequisites`, `transitioned_to_planned`, `sequencing_warnings`\n- **Side effects**: NONE (dry-run mode)\n\n**Example**:\n```bash\nows propose \"add passkey login support\" --dry-run --json\n```\n\nOutput (abbreviated):\n```json\n{\n \"action\": \"created_change\",\n \"retrieval\": {\n \"query\": \"add passkey login support\",\n \"classification\": \"existing_feature\",\n \"confidence\": \"high\",\n \"candidates\": [\n { \"id\": \"feature-auth-login\", \"type\": \"feature\", \"title\": \"Feature: Auth Login\", \"score\": 87, \"reasons\": [\"alias match: login\", \"same system: authentication\"] }\n ],\n \"sequencing\": { \"status\": \"parallel_safe\", \"related_changes\": [], \"reasons\": [] },\n \"warnings\": []\n },\n \"classification\": {\n \"classification\": \"existing_feature\",\n \"confidence\": \"high\",\n \"primary_candidate\": { \"id\": \"feature-auth-login\", \"type\": \"feature\", \"title\": \"Feature: Auth Login\", \"score\": 87 },\n \"secondary_candidate\": null,\n \"reasons\": [\"alias match: login\", \"same system: authentication\"]\n },\n \"target_change\": null,\n \"target_feature\": null,\n \"prerequisites\": null,\n \"transitioned_to_planned\": false,\n \"sequencing_warnings\": []\n}\n```\n\n**Guardrails**\n- This is READ-ONLY — never create or modify vault notes\n- Always show match reasons so the user can verify the classification\n- If confidence is `low`, explicitly warn the user\n- If warnings are present, show them prominently\n- If `sequencing.status` is not `parallel_safe`, warn about potential conflicts with active Changes",
43
+ },
44
+ {
45
+ key: "archive",
46
+ name: "ows-archive",
47
+ description: "Archive an applied Change to 99-archive/.",
48
+ body: "Archive a completed Change, moving it from the active changes directory to 99-archive/.\n\n**Input**: Specify a change ID after `/ows-archive` (e.g., `/ows-archive change-add-auth`). The change ID is **required** by the CLI. If the user does not provide one, run `ows list --json` and let them choose from changes with status `applied`.\n\n**Prerequisites**: The CLI enforces that only `applied` changes can be archived. If the change is not applied, guide the user through `/ows-apply` first.\n\n**Available flags**:\n- `--json`: Output structured JSON result\n- `--force`: Archive even if verify finds errors\n\n**Steps**\n\n1. **If no change ID provided, prompt for selection**\n\n Run `ows list --json` to get changes. Show only changes with status `applied`.\n\n **IMPORTANT**: Do NOT guess or auto-select. Always let the user choose.\n\n2. **Verify before archiving**\n\n The archive command automatically runs `ows verify` on the change before archiving. If verify finds errors, the archive will fail unless `--force` is used.\n\n Suggest running `/ows-verify <changeId>` first so the user can review issues.\n\n3. **Execute the archive**\n ```bash\n ows archive <changeId> --json\n ```\n\n4. **Handle results**\n\n ---\n\n **If successful**: Show the old and new paths.\n\n **If verify failed**: Show the verify errors and ask the user:\n - Fix the issues and retry\n - Force archive with `ows archive <changeId> --force --json`\n\n ---\n\n**Output On Success**\n\n```\n## Archive Complete\n\n**Change:** <changeId>\n**From:** wiki/04-changes/<filename>.md\n**To:** wiki/99-archive/<filename>.md\n\nThe change has been archived. Decision history is preserved.\n```\n\n**Guardrails**\n- Only applied changes can be archived\n- Always show verify results before forcing an archive\n- If verify fails, explain the issues before offering --force\n- After archiving, the change is no longer active in the vault",
49
+ },
50
+ {
51
+ key: "init",
52
+ name: "ows-init",
53
+ description: "Initialize a new open-wiki-spec vault.",
54
+ body: "Initialize a new open-wiki-spec vault in the current project or a specified path.\n\n**Input**: Optionally specify a target path after `/ows-init` (e.g., `/ows-init ./my-project`). If omitted, initializes in the current working directory.\n\n**Available flags**:\n- `--json`: Output structured JSON result\n- `--force`: Force re-initialization, recreating meta files even if they exist\n- `--skip-seed`: Skip creating seed notes (source and system placeholders)\n\n**Steps**\n\n1. **Run initialization**\n ```bash\n ows init --json\n # or with a path:\n ows init <path> --json\n # force re-init:\n ows init --force --json\n # skip seed notes:\n ows init --skip-seed --json\n ```\n\n2. **Parse the result**\n\n The JSON output includes:\n - `mode`: `fresh` (new vault) or `extend` (existing directory)\n - `wikiPath`: path to the created wiki directory\n - `directoriesCreated`: list of directories created\n - `metaFilesCreated`: list of meta files created (log.md, index, etc.)\n - `seedFilesCreated`: list of seed notes created (Source and System placeholders)\n - `skillFilesGenerated`: list of Claude Code skill files generated\n - `warnings`: any warnings during initialization\n\n3. **Present results**\n\n **If fresh init**:\n ```\n ## Vault Initialized\n\n Created new vault at: <wikiPath>\n - N directories created\n - N meta files created\n - N seed notes created\n - N skill files generated\n\n Next steps:\n 1. Edit `wiki/01-sources/seed-context.md` to describe your project (stack, constraints, goals)\n 2. Edit `wiki/02-systems/default-system.md` to define your primary system boundary\n 3. Run `/ows-propose` to create your first Change\n ```\n\n **If extend** (existing directory):\n ```\n ## Vault Extended\n\n Extended existing vault at: <wikiPath>\n - N new directories added\n - N meta files updated\n\n Your existing notes are preserved. Seed notes are not overwritten.\n ```\n\n**Seed Notes**\n\nOn fresh init, two seed notes are created:\n- `wiki/01-sources/seed-context.md` — A placeholder Source note for the user to fill with project context (tech stack, goals, constraints)\n- `wiki/02-systems/default-system.md` — A default System note for the user to define their primary system boundary\n\nIn extend mode, existing seed notes are never overwritten. Use `--skip-seed` to skip seed creation entirely.\n\n**Guardrails**\n- If the vault already exists and --force is not used, the init will extend rather than overwrite\n- Never destroy existing vault content\n- Encourage the user to edit seed-context.md after init — it improves retrieval quality\n- Show warnings if any files were skipped",
55
+ },
56
+ {
57
+ key: "explore",
58
+ name: "ows-explore",
59
+ description: "Enter exploration mode — investigate the codebase without implementing.",
60
+ body: "Enter thinking/exploration mode. Investigate the codebase, architecture, and existing behavior without making any code changes.\n\n**Input**: The argument after `/ows-explore` is a topic, question, or area to investigate (e.g., `/ows-explore \"how does the auth flow work?\"`).\n\n**Purpose**: This is a safe space to investigate before committing to any plan. Unlike `/ows-propose`, this does NOT create any vault notes or changes. Use this to build understanding before proposing work.\n\n**Steps**\n\n1. **Understand the investigation scope**\n\n Parse the user's question and identify:\n - What system/feature area is involved\n - What kind of answer is needed (architecture overview, data flow, bug root cause, etc.)\n - What files/modules are likely relevant\n\n2. **Search the vault for existing knowledge**\n ```bash\n ows query \"<topic>\" --json\n ```\n Check if the vault already has relevant Feature, System, Decision, or Query notes.\n\n3. **Explore the codebase**\n\n Read code, trace call paths, examine data flows. Use whatever tools are available:\n - File reading and search\n - Symbol navigation\n - Dependency tracing\n - Architecture visualization (ASCII diagrams)\n\n4. **Document findings**\n\n Present findings with:\n - Architecture diagrams (ASCII) where helpful\n - Key files and their roles\n - Data flow descriptions\n - Relevant existing vault notes\n - Questions that remain unanswered\n\n5. **Suggest next steps**\n\n Based on findings:\n - \"This is well-understood. No action needed.\"\n - \"Consider creating a Decision note to record this rationale.\"\n - \"This reveals work to do. Run `/ows-propose` to formalize it.\"\n - \"Save these findings as a Query note? Run `ows query '<topic>' --save`\"\n\n**Rules**\n- **NO code changes** — this is read-only investigation\n- **NO vault modifications** — don't create notes (suggest it, but don't do it)\n- **Be thorough** — read actual code, don't guess from file names\n- **Visualize** — use ASCII diagrams for architecture, data flows, component relationships\n- **Connect to vault** — reference existing vault notes when relevant\n- **Capture for later** — if findings are substantial, suggest saving as a Query note",
61
+ },
62
+ {
63
+ key: "onboard",
64
+ name: "ows-onboard",
65
+ description: "Guided tutorial for first-time open-wiki-spec users.",
66
+ body: "Guide a first-time user through a complete open-wiki-spec cycle using their actual codebase.\n\n**Purpose**: Help new users learn ows by doing — not by reading docs. Walk them through a real (small) cycle from propose to archive.\n\n**Steps**\n\n1. **Check vault state**\n ```bash\n ows list --json\n ows verify --json\n ```\n Determine if the vault is freshly initialized or already has content.\n\n2. **Explain the vault structure**\n\n Give a quick orientation:\n ```\n wiki/\n 00-meta/ — Vault metadata and conventions\n 01-sources/ — External references (PRDs, docs)\n 02-systems/ — System/component boundaries\n 03-features/ — Feature specifications (the \"what is\")\n 04-changes/ — Active work units (the \"what's changing\")\n 05-decisions/ — Design decisions and rationale\n 06-queries/ — Investigation notes\n 99-archive/ — Completed changes\n ```\n\n3. **Pick a small real task**\n\n Help the user identify a small, concrete task from their project:\n - A simple feature addition\n - A bug fix\n - A small refactor\n\n The task should be completable in ~15 minutes. Ask the user what they'd like to work on.\n\n4. **Walk through the full cycle**\n\n Guide the user step by step (pausing for confirmation at each stage):\n\n **a. Propose** (`/ows-propose`)\n - Show how retrieval scans for existing work\n - Explain the classification result\n - Create the Feature + Change notes\n\n **b. Fill sections** (`/ows-continue`)\n - Help write the Why section\n - Help write the Delta Summary\n - Help write Tasks\n - Help write Validation\n - Show the proposed → planned transition\n\n **c. Implement** (`/ows-continue`)\n - Work through the tasks\n - Show how tasks are tracked\n\n **d. Apply** (`/ows-apply`)\n - Show how the Feature note gets updated\n - Explain the two-phase commit\n\n **e. Verify** (`/ows-verify`)\n - Run the 4-dimension check\n - Explain what each dimension means\n\n **f. Archive** (`/ows-archive`)\n - Move the completed change\n - Show the clean state\n\n5. **Wrap up**\n\n Summarize what they learned:\n - 6 note types and their purposes\n - The lifecycle: propose → plan → implement → apply → verify → archive\n - Key commands they'll use daily\n - Where to find help (README, `/ows-status`, `/ows-query`)\n\n**Guardrails**\n- Pause after EACH major step for user confirmation\n- Keep explanations concise — show, don't lecture\n- Use the user's actual project, not hypothetical examples\n- If the user gets confused, simplify — don't add complexity\n- The goal is confidence, not completeness",
67
+ },
68
+ {
69
+ key: "migrate",
70
+ name: "ows-migrate",
71
+ description: "Migrate an existing OpenSpec project to open-wiki-spec format.",
72
+ body: "Migrate an existing OpenSpec project to open-wiki-spec format.\n\nThis converts an OpenSpec directory structure (`openspec/changes/`, `openspec/specs/`) to the open-wiki-spec flat wiki format (`wiki/`).\n\n**Input**: Optionally specify the OpenSpec directory path after `/ows-migrate`. If omitted, the CLI will auto-detect `openspec/` in the current directory.\n\n**Available flags**:\n- `--json`: Output structured JSON result\n- `--dry-run`: Show what would be migrated without writing files\n- `--skip-archive`: Skip migrating archived changes\n\n**Steps**\n\n1. **Always dry-run first**\n ```bash\n ows migrate --dry-run --json\n # or with explicit path:\n ows migrate <openspec-dir> --dry-run --json\n ```\n\n2. **Parse the migration plan**\n\n The dry-run returns a plan with:\n - `openspecPath`: detected OpenSpec source directory\n - `wikiPath`: target wiki directory\n - `steps`: list of migration steps, each with:\n - `name`: step name\n - `description`: what it does\n - `outputs`: files to create (with `targetPath` and `sourceDescription`)\n - `warnings`: any issues detected\n - `totalFiles`: total files to create\n - `totalWarnings`: total warning count\n\n3. **Show the plan to the user**\n\n Present a summary of what will be migrated:\n ```\n ## Migration Plan\n\n **Source:** openspec/\n **Target:** wiki/\n\n Files to create: N\n Warnings: M\n\n ### Steps\n 1. <step name> - <description> (N files)\n 2. ...\n ```\n\n If there are warnings, show them prominently.\n Ask the user to confirm before proceeding.\n\n4. **Execute migration (if confirmed)**\n ```bash\n ows migrate --json\n ```\n\n5. **Show results**\n\n Display:\n - Files written\n - Files skipped (already exist)\n - Errors (if any)\n - Warnings\n\n Suggest running `/ows-verify` after migration to check vault consistency.\n\n**Guardrails**\n- Always dry-run before migrating\n- Never overwrite existing files in the target wiki directory\n- Show all warnings before proceeding\n- After migration, suggest running `/ows-verify` to validate the result",
73
+ },
74
+ ];
75
+ //# sourceMappingURL=workflow-definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-definitions.js","sourceRoot":"","sources":["../../../src/cli/init/workflow-definitions.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,oBAAoB,GAAyB;IACxD;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,syJAAsyJ;KAC7yJ;IACD;QACE,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,28HAA28H;KACl9H;IACD;QACE,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,i3JAAi3J;KACx3J;IACD;QACE,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,2BAA2B;QACxC,IAAI,EAAE,64FAA64F;KACp5F;IACD;QACE,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,4DAA4D;QACzE,IAAI,EAAE,mkDAAmkD;KAC1kD;IACD;QACE,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,qCAAqC;QAClD,IAAI,EAAE,6qEAA6qE;KACprE;IACD;QACE,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,+EAA+E;QAC5F,IAAI,EAAE,i/IAAi/I;KACx/I;IACD;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,2CAA2C;QACxD,IAAI,EAAE,q5DAAq5D;KAC55D;IACD;QACE,GAAG,EAAE,MAAM;QACX,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,wCAAwC;QACrD,IAAI,EAAE,uoFAAuoF;KAC9oF;IACD;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,yEAAyE;QACtF,IAAI,EAAE,4sEAA4sE;KACntE;IACD;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,sDAAsD;QACnE,IAAI,EAAE,+mFAA+mF;KACtnF;IACD;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,gEAAgE;QAC7E,IAAI,EAAE,ykEAAykE;KAChlE;CACF,CAAC"}
@@ -8,8 +8,12 @@ export declare const DEFAULT_MODEL = "Xenova/multilingual-e5-small";
8
8
  * Update this hash when intentionally upgrading the model version.
9
9
  * For air-gapped environments, set CreateEmbedderOptions.localModelPath
10
10
  * to a local directory containing the model files instead.
11
+ *
12
+ * Verify any new hash points to a commit that actually exists in the model
13
+ * repo (the previous value did not) and contains all required files
14
+ * (tokenizer.json, config.json, quantized ONNX weights).
11
15
  */
12
- export declare const DEFAULT_MODEL_REVISION = "bf4b30e4e5543f3949ad93f84e0b12c40feb1528";
16
+ export declare const DEFAULT_MODEL_REVISION = "761b726dd34fb83930e26aab4e9ac3899aa1fa78";
13
17
  export type EmbedPipeline = (text: string) => Promise<number[]>;
14
18
  export interface Embedder {
15
19
  available: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../../src/core/embedding/embedder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,aAAa,iCAAiC,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,6CAA6C,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEhE,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAiBD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,QAAQ,CAAC,CA+CnB"}
1
+ {"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../../src/core/embedding/embedder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,aAAa,iCAAiC,CAAC;AAE5D;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,6CAA6C,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEhE,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAiBD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,QAAQ,CAAC,CA+CnB"}
@@ -8,8 +8,12 @@ export const DEFAULT_MODEL = 'Xenova/multilingual-e5-small';
8
8
  * Update this hash when intentionally upgrading the model version.
9
9
  * For air-gapped environments, set CreateEmbedderOptions.localModelPath
10
10
  * to a local directory containing the model files instead.
11
+ *
12
+ * Verify any new hash points to a commit that actually exists in the model
13
+ * repo (the previous value did not) and contains all required files
14
+ * (tokenizer.json, config.json, quantized ONNX weights).
11
15
  */
12
- export const DEFAULT_MODEL_REVISION = 'bf4b30e4e5543f3949ad93f84e0b12c40feb1528';
16
+ export const DEFAULT_MODEL_REVISION = '761b726dd34fb83930e26aab4e9ac3899aa1fa78';
13
17
  /**
14
18
  * In-flight embedder promises keyed by model identity so concurrent
15
19
  * `propose` calls within the same Node process share a single load —
@@ -1 +1 @@
1
- {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../../src/core/embedding/embedder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../../src/core/embedding/embedder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-wiki-spec",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Obsidian-first wiki workflow engine for specification management",
5
5
  "type": "module",
6
6
  "bin": {
@@ -48,6 +48,7 @@
48
48
  "llm",
49
49
  "agent",
50
50
  "claude",
51
+ "codex",
51
52
  "cli"
52
53
  ],
53
54
  "author": "sh940701",