@codyswann/lisa 2.24.0 → 2.25.1

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 (154) hide show
  1. package/.claude-plugin/marketplace.json +12 -0
  2. package/package.json +1 -1
  3. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  4. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  5. package/plugins/lisa/rules/config-resolution.md +32 -1
  6. package/plugins/lisa/skills/atlassian-access/SKILL.md +32 -1
  7. package/plugins/lisa/skills/notion-access/SKILL.md +32 -1
  8. package/plugins/lisa/skills/setup-atlassian/SKILL.md +32 -1
  9. package/plugins/lisa/skills/setup-linear/SKILL.md +32 -1
  10. package/plugins/lisa/skills/setup-notion/SKILL.md +32 -1
  11. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  13. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  14. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  15. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  17. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  18. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  19. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  21. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  23. package/plugins/lisa-wiki/.claude-plugin/plugin.json +8 -0
  24. package/plugins/lisa-wiki/.codex-plugin/plugin.json +32 -0
  25. package/plugins/lisa-wiki/ci/lisa-wiki-validate.yml +32 -0
  26. package/plugins/lisa-wiki/commands/add-ingest.md +6 -0
  27. package/plugins/lisa-wiki/commands/add-role.md +6 -0
  28. package/plugins/lisa-wiki/commands/doctor.md +6 -0
  29. package/plugins/lisa-wiki/commands/ingest.md +6 -0
  30. package/plugins/lisa-wiki/commands/lint.md +6 -0
  31. package/plugins/lisa-wiki/commands/migrate.md +6 -0
  32. package/plugins/lisa-wiki/commands/onboard-me.md +6 -0
  33. package/plugins/lisa-wiki/commands/query.md +6 -0
  34. package/plugins/lisa-wiki/commands/setup.md +6 -0
  35. package/plugins/lisa-wiki/schema/lisa-wiki-config.schema.json +118 -0
  36. package/plugins/lisa-wiki/schema/wiki-structure.schema.json +51 -0
  37. package/plugins/lisa-wiki/scripts/_wiki-lib.mjs +185 -0
  38. package/plugins/lisa-wiki/scripts/diff-guard.mjs +116 -0
  39. package/plugins/lisa-wiki/scripts/ingest-git.mjs +189 -0
  40. package/plugins/lisa-wiki/scripts/ingest-memory.mjs +130 -0
  41. package/plugins/lisa-wiki/scripts/ingest-roles.mjs +85 -0
  42. package/plugins/lisa-wiki/scripts/ingest_slack_channel.py +329 -0
  43. package/plugins/lisa-wiki/scripts/lint-wiki.mjs +320 -0
  44. package/plugins/lisa-wiki/scripts/mcp-doctor.mjs +72 -0
  45. package/plugins/lisa-wiki/scripts/render-contract.mjs +107 -0
  46. package/plugins/lisa-wiki/scripts/rewrite-refs.mjs +144 -0
  47. package/plugins/lisa-wiki/scripts/slack_oauth_user.py +179 -0
  48. package/plugins/lisa-wiki/scripts/validate-config.mjs +232 -0
  49. package/plugins/lisa-wiki/scripts/verify-migration.mjs +199 -0
  50. package/plugins/lisa-wiki/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
  51. package/plugins/lisa-wiki/skills/lisa-wiki-add-role/SKILL.md +30 -0
  52. package/plugins/lisa-wiki/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
  53. package/plugins/lisa-wiki/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
  54. package/plugins/lisa-wiki/skills/lisa-wiki-connector-git/SKILL.md +25 -0
  55. package/plugins/lisa-wiki/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
  56. package/plugins/lisa-wiki/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
  57. package/plugins/lisa-wiki/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
  58. package/plugins/lisa-wiki/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
  59. package/plugins/lisa-wiki/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
  60. package/plugins/lisa-wiki/skills/lisa-wiki-connector-web/SKILL.md +23 -0
  61. package/plugins/lisa-wiki/skills/lisa-wiki-doctor/SKILL.md +47 -0
  62. package/plugins/lisa-wiki/skills/lisa-wiki-ingest/SKILL.md +43 -0
  63. package/plugins/lisa-wiki/skills/lisa-wiki-lint/SKILL.md +32 -0
  64. package/plugins/lisa-wiki/skills/lisa-wiki-migrate/SKILL.md +43 -0
  65. package/plugins/lisa-wiki/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
  66. package/plugins/lisa-wiki/skills/lisa-wiki-query/SKILL.md +30 -0
  67. package/plugins/lisa-wiki/skills/lisa-wiki-setup/SKILL.md +45 -0
  68. package/plugins/lisa-wiki/skills/lisa-wiki-usage/SKILL.md +50 -0
  69. package/plugins/lisa-wiki/templates/agents/role-agent.claude.md +16 -0
  70. package/plugins/lisa-wiki/templates/agents/role-agent.codex.toml +15 -0
  71. package/plugins/lisa-wiki/templates/index.md +17 -0
  72. package/plugins/lisa-wiki/templates/llm-wiki-contract.md +60 -0
  73. package/plugins/lisa-wiki/templates/log.md +8 -0
  74. package/plugins/lisa-wiki/templates/page-types/architecture.md +18 -0
  75. package/plugins/lisa-wiki/templates/page-types/concept.md +18 -0
  76. package/plugins/lisa-wiki/templates/page-types/decision.md +18 -0
  77. package/plugins/lisa-wiki/templates/page-types/entity.md +19 -0
  78. package/plugins/lisa-wiki/templates/page-types/open-question.md +18 -0
  79. package/plugins/lisa-wiki/templates/page-types/playbook.md +18 -0
  80. package/plugins/lisa-wiki/templates/page-types/project.md +19 -0
  81. package/plugins/lisa-wiki/templates/page-types/requirement.md +19 -0
  82. package/plugins/lisa-wiki/templates/page-types/staff.md +26 -0
  83. package/plugins/lisa-wiki/templates/start-here.md +24 -0
  84. package/plugins/lisa-wiki/templates/state-readme.md +20 -0
  85. package/plugins/src/base/rules/config-resolution.md +32 -1
  86. package/plugins/src/base/skills/atlassian-access/SKILL.md +32 -1
  87. package/plugins/src/base/skills/notion-access/SKILL.md +32 -1
  88. package/plugins/src/base/skills/setup-atlassian/SKILL.md +32 -1
  89. package/plugins/src/base/skills/setup-linear/SKILL.md +32 -1
  90. package/plugins/src/base/skills/setup-notion/SKILL.md +32 -1
  91. package/plugins/src/wiki/.claude-plugin/plugin.json +6 -0
  92. package/plugins/src/wiki/ci/lisa-wiki-validate.yml +32 -0
  93. package/plugins/src/wiki/commands/add-ingest.md +6 -0
  94. package/plugins/src/wiki/commands/add-role.md +6 -0
  95. package/plugins/src/wiki/commands/doctor.md +6 -0
  96. package/plugins/src/wiki/commands/ingest.md +6 -0
  97. package/plugins/src/wiki/commands/lint.md +6 -0
  98. package/plugins/src/wiki/commands/migrate.md +6 -0
  99. package/plugins/src/wiki/commands/onboard-me.md +6 -0
  100. package/plugins/src/wiki/commands/query.md +6 -0
  101. package/plugins/src/wiki/commands/setup.md +6 -0
  102. package/plugins/src/wiki/schema/lisa-wiki-config.schema.json +118 -0
  103. package/plugins/src/wiki/schema/wiki-structure.schema.json +51 -0
  104. package/plugins/src/wiki/scripts/_wiki-lib.mjs +185 -0
  105. package/plugins/src/wiki/scripts/diff-guard.mjs +116 -0
  106. package/plugins/src/wiki/scripts/ingest-git.mjs +189 -0
  107. package/plugins/src/wiki/scripts/ingest-memory.mjs +130 -0
  108. package/plugins/src/wiki/scripts/ingest-roles.mjs +85 -0
  109. package/plugins/src/wiki/scripts/ingest_slack_channel.py +329 -0
  110. package/plugins/src/wiki/scripts/lint-wiki.mjs +320 -0
  111. package/plugins/src/wiki/scripts/mcp-doctor.mjs +72 -0
  112. package/plugins/src/wiki/scripts/render-contract.mjs +107 -0
  113. package/plugins/src/wiki/scripts/rewrite-refs.mjs +144 -0
  114. package/plugins/src/wiki/scripts/slack_oauth_user.py +179 -0
  115. package/plugins/src/wiki/scripts/validate-config.mjs +232 -0
  116. package/plugins/src/wiki/scripts/verify-migration.mjs +199 -0
  117. package/plugins/src/wiki/skills/lisa-wiki-add-ingest/SKILL.md +34 -0
  118. package/plugins/src/wiki/skills/lisa-wiki-add-role/SKILL.md +30 -0
  119. package/plugins/src/wiki/skills/lisa-wiki-connector-confluence/SKILL.md +25 -0
  120. package/plugins/src/wiki/skills/lisa-wiki-connector-docs/SKILL.md +30 -0
  121. package/plugins/src/wiki/skills/lisa-wiki-connector-git/SKILL.md +25 -0
  122. package/plugins/src/wiki/skills/lisa-wiki-connector-jira/SKILL.md +28 -0
  123. package/plugins/src/wiki/skills/lisa-wiki-connector-memory/SKILL.md +28 -0
  124. package/plugins/src/wiki/skills/lisa-wiki-connector-notion/SKILL.md +25 -0
  125. package/plugins/src/wiki/skills/lisa-wiki-connector-roles/SKILL.md +22 -0
  126. package/plugins/src/wiki/skills/lisa-wiki-connector-slack/SKILL.md +30 -0
  127. package/plugins/src/wiki/skills/lisa-wiki-connector-web/SKILL.md +23 -0
  128. package/plugins/src/wiki/skills/lisa-wiki-doctor/SKILL.md +47 -0
  129. package/plugins/src/wiki/skills/lisa-wiki-ingest/SKILL.md +43 -0
  130. package/plugins/src/wiki/skills/lisa-wiki-lint/SKILL.md +32 -0
  131. package/plugins/src/wiki/skills/lisa-wiki-migrate/SKILL.md +43 -0
  132. package/plugins/src/wiki/skills/lisa-wiki-onboard-me/SKILL.md +33 -0
  133. package/plugins/src/wiki/skills/lisa-wiki-query/SKILL.md +30 -0
  134. package/plugins/src/wiki/skills/lisa-wiki-setup/SKILL.md +45 -0
  135. package/plugins/src/wiki/skills/lisa-wiki-usage/SKILL.md +50 -0
  136. package/plugins/src/wiki/templates/agents/role-agent.claude.md +16 -0
  137. package/plugins/src/wiki/templates/agents/role-agent.codex.toml +15 -0
  138. package/plugins/src/wiki/templates/index.md +17 -0
  139. package/plugins/src/wiki/templates/llm-wiki-contract.md +60 -0
  140. package/plugins/src/wiki/templates/log.md +8 -0
  141. package/plugins/src/wiki/templates/page-types/architecture.md +18 -0
  142. package/plugins/src/wiki/templates/page-types/concept.md +18 -0
  143. package/plugins/src/wiki/templates/page-types/decision.md +18 -0
  144. package/plugins/src/wiki/templates/page-types/entity.md +19 -0
  145. package/plugins/src/wiki/templates/page-types/open-question.md +18 -0
  146. package/plugins/src/wiki/templates/page-types/playbook.md +18 -0
  147. package/plugins/src/wiki/templates/page-types/project.md +19 -0
  148. package/plugins/src/wiki/templates/page-types/requirement.md +19 -0
  149. package/plugins/src/wiki/templates/page-types/staff.md +26 -0
  150. package/plugins/src/wiki/templates/start-here.md +24 -0
  151. package/plugins/src/wiki/templates/state-readme.md +20 -0
  152. package/scripts/build-plugins.sh +29 -21
  153. package/scripts/check-plugins-sync.sh +38 -1
  154. package/scripts/generate-codex-plugin-artifacts.mjs +22 -0
