@codyswann/lisa 2.36.0 → 2.38.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.
- package/package.json +1 -1
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa/skills/acceptance-criteria/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/agent-design-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/atlassian-access/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/bug-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/codebase-research/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/codify-verification/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/confluence-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/confluence-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/debrief/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/debrief-apply/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/epic-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/fix-linter-error/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/git-commit/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/git-prune/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/git-submit-pr/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-create/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-read-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-validate-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/github-write-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/implement/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/improve-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/improve-max-lines/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/improve-max-lines-per-function/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/improve-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/improve-tests/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-read-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-validate-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jira-write-ticket/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/jsdoc-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-create/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-read-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-validate-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/linear-write-issue/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/lisa-review-implementation/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/monitor/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/nightly-add-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/nightly-improve-tests/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/nightly-lower-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/notion-access/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/notion-prd-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/notion-to-tracker/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/performance-review/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/plan/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/prd-backlink/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/prd-ticket-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/product-walkthrough/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/pull-request-review/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/quality-review/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/reproduce-bug/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/research/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/review-local/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/root-cause-analysis/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/security-review/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/security-zap-scan/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/setup-atlassian/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/setup-confluence/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/setup-github/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/setup-jira/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/setup-linear/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/setup-notion/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/spec-conformance/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/task-decomposition/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/task-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tdd-implementation/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/test-strategy/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/ticket-triage/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-build-intake/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-create/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-journey/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-read/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-source-artifacts/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-sync/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-validate/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-verify/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/tracker-write/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/verification-lifecycle/agents/openai.yaml +4 -0
- package/plugins/lisa/skills/verify/agents/openai.yaml +4 -0
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/skills/apollo-client/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/atomic-design-gluestack/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/container-view-pattern/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/cross-platform-compatibility/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/directory-structure/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/exploratory-qa/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/expo-env-config/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/expo-router-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/gluestack-nativewind/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/local-state/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/ops-browser-uat/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/ops-check-logs/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/ops-db-ops/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/ops-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/ops-monitor-errors/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/ops-performance/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/ops-run-local/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/ops-verify-health/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/owasp-zap/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/playwright-ci-debugging/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/playwright-selectors/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/reduce-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa-expo/skills/testing-library/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/skills/exploratory-qa/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/skills/harper-build-and-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/skills/harper-component-model/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/skills/harper-config-yaml/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/skills/harper-resources/agents/openai.yaml +4 -0
- package/plugins/lisa-harper-fabric/skills/harper-schema-graphql/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/skills/nestjs-graphql/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/skills/nestjs-rules/agents/openai.yaml +4 -0
- package/plugins/lisa-nestjs/skills/typeorm-patterns/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/skills/lisa-openclaw-connect-repo-topic/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/skills/lisa-openclaw-connect-staff/agents/openai.yaml +4 -0
- package/plugins/lisa-openclaw/skills/lisa-openclaw-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/skills/action-controller-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/action-view-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/active-record-model-best-practices/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/exploratory-qa/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/fix-linter-error/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/improve-code-complexity/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/improve-max-lines/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/improve-max-lines-per-function/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/improve-test-coverage/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/jira-add-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/jira-create/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/jira-evidence/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/jira-journey/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/jira-verify/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/ops-check-logs/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/ops-deploy/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/ops-run-local/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/ops-verify-jobs/agents/openai.yaml +4 -0
- package/plugins/lisa-rails/skills/ops-verify-telemetry/agents/openai.yaml +4 -0
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/skills/lisa-wiki-add-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-add-role/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-confluence/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-docs/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-git/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-jira/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-memory/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-notion/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-roles/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-slack/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-connector-web/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-doctor/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-ingest/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-lint/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-migrate/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-onboard-me/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-query/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-setup/agents/openai.yaml +4 -0
- package/plugins/lisa-wiki/skills/lisa-wiki-usage/agents/openai.yaml +4 -0
- package/scripts/generate-codex-plugin-artifacts.mjs +133 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-add-ingest"
|
|
2
|
+
short_description: "Scaffold a project-specific \"front-door\" ingest skill that does something unique (classify a source, fetch from a special system, stamp domain frontmatter) and then chains into /ingest. Use when a project needs a bespoke ingestion path that the core connectors do not cover — instead of forking the kernel. The generated skill enriches and delegates; the kernel still owns synthesis, index, log, verify, state, and PR."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-add-ingest"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-add-role"
|
|
2
|
+
short_description: "Scaffold a domain-expert \"digital staff\" role over the wiki — a dual-runtime subagent (Claude + Codex) plus a staff doc page — from a config.staff[] entry. Use when a project wants a role-scoped expert (e.g. Legal, Finance, Sales) whose knowledge is a slice of the wiki. The plugin only SETS UP the subagent; whether it is ever invoked, scheduled, or routed is out of scope."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-add-role"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-confluence"
|
|
2
|
+
short_description: "Produce sanitized Confluence source notes for lisa-wiki ingest via the Atlassian MCP. Use only when lisa-wiki-ingest routes to the confluence connector. Read-only; tenant-guarded."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-confluence"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-docs"
|
|
2
|
+
short_description: "Ingest a local document (PDF, DOCX, Markdown, text) into a sanitized source note for lisa-wiki ingest. Use only when lisa-wiki-ingest routes to the docs connector (a file-path input). Uses available local converters; no heavy bundled dependency."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-docs"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-git"
|
|
2
|
+
short_description: "Produce sanitized git/PR-history source notes for lisa-wiki ingest. Use only when lisa-wiki-ingest routes to the git connector (self repo or a registered project). Read-only — never checks out, fetches, or mutates the target repo."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-git"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-jira"
|
|
2
|
+
short_description: "Produce sanitized JIRA source notes for lisa-wiki ingest via the Atlassian MCP. Use only when lisa-wiki-ingest routes to the jira connector. Read-only; tenant-guarded."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-jira"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-memory"
|
|
2
|
+
short_description: "Ingest the agent's PROJECT-SCOPED memory into a sanitized source note. Use only when lisa-wiki-ingest routes to the memory connector. NEVER ingests global or unrelated memory — global Codex memory and the Chronicle store are refused."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-memory"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-notion"
|
|
2
|
+
short_description: "Produce sanitized Notion source notes for lisa-wiki ingest via the Notion MCP. Use only when lisa-wiki-ingest routes to the notion connector. Read-only; teamspace-guarded."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-notion"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-roles"
|
|
2
|
+
short_description: "Ingest the wiki's own digital-staff roster (config.staff[] + wiki/staff/*) into a sanitized source note. Use only when lisa-wiki-ingest routes to the roles connector. Does not run any subagent."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-roles"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-slack"
|
|
2
|
+
short_description: "Ingest a Slack channel into sanitized source notes via a user token. Use only when lisa-wiki-ingest routes to the slack connector AND the run carries explicit external-write intent (Slack OAuth opens a browser and stores a token file). Centralized stdlib-Python scripts; secrets are redacted."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-slack"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-connector-web"
|
|
2
|
+
short_description: "Ingest a public URL into a sanitized source note for lisa-wiki ingest (via WebFetch). Use only when lisa-wiki-ingest routes to the web connector (a URL input). Read-only."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-connector-web"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-doctor"
|
|
2
|
+
short_description: "Verify that a wiki is correctly set up and (after migration) fully functional. Runs the deterministic checks plus functional smoke tests, writes a doctor report, and returns an overall verdict. Use as the final gate of /migrate, after /setup, or anytime to confirm wiki health. A repo is not \"migrated\" until its doctor verdict is READY."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-doctor"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-ingest"
|
|
2
|
+
short_description: "Ingest source material into the LLM Wiki. With an argument (URL, file path, or prompt) it ingests that one source; with no argument it runs a full ingest across every enabled non-external-write source. Routes to the right connector, then runs the ordered pipeline (source note → synthesis → index → log → verify → state → commit/PR). Use whenever new knowledge should enter the wiki."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-ingest"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-lint"
|
|
2
|
+
short_description: "Health-check the LLM Wiki. Reports orphan pages, contradictions, stale claims, broken internal links, missing index/log coverage, structure-manifest violations, and secret/tenant leaks. Use periodically or before hardening a wiki. Read-only — it reports findings, it does not fix them."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-lint"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-migrate"
|
|
2
|
+
short_description: "Migrate an existing, hand-rolled wiki implementation onto the lisa-wiki kernel — phased and compatibility-first, with a strict no-loss guarantee. Use when adopting lisa-wiki in a repo that already has its own wiki/, ingest skills, docs, or roles. Renaming things into the canonical shape is fine; losing functionality or data is not. Ends by running /doctor."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-migrate"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-onboard-me"
|
|
2
|
+
short_description: "Onboard a user to the project via its LLM Wiki. Interviews the user about themselves in relation to the project, captures that to project-scoped memory only, then gives a guided tour of what the project is and sample questions they can ask. Use when someone is new to the project or asks to be onboarded. Read-mostly — it does not open PRs or write PII into the wiki."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-onboard-me"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-query"
|
|
2
|
+
short_description: "Answer a question from the LLM Wiki with citations. Reads the index, drills into relevant pages, and synthesizes a cited answer. Read-only by default; only files new synthesis back into the wiki when the user explicitly asks. Use when someone asks a question the wiki should be able to answer, or wants to explore what the wiki knows."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-query"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-setup"
|
|
2
|
+
short_description: "Scaffold, repair, verify, or upgrade a project's LLM Wiki from its config. Use when setting up the wiki in a new repo, fixing a broken/incomplete structure, or upgrading to a newer kernel version. Asks the wiki's purpose and README mode, renders the contract snapshot, scaffolds the canonical folders, and seeds the staff roster. Idempotent and non-destructive."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-setup"
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
display_name: "lisa-wiki-usage"
|
|
2
|
+
short_description: "Explain how to browse, query, and contribute to this project's LLM Wiki. Use when a user asks how the wiki works, where knowledge lives, how to find something, or how to add to it — the read/navigation path, not an ingestion or write workflow."
|
|
3
|
+
default_prompt:
|
|
4
|
+
- "Use $lisa-wiki-usage"
|
|
@@ -69,6 +69,138 @@ export function parseSkillFrontmatter(skillMdPath) {
|
|
|
69
69
|
return frontmatter;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Encode a single string as a YAML double-quoted scalar.
|
|
74
|
+
*
|
|
75
|
+
* Double-quoting unconditionally is the deterministic choice: it round-trips
|
|
76
|
+
* every possible string — colons, leading `#`/`-`, quotes, indicators — without
|
|
77
|
+
* the branchy "is this plain-safe?" logic that risks emitting ambiguous YAML.
|
|
78
|
+
* Only the five escapes YAML's double-quoted style requires are applied, in a
|
|
79
|
+
* fixed order, so output is a pure function of the input.
|
|
80
|
+
*
|
|
81
|
+
* @param {string} value Raw string to encode.
|
|
82
|
+
* @returns {string} The value wrapped in double quotes with `\`, `"`, and the
|
|
83
|
+
* C0 control characters (tab, newline, carriage return) escaped.
|
|
84
|
+
*/
|
|
85
|
+
function yamlQuote(value) {
|
|
86
|
+
const escaped = value
|
|
87
|
+
.replace(/\\/g, "\\\\")
|
|
88
|
+
.replace(/"/g, '\\"')
|
|
89
|
+
.replace(/\t/g, "\\t")
|
|
90
|
+
.replace(/\n/g, "\\n")
|
|
91
|
+
.replace(/\r/g, "\\r");
|
|
92
|
+
return `"${escaped}"`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Serialize a Codex `interface` object to deterministic `openai.yaml` content.
|
|
97
|
+
*
|
|
98
|
+
* Emits exactly three keys in a fixed order — `display_name`,
|
|
99
|
+
* `short_description`, then `default_prompt` (a block sequence) — with every
|
|
100
|
+
* scalar double-quoted and a single trailing newline. The function is pure:
|
|
101
|
+
* given the same input it returns byte-identical output (no timestamps, no
|
|
102
|
+
* randomness, no filesystem), which is what keeps `bun run build:plugins`
|
|
103
|
+
* reproducible and the Plugins Sync CI gate stable.
|
|
104
|
+
*
|
|
105
|
+
* @param {{ display_name: string, short_description: string, default_prompt: readonly string[] }} iface
|
|
106
|
+
* The normalized interface object. `default_prompt` is always rendered as a
|
|
107
|
+
* block sequence (an empty array becomes `default_prompt: []`).
|
|
108
|
+
* @returns {string} Deterministic YAML, terminated by exactly one newline.
|
|
109
|
+
*/
|
|
110
|
+
export function serializeInterfaceToYaml(iface) {
|
|
111
|
+
const prompts = iface.default_prompt ?? [];
|
|
112
|
+
const promptBlock =
|
|
113
|
+
prompts.length === 0
|
|
114
|
+
? "default_prompt: []"
|
|
115
|
+
: ["default_prompt:", ...prompts.map(p => ` - ${yamlQuote(p)}`)].join(
|
|
116
|
+
"\n"
|
|
117
|
+
);
|
|
118
|
+
const lines = [
|
|
119
|
+
`display_name: ${yamlQuote(iface.display_name)}`,
|
|
120
|
+
`short_description: ${yamlQuote(iface.short_description)}`,
|
|
121
|
+
promptBlock,
|
|
122
|
+
];
|
|
123
|
+
return `${lines.join("\n")}\n`;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Derive a Codex `interface` object from a skill's SKILL.md frontmatter.
|
|
128
|
+
*
|
|
129
|
+
* NOTE ON DERIVATION RULES: this is the minimal/placeholder derivation that the
|
|
130
|
+
* walk-and-emit shell (issue #547) needs to produce a valid `interface` block.
|
|
131
|
+
* The richer humanization/summarization rules — title-casing `display_name`,
|
|
132
|
+
* trimming `short_description`, and the `$<name>` starter prompt — are issue
|
|
133
|
+
* #548's responsibility and will refine these defaults. Until then we fall back
|
|
134
|
+
* to the raw frontmatter values (and the skill directory name when frontmatter
|
|
135
|
+
* is missing) so every skill still emits a well-formed file.
|
|
136
|
+
*
|
|
137
|
+
* @param {{ name?: string, description?: string } | null} frontmatter Parsed
|
|
138
|
+
* SKILL.md frontmatter (or `null` when the file has no frontmatter block).
|
|
139
|
+
* @param {string} skillName The skill directory name, used as a fallback.
|
|
140
|
+
* @returns {{ display_name: string, short_description: string, default_prompt: string[] }}
|
|
141
|
+
* The normalized interface object the serializer consumes. Pure.
|
|
142
|
+
*/
|
|
143
|
+
export function deriveSkillInterface(frontmatter, skillName) {
|
|
144
|
+
const name = frontmatter?.name?.trim() || skillName;
|
|
145
|
+
const description = frontmatter?.description?.trim() || "";
|
|
146
|
+
return {
|
|
147
|
+
display_name: name,
|
|
148
|
+
short_description: description,
|
|
149
|
+
default_prompt: [`Use $${name}`],
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Walk every `skills/<name>/SKILL.md` in a built plugin and emit a per-skill
|
|
155
|
+
* `skills/<name>/agents/openai.yaml` (issue #547).
|
|
156
|
+
*
|
|
157
|
+
* For each skill directory containing a SKILL.md, the frontmatter is parsed
|
|
158
|
+
* (#545), an interface object is derived (#548 refines the rules), and the
|
|
159
|
+
* deterministic serializer (#546) writes `agents/openai.yaml`, creating the
|
|
160
|
+
* `agents/` directory when missing. Behavior boundaries:
|
|
161
|
+
*
|
|
162
|
+
* - No-op when the plugin has no `skills/` directory.
|
|
163
|
+
* - Never clobber a hand-authored `agents/openai.yaml` that already exists in
|
|
164
|
+
* source (that is issue #550's surface — but we must not overwrite it here
|
|
165
|
+
* regardless).
|
|
166
|
+
* - The `commands/` directory is left untouched — Codex does not consume Claude
|
|
167
|
+
* `commands/`.
|
|
168
|
+
*
|
|
169
|
+
* @param {string} pluginDir Absolute path to a built plugin directory.
|
|
170
|
+
* @returns {void} Writes files as a side effect.
|
|
171
|
+
*/
|
|
172
|
+
export function writeSkillAgents(pluginDir) {
|
|
173
|
+
const skillsDir = path.join(pluginDir, "skills");
|
|
174
|
+
if (!fs.existsSync(skillsDir)) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const entries = fs
|
|
179
|
+
.readdirSync(skillsDir, { withFileTypes: true })
|
|
180
|
+
.filter(entry => entry.isDirectory())
|
|
181
|
+
.map(entry => entry.name)
|
|
182
|
+
.sort();
|
|
183
|
+
|
|
184
|
+
for (const skillName of entries) {
|
|
185
|
+
const skillDir = path.join(skillsDir, skillName);
|
|
186
|
+
const skillMdPath = path.join(skillDir, "SKILL.md");
|
|
187
|
+
if (!fs.existsSync(skillMdPath)) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const openaiYamlPath = path.join(skillDir, "agents", "openai.yaml");
|
|
192
|
+
// Don't clobber a hand-authored openai.yaml carried over from source.
|
|
193
|
+
if (fs.existsSync(openaiYamlPath)) {
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const frontmatter = parseSkillFrontmatter(skillMdPath);
|
|
198
|
+
const iface = deriveSkillInterface(frontmatter, skillName);
|
|
199
|
+
fs.mkdirSync(path.dirname(openaiYamlPath), { recursive: true });
|
|
200
|
+
fs.writeFileSync(openaiYamlPath, serializeInterfaceToYaml(iface));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
72
204
|
function main() {
|
|
73
205
|
const [pluginDirArg, versionArg] = process.argv.slice(2);
|
|
74
206
|
if (!pluginDirArg || !versionArg) {
|
|
@@ -94,6 +226,7 @@ function main() {
|
|
|
94
226
|
const pluginName = claudeManifest.name;
|
|
95
227
|
|
|
96
228
|
writeCodexManifest(pluginDir, claudeManifest, pluginName, versionArg);
|
|
229
|
+
writeSkillAgents(pluginDir);
|
|
97
230
|
}
|
|
98
231
|
|
|
99
232
|
function writeCodexManifest(pluginDir, claudeManifest, pluginName, version) {
|