@amsterdamdatalabs/enact-extensions 0.1.1 → 0.1.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 +4 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +82 -1
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +187 -35
- package/dist/install.js.map +1 -1
- package/dist/internal/codex.d.ts.map +1 -1
- package/dist/internal/codex.js +7 -1
- package/dist/internal/codex.js.map +1 -1
- package/dist/internal/platform.d.ts +8 -0
- package/dist/internal/platform.d.ts.map +1 -1
- package/dist/internal/platform.js +46 -2
- package/dist/internal/platform.js.map +1 -1
- package/dist/provision.d.ts +30 -0
- package/dist/provision.d.ts.map +1 -0
- package/dist/provision.js +202 -0
- package/dist/provision.js.map +1 -0
- package/dist/validate/index.d.ts +23 -0
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +80 -0
- package/dist/validate/index.js.map +1 -1
- package/extensions/enact-context/.agents/plugin.json +40 -0
- package/extensions/enact-context/.mcp.json +8 -0
- package/extensions/enact-context/README.md +25 -0
- package/extensions/enact-context/assets/icon.png +0 -0
- package/extensions/enact-context/assets/logo.png +0 -0
- package/extensions/enact-context/hooks/hooks.json +115 -0
- package/extensions/enact-context/skills/enact-context/SKILL.md +149 -0
- package/extensions/enact-context/skills/enact-context/scripts/install.sh +69 -0
- package/extensions/enact-factory/.agents/plugin.json +42 -0
- package/extensions/enact-factory/.mcp.json +8 -0
- package/extensions/enact-factory/assets/icon.png +0 -0
- package/extensions/enact-factory/assets/logo.png +0 -0
- package/extensions/enact-factory/hooks/user-prompt-submit.mjs +67 -0
- package/extensions/enact-factory/skills/testing-strategy/SKILL.md +167 -0
- package/extensions/enact-factory/skills/workitem-triage/SKILL.md +22 -0
- package/extensions/enact-operator/.agents/plugin.json +57 -0
- package/extensions/enact-operator/.app.json +3 -0
- package/extensions/enact-operator/.mcp.json +10 -0
- package/extensions/enact-operator/_taxonomy.md +86 -0
- package/extensions/enact-operator/agents/README.md +5 -0
- package/extensions/enact-operator/agents/architect.toml +25 -0
- package/extensions/enact-operator/agents/code-reviewer.toml +24 -0
- package/extensions/enact-operator/agents/critic.toml +30 -0
- package/extensions/enact-operator/agents/executor.toml +24 -0
- package/extensions/enact-operator/agents/explore.toml +23 -0
- package/extensions/enact-operator/agents/planner.toml +24 -0
- package/extensions/enact-operator/agents/verifier.toml +24 -0
- package/extensions/enact-operator/assets/icon.png +0 -0
- package/extensions/enact-operator/assets/logo.png +0 -0
- package/extensions/enact-operator/commands/doctor.md +39 -0
- package/extensions/enact-operator/commands/setup.md +51 -0
- package/extensions/enact-operator/hooks/hooks.json +146 -0
- package/extensions/enact-operator/skills/_variants.md +44 -0
- package/extensions/enact-operator/skills/ai-slop-cleaner/SKILL.md +50 -0
- package/extensions/enact-operator/skills/analyze/SKILL.md +91 -0
- package/extensions/enact-operator/skills/ask/SKILL.md +47 -0
- package/extensions/enact-operator/skills/autopilot/SKILL.md +170 -0
- package/extensions/enact-operator/skills/autoresearch-goal/SKILL.md +79 -0
- package/extensions/enact-operator/skills/cancel/SKILL.md +99 -0
- package/extensions/enact-operator/skills/configure-notifications/SKILL.md +77 -0
- package/extensions/enact-operator/skills/deep-interview/SKILL.md +80 -0
- package/extensions/enact-operator/skills/doctor/SKILL.md +48 -0
- package/extensions/enact-operator/skills/hud/SKILL.md +49 -0
- package/extensions/enact-operator/skills/hyperplan/SKILL.md +47 -0
- package/extensions/enact-operator/skills/plan/SKILL.md +78 -0
- package/extensions/enact-operator/skills/ralph/SKILL.md +201 -0
- package/extensions/enact-operator/skills/ralph/gemini.md +18 -0
- package/extensions/enact-operator/skills/ralplan/SKILL.md +151 -0
- package/extensions/enact-operator/skills/remove-deadcode/SKILL.md +45 -0
- package/extensions/enact-operator/skills/research/SKILL.md +74 -0
- package/extensions/enact-operator/skills/review/SKILL.md +58 -0
- package/extensions/enact-operator/skills/security-research/SKILL.md +54 -0
- package/extensions/enact-operator/skills/setup/SKILL.md +91 -0
- package/extensions/enact-operator/skills/setup/scripts/install.sh +50 -0
- package/extensions/enact-operator/skills/skill/SKILL.md +82 -0
- package/extensions/enact-operator/skills/tdd/SKILL.md +59 -0
- package/extensions/enact-operator/skills/team/SKILL.md +199 -0
- package/extensions/enact-operator/skills/trace/SKILL.md +41 -0
- package/extensions/enact-operator/skills/ultragoal/SKILL.md +99 -0
- package/extensions/enact-operator/skills/ultraqa/SKILL.md +113 -0
- package/extensions/enact-operator/skills/ultrawork/SKILL.md +145 -0
- package/extensions/enact-operator/skills/ultrawork/planner.md +28 -0
- package/extensions/enact-operator/skills/wiki/SKILL.md +41 -0
- package/extensions/enact-operator/skills/work-with-workitem/SKILL.md +51 -0
- package/extensions/enact-wiki/.agents/plugin.json +42 -0
- package/extensions/enact-wiki/.mcp.json +15 -0
- package/extensions/enact-wiki/README.md +44 -0
- package/extensions/enact-wiki/assets/icon.png +0 -0
- package/extensions/enact-wiki/assets/logo.png +0 -0
- package/extensions/enact-wiki/skills/document-parser/SKILL.md +17 -0
- package/extensions/enact-wiki/skills/document-parser/scripts/parse.sh +60 -0
- package/extensions/enact-wiki/skills/document-parser/skill.json +9 -0
- package/extensions/enact-wiki/skills/enact-wiki/SKILL.md +30 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/ingest.md +62 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/manage.md +34 -0
- package/extensions/enact-wiki/skills/enact-wiki/references/query.md +59 -0
- package/extensions/enact-wiki/skills/search-lab/SKILL.md +57 -0
- package/extensions/enact-wiki/skills/search-lab/scripts/analyze.ts +23 -0
- package/package.json +1 -1
- package/scripts/enact-extensions.mjs +79 -12
- package/scripts/lib/hooks.mjs +352 -0
- package/scripts/lib/ledger.mjs +4 -3
- package/scripts/lib/provision-mcp.mjs +12 -365
- package/scripts/lib/run-install.mjs +87 -5
- package/scripts/lib/run-prune.mjs +73 -0
- package/scripts/lib/run-sync.mjs +9 -1
- package/scripts/lib/run-uninstall.mjs +26 -2
- package/scripts/lib/run-validate.mjs +10 -1
- package/scripts/lib/serve.mjs +19 -1
- package/scripts/version-bump.sh +463 -0
- 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.
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
+
}
|