@@ -0,0 +1,60 @@
1
+ # {{displayName}} — LLM Wiki Contract
2
+
3
+ > Generated by the `lisa-wiki` plugin from `{{wikiRoot}}/lisa-wiki.config.json`.
4
+ > kernelVersion: {{kernelVersion}} · schemaVersion: {{schemaVersion}} · rendered: {{generatedDate}}
5
+ > This snapshot keeps the wiki self-describing **without** the plugin installed. Re-render with
6
+ > `/setup --upgrade`; do not hand-edit — change the config instead.
7
+
8
+ ## Purpose
9
+ {{purpose}}
10
+
11
+ ## What this is
12
+ A git-native markdown knowledge base under `{{wikiRoot}}/`, owned by **{{org}}**, maintained by the
13
+ lisa-wiki kernel. Three layers: immutable **raw sources** (`{{wikiRoot}}/sources/`), the LLM-owned
14
+ **synthesis** layer (the category directories), and this **schema** layer (config + this contract).
15
+ Repository mode: **{{mode}}**.
16
+
17
+ ## Layout
18
+ - `{{wikiRoot}}/index.md` — navigation map of every page (read first).
19
+ - `{{wikiRoot}}/log.md` — append-only operation ledger.
20
+ - `{{wikiRoot}}/start-here.md` — orientation + purpose.
21
+ - `{{wikiRoot}}/sources/` — provenance (source notes); layout: **{{sourceLayout}}**.
22
+ - `{{wikiRoot}}/state/` — per-source ingestion cursors (JSON).
23
+ - `{{wikiRoot}}/staff/` — digital-staff role pages (optional).
24
+ - Synthesis categories: {{categories}}.
25
+
26
+ ## Ordered ingestion pipeline (never reorder)
27
+ `source note → synthesis → index → log → verify → state → commit/PR`.
28
+ State advances **only** after source notes + synthesis + index + log + verification all pass.
29
+ Connectors write **only** their source note (+ run metadata); the kernel performs synthesis, index,
30
+ log, verification, state advancement, and PR.
31
+
32
+ ## Standards
33
+ - Frontmatter required on new/touched synthesis pages and source notes
34
+ (`type`, `created`, `updated`, `related`, `sources`[, `sensitivity`]).
35
+ - `index.md` is a per-category table; `log.md` is an append-only table with the fixed operation
36
+ vocabulary: `INIT, SETUP, INGEST, CREATE, UPDATE, MERGE, DEPRECATE, LINT, QUERY, REBUILD-INDEX`.
37
+ - Cite sources in plain text, e.g. `Source: {{wikiRoot}}/sources/<system>/<note>.md`.
38
+ - Do not invent facts; weak or unverified material → `{{wikiRoot}}/open-questions/`.
39
+
40
+ ## Sources & connectors
41
+ Enabled connectors: {{connectors}}.
42
+ Universal sources every project may ingest: self + other registered projects' git/PR history,
43
+ **project-scoped** memory, and roles. **Memory is project-scoped ONLY — never global/unrelated.**
44
+ External-write connectors (e.g. Slack OAuth, CRM writeback) run only with explicit intent and never
45
+ auto-merge. A bare full ingest runs every enabled non-external-write source.
46
+
47
+ ## Safety
48
+ - Source retention: **{{sourceRetention}}**. Default sensitivity: **{{sensitivityDefault}}**.
49
+ - Pre-commit: `git diff --check`, secret scan, tenant/contamination scan, touched-file guard.
50
+ - Never commit secrets/OAuth artifacts. In wrapper/standalone modes, never stage child-repo contents.
51
+
52
+ ## Git
53
+ {{prPolicy}}.
54
+
55
+ ## README
56
+ Mode: **{{readmeMode}}** (rich keeps the public README; stub points to `/onboard-me`; preserve leaves it).
57
+
58
+ ## Commands
59
+ `/ingest` · `/query` · `/lint` · `/setup` · `/migrate` · `/add-ingest` · `/add-role` · `/onboard-me` · `/doctor`
60
+ (On Codex, invoke the matching `lisa-wiki-*` skills, e.g. `$lisa-wiki-ingest`.)
@@ -0,0 +1,8 @@
1
+ # {{displayName}} — Log
2
+
3
+ > Append-only. One row per operation. Operations:
4
+ > `INIT, SETUP, INGEST, CREATE, UPDATE, MERGE, DEPRECATE, LINT, QUERY, REBUILD-INDEX`.
5
+
6
+ | Date | Operation | Target | Notes |
7
+ |---|---|---|---|
8
+ | {{generatedDate}} | SETUP | {{wikiRoot}}/ | Initialized {{displayName}} with the lisa-wiki kernel. |
@@ -0,0 +1,18 @@
1
+ ---
2
+ type: architecture
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ ---
8
+
9
+ # {{title}}
10
+
11
+ ## Overview
12
+
13
+ ## Components
14
+
15
+ ## Data flow
16
+
17
+ ## Constraints & decisions
18
+ <!-- Link relevant decision/ pages; cite source notes -->
@@ -0,0 +1,18 @@
1
+ ---
2
+ type: concept
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ ---
8
+
9
+ # {{title}}
10
+
11
+ ## Definition
12
+
13
+ ## Key points
14
+
15
+ ## Evidence
16
+ <!-- Cite source notes, e.g. Source: sources/<system>/<note>.md -->
17
+
18
+ ## Open questions
@@ -0,0 +1,18 @@
1
+ ---
2
+ type: decision
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ ---
8
+
9
+ # {{title}}
10
+
11
+ ## Context
12
+
13
+ ## Decision
14
+
15
+ ## Consequences
16
+
17
+ ## Status
18
+ <!-- proposed | accepted | superseded -->
@@ -0,0 +1,19 @@
1
+ ---
2
+ type: entity
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ ---
8
+
9
+ # {{title}}
10
+
11
+ ## Overview
12
+
13
+ ## Key capabilities
14
+
15
+ ## Relationships
16
+ <!-- People, products, systems this entity connects to -->
17
+
18
+ ## Context & evidence
19
+ <!-- Cite source notes -->
@@ -0,0 +1,18 @@
1
+ ---
2
+ type: open-question
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ ---
8
+
9
+ # {{title}}
10
+
11
+ ## The question
12
+
13
+ ## What we know
14
+ <!-- Cite source notes; this is where weak/unverified material lives until confirmed -->
15
+
16
+ ## What we still need
17
+
18
+ ## Owner
@@ -0,0 +1,18 @@
1
+ ---
2
+ type: playbook
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ ---
8
+
9
+ # {{title}}
10
+
11
+ ## When to use
12
+
13
+ ## Steps
14
+
15
+ ## Verification
16
+ <!-- How to confirm it worked -->
17
+
18
+ ## Pitfalls
@@ -0,0 +1,19 @@
1
+ ---
2
+ type: project
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ ---
8
+
9
+ # {{title}}
10
+
11
+ ## Repository
12
+ <!-- | Field | Value | : local path, remote, default branch, HEAD, status -->
13
+
14
+ ## Technology signals
15
+
16
+ ## Structure signals
17
+
18
+ ## Notes & evidence
19
+ <!-- Cite source notes, e.g. PR #/commit -->
@@ -0,0 +1,19 @@
1
+ ---
2
+ type: requirement
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ ---
8
+
9
+ # {{title}}
10
+
11
+ ## Summary
12
+
13
+ ## Acceptance criteria
14
+ <!-- Gherkin: Given / When / Then -->
15
+
16
+ ## Out of scope
17
+
18
+ ## Notes & evidence
19
+ <!-- Cite source notes -->
@@ -0,0 +1,26 @@
1
+ ---
2
+ type: staff
3
+ created: {{date}}
4
+ updated: {{date}}
5
+ related: []
6
+ sources: []
7
+ sensitivity: {{sensitivity}}
8
+ ---
9
+
10
+ # {{role}} ({{id}})
11
+
12
+ ## Role
13
+ <!-- Human or Agent; what this role is responsible for -->
14
+
15
+ ## Domain
16
+ Owned categories: {{ownedCategories}}
17
+ Owned connectors: {{ownedConnectors}}
18
+
19
+ ## Expertise
20
+ {{expertise}}
21
+
22
+ ## Reports to
23
+
24
+ ## Notes
25
+ <!-- The runnable subagent for this role lives at .claude/agents/{{id}}.md and .codex/agents/{{id}}.toml.
26
+ Whether it is ever invoked/scheduled is out of scope for the wiki. -->
@@ -0,0 +1,24 @@
1
+ # Start here — {{displayName}}
2
+
3
+ ## Purpose
4
+ {{purpose}}
5
+
6
+ ## What this is
7
+ A git-native LLM Wiki owned by **{{org}}** and maintained by the `lisa-wiki` kernel. It is the
8
+ durable home for this project's knowledge (and documentation). Raw sources are preserved under
9
+ `{{wikiRoot}}/sources/`; distilled knowledge lives in the category pages; the rules are in
10
+ `{{wikiRoot}}/schema/llm-wiki-contract.md`.
11
+
12
+ ## How to use it
13
+ - **New here?** Run `/onboard-me` (Codex: `$lisa-wiki-onboard-me`) for a guided tour + sample questions.
14
+ - **Find/answer something:** `/query "<question>"` — cited answers from the wiki.
15
+ - **Add knowledge:** `/ingest <url|file|prompt>` (Codex: `$lisa-wiki-ingest`), or `/ingest` with no
16
+ argument for a full ingest across all enabled non-external-write sources (external-write sources
17
+ require explicit intent).
18
+ - **Browse:** [index.md](index.md).
19
+ - **Check health:** `/lint`.
20
+
21
+ ## Map
22
+ Synthesis categories: {{categories}}.
23
+ Sources: `{{wikiRoot}}/sources/` · State: `{{wikiRoot}}/state/` · Contract:
24
+ `{{wikiRoot}}/schema/llm-wiki-contract.md` · Log: `{{wikiRoot}}/log.md`.
@@ -0,0 +1,20 @@
1
+ # state/ — ingestion cursors
2
+
3
+ JSON cursors that let ingestion resume incrementally — one file per source/connector at
4
+ `state/<system>/*.json`. A cursor is advanced **only after** its source notes + synthesis + index +
5
+ log + verification all pass (never before). Common envelope:
6
+
7
+ ```json
8
+ {
9
+ "connector": "git",
10
+ "profile": "default",
11
+ "lastSuccessfulRunAt": "1970-01-01T00:00:00Z",
12
+ "cursor": {},
13
+ "sourceNotes": [],
14
+ "synthesisPages": [],
15
+ "schemaVersion": "1.0.0"
16
+ }
17
+ ```
18
+
19
+ The post-migration / post-setup verification report is written to
20
+ `state/migration/doctor-report.json` by `/doctor`.
@@ -24,28 +24,36 @@ inject_version() {
24
24
  fi
25
25
  }
