@amsterdamdatalabs/enact-extensions 0.1.1 → 0.1.5

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 (115) hide show
  1. package/README.md +4 -3
  2. package/dist/index.d.ts +5 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/install.d.ts +82 -1
  7. package/dist/install.d.ts.map +1 -1
  8. package/dist/install.js +187 -35
  9. package/dist/install.js.map +1 -1
  10. package/dist/internal/codex.d.ts.map +1 -1
  11. package/dist/internal/codex.js +7 -1
  12. package/dist/internal/codex.js.map +1 -1
  13. package/dist/internal/platform.d.ts +8 -0
  14. package/dist/internal/platform.d.ts.map +1 -1
  15. package/dist/internal/platform.js +46 -2
  16. package/dist/internal/platform.js.map +1 -1
  17. package/dist/provision.d.ts +30 -0
  18. package/dist/provision.d.ts.map +1 -0
  19. package/dist/provision.js +202 -0
  20. package/dist/provision.js.map +1 -0
  21. package/dist/validate/index.d.ts +23 -0
  22. package/dist/validate/index.d.ts.map +1 -1
  23. package/dist/validate/index.js +80 -0
  24. package/dist/validate/index.js.map +1 -1
  25. package/extensions/enact-context/.agents/plugin.json +40 -0
  26. package/extensions/enact-context/.mcp.json +8 -0
  27. package/extensions/enact-context/README.md +25 -0
  28. package/extensions/enact-context/assets/icon.png +0 -0
  29. package/extensions/enact-context/assets/logo.png +0 -0
  30. package/extensions/enact-context/hooks/hooks.json +105 -0
  31. package/extensions/enact-context/skills/enact-context/SKILL.md +149 -0
  32. package/extensions/enact-context/skills/enact-context/scripts/install.sh +69 -0
  33. package/extensions/enact-factory/.agents/plugin.json +42 -0
  34. package/extensions/enact-factory/.mcp.json +8 -0
  35. package/extensions/enact-factory/assets/icon.png +0 -0
  36. package/extensions/enact-factory/assets/logo.png +0 -0
  37. package/extensions/enact-factory/hooks/user-prompt-submit.mjs +67 -0
  38. package/extensions/enact-factory/skills/testing-strategy/SKILL.md +167 -0
  39. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +22 -0
  40. package/extensions/enact-operator/.agents/plugin.json +57 -0
  41. package/extensions/enact-operator/.app.json +3 -0
  42. package/extensions/enact-operator/.mcp.json +10 -0
  43. package/extensions/enact-operator/_taxonomy.md +86 -0
  44. package/extensions/enact-operator/agents/README.md +5 -0
  45. package/extensions/enact-operator/agents/architect.toml +25 -0
  46. package/extensions/enact-operator/agents/code-reviewer.toml +24 -0
  47. package/extensions/enact-operator/agents/critic.toml +30 -0
  48. package/extensions/enact-operator/agents/executor.toml +24 -0
  49. package/extensions/enact-operator/agents/explore.toml +23 -0
  50. package/extensions/enact-operator/agents/planner.toml +24 -0
  51. package/extensions/enact-operator/agents/verifier.toml +24 -0
  52. package/extensions/enact-operator/assets/icon.png +0 -0
  53. package/extensions/enact-operator/assets/logo.png +0 -0
  54. package/extensions/enact-operator/commands/doctor.md +39 -0
  55. package/extensions/enact-operator/commands/setup.md +51 -0
  56. package/extensions/enact-operator/hooks/hooks.json +126 -0
  57. package/extensions/enact-operator/skills/_variants.md +44 -0
  58. package/extensions/enact-operator/skills/ai-slop-cleaner/SKILL.md +50 -0
  59. package/extensions/enact-operator/skills/analyze/SKILL.md +91 -0
  60. package/extensions/enact-operator/skills/ask/SKILL.md +47 -0
  61. package/extensions/enact-operator/skills/autopilot/SKILL.md +170 -0
  62. package/extensions/enact-operator/skills/autoresearch-goal/SKILL.md +79 -0
  63. package/extensions/enact-operator/skills/cancel/SKILL.md +99 -0
  64. package/extensions/enact-operator/skills/configure-notifications/SKILL.md +77 -0
  65. package/extensions/enact-operator/skills/deep-interview/SKILL.md +80 -0
  66. package/extensions/enact-operator/skills/doctor/SKILL.md +48 -0
  67. package/extensions/enact-operator/skills/hud/SKILL.md +49 -0
  68. package/extensions/enact-operator/skills/hyperplan/SKILL.md +47 -0
  69. package/extensions/enact-operator/skills/plan/SKILL.md +78 -0
  70. package/extensions/enact-operator/skills/ralph/SKILL.md +201 -0
  71. package/extensions/enact-operator/skills/ralph/gemini.md +18 -0
  72. package/extensions/enact-operator/skills/ralplan/SKILL.md +151 -0
  73. package/extensions/enact-operator/skills/remove-deadcode/SKILL.md +45 -0
  74. package/extensions/enact-operator/skills/research/SKILL.md +74 -0
  75. package/extensions/enact-operator/skills/review/SKILL.md +58 -0
  76. package/extensions/enact-operator/skills/security-research/SKILL.md +54 -0
  77. package/extensions/enact-operator/skills/setup/SKILL.md +91 -0
  78. package/extensions/enact-operator/skills/setup/scripts/install.sh +50 -0
  79. package/extensions/enact-operator/skills/skill/SKILL.md +82 -0
  80. package/extensions/enact-operator/skills/tdd/SKILL.md +59 -0
  81. package/extensions/enact-operator/skills/team/SKILL.md +199 -0
  82. package/extensions/enact-operator/skills/trace/SKILL.md +41 -0
  83. package/extensions/enact-operator/skills/ultragoal/SKILL.md +99 -0
  84. package/extensions/enact-operator/skills/ultraqa/SKILL.md +113 -0
  85. package/extensions/enact-operator/skills/ultrawork/SKILL.md +145 -0
  86. package/extensions/enact-operator/skills/ultrawork/planner.md +28 -0
  87. package/extensions/enact-operator/skills/wiki/SKILL.md +41 -0
  88. package/extensions/enact-operator/skills/work-with-workitem/SKILL.md +51 -0
  89. package/extensions/enact-wiki/.agents/plugin.json +42 -0
  90. package/extensions/enact-wiki/.mcp.json +15 -0
  91. package/extensions/enact-wiki/README.md +44 -0
  92. package/extensions/enact-wiki/assets/icon.png +0 -0
  93. package/extensions/enact-wiki/assets/logo.png +0 -0
  94. package/extensions/enact-wiki/skills/document-parser/SKILL.md +17 -0
  95. package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +60 -0
  96. package/extensions/enact-wiki/skills/document-parser/skill.json +9 -0
  97. package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +30 -0
  98. package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +62 -0
  99. package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +34 -0
  100. package/extensions/enact-wiki/skills/enact-wiki/references/query.md +59 -0
  101. package/extensions/enact-wiki/skills/search-lab/SKILL.md +57 -0
  102. package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +23 -0
  103. package/package.json +1 -1
  104. package/scripts/enact-extensions.mjs +79 -12
  105. package/scripts/lib/hooks.mjs +352 -0
  106. package/scripts/lib/ledger.mjs +4 -3
  107. package/scripts/lib/provision-mcp.mjs +12 -365
  108. package/scripts/lib/run-install.mjs +87 -5
  109. package/scripts/lib/run-prune.mjs +73 -0
  110. package/scripts/lib/run-sync.mjs +9 -1
  111. package/scripts/lib/run-uninstall.mjs +26 -2
  112. package/scripts/lib/run-validate.mjs +10 -1
  113. package/scripts/lib/serve.mjs +19 -1
  114. package/scripts/version-bump.sh +463 -0
  115. package/spec/codex.json +1 -11
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: wiki
3
+ description: "Wiki-style reference lookup delegated to the enact-wiki provider. Use when the operator wants durable project documentation or knowledge retrieval."
4
+ ---
5
+
6
+ # Wiki
7
+
8
+ ## Purpose
9
+ Provides access to the project's durable wiki and knowledge base by delegating to the enact-wiki provider. Operator orchestrates the request and receives the result; it does not re-implement wiki storage or retrieval. Operator-side artifacts produced by research or analysis can be persisted to the wiki via this skill.
10
+
11
+ ## Use When
12
+ - The operator wants to look up a documented decision, design, or reference
13
+ - Research findings from `$autoresearch-goal` should be persisted as a durable wiki entry
14
+ - The operator asks "does the wiki have anything on X?"
15
+
16
+ ## Workflow
17
+ 1. Identify the query or document to persist.
18
+ 2. Delegate the operation to the enact-wiki provider using its wiki MCP tools.
19
+ - For a lookup: invoke the enact-wiki wiki query tool with the search term.
20
+ - For a write: invoke the enact-wiki wiki add tool with the content and title.
21
+ - For a list: invoke the enact-wiki wiki list tool.
22
+ - For a read of a specific entry: invoke the enact-wiki wiki read tool with the entry identifier.
23
+ 3. If the operation returns content, present it directly to the operator without reformatting.
24
+ 4. If persisting a Operator research artifact (e.g., `.enact/operator/research/<goalId>.md`), read the file first, then pass the content to the enact-wiki wiki add tool.
25
+ 5. Operator does not store wiki state locally. The enact-wiki provider is the canonical store.
26
+
27
+ ## State Contract
28
+ - Reads: enact-wiki wiki store (via MCP tool calls), `.enact/operator/research/` files when persisting
29
+ - Writes: enact-wiki wiki store (via MCP tool calls); no local `.enact/operator/` files written by this skill
30
+
31
+ ## Dependencies
32
+ - Requires enact-wiki MCP server to be connected. If it is not available, report that to the operator and stop.
33
+
34
+ ## Activation
35
+
36
+ When a prompt contains `$enact-operator:<skill-name>` or `$<skill-name>`, Operator's UserPromptSubmit hook records the invocation in `.enact/operator/state/skill-active.json` and adds an MCP-first context note for the agent. That note tells the agent to load/search the Enact Operator MCP namespace immediately if `operator_*` tools are not visible yet, then prefer `operator_*` tools over the `enact-operator` CLI. This skill is operator-driven — there is no durable workflow state to start automatically. The activation log gives operators and the HUD a trace of which skills were explicitly invoked.
37
+ ## Final Check
38
+ - The query returned a result or a clear "not found" from enact-wiki
39
+ - For writes, the enact-wiki tool confirmed the entry was saved
40
+ - No wiki content was stored locally in `.enact/operator/` as a substitute for the enact-wiki store
41
+ - If enact-wiki was unavailable, the operator was notified explicitly
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: work-with-workitem
3
+ description: "Lightweight Azure DevOps work-item delivery lane: implement and hand off; factory owns tracking and closure."
4
+ ---
5
+
6
+ # Work With Workitem
7
+
8
+ ## Purpose
9
+
10
+ Use `$work-with-workitem` for operator-domain delivery tied to a single Azure DevOps work item.
11
+
12
+ ## Domain Boundary
13
+
14
+ - operator scope is intentionally lightweight: load, isolate, implement, PR, handoff, cleanup
15
+ - enact-factory owns CI heartbeat tracking, branch policy waits, auto-merge, and lifecycle advance to `Closed`
16
+ - this skill must not add CI polling loops or unbounded branch-policy waiting
17
+
18
+ ## Azure DevOps-Only Contract
19
+
20
+ - use `factory_workitem_get` and `factory_assignment_record` for work-item reads and closing notes
21
+ - use `az repos pr create --work-items <id>` to link the PR to the work item
22
+ - do not assume or reference GitHub APIs, GitHub Actions, GitHub checks, or GitHub branch protection primitives
23
+
24
+ ## Required Sequence
25
+
26
+ 1. `factory_workitem_get` loads the target work item and confirms readiness.
27
+ 2. `EnterWorktree` isolates the implementation workspace.
28
+ 3. Execute implementation with `$ultrawork` (or `$ralph` for simple tasks).
29
+ 4. Create atomic commits with clear work-item-linked intent.
30
+ 5. Run `az repos pr create --work-items <id>` and capture the PR URL.
31
+ 6. Call `factory_assignment_record` with a closing note that includes PR URL and commit SHA.
32
+ 7. `ExitWorktree` cleans up the isolated workspace.
33
+
34
+ ## Behavioral Constraints
35
+
36
+ - no CI poll loop in this skill; CI heartbeat belongs to `factory_watchdog_status`
37
+ - no merge waiting or policy-wait ownership in this skill
38
+ - no lifecycle mutation to `Closed` from this skill
39
+ - if PR creation fails, record failure context and exit through normal cleanup
40
+
41
+ ## Verification Expectations
42
+
43
+ - integration target is a work item tagged `test-fixture`
44
+ - verify PR link uses `--work-items <id>`
45
+ - verify `factory_assignment_record` includes PR URL and commit SHA
46
+ - verify `ExitWorktree` cleanup is executed
47
+ - do not verify CI completion or merge here
48
+
49
+ ## Activation
50
+
51
+ When a prompt contains `$enact-operator:<skill-name>` or `$<skill-name>`, Operator's UserPromptSubmit hook records the invocation in `.enact/operator/state/skill-active.json` and adds an MCP-first context note for the agent. That note tells the agent to load/search the Enact Operator MCP namespace immediately if `operator_*` tools are not visible yet, then prefer `operator_*` tools over the `enact-operator` CLI. This skill is operator-driven — there is no durable workflow state to start automatically. The activation log gives operators and the HUD a trace of which skills were explicitly invoked.
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "enact-wiki",
3
+ "version": "0.1.0",
4
+ "description": "Vault-backed knowledge base with semantic search, dream consolidation, and MCP tools for agent memory workflows.",
5
+ "license": "UNLICENSED",
6
+ "keywords": [
7
+ "enact-wiki",
8
+ "wiki",
9
+ "vault",
10
+ "memory",
11
+ "knowledge-base",
12
+ "qdrant",
13
+ "semantic-search"
14
+ ],
15
+ "targets": [
16
+ "claude",
17
+ "codex",
18
+ "cursor"
19
+ ],
20
+ "skills": "./skills/",
21
+ "mcpServers": "./.mcp.json",
22
+ "interface": {
23
+ "displayName": "Enact Wiki",
24
+ "shortDescription": "Vault skills, MCP tools, and runtime bootstrap via `enact-wiki bootstrap`.",
25
+ "longDescription": "Install this plugin to expose enact-wiki MCP tools in Claude, Codex, and Cursor and enable semantic search over the workspace Qdrant collection, dream consolidation, and vault-backed knowledge workflows.",
26
+ "developerName": "enact-wiki",
27
+ "category": "Developer Tools",
28
+ "composerIcon": "./assets/icon.png",
29
+ "logo": "./assets/logo.png",
30
+ "capabilities": [
31
+ "semantic search",
32
+ "vault knowledge base",
33
+ "dream consolidation",
34
+ "mcp tools",
35
+ "qdrant vector search"
36
+ ]
37
+ },
38
+ "factory": {
39
+ "firstParty": true,
40
+ "operatorScope": "global"
41
+ }
42
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "mcpServers": {
3
+ "enact-wiki": {
4
+ "command": "enact-wiki",
5
+ "args": ["mcp", "."],
6
+ "env_vars": [
7
+ "ENACT_WIKI_EMBEDDING_API_KEY",
8
+ "AZURE_OPENAI_API_KEY",
9
+ "ENACT_GATEWAY_API_KEY",
10
+ "ENACT_WIKI_LINT_API_KEY",
11
+ "ENACT_WIKI_QUERY_API_KEY"
12
+ ]
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,44 @@
1
+ # enact-wiki plugin
2
+
3
+ Plugin manifests for Claude Code and Codex. The Codex plugin is self-contained:
4
+ it carries plugin-local `skills/`, `.mcp.json`, and branding assets so Codex can
5
+ discover all capabilities from the installed plugin root.
6
+
7
+ ## Layout
8
+
9
+ | Path | Role |
10
+ |------|------|
11
+ | `.claude-plugin/plugin.json` | Claude Code plugin manifest |
12
+ | `.codex-plugin/plugin.json` | Codex plugin manifest |
13
+ | `.mcp.json` | MCP server entry (`enact-wiki mcp .`) |
14
+ | `skills/` | Codex-visible Enact Wiki skills |
15
+ | `assets/` | Branding icons |
16
+
17
+ ## Bootstrap a vault
18
+
19
+ Use `enact-wiki bootstrap <runtime>` to scaffold any directory for a
20
+ specific provider. This copies the canonical surfaces from `vault-bootstrap/`
21
+ into the target:
22
+
23
+ ```bash
24
+ enact-wiki bootstrap claude # .claude/commands/, .claude/settings.json, .mcp.json
25
+ enact-wiki bootstrap opencode # .opencode/commands/, .mcp.json, opencode.json
26
+ enact-wiki bootstrap all # every provider surface
27
+ ```
28
+
29
+ See `enact-wiki bootstrap --help` for all supported runtimes.
30
+
31
+ ## Claude Code plugin registration
32
+
33
+ Installing the npm package auto-registers this plugin in `~/.claude/settings.json`
34
+ via the postinstall script. To register manually:
35
+
36
+ ```bash
37
+ claude plugin add /path/to/enact-wiki/extensions
38
+ ```
39
+
40
+ ## Marketplace (Codex)
41
+
42
+ `.agents/plugins/marketplace.json` at the repo root registers this plugin
43
+ for local dev. For global use, point `~/.agents/plugins/marketplace.json`
44
+ to the absolute path of this directory.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: document-parser
3
+ description: Parse documents with the Kreuzberg v4 CLI via the repo-local `scripts/parse.sh` wrapper.
4
+ ---
5
+
6
+ # document-parser
7
+
8
+ Use when you need consistent text + metadata extraction from supported files: PDF, DOCX, PPTX, XLSX, HTML, EML, and images.
9
+
10
+ ## Entry point
11
+
12
+ ```bash
13
+ ./.codex/skills/document-parser/scripts/parse.sh <path>
14
+ ./.codex/skills/document-parser/scripts/parse.sh <path> --json
15
+ ```
16
+
17
+ This wrapper is the canonical local interface and keeps parsing behavior aligned between direct skill use and repo runtime.
@@ -0,0 +1,60 @@
1
+ #!/bin/bash
2
+ # parse.sh - Extract text or JSON from a document using Kreuzberg CLI
3
+ # Usage: parse.sh <file> [--json]
4
+
5
+ set -euo pipefail
6
+
7
+ export PATH="${HOME}/.kreuzberg/bin:${PATH:-}"
8
+
9
+ if [[ $# -lt 1 ]]; then
10
+ echo "Usage: parse.sh <file> [--json]" >&2
11
+ exit 1
12
+ fi
13
+
14
+ FILE="$1"
15
+ FORMAT="text"
16
+ if [[ "${2:-}" == "--json" ]]; then
17
+ FORMAT="json"
18
+ fi
19
+
20
+ if [[ ! -f "$FILE" ]]; then
21
+ echo "File not found: $FILE" >&2
22
+ exit 1
23
+ fi
24
+
25
+ file_size() {
26
+ if stat -f%z "$1" >/dev/null 2>&1; then
27
+ stat -f%z "$1"
28
+ else
29
+ stat -c%s "$1"
30
+ fi
31
+ }
32
+
33
+ run_with_timeout() {
34
+ if command -v gtimeout >/dev/null 2>&1; then
35
+ gtimeout 60 "$@"
36
+ return
37
+ fi
38
+ if command -v timeout >/dev/null 2>&1; then
39
+ timeout 60 "$@"
40
+ return
41
+ fi
42
+ "$@"
43
+ }
44
+
45
+ if [[ "$(file_size "$FILE")" -gt 100000000 ]]; then
46
+ echo "File exceeds 100MB limit" >&2
47
+ exit 1
48
+ fi
49
+
50
+ if ! command -v kreuzberg >/dev/null 2>&1; then
51
+ echo "kreuzberg not found on PATH. Install it into \$HOME/.kreuzberg/bin or PATH first." >&2
52
+ exit 1
53
+ fi
54
+
55
+ CMD=(kreuzberg extract "$FILE")
56
+ if [[ "$FORMAT" == "json" ]]; then
57
+ CMD+=(--format json)
58
+ fi
59
+
60
+ run_with_timeout "${CMD[@]}"
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "document-parser",
3
+ "version": "1.0.0",
4
+ "description": "Parse and extract text + metadata from PDF, DOCX, PPTX, XLSX, HTML, EML, images using Kreuzberg v4 CLI.",
5
+ "commands": {
6
+ "parse": "Extract text or JSON from a document via Kreuzberg (scripts/parse.sh <file> [--json])"
7
+ },
8
+ "requires": ["kreuzberg"]
9
+ }
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: enact-wiki
3
+ description: "Enact Wiki vault workflows: query and search, ingest and sync, and CLI management. Use the reference files under references/ for the slice you need."
4
+ ---
5
+
6
+ # enact-wiki
7
+
8
+ Codex entry for the same workflows Claude exposes as `/wiki-*` commands. This skill is an **umbrella**: open the right reference for the task.
9
+
10
+ ## References (read the matching file)
11
+
12
+ | Topic | File |
13
+ |------|------|
14
+ | Query / search / read | `references/query.md` |
15
+ | Ingest, sync, dream | `references/ingest.md` |
16
+ | Lint, build, export, init, MCP, etc. | `references/manage.md` |
17
+
18
+ ## Invariants
19
+
20
+ - Vault root: run `enact-wiki` from the vault directory.
21
+ - Keep **`raw/`** immutable except through prescribed sync / ingest flows.
22
+ - Prefer the **CLI** for mechanical steps; use the model only where a reference file says to.
23
+
24
+ ## Full pipeline (lint → build → links)
25
+
26
+ When the user wants the end-to-end quality pass, follow `.claude/commands/wiki-all.md` or run:
27
+
28
+ ```bash
29
+ enact-wiki all
30
+ ```
@@ -0,0 +1,62 @@
1
+ ---
2
+ last_update: 2026-04-30T00:00:00+00:00
3
+ ---
4
+
5
+ # Ingest — Add content to the wiki
6
+
7
+ ## Ingest
8
+
9
+ Ingest one source file. Two raw layers, two destinations:
10
+
11
+ | Source | Destination |
12
+ |---|---|
13
+ | `raw/sources/` (PDF, documents) | `wiki/sources/<slug>.md` — one summary page |
14
+ | `raw/sessions/` (AI transcripts) | `wiki/entities/`, `wiki/concepts/`, `wiki/syntheses/`, `wiki/comparisons/`, `wiki/questions/` — never `wiki/sources/` |
15
+
16
+ CLI shortcut (raw/sources/ only):
17
+ ```bash
18
+ enact-wiki ingest <path>
19
+ ```
20
+ Agent workflow (all sources): follow the **Ingest Workflow** in `CLAUDE.md`.
21
+
22
+ Session rules: trust frontmatter · summarise, don't copy verbatim · extract entities, decisions, questions, comparisons, syntheses · transcript stays on `sessions.html`
23
+
24
+ ## Sync
25
+
26
+ Import agent transcripts into the wiki. Full pipeline:
27
+
28
+ ```text
29
+ ~/.codex/sessions → raw/sessions/ → Ingest Workflow → enact-wiki dream run → enact-wiki build
30
+ ```
31
+
32
+ ```bash
33
+ enact-wiki sync [vault-root]
34
+ ```
35
+ Flags: `--dry-run` · `--all-workspaces` · `--workspace <slug>` · `--adapter <name>` · `--strict` · `--build`
36
+
37
+ If 0 new sessions: report "wiki is already up to date" and stop.
38
+ If 1+ new sessions: ingest each, then run `enact-wiki dream run`.
39
+ Append: `## [YYYY-MM-DD] sync | <N> sessions ingested`
40
+
41
+ Hook: `scripts/hooks/session-start.sh` auto-triggers `/wiki-sync` when `raw/sessions/` changes.
42
+
43
+ ## Update
44
+
45
+ Surgical single-page edit without full re-ingest:
46
+
47
+ ```bash
48
+ /wiki-update <page-path> [reason]
49
+ ```
50
+
51
+ Use when: source changed · stale claim · bump `last_update` · add contradiction.
52
+ Do NOT use for bulk changes — use `/wiki-ingest` or `/wiki-sync`.
53
+
54
+ Hard rules: never overwrite contradictions (add `## Contradictions` instead) · keep frontmatter intact · stop and re-run ingest if you need to rewrite >30% of the page.
55
+
56
+ ## Shared rules
57
+
58
+ 1. `raw/` is immutable — never modify files there.
59
+ 2. No silent overwrites — conflicting claims → `## Contradictions`.
60
+ 3. Every page has `## Connections` with at least one `[[wikilink]]`.
61
+ 4. Frontmatter is authoritative — always populate `title`, `type`, `last_update`, `confidence`, `status`.
62
+ 5. `wiki/sources/` is for `raw/sources/` only. Session content → `comparisons|concepts|entities|questions|syntheses`.
@@ -0,0 +1,34 @@
1
+ ---
2
+ last_update: 2026-04-30T00:00:00+00:00
3
+ ---
4
+
5
+ # Manage — CLI commands and operations
6
+
7
+ ## Command surface
8
+
9
+ | Command | Usage | Notes |
10
+ |---|---|---|
11
+ | `init` | `enact-wiki init [target-dir] [vault-name] --only claude,codex,cursor,gemini,opencode,pi,hooks,docs` | `--only` required; surfaces: `claude`,`codex`,`cursor`,`gemini`,`opencode`,`pi`,`hooks`,`docs`; include `codex` whenever `opencode` is present; flags: `--list-surfaces`, `--skip <csv>`, `--workspace nested|independent`; `schema.md` is always written |
12
+ | `build` | `enact-wiki build [--strict]` | Compiles `raw/` + `wiki/` → `site/`: `index.html`, `sessions.html`, `graph.html`, `graph-explorer.json`, `graph.jsonld`, `llms.txt`, `llms-full.txt`, `search-index.json`, `sitemap.xml`, `rss.xml`, `robots.txt`, `ai-readme.md`, `manifest.json`, per-page `wiki/<dir>/<slug>.html|txt|json` |
13
+ | `serve` | `enact-wiki serve` | Starts local HTTP server for `site/`; binds to `127.0.0.1` by default |
14
+ | `lint` | `enact-wiki lint [--strict]` | Finds orphans, broken `[[wikilinks]]`, contradictions, stale pages; must pass before `build` or `export` |
15
+ | `check-links` | `enact-wiki check-links` | Verifies every `[[wikilink]]` and external link resolves |
16
+ | `all` | `enact-wiki all [--strict]` | Full pipeline: `lint` → `build` → `check-links` → `export`; canonical ready-to-publish command after `/wiki-sync` |
17
+ | `export` | `enact-wiki export` | Writes `llms.txt`, `llms-full.txt`, `search-index.json`, `sitemap.xml`, `rss.xml`, `robots.txt`, `ai-readme.md`, `manifest.json` |
18
+ | `export-marp` | `enact-wiki export-marp . <topic> [--out ./marp/<deck>.md]` | Exports a Marp-compatible slide deck |
19
+ | `export-obsidian` | `enact-wiki export-obsidian . --vault <ABSOLUTE_OBSIDIAN_VAULT_PATH> [--subfolder "Enact Wiki"]` | Recreates export subfolder on each run; exported pages include `## Source`; see `../../../../../enact-docs/05-operations/memory/obsidian-integration.md` |
20
+ | `export-qmd` | `enact-wiki export-qmd . [--out ./qmd]` | Flat filenames: `<wikiDir>__<slug>.qmd`; rewrites target cleanly; see `../../../../../enact-docs/05-operations/memory/qmd-export.md` |
21
+ | `doctor` | `enact-wiki doctor` | Health-checks the installation |
22
+ | `adapters` | `enact-wiki adapters` | Shows which agent stores are wired and configured |
23
+ | `mcp` | `enact-wiki mcp .` | Starts the MCP server on stdio; parity reference: `../../../../../enact-docs/04-contracts/memory/agent-surface-parity.md` |
24
+ | `link-obsidian` | `enact-wiki link-obsidian . --vault <ABSOLUTE_OBSIDIAN_VAULT_PATH> [--subfolder "Enact Wiki"]` | Sets up Obsidian vault linking |
25
+ | `watch` | `enact-wiki watch` | File-system watcher for auto-triggering sync/ingest |
26
+
27
+ ## Operational notes
28
+
29
+ - `build --strict`, `lint --strict`, and `all --strict` treat info-severity lint findings as blocking or fatal depending on the command.
30
+ - If `build` fails, run `enact-wiki lint` first, then `enact-wiki check-links`.
31
+ - `lint` workflow: run `lint` → `check-links` → inspect `^## Contradictions` → check stale summaries → check missing entity pages → output grouped report → optionally save `wiki/lint-report.md`.
32
+ - `serve` exposes `site/`; for LAN sharing, explicitly bind to `0.0.0.0` via `enact-wiki serve --help`.
33
+ - Global flag: `--vault <path>` runs vault-aware commands against a specific vault root instead of cwd.
34
+ - Sync-specific cross-reference: adapter filtering and workspace flags are documented in `references/ingest.md`.
@@ -0,0 +1,59 @@
1
+ ---
2
+ last_update: 2026-04-30T00:00:00+00:00
3
+ ---
4
+
5
+ # Query — Retrieve and synthesise answers from the wiki
6
+
7
+ ## Query
8
+
9
+ Answer a question by querying the wiki. Use when the user asks about their own past work or vaulted knowledge.
10
+
11
+ ```bash
12
+ enact-wiki query --mode=search --top-k=8 --quiet "<question>"
13
+ enact-wiki query --mode=answer --top-k=8 --quiet "<question>"
14
+ ```
15
+
16
+ Workflow: read `wiki/index.md` + root `overview.md` → run CLI query for shortlist → read candidates → synthesise answer with `[[wikilink]]` citations → offer to save substantial answers to `wiki/syntheses/<slug>.md` → append `## [YYYY-MM-DD] query | <short question>`.
17
+
18
+ Fallback: "I don't see anything about this in your wiki yet." → suggest `/wiki-sync` → offer general knowledge explicitly marked as such.
19
+
20
+ Two modes:
21
+ - `--mode=search` → ranked retrieval hits (paths). Use for debugging and bulk lookups.
22
+ - `--mode=answer` → synthesised answer with citations. Use when the user expects a response.
23
+
24
+ JSON for integrations: `enact-wiki query --mode=search --json "<question>"`
25
+
26
+ Don't do: invent wiki pages · conflate general knowledge with wiki content · over-cite · write walls of text.
27
+
28
+ ## Search
29
+
30
+ Simple BM25 keyword search:
31
+ ```bash
32
+ enact-wiki search <term>
33
+ ```
34
+ Use for quick ad-hoc lookups. For research with synthesis and citations, use `query --mode=answer`.
35
+
36
+ ## Read
37
+
38
+ Read a wiki page directly:
39
+ ```bash
40
+ enact-wiki read <slug-or-path>
41
+ ```
42
+
43
+ ## Graph
44
+
45
+ Show wikilink neighbourhood for one page:
46
+ ```bash
47
+ enact-wiki graph <slug>
48
+ ```
49
+ Reports inbound links (which pages reference this page) and outbound links (what this page references). Broken edges → cross-check with `/wiki-lint`. Orphan (zero inbound) → suggest `/wiki-lint` for a wider report.
50
+
51
+ ## Reflect
52
+
53
+ Read-only meta-pass over the whole wiki — look for patterns, gaps, and improvement opportunities:
54
+ ```bash
55
+ /wiki-reflect [focus-area]
56
+ ```
57
+ Optional focus: `patterns` · `gaps` · `quality` · `contradictions` · or omit for a general pass.
58
+
59
+ Hard rules: don't edit pages during reflection (propose changes, get approval) · cite `[[wikilinks]]` for what the wiki says vs. your own interpretation · be specific ("47 Callebaut recipes, strong on ganache, zero on tempering" not "chocolate coverage is fine").
@@ -0,0 +1,57 @@
1
+ ---
2
+ name: search-lab
3
+ description: Analyze search-lab benchmark artifacts and propose reviewable improvements to search quality, query expansion, wiki content, and configuration.
4
+ ---
5
+
6
+ # search-lab
7
+
8
+ Use when you have search-lab outputs to review: `agent-summary.md`, `analysis-report.json`, `proposals.json`, `benchmark.json`, or `.dossier.json` files.
9
+
10
+ ## Typical flow
11
+
12
+ ```bash
13
+ enact-wiki search-lab benchmark
14
+ enact-wiki search-lab export .enact/wiki/search-lab/runs/<timestamp>/
15
+ enact-wiki search-lab analyze .enact/wiki/search-lab/runs/<timestamp>/
16
+ ```
17
+
18
+ ## Inputs
19
+
20
+ - `agent-summary.md`
21
+ - `analysis-report.json`
22
+ - `proposals.json`
23
+ - `benchmark.json`
24
+ - one or more `.dossier.json` files
25
+
26
+ ## Outputs
27
+
28
+ Produce concise, ranked proposals for:
29
+ 1. config tuning (`memory.toml` changes)
30
+ 2. query expansion improvements
31
+ 3. benchmark additions
32
+ 4. wiki/content/link improvements
33
+
34
+ ## Review frame
35
+
36
+ For each issue, identify likely cause, then propose:
37
+ - `type`: `config` | `expansion` | `benchmark` | `wiki`
38
+ - `confidence`: 0-1
39
+ - `effort`: `quick` | `medium` | `large`
40
+ - `impact`: `high` | `medium` | `low`
41
+ - `implementation`: concrete diff, TOML snippet, file path, or link suggestion
42
+
43
+ Prioritize by: impact ↓, effort ↑, confidence ↓.
44
+
45
+ ## Agent rules
46
+
47
+ - Prefer existing CLI-generated proposal artifacts when present; refine them instead of starting from scratch.
48
+ - Read the benchmark/dossier artifacts first, then inspect current `memory.toml`.
49
+ - Propose minimal, reviewable changes.
50
+ - Do not auto-apply broad changes without review.
51
+
52
+ ## References
53
+
54
+ - `src/lib/search-lab-types.ts`
55
+ - `src/lib/search-lab.ts`
56
+ - `src/cli/commands/search-lab.ts`
57
+ - `../../../README.md`
@@ -0,0 +1,23 @@
1
+ export interface SearchLabQuickSummary {
2
+ topIssues: string[]
3
+ recommendationCount: number
4
+ }
5
+
6
+ /**
7
+ * Minimal helper for future skill-side analysis wrappers.
8
+ * Kept intentionally small so the bootstrap skill can evolve
9
+ * without coupling itself tightly to engine internals.
10
+ */
11
+ export function summarizeSearchLabIssues(issues: string[]): SearchLabQuickSummary {
12
+ const counts = new Map<string, number>()
13
+ for (const issue of issues) counts.set(issue, (counts.get(issue) ?? 0) + 1)
14
+ const topIssues = [...counts.entries()]
15
+ .sort((a, b) => b[1] - a[1])
16
+ .slice(0, 5)
17
+ .map(([issue]) => issue)
18
+
19
+ return {
20
+ topIssues,
21
+ recommendationCount: topIssues.length,
22
+ }
23
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amsterdamdatalabs/enact-extensions",
3
- "version": "0.1.1",
3
+ "version": "0.1.5",
4
4
  "description": "Create and validate Enact multi-platform plugin manifests",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",