26
26
 
27
- # Build base plugin
28
- BASE_OUT="$PLUGINS_DIR/lisa"
29
- rm -rf "$BASE_OUT"
30
- mkdir -p "$BASE_OUT"
31
- cp -r "$SRC_DIR/base/." "$BASE_OUT/"
32
- inject_version "$BASE_OUT/.claude-plugin/plugin.json"
33
- node "$ROOT_DIR/scripts/generate-codex-plugin-artifacts.mjs" "$BASE_OUT" "$VERSION"
34
- echo "Built plugins/lisa (v$VERSION)"
27
+ # Build one plugin: copy plugins/src/<src_name> -> plugins/<out_name>, inject the
28
+ # release version into its Claude manifest, then derive the Codex artifacts.
29
+ build_plugin() {
30
+ local src_name="$1"
31
+ local out_name="$2"
32
+ local src="$SRC_DIR/$src_name"
33
+ if [ ! -d "$src" ]; then
34
+ echo "Skipping plugins/$out_name (no source at plugins/src/$src_name)"
35
+ return 0
36
+ fi
37
+ local out="$PLUGINS_DIR/$out_name"
38
+ rm -rf "$out"
39
+ mkdir -p "$out"
40
+ cp -r "$src/." "$out/"
41
+ inject_version "$out/.claude-plugin/plugin.json"
42
+ node "$ROOT_DIR/scripts/generate-codex-plugin-artifacts.mjs" "$out" "$VERSION"
43
+ echo "Built plugins/$out_name (v$VERSION)"
44
+ }
45
+
46
+ # Base plugin
47
+ build_plugin base lisa
35
48
 
36
- # Build stack-specific plugins (NO base copy)
49
+ # Stack-specific plugins (NO base copy)
37
50
  STACKS=(typescript expo nestjs cdk harper-fabric rails)
38
51
  for stack in "${STACKS[@]}"; do
39
- STACK_SRC="$SRC_DIR/$stack"
40
- if [ ! -d "$STACK_SRC" ]; then
41
- echo "Skipping plugins/lisa-$stack (no source)"
42
- continue
43
- fi
44
- OUT="$PLUGINS_DIR/lisa-$stack"
45
- rm -rf "$OUT"
46
- mkdir -p "$OUT"
47
- cp -r "$STACK_SRC/." "$OUT/"
48
- inject_version "$OUT/.claude-plugin/plugin.json"
49
- node "$ROOT_DIR/scripts/generate-codex-plugin-artifacts.mjs" "$OUT" "$VERSION"
50
- echo "Built plugins/lisa-$stack (v$VERSION)"
52
+ build_plugin "$stack" "lisa-$stack"
53
+ done
54
+
55
+ # Standalone plugins (not language stacks): each builds plugins/src/<name> -> plugins/lisa-<name>
56
+ STANDALONE=(wiki)
57
+ for name in "${STANDALONE[@]}"; do
58
+ build_plugin "$name" "lisa-$name"
51
59
  done
@@ -35,7 +35,7 @@ if ! git diff --quiet -- plugins/; then
35
35
  echo " overwrites the change." >&2
36
36
  echo "" >&2
37
37
  echo " Fix:" >&2
38
- echo " 1. Make your edit under plugins/src/<base|stack>/..." >&2
38
+ echo " 1. Make your edit under plugins/src/<base|stack|standalone (e.g. wiki)>/..." >&2
39
39
  echo " 2. Run: bun run build:plugins" >&2
40
40
  echo " 3. Commit both plugins/src and the regenerated plugins/lisa*." >&2
41
41
  # Leave the tree dirty so the diff is inspectable locally; CI fails on exit.
@@ -43,3 +43,40 @@ if ! git diff --quiet -- plugins/; then
43
43
  fi
44
44
 
45
45
  echo "✓ Plugin artifacts are in sync with plugins/src."
46
+
47
+ # Marketplace coverage: every built plugin directory (plugins/lisa, plugins/lisa-*)
48
+ # must be registered in .claude-plugin/marketplace.json, and every marketplace
49
+ # entry must point at a directory that exists. The reproducibility check above
50
+ # only proves artifacts match plugins/src — it does NOT prove a built plugin is
51
+ # actually published. lisa-harper-fabric shipped built-but-unpublished for
52
+ # exactly this reason: install-claude-plugins.sh tried "lisa-harper-fabric@lisa"
53
+ # but the marketplace never advertised it, so resolution failed at install time.
54
+ MARKETPLACE="$ROOT_DIR/.claude-plugin/marketplace.json"
55
+ marketplace_fail=0
56
+
57
+ # Every built plugin dir needs a marketplace entry whose source points to it.
58
+ while IFS= read -r dir; do
59
+ name="$(basename "$dir")"
60
+ if ! jq -e --arg src "./plugins/$name" '.plugins[] | select(.source == $src)' "$MARKETPLACE" >/dev/null; then
61
+ echo "✗ Built plugin plugins/$name is not registered in .claude-plugin/marketplace.json (expected source \"./plugins/$name\")." >&2
62
+ marketplace_fail=1
63
+ fi
64
+ done < <(find "$ROOT_DIR/plugins" -maxdepth 1 -mindepth 1 -type d ! -name src | sort)
65
+
66
+ # Every marketplace entry must point at a directory that exists.
67
+ while IFS= read -r src; do
68
+ if [ ! -d "$ROOT_DIR/$src" ]; then
69
+ echo "✗ marketplace.json entry source \"$src\" does not exist as a built plugin directory." >&2
70
+ marketplace_fail=1
71
+ fi
72
+ done < <(jq -r '.plugins[].source' "$MARKETPLACE")
73
+
74
+ if [ "$marketplace_fail" -ne 0 ]; then
75
+ echo "" >&2
76
+ echo " Every plugins/lisa* directory must be registered in .claude-plugin/marketplace.json" >&2
77
+ echo " and every marketplace source must point to a real built directory. Edit the manifest" >&2
78
+ echo " at .claude-plugin/marketplace.json, then re-run: bun run check:plugins" >&2
79
+ exit 1
80
+ fi
81
+
82
+ echo "✓ Marketplace registers every built plugin."
@@ -297,6 +297,28 @@ function metadataFor(pluginName) {
297
297
  "Improve this Rails model",
298
298
  ],
299
299
  },
300
+ "lisa-wiki": {
301
+ displayName: "LLM Wiki",
302
+ description:
303
+ "Distributable LLM Wiki kernel — ingest, query, lint, and maintain a git-native markdown knowledge base across Claude and Codex.",
304
+ shortDescription: "LLM Wiki knowledge base",
305
+ longDescription:
306
+ "A config-driven, git-native LLM Wiki: ingest sources (git, PRs, project-scoped memory, Jira, Slack, docs, …) into durable markdown, query with citations, lint integrity, onboard users, absorb existing documentation, and scaffold domain-expert role subagents. Distributed for both Claude Code and Codex.",
307
+ category: "Productivity",
308
+ capabilities: ["Interactive", "Write"],
309
+ keywords: [
310
+ "wiki",
311
+ "knowledge-base",
312
+ "ingest",
313
+ "documentation",
314
+ "llm-wiki",
315
+ ],
316
+ defaultPrompt: [
317
+ "Onboard me to this project",
318
+ "Ingest the latest sources into the wiki",
319
+ "Query the wiki",
320
+ ],
321
+ },
300
322
  };
301
323
  return (
302
324
  map[pluginName] ?? {