From e3e94cbcf70f76fae77fee8f516eafb9fec46b5f Mon Sep 17 00:00:00 2001 From: Jurie Smit Date: Sat, 21 Mar 2026 05:56:33 +0200 Subject: [PATCH 1/2] chore(issues): update follow-up issues after kit-based domain filtering (#435) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 006: mark Resolved — CLI-spec parity check and framework command types merged via PR #432 - 040: mark Resolved — elegance-guidelines field added to agents.yaml via PR #432 - 025: mark Partially resolved — filterDomainsByStack() addresses noise; TRAE format audit outstanding - 026: mark In progress — kit filtering principle extends to skills; TRAE format audit pending - 027: mark Deferred — TRAE agent packaging/import format audit not yet started - 004: reduce priority P2 → P3 — domain filtering reduces governance urgency for rules.yaml Co-authored-by: Claude Sonnet 4.6 --- .github/ISSUES/004-rules-yaml-ownership.md | 13 ++++++++- .github/ISSUES/006-reverse-spec-mismatch.md | 27 ++++++++++++++++--- .github/ISSUES/025-trae-rules-revisit.md | 10 +++++++ .github/ISSUES/026-trae-skills-revisit.md | 11 ++++++++ .github/ISSUES/027-trae-agents-revisit.md | 11 ++++++++ ...-should-consider-architectural-elegance.md | 15 +++++++++++ 6 files changed, 83 insertions(+), 4 deletions(-) diff --git a/.github/ISSUES/004-rules-yaml-ownership.md b/.github/ISSUES/004-rules-yaml-ownership.md index 65ce428e..90acdd7c 100644 --- a/.github/ISSUES/004-rules-yaml-ownership.md +++ b/.github/ISSUES/004-rules-yaml-ownership.md @@ -1,6 +1,6 @@ # feat(governance): Assign ownership and review process for rules.yaml -**Priority:** P2 — Medium +**Priority:** P3 — Low (reduced from P2) **Labels:** `enhancement`, `governance`, `spec` **Blocked by:** #002 (maintenance-coordinator agent) @@ -129,7 +129,18 @@ Add to `CONTRIBUTING.md` or create `docs/RULES_GOVERNANCE.md`: --- +## Note + +**Status: Reduced priority — P3** (2026-03-21, downgraded from P2) + +Kit-based domain filtering (PR #432) significantly reduces the governance burden for `rules.yaml`. Because irrelevant domains are no longer generated for projects (a JS-only project no longer gets dotnet/rust/python rule files), rules.yaml only needs active stewardship for domains that are actually in use. This removes the urgency of the full governance workflow described above. + +The ownership and review process is still valuable long-term, but the immediate risk of rule drift affecting end users is lower. Full implementation (protect-templates hook change, CODEOWNERS, staleness check, governance docs) can proceed at reduced priority when bandwidth allows. + +--- + ## Related - Umbrella: `.github/ISSUES/agent-maintainer-proposal.md` - Depends-on: #002 +- Related: `.github/ISSUES/025-trae-rules-revisit.md` (domain filtering reduces noise) diff --git a/.github/ISSUES/006-reverse-spec-mismatch.md b/.github/ISSUES/006-reverse-spec-mismatch.md index 48b36246..434e9b1b 100644 --- a/.github/ISSUES/006-reverse-spec-mismatch.md +++ b/.github/ISSUES/006-reverse-spec-mismatch.md @@ -151,9 +151,30 @@ const inSpecNotCli = specCommands.filter(c => !cliCommands.includes(c)); ## Acceptance Criteria -- [ ] All 8 commands either added to `commands.yaml` or documented as intentionally excluded -- [ ] `validate.mjs` checks for CLI-spec command parity -- [ ] No drift warning when running `agentkit validate` +- [x] All 8 commands either added to `commands.yaml` or documented as intentionally excluded + - `init` added as `type: framework` with full prompt/flags documentation + - `sync` updated from `type: utility` to `type: framework`; AgentKit Forge → Retort rename + - `spec-validate`, `add`, `remove`, `list`, `tasks`, `delegate` documented in header NOTE block + - `spec-validator.mjs` updated to accept `framework` as a valid command type +- [x] `validate.mjs` checks for CLI-spec command parity + - Phase 10 added to `validate.mjs`: loads commands.yaml, defines `FRAMEWORK_COMMANDS`, cross-references `CLI_COMMANDS` set, warns (not fails) on unexpected gaps +- [x] No drift warning when running `agentkit validate` + - Parity check emits WARN entries only; does not block on framework-internal commands + +--- + +## Resolution + +**Status: Resolved** (2026-03-21) + +Addressed in `feat(validate): add CLI-spec command parity check` (PR #432, `feat/kit-domain-selection-onboarding`): + +- `type: framework` added to `VALID_COMMAND_TYPES` in `spec-validator.mjs` +- `init` command added to `commands.yaml` with full kit-selection documentation +- `sync` command type corrected from `utility` to `framework`; header comment documents intentionally-excluded CLI commands +- Phase 10 (CLI-spec parity check) added to `validate.mjs` — warns on unexpected gaps between `CLI_COMMANDS` and `commands.yaml` + +All 8 framework-internal commands are now either formally documented in `commands.yaml` (as `type: framework`) or explicitly acknowledged in the header block. No drift warning when running `agentkit validate`. --- diff --git a/.github/ISSUES/025-trae-rules-revisit.md b/.github/ISSUES/025-trae-rules-revisit.md index 1e4de55c..fe004e13 100644 --- a/.github/ISSUES/025-trae-rules-revisit.md +++ b/.github/ISSUES/025-trae-rules-revisit.md @@ -42,6 +42,16 @@ Areas to revisit: --- +## Resolution + +**Status: Partially resolved** (2026-03-21) + +Kit-based domain filtering (`filterDomainsByStack()` in `template-utils.mjs`, PR #432) directly addresses the core noise problem: only domains relevant to the project's declared stack are generated. A TypeScript-only project now receives typescript + universal domains — not dotnet, rust, python, or blockchain rule files. This eliminates the primary source of redundancy and platform noise flagged in this issue. + +Outstanding: the TRAE-specific rule format audit (rule granularity, platform-specific projection, prompt length) remains a follow-up task and has not been addressed. + +--- + ## Related - TRAE docs: https://docs.trae.ai/ide/rules?_lang=en diff --git a/.github/ISSUES/026-trae-skills-revisit.md b/.github/ISSUES/026-trae-skills-revisit.md index 4dfaedf6..430a815a 100644 --- a/.github/ISSUES/026-trae-skills-revisit.md +++ b/.github/ISSUES/026-trae-skills-revisit.md @@ -33,6 +33,17 @@ Areas to revisit: --- +## Note + +**Status: In progress / follow-up needed** (2026-03-21) + +Kit-based domain filtering (PR #432) reduces generated output volume by only activating domains relevant to the project's declared stack. The same principle applies to skill generation — language-specific skills should only be emitted for active language kits. This is a natural follow-up to the domain filtering work. + +The TRAE-specific skill format audit (naming, discoverability, platform differences) remains outstanding and should be scheduled in the next sprint. + +--- + ## Related - TRAE docs: https://docs.trae.ai/ide/skills?_lang=en +- Related: `.github/ISSUES/025-trae-rules-revisit.md` (same filtering principle) diff --git a/.github/ISSUES/027-trae-agents-revisit.md b/.github/ISSUES/027-trae-agents-revisit.md index 602b3163..c0bab958 100644 --- a/.github/ISSUES/027-trae-agents-revisit.md +++ b/.github/ISSUES/027-trae-agents-revisit.md @@ -50,7 +50,18 @@ Determine whether AgentKit Forge should emit TRAE-ready agent artifacts directly --- +## Note + +**Status: Deferred** (2026-03-21) + +Issue #040 (`elegance-guidelines`) from PR #432 improves agent quality through per-agent design guidance, independent of platform. The kit-based domain filtering work makes agent-related generation more stack-aware. However, TRAE-specific agent packaging (one-click import format, metadata requirements, export model) has not been addressed and remains a follow-up. + +Agent catalog filtering by active kit is a natural next enhancement — defer to after the TRAE format audit is completed. Reference the domain filtering approach (`filterDomainsByStack()`) as the model to follow. + +--- + ## Related - TRAE docs: https://docs.trae.ai/ide/agent-overview?_lang=en - TRAE docs: https://docs.trae.ai/ide/custom-agents-ready-for-one-click-import +- Related: `.github/ISSUES/040-agents-should-consider-architectural-elegance.md` (elegance field merged) diff --git a/.github/ISSUES/040-agents-should-consider-architectural-elegance.md b/.github/ISSUES/040-agents-should-consider-architectural-elegance.md index 71c27c9d..0e278f4b 100644 --- a/.github/ISSUES/040-agents-should-consider-architectural-elegance.md +++ b/.github/ISSUES/040-agents-should-consider-architectural-elegance.md @@ -62,3 +62,18 @@ This change is inspired by recent code review feedback where technically correct - Update generated files via `pnpm -C .agentkit agentkit:sync` **IMPORTANT**: Do not edit generated files directly. All spec changes must be made in `.agentkit/spec/agents.yaml` and regenerated via the sync command. Files marked "GENERATED by AgentKit Forge — DO NOT EDIT" must not be modified directly. Any engine/template changes should be submitted as a PR to the agentkit-forge repository. + +--- + +## Resolution + +**Status: Resolved** (2026-03-21) + +Implemented in `feat(init): kit-based wizard with dry-run, elegance-guidelines, framework...` (PR #432, `feat/kit-domain-selection-onboarding`): + +- `elegance-guidelines` field added to `agents.yaml` schema and documented in the header with examples +- Initial guidelines populated for core engineering agents (backend, frontend, infra, devops) covering single-responsibility, thin abstractions, composition patterns, and consistent naming +- `spec-validator.mjs` already allowed unknown fields — no change needed +- Sync run confirmed compatibility; no generated file breakage + +The `elegance-guidelines` field is now part of every agent's persona definition, alongside existing `conventions` and `anti-patterns` fields. From 08c8d52479c6692950c67d22db87afaa5d67bbf3 Mon Sep 17 00:00:00 2001 From: Jurie Smit Date: Sat, 21 Mar 2026 05:56:59 +0200 Subject: [PATCH 2/2] feat(rename): rebrand CLI from agentkit to retort with deprecated alias (#436) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - .agentkit/package.json: name retort-runtime, add retort:* scripts (agentkit:* scripts kept as deprecated aliases for one release cycle) - package.json: name retort-root, add retort:* root scripts, ak:* scripts updated to call retort:* internally - cli.mjs: banner and log prefix updated to Retort/[retort:] - template-utils.mjs, synchronize.mjs: GENERATED header now reads "GENERATED by Retort" (validate.mjs accepts both old and new) - 124 template files: AgentKit Forge → Retort, agentkit:sync → retort:sync - 38 engine source files: AgentKit → Retort throughout - Test suite: all assertions updated (cli, sync-integration, template-utils, brand-resolver tests) Rationale: "agentkit" is a commodity name dominated by Anthropic's own AgentKit/Agent SDK tooling. "retort" is unique, distinctive, and aligns with the repo identity. Co-authored-by: Claude Sonnet 4.6 --- .../src/__tests__/brand-resolver.test.mjs | 2 +- .../engines/node/src/__tests__/cli.test.mjs | 16 +- .../src/__tests__/sync-integration.test.mjs | 44 +- .../src/__tests__/template-utils.test.mjs | 10 +- .agentkit/engines/node/src/agent-analysis.mjs | 4 +- .../engines/node/src/agent-integration.mjs | 2 +- .agentkit/engines/node/src/backlog-store.mjs | 4 +- .agentkit/engines/node/src/backlog-viewer.mjs | 2 +- .agentkit/engines/node/src/brand-resolver.mjs | 2 +- .agentkit/engines/node/src/budget-guard.mjs | 2 +- .agentkit/engines/node/src/check.mjs | 2 +- .agentkit/engines/node/src/cli.mjs | 22 +- .agentkit/engines/node/src/cost-tracker.mjs | 4 +- .agentkit/engines/node/src/discover.mjs | 2 +- .agentkit/engines/node/src/doctor.mjs | 6 +- .agentkit/engines/node/src/event-emitter.mjs | 2 +- .agentkit/engines/node/src/events.mjs | 2 +- .../engines/node/src/expansion-analyzer.mjs | 2 +- .../engines/node/src/feature-manager.mjs | 2 +- .agentkit/engines/node/src/github-adapter.mjs | 2 +- .agentkit/engines/node/src/handoff.mjs | 2 +- .agentkit/engines/node/src/healthcheck.mjs | 6 +- .agentkit/engines/node/src/import-issues.mjs | 2 +- .agentkit/engines/node/src/init.mjs | 4 +- .../engines/node/src/issue-normalizer.mjs | 2 +- .agentkit/engines/node/src/linear-adapter.mjs | 2 +- .agentkit/engines/node/src/orchestrator.mjs | 4 +- .agentkit/engines/node/src/plan-runner.mjs | 2 +- .../engines/node/src/project-completeness.mjs | 2 +- .agentkit/engines/node/src/review-runner.mjs | 2 +- .agentkit/engines/node/src/runner.mjs | 2 +- .agentkit/engines/node/src/spec-validator.mjs | 2 +- .../engines/node/src/suggestion-store.mjs | 2 +- .../engines/node/src/sync-backlog-runner.mjs | 2 +- .agentkit/engines/node/src/sync-guard.mjs | 2 +- .agentkit/engines/node/src/synchronize.mjs | 106 +- .agentkit/engines/node/src/task-cli.mjs | 2 +- .agentkit/engines/node/src/task-protocol.mjs | 4 +- .agentkit/engines/node/src/template-utils.mjs | 6 +- .agentkit/engines/node/src/tool-manager.mjs | 2 +- .../engines/node/src/tracker-adapter.mjs | 2 +- .agentkit/engines/node/src/validate.mjs | 4 +- .../engines/node/src/weighted-scorer.mjs | 2 +- .agentkit/package.json | 18 +- .agentkit/templates/ai/continuerules | 4 +- .agentkit/templates/ai/cursorrules | 4 +- .agentkit/templates/ai/windsurfrules | 4 +- .agentkit/templates/claude/CLAUDE.md | 10 +- .agentkit/templates/claude/commands/cost.md | 2 +- .agentkit/templates/claude/commands/doctor.md | 2 +- .agentkit/templates/claude/commands/expand.md | 4 +- .../claude/commands/feature-configure.md | 2 +- .../claude/commands/feature-review.md | 2 +- .../claude/commands/project-review.md | 2 +- .agentkit/templates/claude/commands/review.md | 2 +- .agentkit/templates/claude/commands/start.md | 10 +- .agentkit/templates/claude/commands/sync.md | 8 +- .../templates/claude/commands/validate.md | 4 +- .../claude/hooks/protect-templates.ps1 | 4 +- .../claude/hooks/protect-templates.sh | 4 +- .../templates/claude/rules/agent-conduct.md | 8 +- .../templates/claude/rules/blockchain.md | 4 +- .agentkit/templates/claude/rules/ci-cd.md | 4 +- .../claude/rules/dependency-management.md | 4 +- .../templates/claude/rules/documentation.md | 8 +- .agentkit/templates/claude/rules/dotnet.md | 4 +- .../templates/claude/rules/git-workflow.md | 8 +- .agentkit/templates/claude/rules/iac.md | 4 +- .agentkit/templates/claude/rules/python.md | 4 +- .agentkit/templates/claude/rules/quality.md | 4 +- .agentkit/templates/claude/rules/rust.md | 4 +- .agentkit/templates/claude/rules/security.md | 4 +- .../claude/rules/template-protection.md | 14 +- .agentkit/templates/claude/rules/testing.md | 4 +- .../templates/claude/rules/typescript.md | 4 +- .agentkit/templates/claude/state/schema.json | 2 +- .../copilot/agents/TEMPLATE.agent.md | 4 +- .../templates/copilot/copilot-instructions.md | 4 +- .../copilot/prompts/TEMPLATE.prompt.md | 2 +- .../templates/cursor/commands/TEMPLATE.md | 2 +- .../cursor/rules/project-context.mdc | 4 +- .agentkit/templates/cursor/teams/TEMPLATE.mdc | 4 +- .agentkit/templates/docs/README.md | 10 +- .agentkit/templates/docs/api/01_overview.md | 4 +- .agentkit/templates/docs/api/02_endpoints.md | 4 +- .../templates/docs/api/03_authentication.md | 4 +- .agentkit/templates/docs/api/04_examples.md | 4 +- .agentkit/templates/docs/api/05_errors.md | 4 +- .agentkit/templates/docs/api/06_versioning.md | 4 +- .agentkit/templates/docs/api/README.md | 4 +- .../docs/architecture/01_overview.md | 4 +- .../templates/docs/architecture/README.md | 4 +- .../decisions/01-adopt-agentkit-forge.md | 14 +- .../02-fallback-policy-tokens-problem.md | 4 +- .../decisions/03-tooling-strategy.md | 6 +- ...-static-security-analysis-depth-tooling.md | 4 +- ...pendency-supply-chain-detection-tooling.md | 4 +- ...-quality-maintainability-signal-tooling.md | 4 +- .../docs/architecture/decisions/README.md | 4 +- .../docs/architecture/diagrams/README.md | 4 +- .../architecture/specs/01_functional_spec.md | 4 +- .../architecture/specs/02_technical_spec.md | 4 +- .../docs/architecture/specs/03_api_spec.md | 4 +- .../docs/architecture/specs/04_data_models.md | 4 +- .../docs/architecture/specs/README.md | 4 +- .../templates/docs/engineering/01_setup.md | 4 +- .../docs/engineering/02_coding_standards.md | 4 +- .../templates/docs/engineering/03_testing.md | 4 +- .../docs/engineering/04_git_workflow.md | 4 +- .../templates/docs/engineering/05_security.md | 4 +- .../docs/engineering/06_pr_documentation.md | 4 +- .../docs/engineering/07_changelog.md | 4 +- .../templates/docs/engineering/README.md | 4 +- .agentkit/templates/docs/history/README.md | 4 +- .../docs/integrations/01_external_apis.md | 4 +- .../docs/integrations/02_webhooks.md | 4 +- .../templates/docs/integrations/03_sdk.md | 4 +- .../templates/docs/integrations/README.md | 4 +- .../docs/operations/01_deployment.md | 4 +- .../docs/operations/02_monitoring.md | 4 +- .../docs/operations/03_incident_response.md | 4 +- .../docs/operations/04_troubleshooting.md | 4 +- .../templates/docs/operations/05_slos_slis.md | 4 +- .agentkit/templates/docs/operations/README.md | 4 +- .agentkit/templates/docs/product/01_prd.md | 4 +- .../templates/docs/product/02_user_stories.md | 4 +- .../templates/docs/product/03_roadmap.md | 4 +- .../templates/docs/product/04_personas.md | 4 +- .agentkit/templates/docs/product/README.md | 4 +- .../templates/docs/reference/01_glossary.md | 10 +- .agentkit/templates/docs/reference/02_faq.md | 10 +- .../templates/docs/reference/03_changelog.md | 4 +- .../docs/reference/04_contributing.md | 4 +- .agentkit/templates/docs/reference/README.md | 4 +- .agentkit/templates/gemini/config.yaml | 2 +- .agentkit/templates/github/CODEOWNERS | 4 +- .agentkit/templates/github/scripts/README.md | 10 +- .../github/scripts/resolve-merge.ps1 | 4 +- .../templates/github/scripts/resolve-merge.sh | 4 +- .../scripts/setup-branch-protection.ps1 | 6 +- .../github/scripts/setup-branch-protection.sh | 6 +- .../workflows/breaking-change-detection.yml | 4 +- .../github/workflows/coverage-report.yml | 4 +- .../github/workflows/dependency-audit.yml | 4 +- .../workflows/documentation-quality.yml | 4 +- .../workflows/documentation-validation.yml | 4 +- .../github/workflows/pr-validation.yml | 4 +- .../workflows/retrospective-quality.yml | 4 +- .agentkit/templates/headers/GENERATED.md | 4 +- .../templates/language-instructions/README.md | 4 +- .agentkit/templates/renovate/renovate.json | 2 +- .agentkit/templates/root/AGENT_BACKLOG.md | 8 +- .agentkit/templates/root/AGENT_TEAMS.md | 2 +- .agentkit/templates/root/CHANGELOG.md | 4 +- .agentkit/templates/root/COMMAND_GUIDE.md | 4 +- .agentkit/templates/root/CONTRIBUTING.md | 12 +- .agentkit/templates/root/MIGRATIONS.md | 14 +- .agentkit/templates/root/QUALITY_GATES.md | 6 +- .agentkit/templates/root/RUNBOOK_AI.md | 32 +- .agentkit/templates/root/SECURITY.md | 4 +- .../templates/root/UNIFIED_AGENT_TEAMS.md | 10 +- .../scripts/consolidate-branches.ps1 | 4 +- .agentkit/templates/scripts/resolve-merge.ps1 | 2 +- .agentkit/templates/scripts/resolve-merge.sh | 2 +- .../setup-agentkit-branch-governance.ps1 | 2 +- .../setup-agentkit-branch-governance.sh | 2 +- .agentkit/templates/windsurf/rules/project.md | 4 +- .../templates/windsurf/teams/TEMPLATE.md | 4 +- .../focused-colden/.agentkit/.manifest.json | 1873 +++++++++++ .../.agentkit/.scaffold-cache/AGENT_TEAMS.md | 80 + .../.agentkit/.scaffold-cache/docs/README.md | 47 + .../.scaffold-cache/docs/api/README.md | 14 + .../docs/architecture/README.md | 12 + .../docs/architecture/decisions/README.md | 16 + .../docs/architecture/diagrams/README.md | 16 + .../docs/architecture/specs/README.md | 12 + .../docs/engineering/README.md | 16 + .../.scaffold-cache/docs/history/README.md | 67 + .../docs/history/bug-fixes/README.md | 8 + .../docs/history/features/README.md | 8 + .../docs/history/implementations/README.md | 8 + .../docs/history/issues/README.md | 42 + .../docs/history/lessons-learned/README.md | 11 + .../docs/history/migrations/README.md | 8 + .../docs/integrations/README.md | 11 + .../.scaffold-cache/docs/operations/README.md | 13 + .../.scaffold-cache/docs/product/README.md | 12 + .../.scaffold-cache/docs/reference/README.md | 14 + .../.scaffold-cache/scripts/analyze-agents.sh | 20 + .../check-documentation-requirement.sh | 115 + .../scripts/consolidate-branches.sh | 289 ++ .../.scaffold-cache/scripts/create-doc.sh | 170 + .../.scaffold-cache/scripts/resolve-merge.sh | 162 + .../setup-agentkit-branch-governance.sh | 128 + .../.scaffold-cache/scripts/sync-issues.sh | 180 ++ .../.scaffold-cache/scripts/sync-split-pr.sh | 113 + .../scripts/update-changelog.sh | 122 + .../scripts/validate-documentation.sh | 83 + .../scripts/validate-numbering.sh | 70 + .../.agentkit/logs/usage-2026-03-16.jsonl | 8 + .../.agentkit/logs/usage-2026-03-17.jsonl | 24 + .../.agentkit/package-lock.json | 2764 +++++++++++++++++ .../state/orchestrator.json.template | 25 + .../.agentkit/state/schema.json | 138 + .../.claude/settings.local.json | 40 + .../focused-colden/.claude/state/events.log | 105 + .../.claude/state/orchestrator.json | 72 + .../.claude/state/orchestrator.json.template | 25 + .../focused-colden/.claude/state/schema.json | 138 + .../state/tasks/task-p0-ci-pipeline.json | 22 + .../state/tasks/task-p0-test-framework.json | 0 .../state/tasks/task-p1-api-routes.json | 24 + .../state/tasks/task-p1-db-schema.json | 25 + .../state/tasks/task-p1-health-check.json | 24 + .../tasks/task-p1-migration-tooling.json | 24 + .../state/tasks/task-p1-staging-env.json | 24 + .../focused-colden/package-lock.json | 31 + .../tender-margulis/.agentkit/.manifest.json | 1873 +++++++++++ .../.agentkit/.scaffold-cache/AGENT_TEAMS.md | 80 + .../.agentkit/.scaffold-cache/docs/README.md | 47 + .../.scaffold-cache/docs/api/README.md | 14 + .../docs/architecture/README.md | 12 + .../docs/architecture/decisions/README.md | 16 + .../docs/architecture/diagrams/README.md | 16 + .../docs/architecture/specs/README.md | 12 + .../docs/engineering/README.md | 16 + .../.scaffold-cache/docs/history/README.md | 67 + .../docs/history/bug-fixes/README.md | 8 + .../docs/history/features/README.md | 8 + .../docs/history/implementations/README.md | 8 + .../docs/history/issues/README.md | 42 + .../docs/history/lessons-learned/README.md | 11 + .../docs/history/migrations/README.md | 8 + .../docs/integrations/README.md | 11 + .../.scaffold-cache/docs/operations/README.md | 13 + .../.scaffold-cache/docs/product/README.md | 12 + .../.scaffold-cache/docs/reference/README.md | 14 + .../.scaffold-cache/scripts/analyze-agents.sh | 20 + .../check-documentation-requirement.sh | 115 + .../scripts/consolidate-branches.sh | 289 ++ .../.scaffold-cache/scripts/create-doc.sh | 170 + .../.scaffold-cache/scripts/resolve-merge.sh | 162 + .../setup-agentkit-branch-governance.sh | 128 + .../.scaffold-cache/scripts/sync-issues.sh | 180 ++ .../.scaffold-cache/scripts/sync-split-pr.sh | 113 + .../scripts/update-changelog.sh | 122 + .../scripts/validate-documentation.sh | 83 + .../scripts/validate-numbering.sh | 70 + .../.agentkit/logs/usage-2026-03-16.jsonl | 16 + .../.agentkit/logs/usage-2026-03-17.jsonl | 32 + .../.agentkit/package-lock.json | 2764 +++++++++++++++++ .../state/orchestrator.json.template | 25 + .../.agentkit/state/schema.json | 138 + .../.claude/settings.local.json | 37 + .../tender-margulis/.claude/state/events.log | 104 + .../.claude/state/orchestrator.json | 72 + .../.claude/state/orchestrator.json.template | 25 + .../tender-margulis/.claude/state/schema.json | 138 + .../state/tasks/task-p0-ci-pipeline.json | 22 + .../state/tasks/task-p0-test-framework.json | 0 .../state/tasks/task-p1-api-routes.json | 24 + .../state/tasks/task-p1-db-schema.json | 25 + .../state/tasks/task-p1-health-check.json | 24 + .../tasks/task-p1-migration-tooling.json | 24 + .../state/tasks/task-p1-staging-env.json | 24 + .../tender-margulis/package-lock.json | 31 + package.json | 14 +- 267 files changed, 14993 insertions(+), 457 deletions(-) create mode 100644 .claude/worktrees/focused-colden/.agentkit/.manifest.json create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/AGENT_TEAMS.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/api/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/decisions/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/diagrams/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/specs/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/engineering/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/bug-fixes/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/features/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/implementations/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/issues/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/lessons-learned/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/migrations/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/integrations/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/operations/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/product/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/reference/README.md create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/analyze-agents.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/check-documentation-requirement.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/consolidate-branches.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/create-doc.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/resolve-merge.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/setup-agentkit-branch-governance.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/sync-issues.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/sync-split-pr.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/update-changelog.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/validate-documentation.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/validate-numbering.sh create mode 100644 .claude/worktrees/focused-colden/.agentkit/logs/usage-2026-03-16.jsonl create mode 100644 .claude/worktrees/focused-colden/.agentkit/logs/usage-2026-03-17.jsonl create mode 100644 .claude/worktrees/focused-colden/.agentkit/package-lock.json create mode 100644 .claude/worktrees/focused-colden/.agentkit/state/orchestrator.json.template create mode 100644 .claude/worktrees/focused-colden/.agentkit/state/schema.json create mode 100644 .claude/worktrees/focused-colden/.claude/settings.local.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/events.log create mode 100644 .claude/worktrees/focused-colden/.claude/state/orchestrator.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/orchestrator.json.template create mode 100644 .claude/worktrees/focused-colden/.claude/state/schema.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/tasks/task-p0-ci-pipeline.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/tasks/task-p0-test-framework.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/tasks/task-p1-api-routes.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/tasks/task-p1-db-schema.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/tasks/task-p1-health-check.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/tasks/task-p1-migration-tooling.json create mode 100644 .claude/worktrees/focused-colden/.claude/state/tasks/task-p1-staging-env.json create mode 100644 .claude/worktrees/focused-colden/package-lock.json create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.manifest.json create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/AGENT_TEAMS.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/api/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/decisions/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/diagrams/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/specs/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/engineering/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/bug-fixes/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/features/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/implementations/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/issues/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/lessons-learned/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/migrations/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/integrations/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/operations/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/product/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/reference/README.md create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/analyze-agents.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/check-documentation-requirement.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/consolidate-branches.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/create-doc.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/resolve-merge.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/setup-agentkit-branch-governance.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/sync-issues.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/sync-split-pr.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/update-changelog.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/validate-documentation.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/validate-numbering.sh create mode 100644 .claude/worktrees/tender-margulis/.agentkit/logs/usage-2026-03-16.jsonl create mode 100644 .claude/worktrees/tender-margulis/.agentkit/logs/usage-2026-03-17.jsonl create mode 100644 .claude/worktrees/tender-margulis/.agentkit/package-lock.json create mode 100644 .claude/worktrees/tender-margulis/.agentkit/state/orchestrator.json.template create mode 100644 .claude/worktrees/tender-margulis/.agentkit/state/schema.json create mode 100644 .claude/worktrees/tender-margulis/.claude/settings.local.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/events.log create mode 100644 .claude/worktrees/tender-margulis/.claude/state/orchestrator.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/orchestrator.json.template create mode 100644 .claude/worktrees/tender-margulis/.claude/state/schema.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/tasks/task-p0-ci-pipeline.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/tasks/task-p0-test-framework.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-api-routes.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-db-schema.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-health-check.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-migration-tooling.json create mode 100644 .claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-staging-env.json create mode 100644 .claude/worktrees/tender-margulis/package-lock.json diff --git a/.agentkit/engines/node/src/__tests__/brand-resolver.test.mjs b/.agentkit/engines/node/src/__tests__/brand-resolver.test.mjs index 646e579d..27c2e80c 100644 --- a/.agentkit/engines/node/src/__tests__/brand-resolver.test.mjs +++ b/.agentkit/engines/node/src/__tests__/brand-resolver.test.mjs @@ -349,7 +349,7 @@ describe('mergeThemeIntoSettings', () => { 'statusBar.background': '#1976D2', }; const meta = { - brand: 'AgentKit Forge', + brand: 'Retort', mode: 'dark', scheme: 'dark', tier: 'full', diff --git a/.agentkit/engines/node/src/__tests__/cli.test.mjs b/.agentkit/engines/node/src/__tests__/cli.test.mjs index a010e0d3..b66d2ffd 100644 --- a/.agentkit/engines/node/src/__tests__/cli.test.mjs +++ b/.agentkit/engines/node/src/__tests__/cli.test.mjs @@ -31,7 +31,7 @@ describe('CLI', () => { it('shows help with --help', () => { const result = run('--help'); expect(result.exitCode).toBe(0); - expect(result.stdout).toContain('AgentKit Forge'); + expect(result.stdout).toContain('Retort'); expect(result.stdout).toContain('Commands:'); expect(result.stdout).toContain('init'); expect(result.stdout).toContain('sync'); @@ -41,18 +41,18 @@ describe('CLI', () => { it('shows help with -h', () => { const result = run('-h'); expect(result.exitCode).toBe(0); - expect(result.stdout).toContain('AgentKit Forge'); + expect(result.stdout).toContain('Retort'); }); it('shows help with no arguments', () => { const result = run(); expect(result.exitCode).toBe(0); - expect(result.stdout).toContain('AgentKit Forge'); + expect(result.stdout).toContain('Retort'); }); it('shows version from package.json', () => { const result = run('--help'); - expect(result.stdout).toContain(`AgentKit Forge v${PKG_VERSION}`); + expect(result.stdout).toContain(`Retort v${PKG_VERSION}`); }); it('rejects unknown commands with exit code 1', () => { @@ -170,14 +170,14 @@ describe('CLI', () => { // --status is boolean for orchestrate; --help exits before running the command const result = run('orchestrate', '--status', '--help'); expect(result.exitCode).toBe(0); - expect(result.stdout).toContain('AgentKit Forge'); + expect(result.stdout).toContain('Retort'); }); it('tasks --status accepts a string value', () => { // --status is string for tasks; --help exits before running the command const result = run('tasks', '--status', 'submitted', '--help'); expect(result.exitCode).toBe(0); - expect(result.stdout).toContain('AgentKit Forge'); + expect(result.stdout).toContain('Retort'); }); it('tasks --status without a value exits non-zero', () => { @@ -197,14 +197,14 @@ describe('CLI', () => { // -q is a short alias for --quiet; --help exits before running sync const result = run('sync', '-q', '--help'); expect(result.exitCode).toBe(0); - expect(result.stdout).toContain('AgentKit Forge'); + expect(result.stdout).toContain('Retort'); }); it('sync -v (short for --verbose) does not error', () => { // -v is a short alias for --verbose; --help exits before running sync const result = run('sync', '-v', '--help'); expect(result.exitCode).toBe(0); - expect(result.stdout).toContain('AgentKit Forge'); + expect(result.stdout).toContain('Retort'); }); }); }); diff --git a/.agentkit/engines/node/src/__tests__/sync-integration.test.mjs b/.agentkit/engines/node/src/__tests__/sync-integration.test.mjs index e34ecc23..45fb5920 100644 --- a/.agentkit/engines/node/src/__tests__/sync-integration.test.mjs +++ b/.agentkit/engines/node/src/__tests__/sync-integration.test.mjs @@ -220,7 +220,7 @@ describe('syncCopilotPrompts (via runSync --only copilot)', () => { resolve(projectRoot, '.github', 'prompts', 'build.prompt.md'), 'utf-8' ); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('prompt files contain frontmatter', async () => { @@ -331,7 +331,7 @@ describe('syncGemini (via runSync --only gemini)', () => { it('GEMINI.md contains GENERATED header', async () => { const content = readFileSync(resolve(projectRoot, 'GEMINI.md'), 'utf-8'); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('GEMINI.md contains project template vars', async () => { @@ -369,7 +369,7 @@ describe('syncCodexSkills (via runSync --only codex)', () => { 'utf-8' ); expect(content).toContain('build'); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('codex skills resolve {{stateDir}} to .agents/state', { timeout: 15000 }, async () => { @@ -458,7 +458,7 @@ describe('syncCursorCommands (via runSync --only cursor)', () => { it('cursor command files contain GENERATED header', async () => { const content = readFileSync(resolve(projectRoot, '.cursor', 'commands', 'build.md'), 'utf-8'); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('cursor commands resolve {{stateDir}} to .cursor/state', { timeout: 15000 }, async () => { @@ -515,7 +515,7 @@ describe('syncWarp (via runSync --only warp)', () => { it('WARP.md contains GENERATED header', async () => { const content = readFileSync(resolve(projectRoot, 'WARP.md'), 'utf-8'); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('WARP.md contains Warp Instructions heading', async () => { @@ -577,7 +577,7 @@ describe('syncRooRules (via runSync --only roo)', () => { it('roo rule files contain GENERATED header', async () => { const content = readFileSync(resolve(projectRoot, '.roo', 'rules', 'typescript.md'), 'utf-8'); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); }); @@ -681,7 +681,7 @@ describe('--quiet, --verbose, --no-clean, --diff flags', () => { try { await runSync({ agentkitRoot: AGENTKIT_ROOT, projectRoot, flags: { diff: true } }); const out = log.join('\n'); - expect(out).toContain('[agentkit:sync] Diff mode'); + expect(out).toContain('[retort:sync] Diff mode'); expect(out).toContain('create '); expect(out).toContain('Diff:'); expect(existsSync(join(projectRoot, 'CONTRIBUTING.md'))).toBe(false); @@ -842,7 +842,7 @@ describe('syncCopilotInstructions — testing & QA templates (via runSync --only resolve(projectRoot, '.github', 'instructions', 'testing.md'), 'utf-8' ); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('testing.md contains AAA pattern guidance', () => { @@ -918,7 +918,7 @@ describe('syncClaudeRules — testing template (via runSync --only claude)', () it('testing.md contains GENERATED header', () => { const content = readFileSync(resolve(projectRoot, '.claude', 'rules', 'testing.md'), 'utf-8'); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('testing.md resolves project name placeholder', () => { @@ -979,7 +979,7 @@ describe('syncLanguageInstructions — generic, multi-platform dynamic generatio 'utf-8' ); expect(content).toContain('TypeScript'); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('domain-specific template is used for rust.md', () => { @@ -988,7 +988,7 @@ describe('syncLanguageInstructions — generic, multi-platform dynamic generatio 'utf-8' ); expect(content).toContain('Rust'); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('ruleConventions from rules.yaml are injected into domain files', () => { @@ -1019,7 +1019,7 @@ describe('syncLanguageInstructions — generic, multi-platform dynamic generatio 'utf-8' ); expect(content).toMatch(/Enforcement Rules|Advisory Rules/); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('no raw Handlebars placeholders remain in generated copilot files', () => { @@ -1067,7 +1067,7 @@ describe('syncLanguageInstructions — claude target output (.claude/rules/langu resolve(projectRoot, '.claude', 'rules', 'languages', 'typescript.md'), 'utf-8' ); - expect(content).toContain('GENERATED by AgentKit Forge'); + expect(content).toContain('GENERATED by Retort'); }); it('no raw Handlebars placeholders remain in generated claude files', () => { @@ -1114,7 +1114,7 @@ describe('syncEditorTheme (brand-driven editor theme)', () => { readFileSync(resolve(projectRoot, '.vscode', 'settings.json'), 'utf-8') ); expect(settings['_agentkit_theme']).toBeDefined(); - expect(settings['_agentkit_theme'].brand).toBe('AgentKit Forge'); + expect(settings['_agentkit_theme'].brand).toBe('Retort'); expect(settings['_agentkit_theme'].mode).toBe('both'); expect(settings['_agentkit_theme'].version).toBe('1.0.0'); }); @@ -1133,7 +1133,7 @@ describe('syncEditorTheme (brand-driven editor theme)', () => { expect(existsSync(settingsPath)).toBe(true); const settings = JSON.parse(readFileSync(settingsPath, 'utf-8')); expect(settings['workbench.colorCustomizations']).toBeDefined(); - expect(settings['_agentkit_theme'].brand).toBe('AgentKit Forge'); + expect(settings['_agentkit_theme'].brand).toBe('Retort'); }); it('generates .windsurf/settings.json with theme colors', () => { @@ -1141,7 +1141,7 @@ describe('syncEditorTheme (brand-driven editor theme)', () => { expect(existsSync(settingsPath)).toBe(true); const settings = JSON.parse(readFileSync(settingsPath, 'utf-8')); expect(settings['workbench.colorCustomizations']).toBeDefined(); - expect(settings['_agentkit_theme'].brand).toBe('AgentKit Forge'); + expect(settings['_agentkit_theme'].brand).toBe('Retort'); }); it('resolved colors are valid hex values', () => { @@ -1197,7 +1197,7 @@ describe('syncEditorTheme — pre-existing settings.json merge', () => { ); expect(settings['workbench.colorCustomizations']).toBeDefined(); expect(settings['_agentkit_theme']).toBeDefined(); - expect(settings['_agentkit_theme'].brand).toBe('AgentKit Forge'); + expect(settings['_agentkit_theme'].brand).toBe('Retort'); }); it('preserves original user-defined keys after merge', () => { @@ -1231,8 +1231,8 @@ describe('syncGitattributes (merge driver sync)', () => { const gitattrsPath = resolve(projectRoot, '.gitattributes'); expect(existsSync(gitattrsPath)).toBe(true); const content = readFileSync(gitattrsPath, 'utf-8'); - expect(content).toContain('# >>> AgentKit Forge merge drivers'); - expect(content).toContain('# <<< AgentKit Forge merge drivers'); + expect(content).toContain('# >>> Retort merge drivers'); + expect(content).toContain('# <<< Retort merge drivers'); expect(content).toContain('merge=agentkit-generated'); }); @@ -1259,7 +1259,7 @@ describe('syncGitattributes (merge driver sync)', () => { expect(updated).toContain('*.pdf binary'); expect(updated).toContain('merge=agentkit-generated'); // Should have exactly one managed section (not duplicated) - const startCount = (updated.match(/# >>> AgentKit Forge merge drivers/g) || []).length; + const startCount = (updated.match(/# >>> Retort merge drivers/g) || []).length; expect(startCount).toBe(1); }); @@ -1269,8 +1269,8 @@ describe('syncGitattributes (merge driver sync)', () => { await runSync({ agentkitRoot: AGENTKIT_ROOT, projectRoot, flags: { quiet: true } }); const content = readFileSync(gitattrsPath, 'utf-8'); - const startCount = (content.match(/# >>> AgentKit Forge merge drivers/g) || []).length; - const endCount = (content.match(/# <<< AgentKit Forge merge drivers/g) || []).length; + const startCount = (content.match(/# >>> Retort merge drivers/g) || []).length; + const endCount = (content.match(/# <<< Retort merge drivers/g) || []).length; expect(startCount).toBe(1); expect(endCount).toBe(1); }); diff --git a/.agentkit/engines/node/src/__tests__/template-utils.test.mjs b/.agentkit/engines/node/src/__tests__/template-utils.test.mjs index 253c5e3a..64b87b26 100644 --- a/.agentkit/engines/node/src/__tests__/template-utils.test.mjs +++ b/.agentkit/engines/node/src/__tests__/template-utils.test.mjs @@ -317,7 +317,7 @@ describe('getCommentStyle', () => { describe('getGeneratedHeader', () => { it('generates a markdown header', () => { const header = getGeneratedHeader('0.1.0', 'my-repo', '.md'); - expect(header).toContain('GENERATED by AgentKit Forge v0.1.0'); + expect(header).toContain('GENERATED by Retort v0.1.0'); expect(header).toContain('.agentkit/overlays/my-repo'); expect(header).toContain('pnpm -C .agentkit agentkit:sync'); }); @@ -328,7 +328,7 @@ describe('getGeneratedHeader', () => { it('generates YAML-style header for .yml', () => { const header = getGeneratedHeader('0.1.0', 'my-repo', '.yml'); - expect(header).toContain('# GENERATED by AgentKit Forge v0.1.0'); + expect(header).toContain('# GENERATED by Retort v0.1.0'); }); }); @@ -371,12 +371,12 @@ describe('mergePermissions', () => { describe('insertHeader', () => { it('prepends header to plain content', () => { const result = insertHeader('Hello world', '.yml', '0.1.0', 'test'); - expect(result).toMatch(/^# GENERATED by AgentKit Forge/); + expect(result).toMatch(/^# GENERATED by Retort/); expect(result).toContain('Hello world'); }); it('skips if header already present', () => { - const content = '# GENERATED by AgentKit Forge v0.1.0\nHello'; + const content = '# GENERATED by Retort v0.1.0\nHello'; const result = insertHeader(content, '.yml', '0.1.0', 'test'); expect(result).toBe(content); }); @@ -392,7 +392,7 @@ describe('insertHeader', () => { const content = '---\ntitle: Test\n---\n# Content'; const result = insertHeader(content, '.md', '0.1.0', 'test'); expect(result).toContain('title: Test'); - expect(result).toContain('GENERATED by AgentKit Forge'); + expect(result).toContain('GENERATED by Retort'); expect(result).toContain('# Content'); }); diff --git a/.agentkit/engines/node/src/agent-analysis.mjs b/.agentkit/engines/node/src/agent-analysis.mjs index b1b9462f..7747b58d 100644 --- a/.agentkit/engines/node/src/agent-analysis.mjs +++ b/.agentkit/engines/node/src/agent-analysis.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Agent/Team Relationship Analysis Engine + * Retort — Agent/Team Relationship Analysis Engine * * Loads agent and team specs, builds a relationship graph, and renders * 8 cross-reference matrices plus supplementary analyses (orphans, @@ -808,7 +808,7 @@ export function renderAllMatrices(graph) { const header = [ '# Agent/Team Relationship Matrix', '', - `> Auto-generated by AgentKit Forge analysis engine.`, + `> Auto-generated by Retort analysis engine.`, `> ${graph.agents.length} agents across ${graph.categories.length} categories, ${graph.teams.length} teams.`, '', '---', diff --git a/.agentkit/engines/node/src/agent-integration.mjs b/.agentkit/engines/node/src/agent-integration.mjs index 0561371a..01a26dbb 100644 --- a/.agentkit/engines/node/src/agent-integration.mjs +++ b/.agentkit/engines/node/src/agent-integration.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Agent Integration Engine + * Retort — Agent Integration Engine * Cross-agent notification processing, auto-delegation, coverage tracking, * and acceptance criteria enforcement. * diff --git a/.agentkit/engines/node/src/backlog-store.mjs b/.agentkit/engines/node/src/backlog-store.mjs index 05b1c458..c647447d 100644 --- a/.agentkit/engines/node/src/backlog-store.mjs +++ b/.agentkit/engines/node/src/backlog-store.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Backlog Store + * Retort — Backlog Store * Reads and writes backlog data in both JSON and Markdown formats. */ import { existsSync, readFileSync } from 'fs'; @@ -235,7 +235,7 @@ ${renderTable(completed)} --- -_This backlog is maintained by AgentKit Forge. Use \`/sync-backlog\` to refresh_ +_This backlog is maintained by Retort. Use \`/sync-backlog\` to refresh_ _or \`agentkit import-issues\` to import from external trackers._ `; diff --git a/.agentkit/engines/node/src/backlog-viewer.mjs b/.agentkit/engines/node/src/backlog-viewer.mjs index 76c41ba5..ba850645 100644 --- a/.agentkit/engines/node/src/backlog-viewer.mjs +++ b/.agentkit/engines/node/src/backlog-viewer.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Backlog Viewer + * Retort — Backlog Viewer * Displays a consolidated backlog view with filtering and output format options. */ import yaml from 'js-yaml'; diff --git a/.agentkit/engines/node/src/brand-resolver.mjs b/.agentkit/engines/node/src/brand-resolver.mjs index 8dfbad63..e2ef10c3 100644 --- a/.agentkit/engines/node/src/brand-resolver.mjs +++ b/.agentkit/engines/node/src/brand-resolver.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Brand Resolver + * Retort — Brand Resolver * Resolves brand.yaml color references and validates brand specs. * Pure functions — no file I/O. */ diff --git a/.agentkit/engines/node/src/budget-guard.mjs b/.agentkit/engines/node/src/budget-guard.mjs index 472dbfea..1e9716fc 100644 --- a/.agentkit/engines/node/src/budget-guard.mjs +++ b/.agentkit/engines/node/src/budget-guard.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Budget Guard + * Retort — Budget Guard * Enforcement layer for cost management. Checks session-level budgets * (duration, command count, file modifications) and triggers warnings * or hard stops when thresholds are exceeded. diff --git a/.agentkit/engines/node/src/check.mjs b/.agentkit/engines/node/src/check.mjs index cc653695..f1974b21 100644 --- a/.agentkit/engines/node/src/check.mjs +++ b/.agentkit/engines/node/src/check.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Check Command (Quality Gate Runner) + * Retort — Check Command (Quality Gate Runner) * Auto-detects tech stacks and runs format, lint, typecheck, test, build in sequence. * Outputs a structured results table and logs to events. */ diff --git a/.agentkit/engines/node/src/cli.mjs b/.agentkit/engines/node/src/cli.mjs index 7c1933f3..655f344d 100644 --- a/.agentkit/engines/node/src/cli.mjs +++ b/.agentkit/engines/node/src/cli.mjs @@ -1,6 +1,6 @@ #!/usr/bin/env node /** - * AgentKit Forge CLI Router + * Retort CLI Router * Routes subcommands to their handlers. */ import { spawnSync } from 'child_process'; @@ -209,7 +209,7 @@ function loadCommandFlags(agentkitRoot) { for (const flag of flags) { if (!flagTypes[flag] && !specialCased.has(flag)) { console.warn( - `[agentkit] Warning: flag "--${flag}" is listed for command "${cmd}" ` + + `[retort] Warning: flag "--${flag}" is listed for command "${cmd}" ` + `but has no type definition. Add it to CLI_INTERNAL_FLAG_TYPES or commands.yaml.` ); } @@ -293,7 +293,7 @@ function parseFlags(command, args) { const knownFlags = new Set(Object.keys(options)); for (const token of tokens) { if (token.kind === 'option' && !knownFlags.has(token.name)) { - console.warn(`[agentkit:${command}] Warning: unrecognized flag --${token.name} (ignored)`); + console.warn(`[retort:${command}] Warning: unrecognized flag --${token.name} (ignored)`); } } @@ -306,7 +306,7 @@ function parseFlags(command, args) { function showHelp() { console.log(` -AgentKit Forge v${VERSION} +Retort v${VERSION} Usage: node cli.mjs [options] @@ -371,7 +371,7 @@ Task Delegation: --handoff-to Auto-handoff to team on completion Diagnostics: - doctor Run AgentKit diagnostics and setup checks + doctor Run Retort diagnostics and setup checks --verbose Include detailed diagnostics Backlog & Issue Tracking: @@ -463,7 +463,7 @@ function ensureDependencies(agentkitRoot) { const installCmd = hasPnpm ? 'pnpm' : 'npm'; const installArgs = hasPnpm ? ['install'] : ['install']; console.warn( - `[agentkit] Dependencies not installed. Running ${installCmd} install in .agentkit...` + `[retort] Dependencies not installed. Running ${installCmd} install in .agentkit...` ); const r = spawnSync(installCmd, installArgs, { cwd: agentkitRoot, @@ -472,7 +472,7 @@ function ensureDependencies(agentkitRoot) { }); if (r.status !== 0) { console.error( - `[agentkit] Failed to install dependencies. Run manually: ${installCmd} -C .agentkit install` + `[retort] Failed to install dependencies. Run manually: ${installCmd} -C .agentkit install` ); return false; } @@ -702,7 +702,7 @@ async function main() { const { mkdirSync, writeFileSync } = await import('fs'); mkdirSync(dirname(outputPath), { recursive: true }); writeFileSync(outputPath, content, 'utf-8'); - console.log(`[agentkit:analyze-agents] Matrix written to ${outputPath}`); + console.log(`[retort:analyze-agents] Matrix written to ${outputPath}`); console.log( ` ${graph.agents.length} agents, ${graph.teams.length} teams, ${graph.categories.length} categories` ); @@ -711,7 +711,7 @@ async function main() { default: { if (SLASH_ONLY_COMMANDS.includes(command)) { const cmdFile = resolve(PROJECT_ROOT, '.claude', 'commands', `${command}.md`); - console.log(`[agentkit:${command}] Slash command: /${command}`); + console.log(`[retort:${command}] Slash command: /${command}`); console.log(); console.log(`This is an AI agent slash command. Use it within your AI tool:`); console.log(` Claude Code: /${command}`); @@ -720,14 +720,14 @@ async function main() { if (existsSync(cmdFile)) { console.log(`Command definition: .claude/commands/${command}.md`); } else { - console.log('Run "agentkit sync" first to generate command files.'); + console.log('Run "retort sync" first to generate command files.'); } break; } } } } catch (err) { - console.error(`[agentkit:${command}] Error: ${err.message}`); + console.error(`[retort:${command}] Error: ${err.message}`); if (process.env.DEBUG) { console.error(err.stack); } else { diff --git a/.agentkit/engines/node/src/cost-tracker.mjs b/.agentkit/engines/node/src/cost-tracker.mjs index 4763e895..cfb93442 100644 --- a/.agentkit/engines/node/src/cost-tracker.mjs +++ b/.agentkit/engines/node/src/cost-tracker.mjs @@ -1,9 +1,9 @@ /** - * AgentKit Forge — Cost Tracker + * Retort — Cost Tracker * Session-level tracking via hooks: tracks session start/end, commands invoked, * files changed, and durations. Logs to JSONL files for reporting. * - * Note: AgentKit cannot intercept AI API calls directly, so actual token counts + * Note: Retort cannot intercept AI API calls directly, so actual token counts * are not available. This tracks operational metrics (session duration, commands * run, files modified) which are useful for understanding usage patterns. */ diff --git a/.agentkit/engines/node/src/discover.mjs b/.agentkit/engines/node/src/discover.mjs index 6e91edf8..8f9d4dad 100644 --- a/.agentkit/engines/node/src/discover.mjs +++ b/.agentkit/engines/node/src/discover.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Discover Command + * Retort — Discover Command * Scans the repository to detect tech stacks, project structure, team boundaries, * and build a structured discovery report. */ diff --git a/.agentkit/engines/node/src/doctor.mjs b/.agentkit/engines/node/src/doctor.mjs index ce079cde..e08093b6 100644 --- a/.agentkit/engines/node/src/doctor.mjs +++ b/.agentkit/engines/node/src/doctor.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Doctor + * Retort — Doctor * Repository diagnostics and setup checks. */ import { execSync } from 'child_process'; @@ -312,8 +312,8 @@ export async function runDoctor({ agentkitRoot, projectRoot, flags = {} }) { if (existsSync(gitattrsPath)) { const gitattrs = readFileSync(gitattrsPath, 'utf-8'); const hasMarkers = - gitattrs.includes('# >>> AgentKit Forge merge drivers') && - gitattrs.includes('# <<< AgentKit Forge merge drivers'); + gitattrs.includes('# >>> Retort merge drivers') && + gitattrs.includes('# <<< Retort merge drivers'); const hasMergeRules = gitattrs.includes('merge=agentkit-generated'); if (!hasMergeRules) { diff --git a/.agentkit/engines/node/src/event-emitter.mjs b/.agentkit/engines/node/src/event-emitter.mjs index 22f3deea..3b0153eb 100644 --- a/.agentkit/engines/node/src/event-emitter.mjs +++ b/.agentkit/engines/node/src/event-emitter.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Event Emitter + * Retort — Event Emitter * Shared event logging helper. All agents and handlers should use this module * to write structured JSONL events to .agentkit/state/events.log. */ diff --git a/.agentkit/engines/node/src/events.mjs b/.agentkit/engines/node/src/events.mjs index df356efd..08574217 100644 --- a/.agentkit/engines/node/src/events.mjs +++ b/.agentkit/engines/node/src/events.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Event Logging Compatibility Adapter + * Retort — Event Logging Compatibility Adapter * Wraps event-emitter.mjs to preserve legacy appendEvent/readEvents signatures. * New code should import from event-emitter.mjs directly. */ diff --git a/.agentkit/engines/node/src/expansion-analyzer.mjs b/.agentkit/engines/node/src/expansion-analyzer.mjs index b74e91c6..272e21da 100644 --- a/.agentkit/engines/node/src/expansion-analyzer.mjs +++ b/.agentkit/engines/node/src/expansion-analyzer.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Expansion Analyzer (Phase 1) + * Retort — Expansion Analyzer (Phase 1) * Read-only gap analysis engine that scans the repository and produces * scored, ranked suggestions for missing documentation, tests, security * measures, and architectural improvements. diff --git a/.agentkit/engines/node/src/feature-manager.mjs b/.agentkit/engines/node/src/feature-manager.mjs index 57456298..d96b00e4 100644 --- a/.agentkit/engines/node/src/feature-manager.mjs +++ b/.agentkit/engines/node/src/feature-manager.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Feature Manager + * Retort — Feature Manager * Handles feature resolution, validation, enable/disable, and template variable generation. * * Features are defined in spec/features.yaml and controlled per-repo via overlay settings.yaml. diff --git a/.agentkit/engines/node/src/github-adapter.mjs b/.agentkit/engines/node/src/github-adapter.mjs index ba1c9607..0e7ff360 100644 --- a/.agentkit/engines/node/src/github-adapter.mjs +++ b/.agentkit/engines/node/src/github-adapter.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — GitHub Adapter + * Retort — GitHub Adapter * Fetches issues from GitHub using the `gh` CLI. */ import { execFileSync } from 'child_process'; diff --git a/.agentkit/engines/node/src/handoff.mjs b/.agentkit/engines/node/src/handoff.mjs index e437525e..7c1fa7d9 100644 --- a/.agentkit/engines/node/src/handoff.mjs +++ b/.agentkit/engines/node/src/handoff.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Handoff Generator + * Retort — Handoff Generator * Creates a structured session handoff document with git state, * orchestrator state, and recent activity. */ diff --git a/.agentkit/engines/node/src/healthcheck.mjs b/.agentkit/engines/node/src/healthcheck.mjs index b278adf9..0a7598f8 100644 --- a/.agentkit/engines/node/src/healthcheck.mjs +++ b/.agentkit/engines/node/src/healthcheck.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Healthcheck Command + * Retort — Healthcheck Command * Pre-flight validation: checks tooling availability, dependency installation, * and runs build/test/lint to report overall repo health. */ @@ -75,8 +75,8 @@ export async function runHealthcheck({ agentkitRoot, projectRoot, flags = {} }) } console.log(''); - // --- Step 2: Check AgentKit setup --- - console.log('--- AgentKit Setup ---'); + // --- Step 2: Check Retort setup --- + console.log('--- Retort Setup ---'); const hasMarker = existsSync(resolve(projectRoot, '.agentkit-repo')); const hasState = existsSync(resolve(projectRoot, '.agentkit', 'state', 'orchestrator.json')); const hasCommands = existsSync(resolve(projectRoot, '.claude', 'commands')); diff --git a/.agentkit/engines/node/src/import-issues.mjs b/.agentkit/engines/node/src/import-issues.mjs index 6a031ff1..8a71a9ba 100644 --- a/.agentkit/engines/node/src/import-issues.mjs +++ b/.agentkit/engines/node/src/import-issues.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Import Issues + * Retort — Import Issues * Fetches issues from an external tracker, normalizes, deduplicates, and * merges into the local backlog. */ diff --git a/.agentkit/engines/node/src/init.mjs b/.agentkit/engines/node/src/init.mjs index 38b61d81..faa7d282 100644 --- a/.agentkit/engines/node/src/init.mjs +++ b/.agentkit/engines/node/src/init.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Init Command (§12) + * Retort — Init Command (§12) * Interactive multi-phase wizard for project setup. * Uses @clack/prompts for Windows-safe interactive prompts. * @@ -292,7 +292,7 @@ export async function runInit({ agentkitRoot, projectRoot, flags }) { }); } - clack.intro('AgentKit Forge — Project Setup'); + clack.intro('Retort — Project Setup'); // --- Phase 1: Project Identity --- const identity = await clack.group({ diff --git a/.agentkit/engines/node/src/issue-normalizer.mjs b/.agentkit/engines/node/src/issue-normalizer.mjs index 2b450c3b..9a3dc589 100644 --- a/.agentkit/engines/node/src/issue-normalizer.mjs +++ b/.agentkit/engines/node/src/issue-normalizer.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Issue Normalizer + * Retort — Issue Normalizer * Transforms raw tracker issues into canonical BacklogItem schema. */ import { createHash } from 'crypto'; diff --git a/.agentkit/engines/node/src/linear-adapter.mjs b/.agentkit/engines/node/src/linear-adapter.mjs index fd5cb032..3098328e 100644 --- a/.agentkit/engines/node/src/linear-adapter.mjs +++ b/.agentkit/engines/node/src/linear-adapter.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Linear Adapter (Stub) + * Retort — Linear Adapter (Stub) * Placeholder for Linear issue tracker integration. * Implements the same interface as GitHubAdapter. */ diff --git a/.agentkit/engines/node/src/orchestrator.mjs b/.agentkit/engines/node/src/orchestrator.mjs index 727f7539..b49ee702 100644 --- a/.agentkit/engines/node/src/orchestrator.mjs +++ b/.agentkit/engines/node/src/orchestrator.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Runtime Orchestration Engine + * Retort — Runtime Orchestration Engine * State machine for the 5-phase lifecycle: Discovery → Planning → Implementation → Validation → Ship. * Manages orchestrator state, event logging, and session locking. */ @@ -643,7 +643,7 @@ export async function getStatus(projectRoot, agentkitRoot) { const teamProgress = state.team_progress || {}; const lines = [ - `=== AgentKit Forge — Orchestrator Status ===`, + `=== Retort — Orchestrator Status ===`, ``, `Repo: ${state.repo_id}`, `Branch: ${state.branch}`, diff --git a/.agentkit/engines/node/src/plan-runner.mjs b/.agentkit/engines/node/src/plan-runner.mjs index 4431e078..5721d0cb 100644 --- a/.agentkit/engines/node/src/plan-runner.mjs +++ b/.agentkit/engines/node/src/plan-runner.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Plan Runner + * Retort — Plan Runner * Shows current orchestrator state, backlog items, and suggests next actions * based on the current phase. This is the CLI companion to the /plan slash command. */ diff --git a/.agentkit/engines/node/src/project-completeness.mjs b/.agentkit/engines/node/src/project-completeness.mjs index be0b16fe..176843ea 100644 --- a/.agentkit/engines/node/src/project-completeness.mjs +++ b/.agentkit/engines/node/src/project-completeness.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Project Completeness Scoring + * Retort — Project Completeness Scoring * Centralized scoring profiles for project.yaml completeness checks. */ diff --git a/.agentkit/engines/node/src/review-runner.mjs b/.agentkit/engines/node/src/review-runner.mjs index 6dbe39e0..42fac8f0 100644 --- a/.agentkit/engines/node/src/review-runner.mjs +++ b/.agentkit/engines/node/src/review-runner.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Review Runner + * Retort — Review Runner * Automated pre-review checks: secret scanning, large file detection, * TODO/FIXME scanning, and lint on changed files. * This is NOT the AI review — that's the /review slash command. diff --git a/.agentkit/engines/node/src/runner.mjs b/.agentkit/engines/node/src/runner.mjs index 1da04c8e..6ba6aaa3 100644 --- a/.agentkit/engines/node/src/runner.mjs +++ b/.agentkit/engines/node/src/runner.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Process Execution Helper + * Retort — Process Execution Helper * Shared utility for running shell commands with timeout, output capture, and timing. */ import { spawnSync } from 'child_process'; diff --git a/.agentkit/engines/node/src/spec-validator.mjs b/.agentkit/engines/node/src/spec-validator.mjs index e8b28704..bf02ad0d 100644 --- a/.agentkit/engines/node/src/spec-validator.mjs +++ b/.agentkit/engines/node/src/spec-validator.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Spec Validator + * Retort — Spec Validator * Validates YAML spec files against expected schemas before sync. * Catches malformed configs early — before they produce broken output. */ diff --git a/.agentkit/engines/node/src/suggestion-store.mjs b/.agentkit/engines/node/src/suggestion-store.mjs index e71304a8..1c3257b3 100644 --- a/.agentkit/engines/node/src/suggestion-store.mjs +++ b/.agentkit/engines/node/src/suggestion-store.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Suggestion Store + * Retort — Suggestion Store * File-backed suggestion management with YAML serialization. * Stores suggestions in .agentkit/state/suggestions/ as individual YAML files. * diff --git a/.agentkit/engines/node/src/sync-backlog-runner.mjs b/.agentkit/engines/node/src/sync-backlog-runner.mjs index 5ab8451c..37d9cab3 100644 --- a/.agentkit/engines/node/src/sync-backlog-runner.mjs +++ b/.agentkit/engines/node/src/sync-backlog-runner.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Sync-Backlog Runner + * Retort — Sync-Backlog Runner * Orchestrated backlog sync combining external tracker + local sources. * Runtime handler for the /sync-backlog command and `agentkit sync-backlog` CLI. */ diff --git a/.agentkit/engines/node/src/sync-guard.mjs b/.agentkit/engines/node/src/sync-guard.mjs index d7c0e054..c45916fe 100644 --- a/.agentkit/engines/node/src/sync-guard.mjs +++ b/.agentkit/engines/node/src/sync-guard.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Sync Guard + * Retort — Sync Guard * Pre-sync safety checks and interactive apply prompts. * Uses @clack/prompts for Windows-safe terminal UI. */ diff --git a/.agentkit/engines/node/src/synchronize.mjs b/.agentkit/engines/node/src/synchronize.mjs index f95da6af..1958b679 100644 --- a/.agentkit/engines/node/src/synchronize.mjs +++ b/.agentkit/engines/node/src/synchronize.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Synchronize Command + * Retort — Synchronize Command * Reads spec + overlay → renders templates → writes generated AI-tool configuration outputs. * Main file operations (mkdir, writeFile, readdir, cp) use async fs/promises. * readYaml/readText use synchronous fs APIs for simplicity at startup. @@ -444,11 +444,11 @@ async function syncScripts(templatesDir, tmpDir, vars, version, repoName) { // --------------------------------------------------------------------------- /** Marker comments delimiting the managed section in .gitattributes */ -const GITATTR_START = '# >>> AgentKit Forge merge drivers — DO NOT EDIT below this line'; -const GITATTR_END = '# <<< AgentKit Forge merge drivers — DO NOT EDIT above this line'; +const GITATTR_START = '# >>> Retort merge drivers — DO NOT EDIT below this line'; +const GITATTR_END = '# <<< Retort merge drivers — DO NOT EDIT above this line'; /** - * Appends (or updates) the AgentKit merge-driver section in .gitattributes. + * Appends (or updates) the Retort merge-driver section in .gitattributes. * Preserves all user-authored content outside the markers. Writes the result * to tmpDir so the standard manifest/diff/swap pipeline handles it. */ @@ -476,7 +476,7 @@ async function syncGitattributes(tmpDir, projectRoot, version) { // Build the managed merge-driver section const managedSection = ` ${GITATTR_START} -# GENERATED by AgentKit Forge v${version} — regenerated on every sync. +# GENERATED by Retort v${version} — regenerated on every sync. # These custom merge drivers auto-resolve conflicts on framework-managed files. # Driver "agentkit-generated" accepts the incoming (upstream/theirs) version. # @@ -534,33 +534,33 @@ async function syncEditorTheme(agentkitRoot, tmpDir, vars, log, flags, skipOutpu const brandSpec = readYaml(resolve(agentkitRoot, 'spec', 'brand.yaml')); if (!brandSpec) { - log('[agentkit:sync] Editor theme enabled but no brand.yaml found — skipping'); + log('[retort:sync] Editor theme enabled but no brand.yaml found — skipping'); return; } // Validate brand spec const validation = validateBrandSpec(brandSpec); for (const err of validation.errors) { - log(`[agentkit:sync] Brand error: ${err}`); + log(`[retort:sync] Brand error: ${err}`); } for (const warn of validation.warnings) { - if (process.env.DEBUG) log(`[agentkit:sync] Brand warning: ${warn}`); + if (process.env.DEBUG) log(`[retort:sync] Brand warning: ${warn}`); } if (validation.errors.length > 0) { - log('[agentkit:sync] Brand validation failed — skipping editor theme'); + log('[retort:sync] Brand validation failed — skipping editor theme'); return; } const themeSpec = readYaml(resolve(agentkitRoot, 'spec', 'editor-theme.yaml')); if (!themeSpec || !themeSpec.enabled) { - log('[agentkit:sync] Editor theme spec not found or disabled — skipping'); + log('[retort:sync] Editor theme spec not found or disabled — skipping'); return; } // Validate tier/scheme values const themeValidation = validateThemeSpec(themeSpec); for (const warn of themeValidation.warnings) { - log(`[agentkit:sync] Theme config warning: ${warn}`); + log(`[retort:sync] Theme config warning: ${warn}`); } // Determine which mode mapping(s) to resolve @@ -575,7 +575,7 @@ async function syncEditorTheme(agentkitRoot, tmpDir, vars, log, flags, skipOutpu const { resolved, warnings } = resolveThemeMapping(lightMapping, brandSpec); lightColors = resolved; for (const warn of warnings) { - log(`[agentkit:sync] Theme warning (light): ${warn}`); + log(`[retort:sync] Theme warning (light): ${warn}`); } } if (mode === 'both' || mode === 'dark') { @@ -583,7 +583,7 @@ async function syncEditorTheme(agentkitRoot, tmpDir, vars, log, flags, skipOutpu const { resolved, warnings } = resolveThemeMapping(darkMapping, brandSpec); darkColors = resolved; for (const warn of warnings) { - log(`[agentkit:sync] Theme warning (dark): ${warn}`); + log(`[retort:sync] Theme warning (dark): ${warn}`); } } @@ -606,12 +606,12 @@ async function syncEditorTheme(agentkitRoot, tmpDir, vars, log, flags, skipOutpu colorCustomizations = filterByTier(colorCustomizations, tier); if (tier !== 'full') { log( - `[agentkit:sync] Brand tier "${tier}" — filtered to ${Object.keys(colorCustomizations).length} color slots` + `[retort:sync] Brand tier "${tier}" — filtered to ${Object.keys(colorCustomizations).length} color slots` ); } if (Object.keys(colorCustomizations).length === 0) { - log('[agentkit:sync] No colors resolved from editor theme — skipping'); + log('[retort:sync] No colors resolved from editor theme — skipping'); return; } @@ -665,7 +665,7 @@ async function syncEditorTheme(agentkitRoot, tmpDir, vars, log, flags, skipOutpu // Scaffold-once: skip targets that already exist in projectRoot (unless --overwrite/--force) if (skipOutputs && skipOutputs.has(outputPath)) { - log(`[agentkit:sync] Editor theme: ${outputPath} exists (scaffold-once) — skipping`); + log(`[retort:sync] Editor theme: ${outputPath} exists (scaffold-once) — skipping`); continue; } @@ -673,7 +673,7 @@ async function syncEditorTheme(agentkitRoot, tmpDir, vars, log, flags, skipOutpu const normalizedPath = String(outputPath).replace(/^\/+/, ''); // strip leading slashes const settingsPath = resolve(tmpDir, normalizedPath); if (!settingsPath.startsWith(resolvedTmpDir + sep) && settingsPath !== resolvedTmpDir) { - log(`[agentkit:sync] BLOCKED: editor theme output path traversal detected — ${outputPath}`); + log(`[retort:sync] BLOCKED: editor theme output path traversal detected — ${outputPath}`); continue; } @@ -718,7 +718,7 @@ async function syncEditorTheme(agentkitRoot, tmpDir, vars, log, flags, skipOutpu await writeFile(settingsPath, JSON.stringify(mergedSettings, null, 2) + '\n', 'utf-8'); log( - `[agentkit:sync] Editor theme → ${outputPath}: ${Object.keys(toolColors).length} color(s) from "${meta.brand}" (${mode} mode)` + `[retort:sync] Editor theme → ${outputPath}: ${Object.keys(toolColors).length} color(s) from "${meta.brand}" (${mode} mode)` ); })() ); @@ -1174,7 +1174,7 @@ function resolveLanguageTemplate(overlayDir, sharedDir, name, fallback) { * @param {string} templatesDir - Root templates directory * @param {string} tmpDir - Output root directory * @param {object} vars - Flattened project template variables - * @param {string} version - AgentKit version string + * @param {string} version - Retort version string * @param {string} repoName - Repository name for header injection * @param {object} rulesSpec - Parsed rules.yaml spec * @param {string} outputSubDir - Output path relative to tmpDir (e.g. '.github/instructions/languages') @@ -1201,7 +1201,7 @@ async function syncLanguageInstructions( for (const rule of rules) { const domain = rule.domain; if (typeof domain !== 'string' || !SAFE_DOMAIN_PATTERN.test(domain)) { - console.warn(`[agentkit:sync] Skipping rule with invalid domain: ${JSON.stringify(domain)}`); + console.warn(`[retort:sync] Skipping rule with invalid domain: ${JSON.stringify(domain)}`); continue; } @@ -1731,7 +1731,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { try { ({ checkDirtyProtectedFiles, promptDirtyFileAction } = await import('./sync-guard.mjs')); } catch (err) { - log(`[agentkit:sync] Warning: could not load sync-guard: ${err?.message ?? err}`); + log(`[retort:sync] Warning: could not load sync-guard: ${err?.message ?? err}`); } const { dirty, files } = checkDirtyProtectedFiles ? checkDirtyProtectedFiles(projectRoot, [ @@ -1745,24 +1745,24 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { if (isTTY) { const action = await promptDirtyFileAction(files); if (action === 'abort') { - log('[agentkit:sync] Aborted — commit or stash your changes first.'); + log('[retort:sync] Aborted — commit or stash your changes first.'); return; } // 'stash' handled inside promptDirtyFileAction; 'continue' falls through } else { - console.warn('[agentkit:sync] Warning: uncommitted changes in protected directories:'); + console.warn('[retort:sync] Warning: uncommitted changes in protected directories:'); for (const f of files) console.warn(` ${f}`); } } } if (dryRun) { - log('[agentkit:sync] Dry-run mode — no files will be written.'); + log('[retort:sync] Dry-run mode — no files will be written.'); } if (diff) { - log('[agentkit:sync] Diff mode — showing what would change.'); + log('[retort:sync] Diff mode — showing what would change.'); } - log('[agentkit:sync] Starting sync...'); + log('[retort:sync] Starting sync...'); // 1. Load spec — version from package.json (primary) with VERSION file as fallback let version = '0.0.0'; @@ -1784,7 +1784,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { // 2. Detect overlay const overlaySelection = resolveOverlaySelection(agentkitRoot, projectRoot, flags); const repoName = overlaySelection.repoName; - log(`[agentkit:sync] Using overlay: ${repoName} (${overlaySelection.reason})`); + log(`[retort:sync] Using overlay: ${repoName} (${overlaySelection.reason})`); // 3. Load overlay const overlayDir = resolve(agentkitRoot, 'overlays', repoName); @@ -1807,10 +1807,10 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { const enabledFeatures = resolveFeatures(features, overlaySettings, presets, { log }); featureVars = buildFeatureVars(features, enabledFeatures); hookFeatureMap = buildHookFeatureMap(features); - log(`[agentkit:sync] Features: ${enabledFeatures.size} / ${features.length} enabled`); + log(`[retort:sync] Features: ${enabledFeatures.size} / ${features.length} enabled`); } catch { // features.yaml may not exist yet in older repos — degrade gracefully - log('[agentkit:sync] Features: spec not found, all features assumed enabled'); + log('[retort:sync] Features: spec not found, all features assumed enabled'); } const teamsIntake = teamsSpec?.intake || {}; @@ -1938,9 +1938,9 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { // Resolve render targets — determines which tool outputs to generate let targets = resolveRenderTargets(overlaySettings.renderTargets, flags); - log(`[agentkit:sync] Repo: ${vars.repoName}, Version: ${version}`); + log(`[retort:sync] Repo: ${vars.repoName}, Version: ${version}`); if (flags?.only) { - log(`[agentkit:sync] Syncing only: ${[...targets].join(', ')}`); + log(`[retort:sync] Syncing only: ${[...targets].join(', ')}`); } // 4. Render templates to temp directory @@ -2019,7 +2019,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { await syncEditorTheme(agentkitRoot, tmpDir, vars, log, flags, existingOutputs); } else { log( - '[agentkit:sync] Editor theme: all output targets exist (scaffold-once) — skipping. Use --overwrite to regenerate.' + '[retort:sync] Editor theme: all output targets exist (scaffold-once) — skipping. Use --overwrite to regenerate.' ); } } @@ -2329,7 +2329,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { // --- Dry-run: print summary and exit without writing --- if (dryRun) { const total = Object.keys(newManifestFiles).length; - log(`[agentkit:sync] Dry-run: would generate ${total} file(s):`); + log(`[retort:sync] Dry-run: would generate ${total} file(s):`); printSyncSummary(fileSummary, targets, { quiet }); return; } @@ -2389,7 +2389,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { } } log( - `[agentkit:sync] Diff: ${createCount} create, ${updateCount} update, ${skipCount} unchanged/skip` + `[retort:sync] Diff: ${createCount} create, ${updateCount} update, ${skipCount} unchanged/skip` ); return; } @@ -2446,7 +2446,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { const mode = await promptApplyMode({ creates, updates }); if (mode === 'none') { - log('[agentkit:sync] Skipped — no files written.'); + log('[retort:sync] Skipped — no files written.'); return; } @@ -2466,7 +2466,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { } if (skipSet.size > 0) { flags._skipPaths = skipSet; - log(`[agentkit:sync] Skipping ${skipSet.size} file(s) by user choice.`); + log(`[retort:sync] Skipping ${skipSet.size} file(s) by user choice.`); } } // mode === 'all' falls through to normal swap @@ -2485,7 +2485,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { } // 7. Atomic swap: move temp outputs to project root & build new manifest - log('[agentkit:sync] Writing outputs...'); + log('[retort:sync] Writing outputs...'); const resolvedRoot = resolve(projectRoot) + sep; const scaffoldCacheDir = resolve(agentkitRoot, '.scaffold-cache'); @@ -2522,7 +2522,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { !resolve(destFile).startsWith(resolvedRoot) && resolve(destFile) !== resolve(projectRoot) ) { - console.error(`[agentkit:sync] BLOCKED: path traversal detected — ${normalizedRel}`); + console.error(`[retort:sync] BLOCKED: path traversal detected — ${normalizedRel}`); failedFiles.push({ file: normalizedRel, error: 'path traversal blocked' }); return; } @@ -2566,7 +2566,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { if (result.hasConflicts) { scaffoldResults.managedConflicts.push(normalizedRel); console.warn( - `[agentkit:sync] CONFLICT in ${normalizedRel} — resolve <<<< markers manually` + `[retort:sync] CONFLICT in ${normalizedRel} — resolve <<<< markers manually` ); } else { scaffoldResults.managedMerged.push(normalizedRel); @@ -2627,12 +2627,12 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { logVerbose(` wrote ${normalizedRel}`); } catch (err) { failedFiles.push({ file: normalizedRel, error: err.message }); - console.error(`[agentkit:sync] Failed to write: ${normalizedRel} — ${err.message}`); + console.error(`[retort:sync] Failed to write: ${normalizedRel} — ${err.message}`); } }); if (failedFiles.length > 0) { - console.error(`[agentkit:sync] Error: ${failedFiles.length} file(s) failed to write:`); + console.error(`[retort:sync] Error: ${failedFiles.length} file(s) failed to write:`); for (const f of failedFiles) { console.error(` - ${f.file}: ${f.error}`); } @@ -2648,7 +2648,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { scaffoldResults.managedPreserved.length > 0; if (hasManagedActivity) { - log('[agentkit:sync] Scaffold summary:'); + log('[retort:sync] Scaffold summary:'); if (scaffoldResults.alwaysRegenerated.length > 0) { log(` ${scaffoldResults.alwaysRegenerated.length} file(s) always-regenerated`); } @@ -2713,17 +2713,17 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { const orphanPath = resolve(projectRoot, prevFile); // Path traversal protection: ensure orphan path stays within project root if (!orphanPath.startsWith(resolvedRoot)) { - console.warn(`[agentkit:sync] BLOCKED: path traversal in manifest — ${prevFile}`); + console.warn(`[retort:sync] BLOCKED: path traversal in manifest — ${prevFile}`); return; } if (existsSync(orphanPath)) { try { await unlink(orphanPath); cleanedCount++; - logVerbose(`[agentkit:sync] Cleaned stale file: ${prevFile}`); + logVerbose(`[retort:sync] Cleaned stale file: ${prevFile}`); } catch (err) { console.warn( - `[agentkit:sync] Warning: could not clean stale file ${prevFile} — ${err.message}` + `[retort:sync] Warning: could not clean stale file ${prevFile} — ${err.message}` ); } } @@ -2740,7 +2740,7 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { try { await writeFile(manifestPath, JSON.stringify(newManifest, null, 2) + '\n', 'utf-8'); } catch (err) { - console.warn(`[agentkit:sync] Warning: could not write manifest — ${err.message}`); + console.warn(`[retort:sync] Warning: could not write manifest — ${err.message}`); } // 10. Post-sync prettier formatting — ensure generated files are formatted @@ -2762,14 +2762,14 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { formattedCount += batch.length; } catch (err) { if (err?.killed) { - logVerbose(`[agentkit:sync] Prettier batch timed out, continuing...`); + logVerbose(`[retort:sync] Prettier batch timed out, continuing...`); } // prettier may fail on some files (e.g. non-parseable) — continue } } if (formattedCount > 0) { logVerbose( - `[agentkit:sync] Formatted ${formattedCount} generated file(s) with Prettier.` + `[retort:sync] Formatted ${formattedCount} generated file(s) with Prettier.` ); } } catch { @@ -2778,10 +2778,10 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { } if (skippedScaffold > 0) { - log(`[agentkit:sync] Skipped ${skippedScaffold} project-owned file(s) (already exist).`); + log(`[retort:sync] Skipped ${skippedScaffold} project-owned file(s) (already exist).`); } if (cleanedCount > 0) { - log(`[agentkit:sync] Cleaned ${cleanedCount} stale file(s) from previous sync.`); + log(`[retort:sync] Cleaned ${cleanedCount} stale file(s) from previous sync.`); } // 11. Post-sync summary @@ -2789,13 +2789,13 @@ export async function runSync({ agentkitRoot, projectRoot, flags }) { const completeness = computeProjectCompleteness(projectSpec); if (completeness.total > 0) { log( - `[agentkit:sync] project.yaml completeness: ${completeness.percent}% (${completeness.present}/${completeness.total} fields populated)` + `[retort:sync] project.yaml completeness: ${completeness.percent}% (${completeness.present}/${completeness.total} fields populated)` ); if (completeness.missing.length > 0) { - log(`[agentkit:sync] Top missing fields: ${completeness.missing.slice(0, 5).join(', ')}`); + log(`[retort:sync] Top missing fields: ${completeness.missing.slice(0, 5).join(', ')}`); } } - log(`[agentkit:sync] Done! Generated ${count} files.`); + log(`[retort:sync] Done! Generated ${count} files.`); // 12. First-sync hint (when not called from init) if (!flags?.overlay) { diff --git a/.agentkit/engines/node/src/task-cli.mjs b/.agentkit/engines/node/src/task-cli.mjs index b66a8f5a..8a1329f1 100644 --- a/.agentkit/engines/node/src/task-cli.mjs +++ b/.agentkit/engines/node/src/task-cli.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Task CLI Handlers + * Retort — Task CLI Handlers * CLI entry points for the task delegation protocol. */ import { diff --git a/.agentkit/engines/node/src/task-protocol.mjs b/.agentkit/engines/node/src/task-protocol.mjs index b7b4e67a..01baed79 100644 --- a/.agentkit/engines/node/src/task-protocol.mjs +++ b/.agentkit/engines/node/src/task-protocol.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Task Protocol + * Retort — Task Protocol * File-based A2A-lite task delegation protocol. * Tasks are JSON files in .agentkit/state/tasks/ with lifecycle states, * messages, artifacts, dependency tracking, and chained handoffs. @@ -227,7 +227,7 @@ async function withHandoffLock(projectRoot, taskId, fn) { function generateRandomSuffix() { if (!globalThis.crypto || typeof globalThis.crypto.getRandomValues !== 'function') { throw new Error( - 'AgentKit Forge Node engine requires Node.js >= 22 with Web Crypto API available (globalThis.crypto.getRandomValues).' + 'Retort Node engine requires Node.js >= 22 with Web Crypto API available (globalThis.crypto.getRandomValues).' ); } const bytes = new Uint8Array(3); diff --git a/.agentkit/engines/node/src/template-utils.mjs b/.agentkit/engines/node/src/template-utils.mjs index e0ef9f9b..f47b50b9 100644 --- a/.agentkit/engines/node/src/template-utils.mjs +++ b/.agentkit/engines/node/src/template-utils.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Template Utilities + * Retort — Template Utilities * Pure, synchronous helper functions for template rendering, data transformation, * header generation, and project-spec flattening. No file I/O. */ @@ -679,7 +679,7 @@ export function getGeneratedHeader(version, repoName, ext, vars = {}) { const syncCmd = pm === 'npm' ? 'npm run -C .agentkit agentkit:sync' : `${pm} -C .agentkit agentkit:sync`; return [ - `${comment.start} GENERATED by AgentKit Forge v${version} — DO NOT EDIT${suffix}`, + `${comment.start} GENERATED by Retort v${version} — DO NOT EDIT${suffix}`, `${comment.start} Source: .agentkit/spec + .agentkit/overlays/${repoName}${suffix}`, `${comment.start} Regenerate: ${syncCmd}${suffix}`, '', @@ -718,7 +718,7 @@ export function getCommentStyle(ext) { export function insertHeader(content, ext, version, repoName) { const header = getGeneratedHeader(version, repoName, ext); if (!header) return content; // JSON / template — no comment syntax - if (content.includes('GENERATED by AgentKit Forge')) return content; // already present + if (content.includes('GENERATED by Retort')) return content; // already present const normalizedExt = ext.toLowerCase(); diff --git a/.agentkit/engines/node/src/tool-manager.mjs b/.agentkit/engines/node/src/tool-manager.mjs index 1664d234..86c21daa 100644 --- a/.agentkit/engines/node/src/tool-manager.mjs +++ b/.agentkit/engines/node/src/tool-manager.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Tool Manager + * Retort — Tool Manager * Handles add/remove/list subcommands for incremental AI tool management. */ import { existsSync, readFileSync, realpathSync, unlinkSync, writeFileSync } from 'fs'; diff --git a/.agentkit/engines/node/src/tracker-adapter.mjs b/.agentkit/engines/node/src/tracker-adapter.mjs index 662c9a4f..1ba115f0 100644 --- a/.agentkit/engines/node/src/tracker-adapter.mjs +++ b/.agentkit/engines/node/src/tracker-adapter.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Tracker Adapter Factory + * Retort — Tracker Adapter Factory * Creates the appropriate adapter for the configured issue tracker. */ diff --git a/.agentkit/engines/node/src/validate.mjs b/.agentkit/engines/node/src/validate.mjs index 6c5b7c00..f187d332 100644 --- a/.agentkit/engines/node/src/validate.mjs +++ b/.agentkit/engines/node/src/validate.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Validate Command + * Retort — Validate Command * Validates generated outputs for correctness. * Now includes spec-aware validation via spec-validator.mjs. */ @@ -150,7 +150,7 @@ export async function runValidate({ agentkitRoot, projectRoot, flags }) { const fullPath = resolve(projectRoot, file); if (!existsSync(fullPath)) continue; const content = readFileSync(fullPath, 'utf-8'); - if (!content.includes('GENERATED by AgentKit Forge')) { + if (!content.includes('GENERATED by Retort') && !content.includes('GENERATED by AgentKit Forge')) { console.warn(` WARN: ${file} missing GENERATED header`); warnings++; } else { diff --git a/.agentkit/engines/node/src/weighted-scorer.mjs b/.agentkit/engines/node/src/weighted-scorer.mjs index 65a3d06b..12b65799 100644 --- a/.agentkit/engines/node/src/weighted-scorer.mjs +++ b/.agentkit/engines/node/src/weighted-scorer.mjs @@ -1,5 +1,5 @@ /** - * AgentKit Forge — Weighted Priority Scorer + * Retort — Weighted Priority Scorer * Deterministic scoring system for backlog items. Category scores (0-10) are * supplied by agents; weights and phase adjustments are configurable in * project.yaml. The final score (0-100) maps to P0-P3 via thresholds. diff --git a/.agentkit/package.json b/.agentkit/package.json index ac738df9..00e5cf72 100644 --- a/.agentkit/package.json +++ b/.agentkit/package.json @@ -1,9 +1,9 @@ { - "name": "agentkit-forge-runtime", + "name": "retort-runtime", "version": "3.1.0", "private": true, "type": "module", - "description": "AgentKit Forge — unified AI agent team framework sync engine", + "description": "Retort — unified AI agent team orchestration framework", "packageManager": "pnpm@10.30.3", "engines": { "node": ">=22.0.0" @@ -13,6 +13,20 @@ "js-yaml": "^4.1.0" }, "scripts": { + "retort:sync": "node engines/node/src/cli.mjs sync", + "retort:init": "node engines/node/src/cli.mjs init", + "retort:validate": "node engines/node/src/cli.mjs validate", + "retort:discover": "node engines/node/src/cli.mjs discover", + "retort:spec-validate": "node engines/node/src/cli.mjs spec-validate", + "retort:add": "node engines/node/src/cli.mjs add", + "retort:remove": "node engines/node/src/cli.mjs remove", + "retort:list": "node engines/node/src/cli.mjs list", + "retort:healthcheck": "node engines/node/src/cli.mjs healthcheck", + "retort:check": "node engines/node/src/cli.mjs check", + "retort:cost": "node engines/node/src/cli.mjs cost", + "retort:import-issues": "node engines/node/src/cli.mjs import-issues", + "retort:backlog": "node engines/node/src/cli.mjs backlog", + "retort:sync-backlog": "node engines/node/src/cli.mjs sync-backlog", "agentkit:sync": "node engines/node/src/cli.mjs sync", "agentkit:init": "node engines/node/src/cli.mjs init", "agentkit:validate": "node engines/node/src/cli.mjs validate", diff --git a/.agentkit/templates/ai/continuerules b/.agentkit/templates/ai/continuerules index 4581b275..c09c3aa6 100644 --- a/.agentkit/templates/ai/continuerules +++ b/.agentkit/templates/ai/continuerules @@ -2,7 +2,7 @@ Follow UNIFIED_AGENT_TEAMS.md and CLAUDE.md. Use /discover → /healthcheck → /plan → implement → /check → /review. Never modify .env, secrets, or credential files. Never modify files in .agentkit/templates/, .agentkit/spec/, .agentkit/engines/, or .agentkit/overlays/, or .agentkit/bin/ — propose changes via PR instead. -Never edit files marked "GENERATED by AgentKit Forge — DO NOT EDIT" — modify the spec and run agentkit sync. +Never edit files marked "GENERATED by Retort — DO NOT EDIT" — modify the spec and run retort sync. Prefer small, reversible changes with tests. All commits AND PR titles MUST use Conventional Commits: type(scope): description. Types: feat|fix|docs|style|refactor|test|chore|ci|perf|build|revert. Never use "Plan:", "Update", or free-form titles. -After editing .agentkit/spec/, ALWAYS run: pnpm -C .agentkit agentkit:sync — then commit the regenerated output. +After editing .agentkit/spec/, ALWAYS run: pnpm -C .agentkit retort:sync — then commit the regenerated output. diff --git a/.agentkit/templates/ai/cursorrules b/.agentkit/templates/ai/cursorrules index d5e79dbd..13f6e20b 100644 --- a/.agentkit/templates/ai/cursorrules +++ b/.agentkit/templates/ai/cursorrules @@ -2,7 +2,7 @@ Follow UNIFIED_AGENT_TEAMS.md and CLAUDE.md. Use /discover → /healthcheck → /plan → implement → /check → /review. Never modify .env, secrets, or credential files. Never modify files in .agentkit/templates/, .agentkit/spec/, .agentkit/engines/, .agentkit/overlays/, or .agentkit/bin/ — propose changes via PR instead. -Never edit files marked "GENERATED by AgentKit Forge — DO NOT EDIT" — modify the spec and run agentkit sync. +Never edit files marked "GENERATED by Retort — DO NOT EDIT" — modify the spec and run retort sync. Prefer small, reversible changes with tests. All commits AND PR titles MUST use Conventional Commits: type(scope): description. Types: feat|fix|docs|style|refactor|test|chore|ci|perf|build|revert. Never use "Plan:", "Update", or free-form titles. -After editing .agentkit/spec/, ALWAYS run: pnpm -C .agentkit agentkit:sync — then commit the regenerated output. +After editing .agentkit/spec/, ALWAYS run: pnpm -C .agentkit retort:sync — then commit the regenerated output. diff --git a/.agentkit/templates/ai/windsurfrules b/.agentkit/templates/ai/windsurfrules index 4581b275..c09c3aa6 100644 --- a/.agentkit/templates/ai/windsurfrules +++ b/.agentkit/templates/ai/windsurfrules @@ -2,7 +2,7 @@ Follow UNIFIED_AGENT_TEAMS.md and CLAUDE.md. Use /discover → /healthcheck → /plan → implement → /check → /review. Never modify .env, secrets, or credential files. Never modify files in .agentkit/templates/, .agentkit/spec/, .agentkit/engines/, or .agentkit/overlays/, or .agentkit/bin/ — propose changes via PR instead. -Never edit files marked "GENERATED by AgentKit Forge — DO NOT EDIT" — modify the spec and run agentkit sync. +Never edit files marked "GENERATED by Retort — DO NOT EDIT" — modify the spec and run retort sync. Prefer small, reversible changes with tests. All commits AND PR titles MUST use Conventional Commits: type(scope): description. Types: feat|fix|docs|style|refactor|test|chore|ci|perf|build|revert. Never use "Plan:", "Update", or free-form titles. -After editing .agentkit/spec/, ALWAYS run: pnpm -C .agentkit agentkit:sync — then commit the regenerated output. +After editing .agentkit/spec/, ALWAYS run: pnpm -C .agentkit retort:sync — then commit the regenerated output. diff --git a/.agentkit/templates/claude/CLAUDE.md b/.agentkit/templates/claude/CLAUDE.md index 860efcda..3507efdb 100644 --- a/.agentkit/templates/claude/CLAUDE.md +++ b/.agentkit/templates/claude/CLAUDE.md @@ -8,7 +8,7 @@ {{#if projectDescription}}{{projectDescription}}{{/if}} -This repository uses **AgentKit Forge** to manage AI agent team workflows across multiple tools. +This repository uses **Retort** to manage AI agent team workflows across multiple tools. - **Repository**: {{repoName}} - **Default Branch**: {{defaultBranch}} @@ -340,7 +340,7 @@ The CI `branch-protection` workflow **rejects PRs** with non-conforming titles. When you modify any file in `.agentkit/spec/`, you **MUST** run sync before committing: ```bash -{{packageManager}} -C .agentkit agentkit:sync +{{packageManager}} -C .agentkit retort:sync ``` Then commit the regenerated output. The CI drift check **will fail** if generated files are out of sync. This is the #1 cause of CI failures across branches. @@ -348,7 +348,7 @@ Then commit the regenerated output. The CI drift check **will fail** if generate **Workflow:** 1. Edit spec files in `.agentkit/spec/` -2. Run `{{packageManager}} -C .agentkit agentkit:sync` +2. Run `{{packageManager}} -C .agentkit retort:sync` 3. Commit spec changes and generated output together (or in two atomic commits) 4. Verify with `git diff --quiet` — if there's output, you missed something @@ -361,8 +361,8 @@ Feature branches: `type/short-description` (e.g., `feat/add-user-auth`, `fix/tok 1. **Never** commit secrets, API keys, or credentials 2. **Never** force-push to {{defaultBranch}} 3. **Never** run destructive commands without confirmation -4. **Never** modify files in `.agentkit/templates/`, `.agentkit/engines/`, `.agentkit/overlays/`, or `.agentkit/bin/` — these are the upstream source-of-truth for AgentKit Forge and are protected by a PreToolUse hook. Note: `.agentkit/spec/` is the intended edit point for project configuration — modify spec YAML files there and run `agentkit sync` to regenerate output -5. **Never** directly edit files marked `` — modify the spec in `.agentkit/spec/` and run `agentkit sync` instead; if spec files changed, run `{{packageManager}} -C .agentkit agentkit:sync` and commit regenerated outputs before creating a PR +4. **Never** modify files in `.agentkit/templates/`, `.agentkit/engines/`, `.agentkit/overlays/`, or `.agentkit/bin/` — these are the upstream source-of-truth for Retort and are protected by a PreToolUse hook. Note: `.agentkit/spec/` is the intended edit point for project configuration — modify spec YAML files there and run `retort sync` to regenerate output +5. **Never** directly edit files marked `` — modify the spec in `.agentkit/spec/` and run `retort sync` instead; if spec files changed, run `{{packageManager}} -C .agentkit retort:sync` and commit regenerated outputs before creating a PR 6. **Always** run `/check` before creating a PR 7. **Always** use Conventional Commits format for PR titles: `type(scope): description` — CI rejects non-conforming titles (valid types: feat, fix, docs, style, refactor, test, chore, ci, perf, build, revert) 8. **Always** document breaking changes — PRs with `!:` or `BREAKING` in the title must include a `## Breaking Changes` section, ADR reference, or migration guide in the PR body (CI enforces this) diff --git a/.agentkit/templates/claude/commands/cost.md b/.agentkit/templates/claude/commands/cost.md index d03cf953..de8404f5 100644 --- a/.agentkit/templates/claude/commands/cost.md +++ b/.agentkit/templates/claude/commands/cost.md @@ -47,6 +47,6 @@ You are the **Cost Tracker Agent**. You help users understand their AI session u ## Notes - Session tracking is automatic via lifecycle hooks (session-start, session-end). -- AgentKit tracks operational metrics (duration, commands, files) — not token counts. +- Retort tracks operational metrics (duration, commands, files) — not token counts. - Logs are stored in `.agentkit/logs/` as daily JSONL files. - Session records are in `.agentkit/logs/sessions/`. diff --git a/.agentkit/templates/claude/commands/doctor.md b/.agentkit/templates/claude/commands/doctor.md index 7d48101e..59b95422 100644 --- a/.agentkit/templates/claude/commands/doctor.md +++ b/.agentkit/templates/claude/commands/doctor.md @@ -16,7 +16,7 @@ last_updated: '{{syncDate}}' ## Purpose -Diagnose AgentKit Forge setup and spec quality issues quickly. +Diagnose Retort setup and spec quality issues quickly. ## Workflow diff --git a/.agentkit/templates/claude/commands/expand.md b/.agentkit/templates/claude/commands/expand.md index 24e936f9..290dc4a8 100644 --- a/.agentkit/templates/claude/commands/expand.md +++ b/.agentkit/templates/claude/commands/expand.md @@ -10,9 +10,9 @@ last_updated: '{{syncDate}}' # Docs: https://docs.anthropic.com/en/docs/claude-code/memory --- - + - + # /expand — Expansion Analyzer diff --git a/.agentkit/templates/claude/commands/feature-configure.md b/.agentkit/templates/claude/commands/feature-configure.md index 29809b4c..dfaf63cd 100644 --- a/.agentkit/templates/claude/commands/feature-configure.md +++ b/.agentkit/templates/claude/commands/feature-configure.md @@ -16,7 +16,7 @@ You are the **Feature Operations Specialist**. You help the user configure kit f ## Context -This repository uses **AgentKit Forge** feature management with these presets: +This repository uses **Retort** feature management with these presets: | Preset | Features | Use-case | |----------|----------|----------| diff --git a/.agentkit/templates/claude/commands/feature-review.md b/.agentkit/templates/claude/commands/feature-review.md index 27d26512..afb47b12 100644 --- a/.agentkit/templates/claude/commands/feature-review.md +++ b/.agentkit/templates/claude/commands/feature-review.md @@ -16,7 +16,7 @@ You are the **Feature Operations Specialist**. You review the current kit featur ## Context -This repository uses **AgentKit Forge** feature management. Features are defined in `.agentkit/spec/features.yaml` and controlled per-repo via the overlay settings at `.agentkit/overlays/*/settings.yaml`. +This repository uses **Retort** feature management. Features are defined in `.agentkit/spec/features.yaml` and controlled per-repo via the overlay settings at `.agentkit/overlays/*/settings.yaml`. {{#if featureSummary}} ### Current Feature Configuration diff --git a/.agentkit/templates/claude/commands/project-review.md b/.agentkit/templates/claude/commands/project-review.md index e82237ed..04d4fd61 100644 --- a/.agentkit/templates/claude/commands/project-review.md +++ b/.agentkit/templates/claude/commands/project-review.md @@ -125,7 +125,7 @@ Propose updates to: ## Template & Generated-Format Issue Filing -During Phase 1c analysis, any finding that targets a **generated file** (contains ` +{{! GENERATED by Retort v{{version}} — DO NOT EDIT }} + - + # Start — New User Entry Point @@ -44,7 +44,7 @@ You are the **Start Agent**. Your job is to orient users — especially new ones Gather these signals silently: -- **AgentKit Forge initialised?** — `.agentkit/` directory exists +- **Retort initialised?** — `.agentkit/` directory exists - **Sync has been run?** — `.claude/commands/orchestrate.md` exists - **Discovery completed?** — `AGENT_TEAMS.md` exists at repo root - **Orchestrator has prior state?** — `.claude/state/orchestrator.json` exists @@ -61,7 +61,7 @@ Print a concise status table: | Item | Status | | -------------- | ----------------------------------- | -| AgentKit Forge | Initialised / Not initialised | +| Retort | Initialised / Not initialised | | Sync | Up to date / Needs sync / Never run | | Discovery | Complete / Not run | | Orchestrator | Phase N (name) / No prior session | diff --git a/.agentkit/templates/claude/commands/sync.md b/.agentkit/templates/claude/commands/sync.md index 11585590..905af721 100644 --- a/.agentkit/templates/claude/commands/sync.md +++ b/.agentkit/templates/claude/commands/sync.md @@ -10,9 +10,9 @@ last_updated: '{{syncDate}}' # Docs: https://docs.anthropic.com/en/docs/claude-code/memory --- - + - + # /sync — Regenerate AI Tool Configurations @@ -29,7 +29,7 @@ last_updated: '{{syncDate}}' Run from the repository root: ```bash -pnpm -C .agentkit agentkit:sync +pnpm -C .agentkit retort:sync ``` Or directly: @@ -56,7 +56,7 @@ node .agentkit/engines/node/src/cli.mjs sync ## When to Sync - After modifying any file in `.agentkit/spec/` -- After updating AgentKit Forge version +- After updating Retort version - After enabling or disabling features - When CI drift check fails diff --git a/.agentkit/templates/claude/commands/validate.md b/.agentkit/templates/claude/commands/validate.md index 49f2eb0c..4c0c323a 100644 --- a/.agentkit/templates/claude/commands/validate.md +++ b/.agentkit/templates/claude/commands/validate.md @@ -10,9 +10,9 @@ last_updated: '{{syncDate}}' # Docs: https://docs.anthropic.com/en/docs/claude-code/memory --- - + - + # /validate — Output Validator diff --git a/.agentkit/templates/claude/hooks/protect-templates.ps1 b/.agentkit/templates/claude/hooks/protect-templates.ps1 index 813179f2..773dc0fd 100644 --- a/.agentkit/templates/claude/hooks/protect-templates.ps1 +++ b/.agentkit/templates/claude/hooks/protect-templates.ps1 @@ -1,6 +1,6 @@ # --------------------------------------------------------------------------- # Hook: PreToolUse (matcher: Write|Edit) -# Purpose: Block AI writes to AgentKit Forge source files (templates, spec, +# Purpose: Block AI writes to Retort source files (templates, spec, # engines, overlays) in DOWNSTREAM repos. In the agentkit-forge source # repo itself, agents ARE the maintainers and need full access. # Stdin: JSON with session_id, cwd, hook_event_name, tool_name, tool_input @@ -52,7 +52,7 @@ $protectedPatterns = @( foreach ($pattern in $protectedPatterns) { if ($filePath -match $pattern) { - $reason = "Blocked: '$filePath' is an AgentKit Forge source file. These files are the upstream source-of-truth and must not be modified directly by AI agents. To propose changes, create a PR to the agentkit-forge repository targeting the relevant spec or template. If you need to change project configuration, edit the YAML specs in .agentkit/spec/ and run 'pnpm -C .agentkit agentkit:sync'." + $reason = "Blocked: '$filePath' is an Retort source file. These files are the upstream source-of-truth and must not be modified directly by AI agents. To propose changes, create a PR to the agentkit-forge repository targeting the relevant spec or template. If you need to change project configuration, edit the YAML specs in .agentkit/spec/ and run 'pnpm -C .agentkit retort:sync'." @{ hookSpecificOutput = @{ hookEventName = 'PreToolUse' diff --git a/.agentkit/templates/claude/hooks/protect-templates.sh b/.agentkit/templates/claude/hooks/protect-templates.sh index 72777bd8..de961749 100755 --- a/.agentkit/templates/claude/hooks/protect-templates.sh +++ b/.agentkit/templates/claude/hooks/protect-templates.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # --------------------------------------------------------------------------- # Hook: PreToolUse (matcher: Write|Edit) -# Purpose: Block AI writes to AgentKit Forge source files (templates, spec, +# Purpose: Block AI writes to Retort source files (templates, spec, # engines, overlays) in DOWNSTREAM repos. In the agentkit-forge source # repo itself, agents ARE the maintainers and need full access. # Stdin: JSON with session_id, cwd, hook_event_name, tool_name, tool_input @@ -47,7 +47,7 @@ PROTECTED_PATTERNS=( for pattern in "${PROTECTED_PATTERNS[@]}"; do if echo "$FILE_PATH" | grep -qE "$pattern"; then jq -n \ - --arg reason "Blocked: '${FILE_PATH}' is an AgentKit Forge source file. These files are the upstream source-of-truth and must not be modified directly by AI agents. To propose changes, create a PR to the agentkit-forge repository targeting the relevant spec or template. If you need to change project configuration, edit the YAML specs in .agentkit/spec/ and run '{{packageManager}} -C .agentkit agentkit:sync'." \ + --arg reason "Blocked: '${FILE_PATH}' is an Retort source file. These files are the upstream source-of-truth and must not be modified directly by AI agents. To propose changes, create a PR to the agentkit-forge repository targeting the relevant spec or template. If you need to change project configuration, edit the YAML specs in .agentkit/spec/ and run '{{packageManager}} -C .agentkit retort:sync'." \ '{ hookSpecificOutput: { hookEventName: "PreToolUse", diff --git a/.agentkit/templates/claude/rules/agent-conduct.md b/.agentkit/templates/claude/rules/agent-conduct.md index 9b4b4310..3c8abbf1 100644 --- a/.agentkit/templates/claude/rules/agent-conduct.md +++ b/.agentkit/templates/claude/rules/agent-conduct.md @@ -1,6 +1,6 @@ - + - + @@ -50,5 +50,5 @@ Applies across all AI coding tools (Claude, Cursor, Copilot, Windsurf, Cline, et ## Generated Files -- **Never** edit files with `` -- Modify upstream spec in `.agentkit/spec/` and run `agentkit sync` instead +- **Never** edit files with `` +- Modify upstream spec in `.agentkit/spec/` and run `retort sync` instead diff --git a/.agentkit/templates/claude/rules/blockchain.md b/.agentkit/templates/claude/rules/blockchain.md index f8167775..cf556a24 100644 --- a/.agentkit/templates/claude/rules/blockchain.md +++ b/.agentkit/templates/claude/rules/blockchain.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/ci-cd.md b/.agentkit/templates/claude/rules/ci-cd.md index e7de0544..182cb77e 100644 --- a/.agentkit/templates/claude/rules/ci-cd.md +++ b/.agentkit/templates/claude/rules/ci-cd.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/dependency-management.md b/.agentkit/templates/claude/rules/dependency-management.md index 4d253b3b..65d971b2 100644 --- a/.agentkit/templates/claude/rules/dependency-management.md +++ b/.agentkit/templates/claude/rules/dependency-management.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/documentation.md b/.agentkit/templates/claude/rules/documentation.md index 0efa27e9..418fc503 100644 --- a/.agentkit/templates/claude/rules/documentation.md +++ b/.agentkit/templates/claude/rules/documentation.md @@ -1,6 +1,6 @@ - + - + @@ -24,8 +24,8 @@ All documentation lives in `docs/` under these categories: ## Generated Files -- Files with `` are sync output -- **Never** edit them directly — modify `.agentkit/spec/` and run `agentkit sync` +- Files with `` are sync output +- **Never** edit them directly — modify `.agentkit/spec/` and run `retort sync` - CI drift check will fail if generated output is out of sync with spec ## Changelog diff --git a/.agentkit/templates/claude/rules/dotnet.md b/.agentkit/templates/claude/rules/dotnet.md index e9805ddb..c286bf21 100644 --- a/.agentkit/templates/claude/rules/dotnet.md +++ b/.agentkit/templates/claude/rules/dotnet.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/git-workflow.md b/.agentkit/templates/claude/rules/git-workflow.md index fef7133f..3e660a73 100644 --- a/.agentkit/templates/claude/rules/git-workflow.md +++ b/.agentkit/templates/claude/rules/git-workflow.md @@ -1,6 +1,6 @@ - + - + @@ -35,8 +35,8 @@ These rules govern branching, committing, pull requests, and merge strategy. ## Generated Files -- Files with the header `GENERATED by AgentKit Forge — DO NOT EDIT` are sync outputs -- **Never edit generated files directly** — modify `.agentkit/spec/*.yaml` then run `pnpm -C .agentkit agentkit:sync` +- Files with the header `GENERATED by Retort — DO NOT EDIT` are sync outputs +- **Never edit generated files directly** — modify `.agentkit/spec/*.yaml` then run `pnpm -C .agentkit retort:sync` - After running sync, commit both the spec change and the regenerated outputs - CI runs a drift check — if generated files are out of sync the build will fail diff --git a/.agentkit/templates/claude/rules/iac.md b/.agentkit/templates/claude/rules/iac.md index e50acdbd..5a688bfe 100644 --- a/.agentkit/templates/claude/rules/iac.md +++ b/.agentkit/templates/claude/rules/iac.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/python.md b/.agentkit/templates/claude/rules/python.md index 2382a415..0d2ad477 100644 --- a/.agentkit/templates/claude/rules/python.md +++ b/.agentkit/templates/claude/rules/python.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/quality.md b/.agentkit/templates/claude/rules/quality.md index 9100d11f..553a1027 100644 --- a/.agentkit/templates/claude/rules/quality.md +++ b/.agentkit/templates/claude/rules/quality.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/rust.md b/.agentkit/templates/claude/rules/rust.md index 8c723d3a..88ac7ef4 100644 --- a/.agentkit/templates/claude/rules/rust.md +++ b/.agentkit/templates/claude/rules/rust.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/security.md b/.agentkit/templates/claude/rules/security.md index 0870b049..224925eb 100644 --- a/.agentkit/templates/claude/rules/security.md +++ b/.agentkit/templates/claude/rules/security.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/template-protection.md b/.agentkit/templates/claude/rules/template-protection.md index 9712d470..3a3abe18 100644 --- a/.agentkit/templates/claude/rules/template-protection.md +++ b/.agentkit/templates/claude/rules/template-protection.md @@ -1,6 +1,6 @@ - + - + @@ -9,8 +9,8 @@ ## Source-of-Truth Directories -The following directories are the **upstream source-of-truth** for AgentKit Forge. -They generate all AI tool configurations via `agentkit sync`. **AI agents MUST NOT +The following directories are the **upstream source-of-truth** for Retort. +They generate all AI tool configurations via `retort sync`. **AI agents MUST NOT modify these files directly.** | Directory | Purpose | @@ -26,10 +26,10 @@ modify these files directly.** When you need to change AI tool behavior, generated rules, commands, or team definitions: 1. **Do NOT edit files in `.agentkit/templates/`, `.agentkit/engines/`, `.agentkit/overlays/`, or `.agentkit/bin/`** — they are protected by a PreToolUse hook -2. **Do NOT edit generated files** marked `` +2. **Do NOT edit generated files** marked `` 3. **Instead**, describe the desired change and recommend the user: - Modify the relevant YAML spec in `.agentkit/spec/` (this is the intended edit point) - - Run `pnpm -C .agentkit agentkit:sync` to regenerate + - Run `pnpm -C .agentkit retort:sync` to regenerate - Or create a PR to the agentkit-forge repository for template/engine changes ## What You CAN Modify @@ -41,7 +41,7 @@ When you need to change AI tool behavior, generated rules, commands, or team def ## Rationale -AgentKit Forge follows a **spec-driven architecture**: YAML specs are the single source +Retort follows a **spec-driven architecture**: YAML specs are the single source of truth, templates transform specs into tool-specific configs, and the sync engine renders the output. Direct edits to templates or specs by AI agents would: diff --git a/.agentkit/templates/claude/rules/testing.md b/.agentkit/templates/claude/rules/testing.md index 88001cdc..bb4408c2 100644 --- a/.agentkit/templates/claude/rules/testing.md +++ b/.agentkit/templates/claude/rules/testing.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/rules/typescript.md b/.agentkit/templates/claude/rules/typescript.md index 0bfe1ebd..5c21f8e9 100644 --- a/.agentkit/templates/claude/rules/typescript.md +++ b/.agentkit/templates/claude/rules/typescript.md @@ -1,6 +1,6 @@ - + - + diff --git a/.agentkit/templates/claude/state/schema.json b/.agentkit/templates/claude/state/schema.json index 7bfdc405..5206822c 100644 --- a/.agentkit/templates/claude/state/schema.json +++ b/.agentkit/templates/claude/state/schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AgentKit Forge Orchestrator State", + "title": "Retort Orchestrator State", "description": "Schema for the orchestrator state file managed by /orchestrate", "type": "object", "required": ["schema_version", "repo_id", "current_phase", "phase_name", "team_progress"], diff --git a/.agentkit/templates/copilot/agents/TEMPLATE.agent.md b/.agentkit/templates/copilot/agents/TEMPLATE.agent.md index f626c889..65c3c3e1 100644 --- a/.agentkit/templates/copilot/agents/TEMPLATE.agent.md +++ b/.agentkit/templates/copilot/agents/TEMPLATE.agent.md @@ -86,7 +86,7 @@ Scan the codebase within your focus area before making changes. Read `UNIFIED_AG - CI enforces this — non-conforming titles will block merge - **Commit messages** must also follow Conventional Commits - **Breaking changes** (`!:` in title or `BREAKING` keyword) require a `## Breaking Changes` section, ADR reference, or migration guide in the PR body — CI checks for this -- **Never edit files marked `GENERATED by AgentKit Forge — DO NOT EDIT`** - - Modify the source spec in `.agentkit/spec/` and run `pnpm -C .agentkit agentkit:sync` +- **Never edit files marked `GENERATED by Retort — DO NOT EDIT`** + - Modify the source spec in `.agentkit/spec/` and run `pnpm -C .agentkit retort:sync` - Commit the spec change and regenerated outputs together - CI runs a drift check and will fail if generated files are out of sync diff --git a/.agentkit/templates/copilot/copilot-instructions.md b/.agentkit/templates/copilot/copilot-instructions.md index 113a77d3..824ef451 100644 --- a/.agentkit/templates/copilot/copilot-instructions.md +++ b/.agentkit/templates/copilot/copilot-instructions.md @@ -4,7 +4,7 @@ # GitHub Copilot Instructions -You are assisting with a project managed by the AgentKit Forge framework. +You are assisting with a project managed by the Retort framework. Follow these instructions for all code generation, suggestions, and chat responses. ## Project Context @@ -68,7 +68,7 @@ understand team assignments, ownership boundaries, and escalation paths. (TypeScript strict mode, Rust's type system, Python type hints with mypy). {{#if commitConvention}}- **Conventional Commits (MANDATORY)**: All commit messages AND PR titles must use the format `type(scope): description`. Types: feat, fix, docs, style, refactor, test, chore, ci, perf, build, revert. Do NOT use natural-language titles like "Plan: Something" or "Update files" — CI will reject them.{{/if}} {{#if branchStrategy}}- Branch strategy: {{branchStrategy}}.{{/if}} -- **Generated file sync**: After editing any file in `.agentkit/spec/`, run `pnpm -C .agentkit agentkit:sync` and commit the regenerated output. CI drift checks will fail otherwise. +- **Generated file sync**: After editing any file in `.agentkit/spec/`, run `pnpm -C .agentkit retort:sync` and commit the regenerated output. CI drift checks will fail otherwise. {{#if hasLogging}} diff --git a/.agentkit/templates/copilot/prompts/TEMPLATE.prompt.md b/.agentkit/templates/copilot/prompts/TEMPLATE.prompt.md index 27ff18d6..f0eb9942 100644 --- a/.agentkit/templates/copilot/prompts/TEMPLATE.prompt.md +++ b/.agentkit/templates/copilot/prompts/TEMPLATE.prompt.md @@ -18,7 +18,7 @@ last_updated: '{{syncDate}}' ## Instructions -When invoked, follow the AgentKit Forge orchestration lifecycle: +When invoked, follow the Retort orchestration lifecycle: 1. **Understand** the request and any arguments provided 2. **Scan** relevant files to build context diff --git a/.agentkit/templates/cursor/commands/TEMPLATE.md b/.agentkit/templates/cursor/commands/TEMPLATE.md index 29f0d4d9..6fc0dbe6 100644 --- a/.agentkit/templates/cursor/commands/TEMPLATE.md +++ b/.agentkit/templates/cursor/commands/TEMPLATE.md @@ -12,7 +12,7 @@ ## Instructions -When invoked, follow the AgentKit Forge orchestration lifecycle: +When invoked, follow the Retort orchestration lifecycle: 1. **Understand** the request and any arguments provided 2. **Scan** relevant files to build context diff --git a/.agentkit/templates/cursor/rules/project-context.mdc b/.agentkit/templates/cursor/rules/project-context.mdc index 7fb06395..98af57d5 100644 --- a/.agentkit/templates/cursor/rules/project-context.mdc +++ b/.agentkit/templates/cursor/rules/project-context.mdc @@ -10,7 +10,7 @@ last_updated: "{{syncDate}}" --- # Project Context -This repository uses the AgentKit Forge unified agent team framework (v{{version}}). +This repository uses the Retort unified agent team framework (v{{version}}). {{#if showLanguageProfileDiagnostics}} ## Language Profile Diagnostics @@ -43,4 +43,4 @@ This repository uses the AgentKit Forge unified agent team framework (v{{version - Always include validation commands in summaries - PR titles must use Conventional Commits format: `type(scope): description` — CI rejects non-conforming titles - Breaking changes (`!:` or `BREAKING` in PR title) require a `## Breaking Changes` section in the PR body -- Never edit files marked `GENERATED by AgentKit Forge — DO NOT EDIT` — modify `.agentkit/spec/` and run sync +- Never edit files marked `GENERATED by Retort — DO NOT EDIT` — modify `.agentkit/spec/` and run sync diff --git a/.agentkit/templates/cursor/teams/TEMPLATE.mdc b/.agentkit/templates/cursor/teams/TEMPLATE.mdc index cdce96c2..3e9c9a3a 100644 --- a/.agentkit/templates/cursor/teams/TEMPLATE.mdc +++ b/.agentkit/templates/cursor/teams/TEMPLATE.mdc @@ -29,6 +29,6 @@ Scope all operations to the team's owned paths. - CI enforces this — non-conforming titles will block merge - **Commit messages** must also follow Conventional Commits - **Breaking changes** (`!:` in title or `BREAKING` keyword) require a `## Breaking Changes` section, ADR reference, or migration guide in the PR body — CI checks for this -- **Never edit files marked `GENERATED by AgentKit Forge — DO NOT EDIT`** - - Modify the source spec in `.agentkit/spec/` and run `pnpm -C .agentkit agentkit:sync` +- **Never edit files marked `GENERATED by Retort — DO NOT EDIT`** + - Modify the source spec in `.agentkit/spec/` and run `pnpm -C .agentkit retort:sync` - CI runs a drift check and will fail if generated files are out of sync diff --git a/.agentkit/templates/docs/README.md b/.agentkit/templates/docs/README.md index c8e6848c..92f5a36d 100644 --- a/.agentkit/templates/docs/README.md +++ b/.agentkit/templates/docs/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: always --- - + - + # {{repoName}} — Documentation @@ -43,9 +43,9 @@ documentation category maintained by this repository. ## Conventions - Placeholder tokens `{{repoName}}` and `{{version}}` are replaced at sync time. -- Do **not** edit generated files directly — run `pnpm -C .agentkit agentkit:sync` - to regenerate them from the AgentKit Forge spec and overlays. +- Do **not** edit generated files directly — run `pnpm -C .agentkit retort:sync` + to regenerate them from the Retort spec and overlays. --- -Generated by AgentKit Forge v{{version}} +Generated by Retort v{{version}} diff --git a/.agentkit/templates/docs/api/01_overview.md b/.agentkit/templates/docs/api/01_overview.md index 22127093..22d96b33 100644 --- a/.agentkit/templates/docs/api/01_overview.md +++ b/.agentkit/templates/docs/api/01_overview.md @@ -1,6 +1,6 @@ - + - + # API Overview diff --git a/.agentkit/templates/docs/api/02_endpoints.md b/.agentkit/templates/docs/api/02_endpoints.md index 1401bf95..ce488a02 100644 --- a/.agentkit/templates/docs/api/02_endpoints.md +++ b/.agentkit/templates/docs/api/02_endpoints.md @@ -1,6 +1,6 @@ - + - + # Endpoint Reference diff --git a/.agentkit/templates/docs/api/03_authentication.md b/.agentkit/templates/docs/api/03_authentication.md index e089c28a..feb8eb35 100644 --- a/.agentkit/templates/docs/api/03_authentication.md +++ b/.agentkit/templates/docs/api/03_authentication.md @@ -1,6 +1,6 @@ - + - + # Authentication diff --git a/.agentkit/templates/docs/api/04_examples.md b/.agentkit/templates/docs/api/04_examples.md index d4965d96..d7de239c 100644 --- a/.agentkit/templates/docs/api/04_examples.md +++ b/.agentkit/templates/docs/api/04_examples.md @@ -1,6 +1,6 @@ - + - + # API Examples diff --git a/.agentkit/templates/docs/api/05_errors.md b/.agentkit/templates/docs/api/05_errors.md index f76e8660..55ca1177 100644 --- a/.agentkit/templates/docs/api/05_errors.md +++ b/.agentkit/templates/docs/api/05_errors.md @@ -1,6 +1,6 @@ - + - + # API Errors diff --git a/.agentkit/templates/docs/api/06_versioning.md b/.agentkit/templates/docs/api/06_versioning.md index ecf54f79..4925ca0e 100644 --- a/.agentkit/templates/docs/api/06_versioning.md +++ b/.agentkit/templates/docs/api/06_versioning.md @@ -1,6 +1,6 @@ - + - + # API Versioning diff --git a/.agentkit/templates/docs/api/README.md b/.agentkit/templates/docs/api/README.md index 79d2e80c..51b52b2f 100644 --- a/.agentkit/templates/docs/api/README.md +++ b/.agentkit/templates/docs/api/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # API Docs Index diff --git a/.agentkit/templates/docs/architecture/01_overview.md b/.agentkit/templates/docs/architecture/01_overview.md index 55776c79..888ce46f 100644 --- a/.agentkit/templates/docs/architecture/01_overview.md +++ b/.agentkit/templates/docs/architecture/01_overview.md @@ -1,6 +1,6 @@ - + - + # Architecture Overview diff --git a/.agentkit/templates/docs/architecture/README.md b/.agentkit/templates/docs/architecture/README.md index c8e6f38d..44649e38 100644 --- a/.agentkit/templates/docs/architecture/README.md +++ b/.agentkit/templates/docs/architecture/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # Architecture Docs Index diff --git a/.agentkit/templates/docs/architecture/decisions/01-adopt-agentkit-forge.md b/.agentkit/templates/docs/architecture/decisions/01-adopt-agentkit-forge.md index 39e93a24..31984c1f 100644 --- a/.agentkit/templates/docs/architecture/decisions/01-adopt-agentkit-forge.md +++ b/.agentkit/templates/docs/architecture/decisions/01-adopt-agentkit-forge.md @@ -1,8 +1,8 @@ - + - + -# ADR-01: Adopt AgentKit Forge +# ADR-01: Adopt Retort ## Status @@ -18,13 +18,13 @@ The {{repoName}} project needed a standardised way to manage documentation, project structure, and developer tooling. Without a shared scaffold, teams tend to diverge in layout, conventions, and documentation quality. -AgentKit Forge provides an opinionated but flexible template system that +Retort provides an opinionated but flexible template system that generates and maintains project documentation, CI/CD configuration, and coding standards from a single source of truth. ## Decision -We will adopt AgentKit Forge v{{version}} as the documentation and +We will adopt Retort v{{version}} as the documentation and project scaffolding tool for {{repoName}}. All generated files will carry the standard `GENERATED` header and must not @@ -36,7 +36,7 @@ be edited manually. Customisations are applied via the overlay system at ### Positive - Consistent documentation structure across all projects. -- Single command (`pnpm -C .agentkit agentkit:sync`) to regenerate files. +- Single command (`pnpm -C .agentkit retort:sync`) to regenerate files. - Overlay system allows per-project customisation without forking templates. ### Negative @@ -50,5 +50,5 @@ be edited manually. Customisations are applied via the overlay system at ## References -- [AgentKit Forge Documentation](../../README.md) +- [Retort Documentation](../../README.md) - [Architecture Overview](../01_overview.md) diff --git a/.agentkit/templates/docs/architecture/decisions/02-fallback-policy-tokens-problem.md b/.agentkit/templates/docs/architecture/decisions/02-fallback-policy-tokens-problem.md index a403321a..fa66875b 100644 --- a/.agentkit/templates/docs/architecture/decisions/02-fallback-policy-tokens-problem.md +++ b/.agentkit/templates/docs/architecture/decisions/02-fallback-policy-tokens-problem.md @@ -1,6 +1,6 @@ - + - + # ADR-02: Fallback Policy for Missing Evidence Metric diff --git a/.agentkit/templates/docs/architecture/decisions/03-tooling-strategy.md b/.agentkit/templates/docs/architecture/decisions/03-tooling-strategy.md index 75018de0..063e8b96 100644 --- a/.agentkit/templates/docs/architecture/decisions/03-tooling-strategy.md +++ b/.agentkit/templates/docs/architecture/decisions/03-tooling-strategy.md @@ -1,6 +1,6 @@ - + - + # ADR-03: Tooling Strategy — Tool Selection @@ -77,5 +77,5 @@ Use the current ADR version as a baseline and fill in a repository-specific weig ## References -- [ADR-01: Adopt AgentKit Forge](01-adopt-agentkit-forge.md) +- [ADR-01: Adopt Retort](01-adopt-agentkit-forge.md) - [Architecture Overview](../01_overview.md) diff --git a/.agentkit/templates/docs/architecture/decisions/04-static-security-analysis-depth-tooling.md b/.agentkit/templates/docs/architecture/decisions/04-static-security-analysis-depth-tooling.md index 6519902f..6031d34c 100644 --- a/.agentkit/templates/docs/architecture/decisions/04-static-security-analysis-depth-tooling.md +++ b/.agentkit/templates/docs/architecture/decisions/04-static-security-analysis-depth-tooling.md @@ -1,6 +1,6 @@ - + - + # ADR-04: Static Security Analysis Depth — Tool Selection diff --git a/.agentkit/templates/docs/architecture/decisions/05-dependency-supply-chain-detection-tooling.md b/.agentkit/templates/docs/architecture/decisions/05-dependency-supply-chain-detection-tooling.md index 4e2f59f6..ae0354f6 100644 --- a/.agentkit/templates/docs/architecture/decisions/05-dependency-supply-chain-detection-tooling.md +++ b/.agentkit/templates/docs/architecture/decisions/05-dependency-supply-chain-detection-tooling.md @@ -1,6 +1,6 @@ - + - + # ADR-05: Dependency and Supply-Chain Detection — Tool Selection diff --git a/.agentkit/templates/docs/architecture/decisions/06-code-quality-maintainability-signal-tooling.md b/.agentkit/templates/docs/architecture/decisions/06-code-quality-maintainability-signal-tooling.md index bec051bf..83b78eb3 100644 --- a/.agentkit/templates/docs/architecture/decisions/06-code-quality-maintainability-signal-tooling.md +++ b/.agentkit/templates/docs/architecture/decisions/06-code-quality-maintainability-signal-tooling.md @@ -1,6 +1,6 @@ - + - + # ADR-06: Code Quality and Maintainability Signal — Tool Selection diff --git a/.agentkit/templates/docs/architecture/decisions/README.md b/.agentkit/templates/docs/architecture/decisions/README.md index 823ea2dd..9459b8f5 100644 --- a/.agentkit/templates/docs/architecture/decisions/README.md +++ b/.agentkit/templates/docs/architecture/decisions/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # ADR Index diff --git a/.agentkit/templates/docs/architecture/diagrams/README.md b/.agentkit/templates/docs/architecture/diagrams/README.md index 08e8dac3..e9713a5b 100644 --- a/.agentkit/templates/docs/architecture/diagrams/README.md +++ b/.agentkit/templates/docs/architecture/diagrams/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # Architecture Diagrams Index diff --git a/.agentkit/templates/docs/architecture/specs/01_functional_spec.md b/.agentkit/templates/docs/architecture/specs/01_functional_spec.md index f60442ce..4efef6fe 100644 --- a/.agentkit/templates/docs/architecture/specs/01_functional_spec.md +++ b/.agentkit/templates/docs/architecture/specs/01_functional_spec.md @@ -1,6 +1,6 @@ - + - + # Functional Specification diff --git a/.agentkit/templates/docs/architecture/specs/02_technical_spec.md b/.agentkit/templates/docs/architecture/specs/02_technical_spec.md index b09b15b8..f9367ef1 100644 --- a/.agentkit/templates/docs/architecture/specs/02_technical_spec.md +++ b/.agentkit/templates/docs/architecture/specs/02_technical_spec.md @@ -1,6 +1,6 @@ - + - + # Technical Specification diff --git a/.agentkit/templates/docs/architecture/specs/03_api_spec.md b/.agentkit/templates/docs/architecture/specs/03_api_spec.md index c948b741..da178259 100644 --- a/.agentkit/templates/docs/architecture/specs/03_api_spec.md +++ b/.agentkit/templates/docs/architecture/specs/03_api_spec.md @@ -1,6 +1,6 @@ - + - + # API Specification diff --git a/.agentkit/templates/docs/architecture/specs/04_data_models.md b/.agentkit/templates/docs/architecture/specs/04_data_models.md index 7fc902cf..8c6003ad 100644 --- a/.agentkit/templates/docs/architecture/specs/04_data_models.md +++ b/.agentkit/templates/docs/architecture/specs/04_data_models.md @@ -1,6 +1,6 @@ - + - + # Data Models diff --git a/.agentkit/templates/docs/architecture/specs/README.md b/.agentkit/templates/docs/architecture/specs/README.md index e53fecd4..4a76c44d 100644 --- a/.agentkit/templates/docs/architecture/specs/README.md +++ b/.agentkit/templates/docs/architecture/specs/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # Specs Docs Index diff --git a/.agentkit/templates/docs/engineering/01_setup.md b/.agentkit/templates/docs/engineering/01_setup.md index 0f6b7954..ad1396e2 100644 --- a/.agentkit/templates/docs/engineering/01_setup.md +++ b/.agentkit/templates/docs/engineering/01_setup.md @@ -1,6 +1,6 @@ - + - + # Development Setup diff --git a/.agentkit/templates/docs/engineering/02_coding_standards.md b/.agentkit/templates/docs/engineering/02_coding_standards.md index 3f70f69e..80004ab3 100644 --- a/.agentkit/templates/docs/engineering/02_coding_standards.md +++ b/.agentkit/templates/docs/engineering/02_coding_standards.md @@ -1,6 +1,6 @@ - + - + # Coding Standards diff --git a/.agentkit/templates/docs/engineering/03_testing.md b/.agentkit/templates/docs/engineering/03_testing.md index 94bf3da8..4eca117b 100644 --- a/.agentkit/templates/docs/engineering/03_testing.md +++ b/.agentkit/templates/docs/engineering/03_testing.md @@ -1,6 +1,6 @@ - + - + # Testing Guide diff --git a/.agentkit/templates/docs/engineering/04_git_workflow.md b/.agentkit/templates/docs/engineering/04_git_workflow.md index 1547be6e..19e48a3a 100644 --- a/.agentkit/templates/docs/engineering/04_git_workflow.md +++ b/.agentkit/templates/docs/engineering/04_git_workflow.md @@ -1,6 +1,6 @@ - + - + # Git Workflow diff --git a/.agentkit/templates/docs/engineering/05_security.md b/.agentkit/templates/docs/engineering/05_security.md index a9dedd17..81be85dc 100644 --- a/.agentkit/templates/docs/engineering/05_security.md +++ b/.agentkit/templates/docs/engineering/05_security.md @@ -1,6 +1,6 @@ - + - + # Security Practices diff --git a/.agentkit/templates/docs/engineering/06_pr_documentation.md b/.agentkit/templates/docs/engineering/06_pr_documentation.md index e5ef1d7a..8b203943 100644 --- a/.agentkit/templates/docs/engineering/06_pr_documentation.md +++ b/.agentkit/templates/docs/engineering/06_pr_documentation.md @@ -1,6 +1,6 @@ - + - + # PR Documentation Strategy diff --git a/.agentkit/templates/docs/engineering/07_changelog.md b/.agentkit/templates/docs/engineering/07_changelog.md index 514a9bf2..6ce1d9dc 100644 --- a/.agentkit/templates/docs/engineering/07_changelog.md +++ b/.agentkit/templates/docs/engineering/07_changelog.md @@ -1,6 +1,6 @@ - + - + # Changelog Best Practices & Tooling Guide diff --git a/.agentkit/templates/docs/engineering/README.md b/.agentkit/templates/docs/engineering/README.md index 188d02a0..44cbaeb9 100644 --- a/.agentkit/templates/docs/engineering/README.md +++ b/.agentkit/templates/docs/engineering/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # Engineering Docs Index diff --git a/.agentkit/templates/docs/history/README.md b/.agentkit/templates/docs/history/README.md index 602aea8c..2a4d737a 100644 --- a/.agentkit/templates/docs/history/README.md +++ b/.agentkit/templates/docs/history/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # History diff --git a/.agentkit/templates/docs/integrations/01_external_apis.md b/.agentkit/templates/docs/integrations/01_external_apis.md index 254b31e9..9a605267 100644 --- a/.agentkit/templates/docs/integrations/01_external_apis.md +++ b/.agentkit/templates/docs/integrations/01_external_apis.md @@ -1,6 +1,6 @@ - + - + # External APIs diff --git a/.agentkit/templates/docs/integrations/02_webhooks.md b/.agentkit/templates/docs/integrations/02_webhooks.md index 5a5378a4..812076a0 100644 --- a/.agentkit/templates/docs/integrations/02_webhooks.md +++ b/.agentkit/templates/docs/integrations/02_webhooks.md @@ -1,6 +1,6 @@ - + - + # Webhooks diff --git a/.agentkit/templates/docs/integrations/03_sdk.md b/.agentkit/templates/docs/integrations/03_sdk.md index 8af0cfc1..59ac49c4 100644 --- a/.agentkit/templates/docs/integrations/03_sdk.md +++ b/.agentkit/templates/docs/integrations/03_sdk.md @@ -1,6 +1,6 @@ - + - + # SDK Guide diff --git a/.agentkit/templates/docs/integrations/README.md b/.agentkit/templates/docs/integrations/README.md index 1e500f2b..697a99b7 100644 --- a/.agentkit/templates/docs/integrations/README.md +++ b/.agentkit/templates/docs/integrations/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # Integrations Docs Index diff --git a/.agentkit/templates/docs/operations/01_deployment.md b/.agentkit/templates/docs/operations/01_deployment.md index dc256a0a..9e76db23 100644 --- a/.agentkit/templates/docs/operations/01_deployment.md +++ b/.agentkit/templates/docs/operations/01_deployment.md @@ -1,6 +1,6 @@ - + - + # Deployment Guide diff --git a/.agentkit/templates/docs/operations/02_monitoring.md b/.agentkit/templates/docs/operations/02_monitoring.md index 71400495..d839fe01 100644 --- a/.agentkit/templates/docs/operations/02_monitoring.md +++ b/.agentkit/templates/docs/operations/02_monitoring.md @@ -1,6 +1,6 @@ - + - + # Monitoring diff --git a/.agentkit/templates/docs/operations/03_incident_response.md b/.agentkit/templates/docs/operations/03_incident_response.md index 2cf4ae68..847c4076 100644 --- a/.agentkit/templates/docs/operations/03_incident_response.md +++ b/.agentkit/templates/docs/operations/03_incident_response.md @@ -1,6 +1,6 @@ - + - + # Incident Response diff --git a/.agentkit/templates/docs/operations/04_troubleshooting.md b/.agentkit/templates/docs/operations/04_troubleshooting.md index 2a69fa3a..46152154 100644 --- a/.agentkit/templates/docs/operations/04_troubleshooting.md +++ b/.agentkit/templates/docs/operations/04_troubleshooting.md @@ -1,6 +1,6 @@ - + - + # Troubleshooting diff --git a/.agentkit/templates/docs/operations/05_slos_slis.md b/.agentkit/templates/docs/operations/05_slos_slis.md index c39e8c36..5da285da 100644 --- a/.agentkit/templates/docs/operations/05_slos_slis.md +++ b/.agentkit/templates/docs/operations/05_slos_slis.md @@ -1,6 +1,6 @@ - + - + # SLOs and SLIs diff --git a/.agentkit/templates/docs/operations/README.md b/.agentkit/templates/docs/operations/README.md index 9793bf1d..b35f0e3e 100644 --- a/.agentkit/templates/docs/operations/README.md +++ b/.agentkit/templates/docs/operations/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # Operations Docs Index diff --git a/.agentkit/templates/docs/product/01_prd.md b/.agentkit/templates/docs/product/01_prd.md index 74558993..7b8ac6ce 100644 --- a/.agentkit/templates/docs/product/01_prd.md +++ b/.agentkit/templates/docs/product/01_prd.md @@ -1,6 +1,6 @@ - + - + # Product Requirements Document diff --git a/.agentkit/templates/docs/product/02_user_stories.md b/.agentkit/templates/docs/product/02_user_stories.md index 09789e22..a7f0b086 100644 --- a/.agentkit/templates/docs/product/02_user_stories.md +++ b/.agentkit/templates/docs/product/02_user_stories.md @@ -1,6 +1,6 @@ - + - + # User Stories diff --git a/.agentkit/templates/docs/product/03_roadmap.md b/.agentkit/templates/docs/product/03_roadmap.md index 00b2eaaf..be2b8f22 100644 --- a/.agentkit/templates/docs/product/03_roadmap.md +++ b/.agentkit/templates/docs/product/03_roadmap.md @@ -1,6 +1,6 @@ - + - + # Roadmap diff --git a/.agentkit/templates/docs/product/04_personas.md b/.agentkit/templates/docs/product/04_personas.md index 51f75391..64ffdd38 100644 --- a/.agentkit/templates/docs/product/04_personas.md +++ b/.agentkit/templates/docs/product/04_personas.md @@ -1,6 +1,6 @@ - + - + # User Personas diff --git a/.agentkit/templates/docs/product/README.md b/.agentkit/templates/docs/product/README.md index f839cb4f..ce7bcf49 100644 --- a/.agentkit/templates/docs/product/README.md +++ b/.agentkit/templates/docs/product/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # Product Docs Index diff --git a/.agentkit/templates/docs/reference/01_glossary.md b/.agentkit/templates/docs/reference/01_glossary.md index e09a7fd7..eb211d9b 100644 --- a/.agentkit/templates/docs/reference/01_glossary.md +++ b/.agentkit/templates/docs/reference/01_glossary.md @@ -1,17 +1,17 @@ - + - + # Glossary -## AgentKit Forge Terms +## Retort Terms | Term | Definition | | -------------------- | ----------------------------------------------------------------------------------------------------------------------- | -| **AgentKit Forge** | An opinionated project scaffolding and documentation generation tool. | +| **Retort** | An opinionated project scaffolding and documentation generation tool. | | **Spec** | The source-of-truth configuration that defines project structure and templates. | | **Overlay** | A per-project customisation layer applied on top of the base spec. | -| **Sync** | The process of regenerating files from the spec and overlays (`agentkit:sync`). | +| **Sync** | The process of regenerating files from the spec and overlays (`retort:sync`). | | **Template** | A file containing mustache-style placeholders ({{key}}) that are resolved during sync. | | **GENERATED header** | The comment block at the top of generated files indicating they should not be edited manually. | diff --git a/.agentkit/templates/docs/reference/02_faq.md b/.agentkit/templates/docs/reference/02_faq.md index 27b4eadf..1bbf3b1d 100644 --- a/.agentkit/templates/docs/reference/02_faq.md +++ b/.agentkit/templates/docs/reference/02_faq.md @@ -1,6 +1,6 @@ - + - + # Frequently Asked Questions @@ -14,18 +14,18 @@ See the [Development Setup](../engineering/01_setup.md) guide. -## AgentKit Forge +## Retort ### What are the generated files? -Files with the `GENERATED by AgentKit Forge` header are produced by the sync +Files with the `GENERATED by Retort` header are produced by the sync process and should not be edited directly. Customise them via overlays at `.agentkit/overlays/{{repoName}}`. ### How do I regenerate the documentation? ```bash -pnpm -C .agentkit agentkit:sync +pnpm -C .agentkit retort:sync ``` ### Can I add custom documentation? diff --git a/.agentkit/templates/docs/reference/03_changelog.md b/.agentkit/templates/docs/reference/03_changelog.md index bf126084..bc281ce7 100644 --- a/.agentkit/templates/docs/reference/03_changelog.md +++ b/.agentkit/templates/docs/reference/03_changelog.md @@ -1,6 +1,6 @@ - + - + # Changelog diff --git a/.agentkit/templates/docs/reference/04_contributing.md b/.agentkit/templates/docs/reference/04_contributing.md index 8e3c14b9..7d27cf32 100644 --- a/.agentkit/templates/docs/reference/04_contributing.md +++ b/.agentkit/templates/docs/reference/04_contributing.md @@ -1,6 +1,6 @@ - + - + # Contributing diff --git a/.agentkit/templates/docs/reference/README.md b/.agentkit/templates/docs/reference/README.md index 29f25c4f..c8252447 100644 --- a/.agentkit/templates/docs/reference/README.md +++ b/.agentkit/templates/docs/reference/README.md @@ -2,9 +2,9 @@ agentkit: scaffold: managed --- - + - + # Reference Docs Index diff --git a/.agentkit/templates/gemini/config.yaml b/.agentkit/templates/gemini/config.yaml index dfee657a..4108fc08 100644 --- a/.agentkit/templates/gemini/config.yaml +++ b/.agentkit/templates/gemini/config.yaml @@ -1,5 +1,5 @@ # Gemini Code Assist configuration -# Generated by AgentKit Forge — see .agentkit/ for source +# Generated by Retort — see .agentkit/ for source # Format: YAML config for Gemini Code Assist code review behaviour. # Docs: https://developers.google.com/gemini-code-assist/docs/customize-gemini-behavior-github diff --git a/.agentkit/templates/github/CODEOWNERS b/.agentkit/templates/github/CODEOWNERS index 21f1a380..c98caea2 100644 --- a/.agentkit/templates/github/CODEOWNERS +++ b/.agentkit/templates/github/CODEOWNERS @@ -1,4 +1,4 @@ -# GENERATED by AgentKit Forge v{{version}} — scaffold-once +# GENERATED by Retort v{{version}} — scaffold-once # Source: .agentkit/spec/project.yaml (githubSlug) # This file is written once on initial sync. Customise freely after generation. # @@ -14,7 +14,7 @@ * @{{githubOwner}} # --------------------------------------------------------------------------- -# AgentKit Forge source-of-truth — require maintainer review +# Retort source-of-truth — require maintainer review # --------------------------------------------------------------------------- /.agentkit/templates/ @{{githubOwner}} /.agentkit/spec/ @{{githubOwner}} diff --git a/.agentkit/templates/github/scripts/README.md b/.agentkit/templates/github/scripts/README.md index 788e7f1d..0057c2b3 100644 --- a/.agentkit/templates/github/scripts/README.md +++ b/.agentkit/templates/github/scripts/README.md @@ -1,11 +1,11 @@ - + - + # GitHub Scripts Run-once setup scripts for configuring GitHub repository settings after -adopting AgentKit Forge. +adopting Retort. ## Available Scripts @@ -54,13 +54,13 @@ Configures branch protection rules for `{{defaultBranch}}` using the GitHub CLI. **When to run:** -Run once after initial `agentkit sync`. The script is idempotent — running +Run once after initial `retort sync`. The script is idempotent — running it again will overwrite existing protection rules with the standard config. ### resolve-merge Resolves merge conflicts automatically for generated/framework-managed files -using the AgentKit merge resolution matrix. Files requiring semantic understanding +using the Retort merge resolution matrix. Files requiring semantic understanding (engine source, spec files) are flagged for manual resolution. **What it does:** diff --git a/.agentkit/templates/github/scripts/resolve-merge.ps1 b/.agentkit/templates/github/scripts/resolve-merge.ps1 index bf4fd1db..6dbc04c9 100644 --- a/.agentkit/templates/github/scripts/resolve-merge.ps1 +++ b/.agentkit/templates/github/scripts/resolve-merge.ps1 @@ -1,11 +1,11 @@ # ============================================================================= # resolve-merge.ps1 — Apply standard merge conflict resolutions (Windows) -# GENERATED by AgentKit Forge v{{version}} — regenerated on every sync +# GENERATED by Retort v{{version}} — regenerated on every sync # ============================================================================= # Usage: .github\scripts\resolve-merge.ps1 [-Target dev] # # Merges origin/ into the current branch and auto-resolves -# generated/framework-managed files per the AgentKit merge resolution matrix. +# generated/framework-managed files per the Retort merge resolution matrix. # Remaining conflicts (engine source, spec files) are listed for manual review. # ============================================================================= param( diff --git a/.agentkit/templates/github/scripts/resolve-merge.sh b/.agentkit/templates/github/scripts/resolve-merge.sh index 5800f6f1..aabb34f8 100755 --- a/.agentkit/templates/github/scripts/resolve-merge.sh +++ b/.agentkit/templates/github/scripts/resolve-merge.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # ============================================================================= # resolve-merge.sh — Apply standard merge conflict resolutions -# GENERATED by AgentKit Forge v{{version}} — regenerated on every sync +# GENERATED by Retort v{{version}} — regenerated on every sync # ============================================================================= # Usage: .github/scripts/resolve-merge.sh [target-branch] # # Merges origin/ into the current branch and auto-resolves -# generated/framework-managed files per the AgentKit merge resolution matrix. +# generated/framework-managed files per the Retort merge resolution matrix. # Remaining conflicts (engine source, spec files) are listed for manual review. # ============================================================================= set -euo pipefail diff --git a/.agentkit/templates/github/scripts/setup-branch-protection.ps1 b/.agentkit/templates/github/scripts/setup-branch-protection.ps1 index a8af3b78..490c6359 100644 --- a/.agentkit/templates/github/scripts/setup-branch-protection.ps1 +++ b/.agentkit/templates/github/scripts/setup-branch-protection.ps1 @@ -2,7 +2,7 @@ # setup-branch-protection.ps1 # Configures GitHub branch protection rules, repository settings, code # scanning rulesets, and Copilot review for the default branch. -# Generated by AgentKit Forge — run once after initial setup. +# Generated by Retort — run once after initial setup. # # Prerequisites: # - gh CLI installed and authenticated (gh auth status) @@ -58,7 +58,7 @@ if (-not $Repo) { exit 1 } -Write-Host "=== AgentKit Forge - Branch Protection Setup ===" +Write-Host "=== Retort - Branch Protection Setup ===" Write-Host "" Write-Host "Repository: $Repo" Write-Host "Branch: $Branch" @@ -318,7 +318,7 @@ if ($DryRun) { } } - New-LabelIfMissing "forge-source-change" "d93f0b" "PR modifies AgentKit Forge source files" + New-LabelIfMissing "forge-source-change" "d93f0b" "PR modifies Retort source files" New-LabelIfMissing "needs-maintainer-review" "e4e669" "Requires maintainer review before merge" New-LabelIfMissing "dependencies" "0075ca" "Dependency updates" New-LabelIfMissing "breaking-change" "b60205" "Contains breaking changes" diff --git a/.agentkit/templates/github/scripts/setup-branch-protection.sh b/.agentkit/templates/github/scripts/setup-branch-protection.sh index c9cb9e40..c4129eca 100755 --- a/.agentkit/templates/github/scripts/setup-branch-protection.sh +++ b/.agentkit/templates/github/scripts/setup-branch-protection.sh @@ -3,7 +3,7 @@ # setup-branch-protection.sh # Configures GitHub branch protection rules, repository settings, code # scanning rulesets, and Copilot review for the default branch. -# Generated by AgentKit Forge — run once after initial setup. +# Generated by Retort — run once after initial setup. # # Prerequisites: # - gh CLI installed and authenticated (gh auth status) @@ -63,7 +63,7 @@ if [[ -z "$REPO" ]]; then exit 1 fi -echo "=== AgentKit Forge — Branch Protection Setup ===" +echo "=== Retort — Branch Protection Setup ===" echo "" echo "Repository: $REPO" echo "Branch: $BRANCH" @@ -338,7 +338,7 @@ else fi } - create_label_if_missing "forge-source-change" "d93f0b" "PR modifies AgentKit Forge source files" + create_label_if_missing "forge-source-change" "d93f0b" "PR modifies Retort source files" create_label_if_missing "needs-maintainer-review" "e4e669" "Requires maintainer review before merge" create_label_if_missing "dependencies" "0075ca" "Dependency updates" create_label_if_missing "breaking-change" "b60205" "Contains breaking changes" diff --git a/.agentkit/templates/github/workflows/breaking-change-detection.yml b/.agentkit/templates/github/workflows/breaking-change-detection.yml index 2af5aa6b..b64132b7 100644 --- a/.agentkit/templates/github/workflows/breaking-change-detection.yml +++ b/.agentkit/templates/github/workflows/breaking-change-detection.yml @@ -1,6 +1,6 @@ -# GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT +# GENERATED by Retort v{{version}} — DO NOT EDIT # Source: .agentkit/spec + .agentkit/overlays/{{repoName}} -# Regenerate: pnpm -C .agentkit agentkit:sync +# Regenerate: pnpm -C .agentkit retort:sync # # Detects potential breaking changes in PRs by analyzing version files, # changelogs, public API surfaces, and export maps. Non-blocking — reports diff --git a/.agentkit/templates/github/workflows/coverage-report.yml b/.agentkit/templates/github/workflows/coverage-report.yml index 929a3f82..856eca35 100644 --- a/.agentkit/templates/github/workflows/coverage-report.yml +++ b/.agentkit/templates/github/workflows/coverage-report.yml @@ -1,6 +1,6 @@ -# GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT +# GENERATED by Retort v{{version}} — DO NOT EDIT # Source: .agentkit/spec + .agentkit/overlays/{{repoName}} -# Regenerate: {{packageManager}} -C .agentkit agentkit:sync +# Regenerate: {{packageManager}} -C .agentkit retort:sync # # Collects code coverage from test runs and reports regressions on PRs. # Non-blocking (continue-on-error). Threshold defaults to {{testingCoverage}}% diff --git a/.agentkit/templates/github/workflows/dependency-audit.yml b/.agentkit/templates/github/workflows/dependency-audit.yml index da5332e2..5418df42 100644 --- a/.agentkit/templates/github/workflows/dependency-audit.yml +++ b/.agentkit/templates/github/workflows/dependency-audit.yml @@ -1,6 +1,6 @@ -# GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT +# GENERATED by Retort v{{version}} — DO NOT EDIT # Source: .agentkit/spec + .agentkit/overlays/{{repoName}} -# Regenerate: {{packageManager}} -C .agentkit agentkit:sync +# Regenerate: {{packageManager}} -C .agentkit retort:sync # # Non-blocking dependency audit. Runs when lockfiles or manifests change. # Reports vulnerabilities and license issues as annotations — MUST NOT be diff --git a/.agentkit/templates/github/workflows/documentation-quality.yml b/.agentkit/templates/github/workflows/documentation-quality.yml index 0da4f807..842a22c5 100644 --- a/.agentkit/templates/github/workflows/documentation-quality.yml +++ b/.agentkit/templates/github/workflows/documentation-quality.yml @@ -1,6 +1,6 @@ -# GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT +# GENERATED by Retort v{{version}} — DO NOT EDIT # Source: .agentkit/spec + .agentkit/overlays/{{repoName}} -# Regenerate: {{packageManager}} -C .agentkit agentkit:sync +# Regenerate: {{packageManager}} -C .agentkit retort:sync # # Lints and validates documentation quality for history records. # Required on main (hard error). Warning-only on dev (surfaces issues without blocking). diff --git a/.agentkit/templates/github/workflows/documentation-validation.yml b/.agentkit/templates/github/workflows/documentation-validation.yml index 3052baf4..7c5cd9d7 100644 --- a/.agentkit/templates/github/workflows/documentation-validation.yml +++ b/.agentkit/templates/github/workflows/documentation-validation.yml @@ -1,6 +1,6 @@ -# GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT +# GENERATED by Retort v{{version}} — DO NOT EDIT # Source: .agentkit/spec + .agentkit/overlays/{{repoName}} -# Regenerate: pnpm -C .agentkit agentkit:sync +# Regenerate: pnpm -C .agentkit retort:sync # # Validates documentation requirements and structure on pull requests. # Required on main (hard error). Warning-only on dev (surfaces issues without blocking). diff --git a/.agentkit/templates/github/workflows/pr-validation.yml b/.agentkit/templates/github/workflows/pr-validation.yml index da588624..07bbc43c 100644 --- a/.agentkit/templates/github/workflows/pr-validation.yml +++ b/.agentkit/templates/github/workflows/pr-validation.yml @@ -1,6 +1,6 @@ -# GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT +# GENERATED by Retort v{{version}} — DO NOT EDIT # Source: .agentkit/spec + .agentkit/overlays/{{repoName}} -# Regenerate: pnpm -C .agentkit agentkit:sync +# Regenerate: pnpm -C .agentkit retort:sync # # Validates PR changes: Terraform formatting, shell script linting, and # YAML syntax. Non-blocking for most checks — surfaces issues as annotations. diff --git a/.agentkit/templates/github/workflows/retrospective-quality.yml b/.agentkit/templates/github/workflows/retrospective-quality.yml index e8576fe3..802cab6a 100644 --- a/.agentkit/templates/github/workflows/retrospective-quality.yml +++ b/.agentkit/templates/github/workflows/retrospective-quality.yml @@ -1,6 +1,6 @@ -# GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT +# GENERATED by Retort v{{version}} — DO NOT EDIT # Source: .agentkit/spec + .agentkit/overlays/{{repoName}} -# Regenerate: pnpm -C .agentkit agentkit:sync +# Regenerate: pnpm -C .agentkit retort:sync # # Non-blocking CI job that validates retrospective records (issues and lessons). # This workflow is informational — it MUST NOT be added to branch protection diff --git a/.agentkit/templates/headers/GENERATED.md b/.agentkit/templates/headers/GENERATED.md index 629c427e..0f8f8010 100644 --- a/.agentkit/templates/headers/GENERATED.md +++ b/.agentkit/templates/headers/GENERATED.md @@ -1,3 +1,3 @@ - + - + diff --git a/.agentkit/templates/language-instructions/README.md b/.agentkit/templates/language-instructions/README.md index 484aaa76..ce2b11c8 100644 --- a/.agentkit/templates/language-instructions/README.md +++ b/.agentkit/templates/language-instructions/README.md @@ -7,7 +7,7 @@ This directory contains instruction files for **{{projectName}}**, one per rule domain defined in `.agentkit/spec/rules.yaml`. Each file provides language-specific coding conventions, testing patterns, and tooling requirements. -These files are generated by AgentKit Forge and deployed to each configured AI +These files are generated by Retort and deployed to each configured AI platform: | Platform | Output location | @@ -32,7 +32,7 @@ platform: ## How It Works -For each rule domain, AgentKit Forge renders a Markdown file using the +For each rule domain, Retort renders a Markdown file using the following template priority: 1. **Platform overlay** — `/language-instructions/.md` diff --git a/.agentkit/templates/renovate/renovate.json b/.agentkit/templates/renovate/renovate.json index 89757635..b7fd86d5 100644 --- a/.agentkit/templates/renovate/renovate.json +++ b/.agentkit/templates/renovate/renovate.json @@ -33,7 +33,7 @@ "labels": ["dependencies", "breaking-change"] }, { - "description": "AgentKit engine dependencies — require maintainer review", + "description": "Retort engine dependencies — require maintainer review", "matchFileNames": [".agentkit/package.json"], "labels": ["dependencies", "forge-source-change"], "automerge": false diff --git a/.agentkit/templates/root/AGENT_BACKLOG.md b/.agentkit/templates/root/AGENT_BACKLOG.md index 6a8bf887..96bd8e75 100644 --- a/.agentkit/templates/root/AGENT_BACKLOG.md +++ b/.agentkit/templates/root/AGENT_BACKLOG.md @@ -1,6 +1,6 @@ - + - + # Agent Backlog — {{repoName}} @@ -64,7 +64,7 @@ Items finished in previous sprints. | -------- | ----------------- | ------------------------------------- | ----- | --------- | -------------------- | | P0 | T8-DevEx | Initialize project repository | Ship | Sprint 0 | Monorepo structure | | P0 | T4-Infrastructure | Create initial Dockerfile | Ship | Sprint 0 | Multi-stage build | -| P0 | T7-Documentation | Generate root documentation templates | Ship | Sprint 0 | AgentKit Forge sync | +| P0 | T7-Documentation | Generate root documentation templates | Ship | Sprint 0 | Retort sync | | P1 | T10-Quality | Define quality gate criteria | Ship | Sprint 0 | See QUALITY_GATES.md | --- @@ -153,5 +153,5 @@ Track inter-team dependencies here for visibility during orchestration. --- -_This backlog is maintained by AgentKit Forge. Use `/orchestrate` to manage_ +_This backlog is maintained by Retort. Use `/orchestrate` to manage_ _tasks programmatically or edit this file directly for manual adjustments._ diff --git a/.agentkit/templates/root/AGENT_TEAMS.md b/.agentkit/templates/root/AGENT_TEAMS.md index 0ed6bfd0..5e5cce24 100644 --- a/.agentkit/templates/root/AGENT_TEAMS.md +++ b/.agentkit/templates/root/AGENT_TEAMS.md @@ -12,7 +12,7 @@ agentkit: ## Overview -This document maps the canonical AgentKit team definitions (see +This document maps the canonical Retort team definitions (see [UNIFIED_AGENT_TEAMS.md](./UNIFIED_AGENT_TEAMS.md)) to the concrete structure of this repository. Not all teams may be active — mark inactive teams so the orchestrator skips them during dispatch. diff --git a/.agentkit/templates/root/CHANGELOG.md b/.agentkit/templates/root/CHANGELOG.md index 3e6adbcd..c84f4a4b 100644 --- a/.agentkit/templates/root/CHANGELOG.md +++ b/.agentkit/templates/root/CHANGELOG.md @@ -14,7 +14,7 @@ Activate the commit template: `git config commit.template .gitmessage` ### Added -- Initial AgentKit Forge integration (v{{version}}) +- Initial Retort integration (v{{version}}) - Multi-agent team framework with 10 teams - 5-phase lifecycle orchestration model - Support for Claude Code, Cursor, Windsurf, Copilot, and MCP/A2A @@ -35,6 +35,6 @@ Activate the commit template: `git config commit.template .gitmessage` --- -_Maintained by AgentKit Forge. Update this file as part of the Ship phase._ +_Maintained by Retort. Update this file as part of the Ship phase._ _For significant changes, also create a history document: `./scripts/create-doc.sh "" <pr>`_ _See [Changelog Best Practices](docs/engineering/07_changelog.md) for tooling options._ diff --git a/.agentkit/templates/root/COMMAND_GUIDE.md b/.agentkit/templates/root/COMMAND_GUIDE.md index 27266b87..1617611c 100644 --- a/.agentkit/templates/root/COMMAND_GUIDE.md +++ b/.agentkit/templates/root/COMMAND_GUIDE.md @@ -69,7 +69,7 @@ This guide helps you choose the right command for your situation. Most workflow **Use when:** -- You need a quick health signal for AgentKit setup +- You need a quick health signal for Retort setup - Sync/init behavior looks inconsistent and you need actionable checks - You want malformed overlays/spec warnings surfaced before orchestration @@ -211,7 +211,7 @@ This guide helps you choose the right command for your situation. Most workflow | Need a plan before coding | `/plan` | | Full project audit / onboarding | `/project-review` | | Understand repo structure | `/discover` | -| Validate AgentKit setup | `/doctor` | +| Validate Retort setup | `/doctor` | | Verify build/test/lint | `/healthcheck` | | Inspect delegated task queue | `/tasks` | | Delegate work to a team | `/delegate` | diff --git a/.agentkit/templates/root/CONTRIBUTING.md b/.agentkit/templates/root/CONTRIBUTING.md index 90322c87..a21df047 100644 --- a/.agentkit/templates/root/CONTRIBUTING.md +++ b/.agentkit/templates/root/CONTRIBUTING.md @@ -20,7 +20,7 @@ 1. Fork and clone the repository 2. Install dependencies for your stack (see `agentkit discover` output) -3. Run `agentkit sync` to generate AI tool configurations +3. Run `retort sync` to generate AI tool configurations 4. Create a feature branch from `{{defaultBranch}}` --- @@ -65,8 +65,8 @@ Use [Conventional Commits](https://www.conventionalcommits.org/): ## Pull Request Process 1. Ensure your branch is up to date with `{{defaultBranch}}` -2. Run all quality gates locally: `agentkit validate` -3. If you changed `.agentkit/spec/*.yaml`, run `pnpm -C .agentkit agentkit:sync` and commit the regenerated outputs +2. Run all quality gates locally: `retort validate` +3. If you changed `.agentkit/spec/*.yaml`, run `pnpm -C .agentkit retort:sync` and commit the regenerated outputs 4. Create a PR — **title MUST use Conventional Commits format**: `type(scope): description` - Example: `feat(auth): add OAuth2 login flow` — NOT `Plan: Add OAuth2 login flow` - CI enforces this and will reject non-conforming titles @@ -81,8 +81,8 @@ Use [Conventional Commits](https://www.conventionalcommits.org/): When using AI agents (Claude Code, Cursor, Copilot, etc.): -- Generated configuration files (marked `GENERATED by AgentKit Forge`) should - not be edited directly — modify the spec and run `agentkit sync` instead +- Generated configuration files (marked `GENERATED by Retort`) should + not be edited directly — modify the spec and run `retort sync` instead - Use `/orchestrate` for multi-team coordination tasks - Use `/check` to validate changes before committing - AI agents operate within the permission model defined in `.claude/settings.json` @@ -103,4 +103,4 @@ Key conventions: --- -This guide is maintained by AgentKit Forge. Run `pnpm -C .agentkit agentkit:sync` to regenerate. +This guide is maintained by Retort. Run `pnpm -C .agentkit retort:sync` to regenerate. diff --git a/.agentkit/templates/root/MIGRATIONS.md b/.agentkit/templates/root/MIGRATIONS.md index 6fab25ac..3bc1f9da 100644 --- a/.agentkit/templates/root/MIGRATIONS.md +++ b/.agentkit/templates/root/MIGRATIONS.md @@ -1,6 +1,6 @@ # Migration Guide — {{repoName}} -> How to upgrade between AgentKit Forge versions and handle breaking changes. +> How to upgrade between Retort versions and handle breaking changes. --- @@ -16,10 +16,10 @@ ### Standard Upgrade -1. Pull the latest AgentKit Forge changes +1. Pull the latest Retort changes 2. Review the changelog for breaking changes -3. Run `agentkit sync` to regenerate all configs -4. Run `agentkit validate` to verify integrity +3. Run `retort sync` to regenerate all configs +4. Run `retort validate` to verify integrity 5. Review `git diff` for unexpected changes 6. Commit the updated generated files @@ -29,7 +29,7 @@ When upgrading introduces new spec fields: 1. Compare your overlay files against `.agentkit/overlays/__TEMPLATE__/` 2. Add any new required fields to your overlay -3. Run `agentkit sync` and verify output +3. Run `retort sync` and verify output --- @@ -37,7 +37,7 @@ When upgrading introduces new spec fields: ### v0.1.0 (Initial) -- Initial release of AgentKit Forge +- Initial release of Retort - Spec-driven config generation for 6 AI tools - 10-team framework with 5-phase lifecycle - Hook-based security guardrails @@ -53,4 +53,4 @@ No breaking changes — this is the initial release. --- -_This guide is maintained by AgentKit Forge. Run `pnpm -C .agentkit agentkit:sync` to regenerate._ +_This guide is maintained by Retort. Run `pnpm -C .agentkit retort:sync` to regenerate._ diff --git a/.agentkit/templates/root/QUALITY_GATES.md b/.agentkit/templates/root/QUALITY_GATES.md index 4bbbcdf1..6d996f49 100644 --- a/.agentkit/templates/root/QUALITY_GATES.md +++ b/.agentkit/templates/root/QUALITY_GATES.md @@ -1,6 +1,6 @@ -<!-- GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT --> +<!-- GENERATED by Retort v{{version}} — DO NOT EDIT --> <!-- Source: .agentkit/spec + .agentkit/overlays/{{repoName}} --> -<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +<!-- Regenerate: pnpm -C .agentkit retort:sync --> # Quality Gates — {{repoName}} @@ -279,5 +279,5 @@ When a quality gate cannot be satisfied and an exemption is needed: --- -_Quality gates are maintained by AgentKit Forge. See UNIFIED_AGENT_TEAMS.md_ +_Quality gates are maintained by Retort. See UNIFIED_AGENT_TEAMS.md_ _for the lifecycle model that these gates support._ diff --git a/.agentkit/templates/root/RUNBOOK_AI.md b/.agentkit/templates/root/RUNBOOK_AI.md index 5415d74c..6c3dca95 100644 --- a/.agentkit/templates/root/RUNBOOK_AI.md +++ b/.agentkit/templates/root/RUNBOOK_AI.md @@ -18,10 +18,10 @@ | Command | Purpose | | ------------------- | ---------------------------------------- | -| `agentkit sync` | Regenerate all AI tool configs from spec | -| `agentkit validate` | Check config integrity and security | +| `retort sync` | Regenerate all AI tool configs from spec | +| `retort validate` | Check config integrity and security | | `agentkit discover` | Scan repo and detect tech stacks | -| `agentkit init` | Initialize a new repo overlay | +| `retort init` | Initialize a new repo overlay | | `/orchestrate` | Run multi-team coordination workflow | | `/check` | Run quality gates locally | | `/review` | Request code review from relevant teams | @@ -33,29 +33,29 @@ ### First-time Setup 1. Clone the repository -2. Run `agentkit init --repoName <name>` to create overlay +2. Run `retort init --repoName <name>` to create overlay 3. Edit `.agentkit/overlays/<name>/settings.yaml` as needed -4. Run `agentkit sync` to generate all configs +4. Run `retort sync` to generate all configs 5. Commit the generated files ### Adding a New Team Member (AI Agent) 1. Add agent definition to `.agentkit/spec/agents.yaml` -2. Run `agentkit sync` to regenerate agent files -3. Verify with `agentkit validate` +2. Run `retort sync` to regenerate agent files +3. Verify with `retort validate` ### Updating Permissions 1. Edit `.agentkit/overlays/<repo>/settings.yaml` 2. Add entries to `permissions.allow` or `permissions.deny` -3. Run `agentkit sync` — deny entries always win over allow -4. Verify with `agentkit validate` +3. Run `retort sync` — deny entries always win over allow +4. Verify with `retort validate` ### Customizing Team Commands 1. Edit `.agentkit/overlays/<repo>/commands.yaml` 2. Add command overrides (merged at file level with base spec) -3. Run `agentkit sync` +3. Run `retort sync` --- @@ -63,7 +63,7 @@ ### Sync produces unexpected output -- Run `DEBUG=1 agentkit sync` for verbose logging +- Run `DEBUG=1 retort sync` for verbose logging - Check for unresolved placeholder warnings (mustache-style <code>{{key}}</code> tokens) - Verify overlay directory matches `.agentkit-repo` marker @@ -76,7 +76,7 @@ ### Generated files show as modified after clean sync - This indicates drift — someone edited a generated file directly -- Run `agentkit sync` to overwrite with canonical version +- Run `retort sync` to overwrite with canonical version - Commit the regenerated files ### Hook scripts fail @@ -95,12 +95,12 @@ Generated files include a backup-aware atomic write. If sync fails mid-write: 1. Check for leftover `.tmp/` directory in agentkit root 2. If present, delete it: `rm -rf .agentkit/.tmp` -3. Re-run `agentkit sync` +3. Re-run `retort sync` ### Reset to clean state -1. Delete all generated files (those with `GENERATED by AgentKit Forge` header) -2. Run `agentkit sync` to regenerate everything +1. Delete all generated files (those with `GENERATED by Retort` header) +2. Run `retort sync` to regenerate everything 3. Use `git diff` to verify the output ### State file corruption @@ -113,4 +113,4 @@ If `.claude/state/orchestrator.json` becomes corrupted: --- -_This runbook is maintained by AgentKit Forge. Run `pnpm -C .agentkit agentkit:sync` to regenerate._ +_This runbook is maintained by Retort. Run `pnpm -C .agentkit retort:sync` to regenerate._ diff --git a/.agentkit/templates/root/SECURITY.md b/.agentkit/templates/root/SECURITY.md index d7f5fa8a..15790dfd 100644 --- a/.agentkit/templates/root/SECURITY.md +++ b/.agentkit/templates/root/SECURITY.md @@ -44,7 +44,7 @@ These conventions are enforced by the `security` rule domain ### Hook-based Protection -AgentKit Forge installs hook scripts that guard against common risks: +Retort installs hook scripts that guard against common risks: | Hook | Trigger | Protection | | ------------------------------- | --------------------- | ------------------------------------------------ | @@ -115,4 +115,4 @@ The `validate` command scans for common secret patterns: --- -_This policy is maintained by AgentKit Forge. Run `pnpm -C .agentkit agentkit:sync` to regenerate._ +_This policy is maintained by Retort. Run `pnpm -C .agentkit retort:sync` to regenerate._ diff --git a/.agentkit/templates/root/UNIFIED_AGENT_TEAMS.md b/.agentkit/templates/root/UNIFIED_AGENT_TEAMS.md index 8e447a3e..5c0d25de 100644 --- a/.agentkit/templates/root/UNIFIED_AGENT_TEAMS.md +++ b/.agentkit/templates/root/UNIFIED_AGENT_TEAMS.md @@ -1,6 +1,6 @@ -<!-- GENERATED by AgentKit Forge v{{version}} — DO NOT EDIT --> +<!-- GENERATED by Retort v{{version}} — DO NOT EDIT --> <!-- Source: .agentkit/spec + .agentkit/overlays/{{repoName}} --> -<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +<!-- Regenerate: pnpm -C .agentkit retort:sync --> # Unified Agent Teams Specification v1.0 @@ -211,7 +211,7 @@ criteria, activities, and exit criteria (quality gates). - **Objective**: Verify the solution meets requirements. - **Activities**: - Create pull request — **title MUST use Conventional Commits**: `type(scope): description` - - Run `pnpm -C .agentkit agentkit:sync` if any spec files changed, and commit regenerated outputs + - Run `pnpm -C .agentkit retort:sync` if any spec files changed, and commit regenerated outputs - All CI checks must pass (including PR title validation and drift check) - Code review by relevant team members - Manual testing for UI or user-facing changes @@ -331,5 +331,5 @@ For changes that affect all teams (e.g., T9 shared library update): --- -_This specification is maintained by AgentKit Forge. Do not edit directly._ -_Run `pnpm -C .agentkit agentkit:sync` to regenerate from the canonical spec._ +_This specification is maintained by Retort. Do not edit directly._ +_Run `pnpm -C .agentkit retort:sync` to regenerate from the canonical spec._ diff --git a/.agentkit/templates/scripts/consolidate-branches.ps1 b/.agentkit/templates/scripts/consolidate-branches.ps1 index 4333d580..2f345bb0 100644 --- a/.agentkit/templates/scripts/consolidate-branches.ps1 +++ b/.agentkit/templates/scripts/consolidate-branches.ps1 @@ -6,7 +6,7 @@ # # Discovers all local and remote branches not yet merged into <base-branch>, # filters out protected branches, and merges them one by one into the current -# branch. Auto-resolves generated files per the AgentKit merge resolution matrix. +# branch. Auto-resolves generated files per the Retort merge resolution matrix. # ============================================================================= param( [string]$Base = "{{defaultBranch}}", @@ -229,7 +229,7 @@ try { Write-Host "" if ($merged.Count -gt 0) { Write-Info "Next steps:" - Write-Host " 1. Run: pnpm -C .agentkit agentkit:sync" + Write-Host " 1. Run: pnpm -C .agentkit retort:sync" Write-Host " 2. Run: pnpm test" Write-Host " 3. Review with: git log --oneline -20" } diff --git a/.agentkit/templates/scripts/resolve-merge.ps1 b/.agentkit/templates/scripts/resolve-merge.ps1 index f04240a7..1a2729db 100644 --- a/.agentkit/templates/scripts/resolve-merge.ps1 +++ b/.agentkit/templates/scripts/resolve-merge.ps1 @@ -5,7 +5,7 @@ # Usage: .\scripts\resolve-merge.ps1 [-Target {{defaultBranch}}] # # Merges origin/<target-branch> into the current branch and auto-resolves -# generated/framework-managed files per the AgentKit merge resolution matrix. +# generated/framework-managed files per the Retort merge resolution matrix. # Remaining conflicts (engine source, spec files) are listed for manual review. # ============================================================================= param( diff --git a/.agentkit/templates/scripts/resolve-merge.sh b/.agentkit/templates/scripts/resolve-merge.sh index 052560ed..2fc1f6de 100644 --- a/.agentkit/templates/scripts/resolve-merge.sh +++ b/.agentkit/templates/scripts/resolve-merge.sh @@ -9,7 +9,7 @@ agentkit: # Usage: scripts/resolve-merge.sh [target-branch] # # Merges origin/<target-branch> into the current branch and auto-resolves -# generated/framework-managed files per the AgentKit merge resolution matrix. +# generated/framework-managed files per the Retort merge resolution matrix. # Remaining conflicts (engine source, spec files) are listed for manual review. # ============================================================================= set -euo pipefail diff --git a/.agentkit/templates/scripts/setup-agentkit-branch-governance.ps1 b/.agentkit/templates/scripts/setup-agentkit-branch-governance.ps1 index db03f740..a203d8ba 100644 --- a/.agentkit/templates/scripts/setup-agentkit-branch-governance.ps1 +++ b/.agentkit/templates/scripts/setup-agentkit-branch-governance.ps1 @@ -29,7 +29,7 @@ if (-not $Repo) { exit 1 } -Write-Host "=== AgentKit Branch Governance Setup ===" +Write-Host "=== Retort Branch Governance Setup ===" Write-Host "Repository: $Repo" Write-Host "DryRun: $DryRun" Write-Host "" diff --git a/.agentkit/templates/scripts/setup-agentkit-branch-governance.sh b/.agentkit/templates/scripts/setup-agentkit-branch-governance.sh index c6884c96..27aaa2c6 100644 --- a/.agentkit/templates/scripts/setup-agentkit-branch-governance.sh +++ b/.agentkit/templates/scripts/setup-agentkit-branch-governance.sh @@ -62,7 +62,7 @@ if [[ -z "$REPO" ]]; then exit 1 fi -echo "=== AgentKit Branch Governance Setup ===" +echo "=== Retort Branch Governance Setup ===" echo "Repository: $REPO" echo "DryRun: $DRY_RUN" echo diff --git a/.agentkit/templates/windsurf/rules/project.md b/.agentkit/templates/windsurf/rules/project.md index 9b1fcffe..81cb607c 100644 --- a/.agentkit/templates/windsurf/rules/project.md +++ b/.agentkit/templates/windsurf/rules/project.md @@ -4,7 +4,7 @@ # Project Context -This repository uses the AgentKit Forge unified agent team framework. +This repository uses the Retort unified agent team framework. {{#if showLanguageProfileDiagnostics}} ## Language Profile Diagnostics @@ -84,4 +84,4 @@ This repository uses the AgentKit Forge unified agent team framework. - Reference UNIFIED_AGENT_TEAMS.md for team assignments and escalation paths - PR titles must use Conventional Commits format: `type(scope): description` — CI rejects non-conforming titles - Breaking changes (`!:` or `BREAKING` in PR title) require a `## Breaking Changes` section in the PR body -- Never edit files marked `GENERATED by AgentKit Forge — DO NOT EDIT` — modify `.agentkit/spec/` and run sync +- Never edit files marked `GENERATED by Retort — DO NOT EDIT` — modify `.agentkit/spec/` and run sync diff --git a/.agentkit/templates/windsurf/teams/TEMPLATE.md b/.agentkit/templates/windsurf/teams/TEMPLATE.md index 3a4317d1..19c24ceb 100644 --- a/.agentkit/templates/windsurf/teams/TEMPLATE.md +++ b/.agentkit/templates/windsurf/teams/TEMPLATE.md @@ -19,6 +19,6 @@ Scope all operations to the team's owned paths. - CI enforces this — non-conforming titles will block merge - **Commit messages** must also follow Conventional Commits - **Breaking changes** (`!:` in title or `BREAKING` keyword) require a `## Breaking Changes` section, ADR reference, or migration guide in the PR body — CI checks for this -- **Never edit files marked `GENERATED by AgentKit Forge — DO NOT EDIT`** - - Modify the source spec in `.agentkit/spec/` and run `pnpm -C .agentkit agentkit:sync` +- **Never edit files marked `GENERATED by Retort — DO NOT EDIT`** + - Modify the source spec in `.agentkit/spec/` and run `pnpm -C .agentkit retort:sync` - CI runs a drift check and will fail if generated files are out of sync diff --git a/.claude/worktrees/focused-colden/.agentkit/.manifest.json b/.claude/worktrees/focused-colden/.agentkit/.manifest.json new file mode 100644 index 00000000..3fb43dd8 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.manifest.json @@ -0,0 +1,1873 @@ +{ + "generatedAt": "2026-03-17T06:36:41.261Z", + "version": "3.1.0", + "repoName": "agentkit-forge", + "files": { + ".agents/skills/analyze-agents/SKILL.md": { + "hash": "e42eee25c9fd" + }, + ".agents/skills/brand/SKILL.md": { + "hash": "4f819e2e0d69" + }, + ".agents/skills/cost-centres/SKILL.md": { + "hash": "3140d48f16b0" + }, + ".agentkit/state/orchestrator.json.template": { + "hash": "b70e87b7211b" + }, + ".agents/skills/deploy/SKILL.md": { + "hash": "2e1330fd693e" + }, + ".agentkit/state/schema.json": { + "hash": "b47a7efcd922" + }, + ".agents/skills/build/SKILL.md": { + "hash": "d325dae8f934" + }, + ".agents/skills/backlog/SKILL.md": { + "hash": "2dc8e5c1d39b" + }, + ".agents/skills/check/SKILL.md": { + "hash": "fc46476bca7b" + }, + ".agents/skills/feature-flow/SKILL.md": { + "hash": "ec9b155a84e6" + }, + ".agents/skills/expand/SKILL.md": { + "hash": "d9883bcc8f88" + }, + ".agents/skills/discover/SKILL.md": { + "hash": "9ac71caf6992" + }, + ".agents/skills/cost/SKILL.md": { + "hash": "834badf6646b" + }, + ".agents/skills/document-history/SKILL.md": { + "hash": "e82dbff8c514" + }, + ".agents/skills/import-issues/SKILL.md": { + "hash": "e2d105f8b201" + }, + ".agents/skills/orchestrate/SKILL.md": { + "hash": "2b6c677c66a3" + }, + ".agents/skills/feature-configure/SKILL.md": { + "hash": "c11f2cc3273b" + }, + ".agents/skills/infra-eval/SKILL.md": { + "hash": "37505d91a1c5" + }, + ".agents/skills/feature-review/SKILL.md": { + "hash": "da38a280ec45" + }, + ".agents/skills/doctor/SKILL.md": { + "hash": "9d9e7ffcaf71" + }, + ".agents/skills/project-status/SKILL.md": { + "hash": "9a47cc64914b" + }, + ".agents/skills/format/SKILL.md": { + "hash": "0cdb87886f36" + }, + ".agents/skills/preflight/SKILL.md": { + "hash": "85c05dc2c072" + }, + ".agents/skills/plan/SKILL.md": { + "hash": "71c44b0ef7b1" + }, + ".agents/skills/review/SKILL.md": { + "hash": "00b236ee680f" + }, + ".agents/skills/security/SKILL.md": { + "hash": "3127f1e216c9" + }, + ".agents/skills/start/SKILL.md": { + "hash": "f0cd8fd39b4a" + }, + ".agents/skills/scaffold/SKILL.md": { + "hash": "ff8fb03eecd2" + }, + ".agents/skills/validate/SKILL.md": { + "hash": "30bc2a0427be" + }, + ".agents/skills/test/SKILL.md": { + "hash": "3c02bdac8593" + }, + ".agents/skills/sync-backlog/SKILL.md": { + "hash": "6a3ad80bff8d" + }, + ".claude/agents/adoption-strategist.md": { + "hash": "e0f5197c5140" + }, + ".ai/continuerules": { + "hash": "2d40023b7c45" + }, + ".agents/skills/sync/SKILL.md": { + "hash": "c25161dc8913" + }, + ".claude/agents/backend.md": { + "hash": "738bca85b556" + }, + ".ai/cursorrules": { + "hash": "32f8f48220f6" + }, + ".claude/agents/cost-ops-monitor.md": { + "hash": "9f195cfb5ab3" + }, + ".ai/README.md": { + "hash": "608c681edb4e" + }, + ".claude/agents/content-strategist.md": { + "hash": "bdea95fbdc97" + }, + ".claude/agents/brand-guardian.md": { + "hash": "06321324ad8c" + }, + ".claude/agents/coverage-tracker.md": { + "hash": "faf2173529c5" + }, + ".claude/agents/devops.md": { + "hash": "8623979399e3" + }, + ".claude/agents/dependency-watcher.md": { + "hash": "1317fdcdbdc6" + }, + ".claude/agents/environment-manager.md": { + "hash": "7630c0856682" + }, + ".claude/agents/data.md": { + "hash": "95222b841a68" + }, + ".ai/windsurfrules": { + "hash": "2d40023b7c45" + }, + ".claude/agents/expansion-analyst.md": { + "hash": "1acec03026a0" + }, + ".claude/agents/feature-ops.md": { + "hash": "f7a55b2e0a57" + }, + ".claude/agents/frontend.md": { + "hash": "2e553b7926ef" + }, + ".claude/agents/flow-designer.md": { + "hash": "0e0423753fd8" + }, + ".claude/agents/growth-analyst.md": { + "hash": "f8eec3b1e625" + }, + ".claude/agents/impact-assessor.md": { + "hash": "86fdde8309c2" + }, + ".claude/agents/input-clarifier.md": { + "hash": "10e22accb2c0" + }, + ".claude/agents/infra.md": { + "hash": "49829cf96e63" + }, + ".claude/agents/model-economist.md": { + "hash": "87e470197ac4" + }, + ".claude/agents/integration-tester.md": { + "hash": "9c537deec75e" + }, + ".claude/agents/governance-advisor.md": { + "hash": "6fde5c50bf67" + }, + ".claude/agents/grant-hunter.md": { + "hash": "906ddfa7eeb1" + }, + ".claude/agents/mission-definer.md": { + "hash": "530ef4249f0b" + }, + ".claude/agents/portfolio-analyst.md": { + "hash": "b85f4d82d325" + }, + ".claude/agents/prompt-engineer.md": { + "hash": "3f98b589828e" + }, + ".claude/agents/release-manager.md": { + "hash": "74293815fa62" + }, + ".claude/agents/product-manager.md": { + "hash": "ae255ee14143" + }, + ".claude/agents/project-shipper.md": { + "hash": "627257130af4" + }, + ".claude/agents/release-coordinator.md": { + "hash": "df573b60959d" + }, + ".claude/agents/roadmap-tracker.md": { + "hash": "89ddfff0b104" + }, + ".claude/agents/role-architect.md": { + "hash": "ff8dfe28ea56" + }, + ".claude/agents/retrospective-analyst.md": { + "hash": "ee7cdb422865" + }, + ".claude/agents/security-auditor.md": { + "hash": "1cbf3ad0f91d" + }, + ".claude/agents/spec-compliance-auditor.md": { + "hash": "177cc631b0a2" + }, + ".claude/agents/team-validator.md": { + "hash": "bee9c68baeac" + }, + ".claude/agents/test-lead.md": { + "hash": "45e8abd92aaf" + }, + ".claude/agents/token-efficiency-engineer.md": { + "hash": "c5e07b99dbc3" + }, + ".claude/commands/backlog.md": { + "hash": "22a8d07575b3" + }, + ".claude/agents/vendor-arbitrage-analyst.md": { + "hash": "48daa9f47218" + }, + ".claude/agents/ui-designer.md": { + "hash": "a3e99552415f" + }, + ".claude/commands/brand.md": { + "hash": "472c7438a795" + }, + ".claude/commands/check.md": { + "hash": "ca6dd1de5d9a" + }, + ".claude/commands/cost-centres.md": { + "hash": "07ead7d1c63f" + }, + ".claude/commands/build.md": { + "hash": "fee9680802e1" + }, + ".claude/commands/cost.md": { + "hash": "2392989dddaa" + }, + ".claude/commands/doctor.md": { + "hash": "8fa0fd26e893" + }, + ".claude/commands/deploy.md": { + "hash": "adc2c2629b09" + }, + ".claude/commands/discover.md": { + "hash": "8fe679961a27" + }, + ".claude/commands/expand.md": { + "hash": "f3b8f79ccd05" + }, + ".claude/commands/document-history.md": { + "hash": "c99673f9ae3c" + }, + ".claude/commands/feature-configure.md": { + "hash": "ee21aacdcd29" + }, + ".claude/commands/feature-flow.md": { + "hash": "d1b8207a2a5a" + }, + ".claude/commands/feature-review.md": { + "hash": "fced358b99eb" + }, + ".claude/commands/import-issues.md": { + "hash": "6331f512f2b8" + }, + ".claude/commands/infra-eval.md": { + "hash": "8a58ea808952" + }, + ".claude/commands/format.md": { + "hash": "a3f0eee9b52e" + }, + ".claude/commands/orchestrate.md": { + "hash": "574c6938b38d" + }, + ".claude/commands/plan.md": { + "hash": "0eca590818b3" + }, + ".claude/commands/project-status.md": { + "hash": "0565edacffae" + }, + ".claude/commands/preflight.md": { + "hash": "4a65b6271bd6" + }, + ".claude/commands/scaffold.md": { + "hash": "4b3cd870e0fc" + }, + ".claude/commands/security.md": { + "hash": "5efa63762b04" + }, + ".claude/commands/review.md": { + "hash": "e32bc6f663ab" + }, + ".claude/commands/start.md": { + "hash": "d172290d22db" + }, + ".claude/commands/sync-backlog.md": { + "hash": "2352a7d04323" + }, + ".claude/commands/sync.md": { + "hash": "efd3cfb56eed" + }, + ".claude/commands/team-cost-ops.md": { + "hash": "812a2d58a81e" + }, + ".claude/commands/team-backend.md": { + "hash": "f7e4f2d9d9b7" + }, + ".claude/commands/team-devops.md": { + "hash": "715a51cc4892" + }, + ".claude/commands/team-data.md": { + "hash": "ac4681cf9293" + }, + ".claude/commands/team-docs.md": { + "hash": "3deff18a07e9" + }, + ".claude/commands/team-infra.md": { + "hash": "436ecc831ca4" + }, + ".claude/commands/team-forge.md": { + "hash": "ff14d00c8c6c" + }, + ".claude/commands/team-frontend.md": { + "hash": "93f516367115" + }, + ".claude/commands/team-security.md": { + "hash": "39f9d0c7d438" + }, + ".claude/commands/team-quality.md": { + "hash": "201199588ab2" + }, + ".claude/commands/team-testing.md": { + "hash": "0d04836de633" + }, + ".claude/commands/team-strategic-ops.md": { + "hash": "5c65b47e2d4f" + }, + ".claude/hooks/budget-guard-check.sh": { + "hash": "4fabe38fe963" + }, + ".claude/commands/validate.md": { + "hash": "db126df15cad" + }, + ".claude/commands/team-product.md": { + "hash": "d0388844667d" + }, + ".claude/hooks/guard-destructive-commands.ps1": { + "hash": "55a58d211c2c" + }, + ".claude/hooks/guard-destructive-commands.sh": { + "hash": "155b707b2af0" + }, + ".claude/commands/test.md": { + "hash": "dff6e64066e4" + }, + ".claude/hooks/pre-push-validate.sh": { + "hash": "86db6d107d60" + }, + ".claude/hooks/protect-sensitive.ps1": { + "hash": "59c32beeb28b" + }, + ".claude/hooks/protect-sensitive.sh": { + "hash": "f064ddda7879" + }, + ".claude/hooks/protect-templates.sh": { + "hash": "04a1d69ea578" + }, + ".claude/hooks/protect-templates.ps1": { + "hash": "0b14c70ee6ef" + }, + ".claude/hooks/session-start.sh": { + "hash": "bf976e3ffb1a" + }, + ".claude/hooks/stop-build-check.ps1": { + "hash": "16d00d311940" + }, + ".claude/hooks/warn-uncommitted.ps1": { + "hash": "e01cd78b2c17" + }, + ".claude/hooks/stop-build-check.sh": { + "hash": "8aecebcef7b7" + }, + ".claude/hooks/warn-uncommitted.sh": { + "hash": "b224fa6b1b1f" + }, + ".claude/rules/blockchain.md": { + "hash": "6ebb3c6166c1" + }, + ".claude/hooks/session-start.ps1": { + "hash": "7d50dcf043f4" + }, + ".claude/rules/documentation.md": { + "hash": "041b08cabcc0" + }, + ".claude/rules/agent-conduct.md": { + "hash": "a9204d8e7dc4" + }, + ".claude/rules/ci-cd.md": { + "hash": "4eb972787de8" + }, + ".claude/rules/git-workflow.md": { + "hash": "16df971f4442" + }, + ".claude/rules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".claude/rules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".claude/rules/dependency-management.md": { + "hash": "d0089754e232" + }, + ".claude/rules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".claude/rules/dotnet.md": { + "hash": "afd3bc539ab3" + }, + ".claude/rules/iac.md": { + "hash": "7389f06f50fe" + }, + ".claude/rules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".claude/rules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".claude/rules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".claude/rules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".claude/rules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".claude/rules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".claude/rules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".claude/rules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".claude/rules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".claude/rules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".claude/rules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".claude/rules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".claude/rules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".claude/rules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".claude/rules/quality.md": { + "hash": "478859ffbb93" + }, + ".claude/rules/rust.md": { + "hash": "653b8dfb73b5" + }, + ".claude/rules/template-protection.md": { + "hash": "e0eca318e94b" + }, + ".claude/rules/testing.md": { + "hash": "3e7853b624e1" + }, + ".claude/skills/brand/SKILL.md": { + "hash": "b4de2f51b106" + }, + ".claude/settings.json": { + "hash": "b5f6aee20306" + }, + ".claude/skills/backlog/SKILL.md": { + "hash": "de8c81512467" + }, + ".claude/rules/typescript.md": { + "hash": "1b050804b6ef" + }, + ".claude/skills/analyze-agents/SKILL.md": { + "hash": "3d77831e022a" + }, + ".claude/skills/cost/SKILL.md": { + "hash": "7276c4052975" + }, + ".claude/rules/python.md": { + "hash": "842f7d201c27" + }, + ".claude/skills/build/SKILL.md": { + "hash": "77448a90e59b" + }, + ".claude/skills/check/SKILL.md": { + "hash": "6d7d38148af5" + }, + ".claude/skills/deploy/SKILL.md": { + "hash": "f5cbd6d04c02" + }, + ".claude/rules/security.md": { + "hash": "3ed7f09d1ad0" + }, + ".claude/skills/cost-centres/SKILL.md": { + "hash": "738667d8716f" + }, + ".claude/skills/discover/SKILL.md": { + "hash": "ef2e7d50b511" + }, + ".claude/skills/expand/SKILL.md": { + "hash": "fd58b1775fd1" + }, + ".claude/skills/doctor/SKILL.md": { + "hash": "310dce98d8f4" + }, + ".claude/skills/feature-configure/SKILL.md": { + "hash": "4320cc00be36" + }, + ".claude/skills/feature-flow/SKILL.md": { + "hash": "cd75ad612f63" + }, + ".claude/skills/document-history/SKILL.md": { + "hash": "074d8a3cab21" + }, + ".claude/skills/format/SKILL.md": { + "hash": "3f2951d68edf" + }, + ".claude/skills/import-issues/SKILL.md": { + "hash": "7fb72bc4c4a2" + }, + ".claude/skills/plan/SKILL.md": { + "hash": "28fd3cc22953" + }, + ".claude/skills/orchestrate/SKILL.md": { + "hash": "8950d5dbb641" + }, + ".claude/skills/preflight/SKILL.md": { + "hash": "b6ad1a083bac" + }, + ".claude/skills/project-status/SKILL.md": { + "hash": "8df33d0cb8c9" + }, + ".claude/skills/infra-eval/SKILL.md": { + "hash": "7a4eedae11b3" + }, + ".claude/skills/review/SKILL.md": { + "hash": "8386eb6c97ee" + }, + ".claude/skills/start/SKILL.md": { + "hash": "a987a611b567" + }, + ".claude/skills/scaffold/SKILL.md": { + "hash": "9291d71bc86b" + }, + ".claude/skills/security/SKILL.md": { + "hash": "1520feb2bf97" + }, + ".claude/skills/feature-review/SKILL.md": { + "hash": "b556218af259" + }, + ".claude/skills/sync/SKILL.md": { + "hash": "19de7f1cc4cb" + }, + ".claude/skills/test/SKILL.md": { + "hash": "21da74147f13" + }, + ".claude/skills/sync-backlog/SKILL.md": { + "hash": "cea14e0c67fc" + }, + ".clinerules/agent-conduct.md": { + "hash": "58310e525ade" + }, + ".claude/skills/validate/SKILL.md": { + "hash": "112b57703063" + }, + ".clinerules/ai-cost-ops.md": { + "hash": "464c1fde7714" + }, + ".clinerules/blockchain.md": { + "hash": "21750f5c565c" + }, + ".clinerules/ci-cd.md": { + "hash": "d6b6698178f3" + }, + ".clinerules/dependency-management.md": { + "hash": "909464fb0495" + }, + ".clinerules/documentation.md": { + "hash": "a947fca57aca" + }, + ".clinerules/dotnet.md": { + "hash": "d978b656d898" + }, + ".clinerules/finops.md": { + "hash": "c02b0486012f" + }, + ".clinerules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".clinerules/git-workflow.md": { + "hash": "0ce8ea97c321" + }, + ".clinerules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".clinerules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".clinerules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".clinerules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".clinerules/iac.md": { + "hash": "12318597c6ca" + }, + ".clinerules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".clinerules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".clinerules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".clinerules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".clinerules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".clinerules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".clinerules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".clinerules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".clinerules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".clinerules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".clinerules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".clinerules/python.md": { + "hash": "0d1ed61bb8dc" + }, + ".clinerules/rust.md": { + "hash": "dc2f173fa092" + }, + ".clinerules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".clinerules/security.md": { + "hash": "9cefb19e63e5" + }, + ".clinerules/testing.md": { + "hash": "fba2f07c5a5b" + }, + ".clinerules/template-protection.md": { + "hash": "ea83904b6713" + }, + ".cursor/commands/analyze-agents.md": { + "hash": "024e3cec1f56" + }, + ".cursor/commands/backlog.md": { + "hash": "c6b5aa7de695" + }, + ".cursor/commands/brand.md": { + "hash": "63960929d9fc" + }, + ".cursor/commands/build.md": { + "hash": "74cc820e6fc1" + }, + ".clinerules/typescript.md": { + "hash": "c77f9043197a" + }, + ".cursor/commands/check.md": { + "hash": "9373b3fca5ff" + }, + ".cursor/commands/cost-centres.md": { + "hash": "143856799eda" + }, + ".cursor/commands/cost.md": { + "hash": "9c338e5f33b1" + }, + ".cursor/commands/deploy.md": { + "hash": "cd5b2f461cd7" + }, + ".cursor/commands/document-history.md": { + "hash": "975b4458c2c1" + }, + ".cursor/commands/feature-configure.md": { + "hash": "9b071a084415" + }, + ".cursor/commands/expand.md": { + "hash": "089462f22f52" + }, + ".cursor/commands/doctor.md": { + "hash": "c619f9e3b1e6" + }, + ".cursor/commands/feature-flow.md": { + "hash": "7d7a302552c6" + }, + ".cursor/commands/discover.md": { + "hash": "60be19c91420" + }, + ".cursor/commands/feature-review.md": { + "hash": "021c98874605" + }, + ".cursor/commands/format.md": { + "hash": "5be0e24ce07a" + }, + ".cursor/commands/import-issues.md": { + "hash": "2acded7ac4fa" + }, + ".cursor/commands/infra-eval.md": { + "hash": "313ed28d7c7f" + }, + ".cursor/commands/orchestrate.md": { + "hash": "e2f5928cdb2f" + }, + ".cursor/commands/plan.md": { + "hash": "0af99fb78d12" + }, + ".cursor/commands/preflight.md": { + "hash": "6d1a97bd57d5" + }, + ".cursor/commands/project-status.md": { + "hash": "7a0056181045" + }, + ".cursor/commands/review.md": { + "hash": "e1853e4abdb9" + }, + ".cursor/commands/scaffold.md": { + "hash": "69986b1530cf" + }, + ".cursor/commands/sync-backlog.md": { + "hash": "a6282eab6689" + }, + ".cursor/commands/sync.md": { + "hash": "513bea4ea974" + }, + ".cursor/commands/test.md": { + "hash": "0f83a2bdea71" + }, + ".cursor/commands/security.md": { + "hash": "1a4e4a4d8cf6" + }, + ".cursor/commands/start.md": { + "hash": "a72ec5c139fe" + }, + ".cursor/commands/validate.md": { + "hash": "5bc457b26628" + }, + ".cursor/rules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".cursor/rules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".cursor/rules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".cursor/rules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".cursor/rules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".cursor/rules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".cursor/rules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".cursor/rules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".cursor/rules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".cursor/rules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".cursor/rules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".cursor/rules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".cursor/rules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".cursor/rules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".cursor/rules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".cursor/rules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".cursor/rules/orchestrate.mdc": { + "hash": "9853913b4857" + }, + ".cursor/rules/project-context.mdc": { + "hash": "dd6859b78404" + }, + ".cursor/rules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".cursor/rules/security.mdc": { + "hash": "24c286e725a3" + }, + ".cursor/rules/team-backend.mdc": { + "hash": "66c7510720e1" + }, + ".cursor/rules/team-cost-ops.mdc": { + "hash": "545aecedca0b" + }, + ".cursor/rules/team-data.mdc": { + "hash": "412987c5fb0e" + }, + ".cursor/rules/team-devops.mdc": { + "hash": "0fe62d640199" + }, + ".cursor/rules/team-forge.mdc": { + "hash": "a238f2cc330b" + }, + ".cursor/rules/team-frontend.mdc": { + "hash": "82a998fe0de5" + }, + ".cursor/rules/team-docs.mdc": { + "hash": "b0ccc30e6b77" + }, + ".cursor/rules/team-infra.mdc": { + "hash": "d5f6f094dc30" + }, + ".cursor/rules/team-product.mdc": { + "hash": "153f579d8b04" + }, + ".cursor/rules/team-security.mdc": { + "hash": "9778f59babaa" + }, + ".cursor/rules/team-quality.mdc": { + "hash": "f70002d21c69" + }, + ".cursor/rules/team-testing.mdc": { + "hash": "e5e949b5a9ad" + }, + ".editorconfig": { + "hash": "fa09dda3d2e2" + }, + ".cursor/rules/team-strategic-ops.mdc": { + "hash": "00d0e2e368e4" + }, + ".gemini/styleguide.md": { + "hash": "b3f330f5df8f" + }, + ".gemini/config.yaml": { + "hash": "8f50c65f25fb" + }, + ".github/agents/adoption-strategist.agent.md": { + "hash": "5d2836dcb475" + }, + ".gitattributes": { + "hash": "90af26762384" + }, + ".github/agents/brand-guardian.agent.md": { + "hash": "c2461a9a8466" + }, + ".github/agents/content-strategist.agent.md": { + "hash": "c2544a299b60" + }, + ".github/agents/backend.agent.md": { + "hash": "0d127baccf58" + }, + ".github/agents/cost-ops-monitor.agent.md": { + "hash": "4188ea493644" + }, + ".github/agents/coverage-tracker.agent.md": { + "hash": "0ec9cd09509b" + }, + ".github/agents/dependency-watcher.agent.md": { + "hash": "e85baf4d0d46" + }, + ".github/agents/environment-manager.agent.md": { + "hash": "d2e9a801a5e5" + }, + ".github/agents/devops.agent.md": { + "hash": "ffe4f3317ec8" + }, + ".github/agents/flow-designer.agent.md": { + "hash": "d09c5f1d7cd2" + }, + ".github/agents/expansion-analyst.agent.md": { + "hash": "45e7e34e7877" + }, + ".github/agents/data.agent.md": { + "hash": "a55f855de262" + }, + ".github/agents/feature-ops.agent.md": { + "hash": "c4ba3dc907f6" + }, + ".github/agents/frontend.agent.md": { + "hash": "778677e3a2f1" + }, + ".github/agents/grant-hunter.agent.md": { + "hash": "7d849df31023" + }, + ".github/agents/governance-advisor.agent.md": { + "hash": "35e92bcae9d0" + }, + ".github/agents/infra.agent.md": { + "hash": "8c8d3a4f1adf" + }, + ".github/agents/input-clarifier.agent.md": { + "hash": "63f969a72bc4" + }, + ".github/agents/growth-analyst.agent.md": { + "hash": "25e3b42da3aa" + }, + ".github/agents/mission-definer.agent.md": { + "hash": "4ba6262d5eb8" + }, + ".github/agents/portfolio-analyst.agent.md": { + "hash": "fa3fe9e48a52" + }, + ".github/agents/integration-tester.agent.md": { + "hash": "b34beafad1bd" + }, + ".github/agents/impact-assessor.agent.md": { + "hash": "98a4559e208d" + }, + ".github/agents/model-economist.agent.md": { + "hash": "b3ea5f80581d" + }, + ".github/agents/project-shipper.agent.md": { + "hash": "93e8ef14bb8f" + }, + ".github/agents/product-manager.agent.md": { + "hash": "9d3da17ae6f3" + }, + ".github/agents/prompt-engineer.agent.md": { + "hash": "778f224899a3" + }, + ".github/agents/release-coordinator.agent.md": { + "hash": "dfa94cb6ff6f" + }, + ".github/agents/release-manager.agent.md": { + "hash": "e58484632ca0" + }, + ".github/agents/retrospective-analyst.agent.md": { + "hash": "143b2fd6c727" + }, + ".github/agents/spec-compliance-auditor.agent.md": { + "hash": "e2b66fe05d2b" + }, + ".github/agents/roadmap-tracker.agent.md": { + "hash": "0fdd8e9b7985" + }, + ".github/agents/role-architect.agent.md": { + "hash": "217b0f7d6bc5" + }, + ".github/agents/security-auditor.agent.md": { + "hash": "1f8a11a72b17" + }, + ".github/agents/team-validator.agent.md": { + "hash": "046b30086c5b" + }, + ".github/agents/token-efficiency-engineer.agent.md": { + "hash": "12997f39f2cb" + }, + ".github/agents/test-lead.agent.md": { + "hash": "6561c9a0a1c2" + }, + ".github/agents/vendor-arbitrage-analyst.agent.md": { + "hash": "627c29b70357" + }, + ".github/ai-framework-ci.yml": { + "hash": "d33ebabcb073" + }, + ".github/agents/ui-designer.agent.md": { + "hash": "337cddf83447" + }, + ".github/chatmodes/team-backend.chatmode.md": { + "hash": "ac8f69b82220" + }, + ".github/chatmodes/team-data.chatmode.md": { + "hash": "0afb7a28f351" + }, + ".github/chatmodes/team-cost-ops.chatmode.md": { + "hash": "121bbf207ca4" + }, + ".github/chatmodes/team-frontend.chatmode.md": { + "hash": "cce72ab3a795" + }, + ".github/chatmodes/team-devops.chatmode.md": { + "hash": "978de914aab8" + }, + ".github/chatmodes/team-docs.chatmode.md": { + "hash": "c204bd1f1788" + }, + ".github/chatmodes/team-forge.chatmode.md": { + "hash": "b04f7d8a9d9a" + }, + ".github/chatmodes/team-product.chatmode.md": { + "hash": "03428a19c477" + }, + ".github/chatmodes/team-quality.chatmode.md": { + "hash": "7bc2b2f277e1" + }, + ".github/chatmodes/team-infra.chatmode.md": { + "hash": "5850b3a37256" + }, + ".github/chatmodes/team-strategic-ops.chatmode.md": { + "hash": "8b337da42662" + }, + ".github/chatmodes/team-security.chatmode.md": { + "hash": "09342e8fc4bc" + }, + ".github/chatmodes/team-testing.chatmode.md": { + "hash": "074a36442ca2" + }, + ".github/CODEOWNERS": { + "hash": "ccf003556232" + }, + ".github/instructions/code-verify.md": { + "hash": "f82d9d55fc86" + }, + ".github/copilot-instructions.md": { + "hash": "c8bb26bb2cba" + }, + ".github/instructions/docs.md": { + "hash": "dca898c99b6c" + }, + ".github/instructions/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".github/instructions/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".github/instructions/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".github/instructions/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".github/instructions/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".github/instructions/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".github/instructions/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".github/instructions/languages/python.md": { + "hash": "63b439981bbc" + }, + ".github/instructions/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".github/instructions/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".github/instructions/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".github/instructions/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".github/instructions/languages/security.md": { + "hash": "1c73e7635578" + }, + ".github/instructions/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".github/instructions/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".github/instructions/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".github/instructions/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".github/instructions/marketing.md": { + "hash": "84860c42a466" + }, + ".github/instructions/quality.md": { + "hash": "d2d93df02537" + }, + ".github/instructions/performance.md": { + "hash": "4f8cd32aeb7e" + }, + ".github/ISSUE_TEMPLATE/bug_report.yml": { + "hash": "0b7c12b0e1bb" + }, + ".github/instructions/testing.md": { + "hash": "ee3e0d11b01b" + }, + ".github/instructions/README.md": { + "hash": "a79739379379" + }, + ".github/prompts/analyze-agents.prompt.md": { + "hash": "19e1dc8432f0" + }, + ".github/prompts/backlog.prompt.md": { + "hash": "45f1abd24d72" + }, + ".github/ISSUE_TEMPLATE/config.yml": { + "hash": "47344ff5c32c" + }, + ".github/prompts/brand.prompt.md": { + "hash": "0c6c0002f942" + }, + ".github/ISSUE_TEMPLATE/feature_request.yml": { + "hash": "79e7e3da99d0" + }, + ".github/prompts/check.prompt.md": { + "hash": "cc0bdba2f08f" + }, + ".github/prompts/cost-centres.prompt.md": { + "hash": "6baa174774e6" + }, + ".github/prompts/build.prompt.md": { + "hash": "046bffc8791e" + }, + ".github/prompts/cost.prompt.md": { + "hash": "8d2d9868723a" + }, + ".github/prompts/discover.prompt.md": { + "hash": "e04bdf639b4a" + }, + ".github/prompts/doctor.prompt.md": { + "hash": "1dad8d876f62" + }, + ".github/prompts/deploy.prompt.md": { + "hash": "fc9569e74c5d" + }, + ".github/prompts/document-history.prompt.md": { + "hash": "d9f170e31ace" + }, + ".github/prompts/feature-configure.prompt.md": { + "hash": "ce35b4c465e6" + }, + ".github/prompts/feature-review.prompt.md": { + "hash": "cf81881f51f5" + }, + ".github/prompts/format.prompt.md": { + "hash": "94a0505df23e" + }, + ".github/prompts/expand.prompt.md": { + "hash": "ff9445bec477" + }, + ".github/prompts/feature-flow.prompt.md": { + "hash": "b82d78500eb3" + }, + ".github/prompts/import-issues.prompt.md": { + "hash": "4b2701705479" + }, + ".github/prompts/infra-eval.prompt.md": { + "hash": "a8b15916f960" + }, + ".github/prompts/orchestrate.prompt.md": { + "hash": "63451784c289" + }, + ".github/prompts/preflight.prompt.md": { + "hash": "52dcd9cbf075" + }, + ".github/prompts/project-status.prompt.md": { + "hash": "328769323130" + }, + ".github/prompts/review.prompt.md": { + "hash": "94016ba6950b" + }, + ".github/prompts/scaffold.prompt.md": { + "hash": "22240d89615d" + }, + ".github/prompts/plan.prompt.md": { + "hash": "69797faa11a4" + }, + ".github/prompts/security.prompt.md": { + "hash": "953693049d80" + }, + ".github/prompts/start.prompt.md": { + "hash": "97357c17d8fe" + }, + ".github/prompts/test.prompt.md": { + "hash": "871f38d6af82" + }, + ".github/PULL_REQUEST_TEMPLATE.md": { + "hash": "10b91e98a082" + }, + ".github/prompts/sync-backlog.prompt.md": { + "hash": "9cea7fd68060" + }, + ".github/prompts/validate.prompt.md": { + "hash": "028479c6d2e2" + }, + ".github/scripts/README.md": { + "hash": "3124e25a7cfa" + }, + ".github/prompts/sync.prompt.md": { + "hash": "7e7773332996" + }, + ".github/scripts/resolve-merge.ps1": { + "hash": "0cd5d9407b89" + }, + ".github/scripts/setup-branch-protection.ps1": { + "hash": "160cb7bb55b1" + }, + ".github/scripts/resolve-merge.sh": { + "hash": "7ce68cb84a3a" + }, + ".github/scripts/setup-branch-protection.sh": { + "hash": "6eb664b21ee4" + }, + ".github/workflows/coverage-report.yml": { + "hash": "80dafccc5b8f" + }, + ".github/workflows/breaking-change-detection.yml": { + "hash": "bcd2f5c2e450" + }, + ".github/workflows/documentation-validation.yml": { + "hash": "01abb4c23ec9" + }, + ".github/workflows/documentation-quality.yml": { + "hash": "6088b2095f59" + }, + ".github/workflows/dependency-audit.yml": { + "hash": "fc376b5eef06" + }, + ".github/workflows/pr-validation.yml": { + "hash": "2c316a51ea66" + }, + ".github/workflows/retrospective-quality.yml": { + "hash": "74474e570115" + }, + ".gitmessage": { + "hash": "3f5666033096" + }, + ".markdownlint.json": { + "hash": "afe70a444035" + }, + ".prettierrc": { + "hash": "7288d28eacd8" + }, + ".roo/rules/ai-cost-ops.md": { + "hash": "2c38e075d4db" + }, + ".roo/rules/agent-conduct.md": { + "hash": "1f4b060a86eb" + }, + ".roo/rules/blockchain.md": { + "hash": "205b3ca13935" + }, + ".roo/rules/ci-cd.md": { + "hash": "56d669134c88" + }, + ".roo/rules/dependency-management.md": { + "hash": "10ec56bb6292" + }, + ".roo/rules/documentation.md": { + "hash": "ff90f251ce71" + }, + ".roo/rules/dotnet.md": { + "hash": "8b8461bcf286" + }, + ".roo/rules/finops.md": { + "hash": "17a63264e7b1" + }, + ".roo/rules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".roo/rules/iac.md": { + "hash": "2024c73bc61a" + }, + ".roo/rules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".roo/rules/git-workflow.md": { + "hash": "ae185cb50c40" + }, + ".roo/rules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".roo/rules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".roo/rules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".roo/rules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".roo/rules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".roo/rules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".roo/rules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".roo/rules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".roo/rules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".roo/rules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".roo/rules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".roo/rules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".roo/rules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".roo/rules/python.md": { + "hash": "7b9a642b9197" + }, + ".roo/rules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".roo/rules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".roo/rules/rust.md": { + "hash": "f68627a539a3" + }, + ".roo/rules/security.md": { + "hash": "a05714124061" + }, + ".roo/rules/testing.md": { + "hash": "f420798449b7" + }, + ".roo/rules/typescript.md": { + "hash": "5bff848ce5b6" + }, + ".vscode/settings.json": { + "hash": "4af945c89151" + }, + ".roo/rules/template-protection.md": { + "hash": "2097e8899fab" + }, + ".windsurf/commands/backlog.md": { + "hash": "68b4263fc444" + }, + ".vscode/extensions.json": { + "hash": "dd20fd0751ba" + }, + ".windsurf/commands/analyze-agents.md": { + "hash": "371f6c3bd7d5" + }, + ".windsurf/commands/brand.md": { + "hash": "1eb99e2c4883" + }, + ".windsurf/commands/build.md": { + "hash": "7fc64a835712" + }, + ".windsurf/commands/check.md": { + "hash": "780d7cb5ba53" + }, + ".windsurf/commands/cost-centres.md": { + "hash": "16f70ee610a8" + }, + ".windsurf/commands/cost.md": { + "hash": "6b9a7ee00d03" + }, + ".windsurf/commands/deploy.md": { + "hash": "bb64704796af" + }, + ".windsurf/commands/discover.md": { + "hash": "438676ab6872" + }, + ".windsurf/commands/document-history.md": { + "hash": "57554e0ae8d7" + }, + ".windsurf/commands/doctor.md": { + "hash": "e40703581729" + }, + ".windsurf/commands/format.md": { + "hash": "10cda487929d" + }, + ".windsurf/commands/expand.md": { + "hash": "62310f81603e" + }, + ".windsurf/commands/feature-configure.md": { + "hash": "31f4a7a16fe7" + }, + ".windsurf/commands/feature-review.md": { + "hash": "9c212c4c7afe" + }, + ".windsurf/commands/infra-eval.md": { + "hash": "359a364a00e5" + }, + ".windsurf/commands/feature-flow.md": { + "hash": "840122cc19aa" + }, + ".windsurf/commands/import-issues.md": { + "hash": "9b714f3d4b02" + }, + ".windsurf/commands/orchestrate.md": { + "hash": "1d9602ce2908" + }, + ".windsurf/commands/preflight.md": { + "hash": "2d35df2ccd8e" + }, + ".windsurf/commands/plan.md": { + "hash": "0bf8e69458de" + }, + ".windsurf/commands/security.md": { + "hash": "4878d4daa234" + }, + ".windsurf/commands/project-status.md": { + "hash": "a85e72f6794e" + }, + ".windsurf/commands/review.md": { + "hash": "ebd187ab3d06" + }, + ".windsurf/commands/start.md": { + "hash": "7cc5267d9274" + }, + ".windsurf/commands/scaffold.md": { + "hash": "c57cd1471acf" + }, + ".windsurf/commands/sync-backlog.md": { + "hash": "bf720daf3704" + }, + ".windsurf/commands/sync.md": { + "hash": "d4678bf06724" + }, + ".windsurf/commands/validate.md": { + "hash": "02d1c93720c5" + }, + ".windsurf/commands/test.md": { + "hash": "73463ed24c36" + }, + ".windsurf/rules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".windsurf/rules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".windsurf/rules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".windsurf/rules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".windsurf/rules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".windsurf/rules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".windsurf/rules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".windsurf/rules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".windsurf/rules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".windsurf/rules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".windsurf/rules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".windsurf/rules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".windsurf/rules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".windsurf/rules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".windsurf/rules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".windsurf/rules/project.md": { + "hash": "cc8ae6d95221" + }, + ".windsurf/rules/orchestrate.md": { + "hash": "0eea9715c9db" + }, + ".windsurf/rules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".windsurf/rules/security.md": { + "hash": "6a39548b2255" + }, + ".windsurf/rules/team-backend.md": { + "hash": "ec288e9b54ce" + }, + ".windsurf/rules/team-cost-ops.md": { + "hash": "69db0e22010d" + }, + ".windsurf/rules/team-devops.md": { + "hash": "06c93f75dcd3" + }, + ".windsurf/rules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".windsurf/rules/team-data.md": { + "hash": "2fa55fd04223" + }, + ".windsurf/rules/team-frontend.md": { + "hash": "e9a5f425646d" + }, + ".windsurf/rules/team-docs.md": { + "hash": "f019d83abc58" + }, + ".windsurf/rules/team-forge.md": { + "hash": "13f5fa696b1d" + }, + ".windsurf/rules/team-infra.md": { + "hash": "fb977ea917c1" + }, + ".windsurf/rules/team-quality.md": { + "hash": "afb908c98b76" + }, + ".windsurf/rules/team-product.md": { + "hash": "81f4929e42f3" + }, + ".windsurf/rules/team-security.md": { + "hash": "a7c778d35665" + }, + ".windsurf/rules/team-testing.md": { + "hash": "505b7caae49d" + }, + ".windsurf/rules/team-strategic-ops.md": { + "hash": "c1d8c4f33abe" + }, + "AGENTS.md": { + "hash": "911950e72f75" + }, + ".windsurf/workflows/full-assessment.yml": { + "hash": "57d1220ee8ac" + }, + "CHANGELOG.md": { + "hash": "8cb5a19628b1" + }, + ".windsurf/workflows/phase-execution.yml": { + "hash": "81054e1a3272" + }, + "AGENT_TEAMS.md": { + "hash": "725ada7d289f" + }, + "CONTRIBUTING.md": { + "hash": "afd7d3c16416" + }, + "AGENT_BACKLOG.md": { + "hash": "8eecc5cbe45f" + }, + "docs/api/01_overview.md": { + "hash": "342e9d07b13f" + }, + "docs/api/03_authentication.md": { + "hash": "26ef4da3ef56" + }, + "CLAUDE.md": { + "hash": "4e7b5fb72c4c" + }, + "docs/api/02_endpoints.md": { + "hash": "43eb1cc5a21f" + }, + "docs/api/04_examples.md": { + "hash": "7c21b7bcf311" + }, + "COMMAND_GUIDE.md": { + "hash": "4600c6725f0d" + }, + "docs/api/05_errors.md": { + "hash": "ed2e5a6e94ed" + }, + "docs/api/06_versioning.md": { + "hash": "bd878ba8a2f6" + }, + "docs/agents/agent-team-matrix.md": { + "hash": "09345b713ca1" + }, + "docs/api/README.md": { + "hash": "5a266ea2df82" + }, + "docs/architecture/01_overview.md": { + "hash": "df6efc6fda78" + }, + "docs/architecture/decisions/01-adopt-agentkit-forge.md": { + "hash": "552c1023dcf2" + }, + "docs/architecture/decisions/02-fallback-policy-tokens-problem.md": { + "hash": "31295d24794e" + }, + "docs/architecture/decisions/05-dependency-supply-chain-detection-tooling.md": { + "hash": "6ccff01874c7" + }, + "docs/architecture/decisions/06-code-quality-maintainability-signal-tooling.md": { + "hash": "3fb3fc9fd6ff" + }, + "docs/architecture/decisions/03-tooling-strategy.md": { + "hash": "b2700e569966" + }, + "docs/architecture/decisions/04-static-security-analysis-depth-tooling.md": { + "hash": "998c41843f21" + }, + "docs/architecture/decisions/README.md": { + "hash": "28b5d189b354" + }, + "docs/architecture/diagrams/.gitkeep": { + "hash": "64edc5f9f589" + }, + "docs/architecture/diagrams/README.md": { + "hash": "782485a4f5ef" + }, + "docs/architecture/README.md": { + "hash": "a867a017c8a0" + }, + "docs/architecture/specs/01_functional_spec.md": { + "hash": "cb36564f8ddd" + }, + "docs/architecture/specs/02_technical_spec.md": { + "hash": "b603c83e06d5" + }, + "docs/architecture/specs/03_api_spec.md": { + "hash": "d5a1811ddc75" + }, + "docs/engineering/02_coding_standards.md": { + "hash": "cf4473c84515" + }, + "docs/architecture/specs/README.md": { + "hash": "7c4e52efbd0d" + }, + "docs/engineering/01_setup.md": { + "hash": "225879d37c28" + }, + "docs/engineering/03_testing.md": { + "hash": "7cbc67b07b25" + }, + "docs/architecture/specs/04_data_models.md": { + "hash": "a77400c5387c" + }, + "docs/engineering/06_pr_documentation.md": { + "hash": "74d9c99fc82a" + }, + "docs/history/.index.json": { + "hash": "7beb781687f2" + }, + "docs/engineering/04_git_workflow.md": { + "hash": "8621780ffdcb" + }, + "docs/engineering/05_security.md": { + "hash": "b2fd1574733d" + }, + "docs/engineering/07_changelog.md": { + "hash": "945e28ab8b34" + }, + "docs/history/bug-fixes/README.md": { + "hash": "78dcabc86f74" + }, + "docs/history/bug-fixes/TEMPLATE-bugfix.md": { + "hash": "7873d84034ec" + }, + "docs/history/features/README.md": { + "hash": "7a6b10981688" + }, + "docs/history/implementations/README.md": { + "hash": "938114ecc966" + }, + "docs/engineering/README.md": { + "hash": "35afee261b38" + }, + "docs/history/issues/TEMPLATE-issue.md": { + "hash": "b133cb73cdc5" + }, + "docs/history/issues/README.md": { + "hash": "3e5d149f1a6c" + }, + "docs/history/implementations/TEMPLATE-implementation.md": { + "hash": "d4b4ad9bf6cc" + }, + "docs/history/features/TEMPLATE-feature.md": { + "hash": "c704b2662b57" + }, + "docs/history/migrations/README.md": { + "hash": "7b023cecc53d" + }, + "docs/history/lessons-learned/TEMPLATE-lesson.md": { + "hash": "810fcf97423b" + }, + "docs/history/lessons-learned/README.md": { + "hash": "b21e63388be4" + }, + "docs/history/migrations/TEMPLATE-migration.md": { + "hash": "97272242bd4e" + }, + "docs/history/README.md": { + "hash": "8feb37cbe0c0" + }, + "docs/integrations/01_external_apis.md": { + "hash": "17bc92567b46" + }, + "docs/integrations/02_webhooks.md": { + "hash": "b9e1b977bf00" + }, + "docs/operations/01_deployment.md": { + "hash": "8fc948f3e280" + }, + "docs/integrations/03_sdk.md": { + "hash": "c05a8a69392d" + }, + "docs/operations/02_monitoring.md": { + "hash": "0d1c7d4a021e" + }, + "docs/integrations/README.md": { + "hash": "105308932223" + }, + "docs/operations/04_troubleshooting.md": { + "hash": "a8c0364e80c9" + }, + "docs/operations/05_slos_slis.md": { + "hash": "2cbf5f2188dd" + }, + "docs/product/01_prd.md": { + "hash": "80c041b82e0d" + }, + "docs/planning/TEMPLATE-plan.md": { + "hash": "305534965f0e" + }, + "docs/operations/03_incident_response.md": { + "hash": "549b6f418202" + }, + "docs/operations/README.md": { + "hash": "62c405f25743" + }, + "docs/product/02_user_stories.md": { + "hash": "fce181fc7087" + }, + "docs/product/04_personas.md": { + "hash": "609113c06c69" + }, + "docs/product/03_roadmap.md": { + "hash": "c24ab738099b" + }, + "docs/product/README.md": { + "hash": "43db13443d26" + }, + "docs/README.md": { + "hash": "0a5900bf46af" + }, + "docs/reference/03_changelog.md": { + "hash": "4bd7c9e727aa" + }, + "docs/reference/04_contributing.md": { + "hash": "b33e1d721718" + }, + "MIGRATIONS.md": { + "hash": "e880b3edb24c" + }, + "docs/reference/02_faq.md": { + "hash": "ac95d6fb41ec" + }, + "docs/reference/01_glossary.md": { + "hash": "2f571539f2ff" + }, + "GEMINI.md": { + "hash": "a59e2d67b8dd" + }, + "docs/reference/README.md": { + "hash": "c09171b9b8a1" + }, + "QUALITY_GATES.md": { + "hash": "e3158c924e6e" + }, + "RUNBOOK_AI.md": { + "hash": "2a0d351455dc" + }, + "scripts/consolidate-branches.sh": { + "hash": "f345de274644" + }, + "scripts/create-doc.ps1": { + "hash": "207501b71fe6" + }, + "scripts/resolve-merge.ps1": { + "hash": "1ae33673ef63" + }, + "scripts/consolidate-branches.ps1": { + "hash": "767265430308" + }, + "scripts/analyze-agents.sh": { + "hash": "dfd5f15e5267" + }, + "scripts/analyze-agents.ps1": { + "hash": "e66c881de65a" + }, + "scripts/resolve-merge.sh": { + "hash": "29048f9dc59d" + }, + "scripts/setup-agentkit-branch-governance.ps1": { + "hash": "ac356d29ce05" + }, + "scripts/check-documentation-requirement.sh": { + "hash": "0604d65be8db" + }, + "scripts/setup-agentkit-branch-governance.sh": { + "hash": "cecf99c1c59a" + }, + "scripts/sync-issues.sh": { + "hash": "5728f842fda3" + }, + "scripts/create-doc.sh": { + "hash": "c170336b69e0" + }, + "scripts/sync-split-pr.sh": { + "hash": "169e29683f7b" + }, + "scripts/validate-numbering.sh": { + "hash": "d78c153d05ee" + }, + "scripts/update-changelog.sh": { + "hash": "146f6934a4ee" + }, + "scripts/validate-documentation.sh": { + "hash": "c00c47269a24" + }, + "scripts/update-changelog.ps1": { + "hash": "3b64bfbcfc25" + }, + "scripts/sync-split-pr.ps1": { + "hash": "199b5056c32e" + }, + "UNIFIED_AGENT_TEAMS.md": { + "hash": "506e38f9e21c" + }, + "WARP.md": { + "hash": "24ca1510e68e" + }, + "SECURITY.md": { + "hash": "a926751bc190" + } + } +} diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/AGENT_TEAMS.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/AGENT_TEAMS.md new file mode 100644 index 00000000..ed649683 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/AGENT_TEAMS.md @@ -0,0 +1,80 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Agent Teams — agentkit-forge + +> Repo-local team mapping derived from `.agentkit/spec/teams.yaml`. +> Customize the **Status**, **Primary Scope**, **Tech Stack**, and **Lead Agent** +> columns for your repository. The orchestrator uses this file for task dispatch. + +--- + +## Overview + +This document maps the canonical AgentKit team definitions (see +[UNIFIED_AGENT_TEAMS.md](./UNIFIED_AGENT_TEAMS.md)) to the concrete structure +of this repository. Not all teams may be active — mark inactive teams so the +orchestrator skips them during dispatch. + +--- + +## Team Roster + +| Team | ID | Focus | Scope | Accepts | Handoff Chain | Status | Lead Agent | +| ---- | -- | ----- | ----- | ------- | ------------- | ------ | ---------- | +| BACKEND | backend | API, services, core logic | `apps/api/**`, `services/**`, `src/server/**`, `controllers/**` | implement, review, plan | testing → docs | Active | — | +| FRONTEND | frontend | UI, components, PWA | `apps/web/**`, `apps/marketing/**`, `src/client/**`, `components/**` | implement, review, plan | testing → docs | Active | — | +| DATA | data | Database, models, migrations | `db/**`, `migrations/**`, `models/**`, `prisma/**` | implement, review, plan | backend → testing | Active | — | +| INFRA | infra | IaC, cloud, Terraform/Bicep | `infra/**`, `terraform/**`, `bicep/**`, `pulumi/**` | implement, review, plan, investigate | devops → security | Active | — | +| DEVOPS | devops | CI/CD, pipelines, automation | `.github/workflows/**`, `scripts/**`, `docker/**`, `**/Dockerfile*` | implement, review, plan | testing → security | Active | — | +| TESTING | testing | Unit, E2E, integration tests | `**/*.test.*`, `**/*.spec.*`, `tests/**`, `e2e/**`, `playwright/**` | implement, review, test | quality | Active | — | +| SECURITY | security | Auth, compliance, audit | `auth/**`, `security/**`, `middleware/auth*` | review, investigate | — | Active | — | +| DOCUMENTATION | docs | Docs, ADRs, guides | `docs/**`, `docs/architecture/decisions/**`, `.github/**`, `README.md`, `CHANGELOG.md`, `CONTRIBUTING.md` | implement, review, document | — | Active | — | +| PRODUCT | product | Features, PRDs, roadmap | `docs/product/**`, `docs/prd/**` | plan, review | backend → frontend | Active | — | +| QUALITY | quality | Code review, refactoring, bugs, reliability, session retrospectives | `**/*` | review, investigate | — | Active | — | +| TEAMFORGE | forge | Meta-team — creates, validates, and deploys new agent team specifications | `.agentkit/spec/**`, `docs/planning/agents-teams/**`, `docs/architecture/**` | plan, review, investigate, document | quality → docs | Active | — | +| STRATEGIC OPS | strategic-ops | Cross-project coordination, framework governance, portfolio-level planning | `docs/planning/**`, `docs/architecture/**`, `.agentkit/spec/**`, `AGENT_BACKLOG.md`, `UNIFIED_AGENT_TEAMS.md`, `AGENT_TEAMS.md` | plan, review, investigate, document | product → quality | Active | — | +| COST OPS | cost-ops | AI infrastructure cost reduction, vendor optimization, token efficiency | `docs/cost-ops/**`, `docs/planning/cost/**`, `config/models/**`, `config/pricing/**` | investigate, review, plan, document, implement | infra → product → strategic-ops | Active | — | + +--- + +## How to Customize + +### Activating / Deactivating a Team + +1. Change the **Status** column from `Inactive` to `Active` (or vice versa). +2. Fill in the **Primary Scope** with actual directory paths in this repo. +3. Set the **Tech Stack** to reflect the tools and frameworks used. +4. Assign a **Lead Agent** identifier (used for mentions and escalation). +5. Add any relevant notes about the team's role. + +The orchestrator will skip inactive teams during `/orchestrate` dispatch. + +### Adding Custom Scope Patterns + +Each team's scope patterns determine which files the orchestrator will assign +to that team. Use glob patterns: + +``` +src/server/** — all files under src/server/ +src/api/*.ts — TypeScript files directly in src/api/ +tests/unit/server/* — server unit tests +``` + +--- + +## Scope Overlap Resolution + +When multiple teams have overlapping scope patterns, the orchestrator uses +these priority rules: + +1. **Most specific pattern wins.** A deeper path match takes precedence. +2. **Explicit assignment overrides.** A task explicitly assigned to a team + via `--teams` flag takes precedence over pattern matching. +3. **Primary scope takes priority.** The team whose scope lists the most + specific matching directory owns the file. + +--- + +_Customize this file for your repository. User edits are preserved across syncs._ +_Canonical team definitions: [UNIFIED_AGENT_TEAMS.md](./UNIFIED_AGENT_TEAMS.md)_ diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/README.md new file mode 100644 index 00000000..9484b549 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/README.md @@ -0,0 +1,47 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# agentkit-forge — Documentation + +Welcome to the agentkit-forge documentation hub. This index links to every +documentation category maintained by this repository. + +## Categories + +| Category | Description | +| -------------------------------------- | ----------------------------------------------------- | +| [Product](./product/) | Product vision, strategy, personas, PRDs | +| [Architecture](./architecture/) | Specs, ADRs, diagrams, tech stack decisions | +| [Orchestration](./orchestration/) | Orchestration guide, PM guide, concurrency protocol | +| [Agents](./agents/) | Agent catalog, roles, team mappings | +| [API](./api/) | API reference, authentication, versioning, and errors | +| [Operations](./operations/) | CI/CD, deployments, monitoring, and troubleshooting | +| [Engineering](./engineering/) | Setup, coding standards, testing, and contributing | +| [Integrations](./integrations/) | External APIs, webhooks, and SDK | +| [Reference](./reference/) | Glossary, acronyms, FAQ, and tool config | +| [Handoffs](./handoffs/) | AI session handoff documents | +| [History](./history/) | Bug fixes, features, implementations, lessons | + +## Quick Links + +- [Architecture Overview](./architecture/01_overview.md) +- [Orchestration Guide](./orchestration/overview.md) +- [PM Guide](./orchestration/pm-guide.md) +- [Agent Catalog](./agents/catalog.md) +- [API Overview](./api/01_overview.md) +- [Getting Started](./engineering/01_setup.md) +- [Changelog](./reference/03_changelog.md) + +- [PRD Library](./product/prd/README.md) + + +## Conventions + +- Placeholder tokens `agentkit-forge` and `3.1.0` are replaced at sync time. +- Do **not** edit generated files directly — run `pnpm -C .agentkit agentkit:sync` + to regenerate them from the AgentKit Forge spec and overlays. + +--- + +Generated by AgentKit Forge v3.1.0 diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/api/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/api/README.md new file mode 100644 index 00000000..e91f44ae --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/api/README.md @@ -0,0 +1,14 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# API Docs Index + +## Contents + +- [01_overview.md](./01_overview.md) +- [02_endpoints.md](./02_endpoints.md) +- [03_authentication.md](./03_authentication.md) +- [04_examples.md](./04_examples.md) +- [05_errors.md](./05_errors.md) +- [06_versioning.md](./06_versioning.md) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/README.md new file mode 100644 index 00000000..de2050fe --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/README.md @@ -0,0 +1,12 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Architecture Docs Index + +## Contents + +- [01_overview.md](./01_overview.md) — Architecture overview and entry point +- [specs/](./specs/) — Functional, technical, and API specifications +- [diagrams/](./diagrams/) — Architecture diagrams +- [decisions/](./decisions/) — Architecture Decision Records (ADRs) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/decisions/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/decisions/README.md new file mode 100644 index 00000000..e488986f --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/decisions/README.md @@ -0,0 +1,16 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# ADR Index + +## Decision Records + +- [01-adopt-agentkit-forge.md](./01-adopt-agentkit-forge.md) +- [02-fallback-policy-tokens-problem.md](./02-fallback-policy-tokens-problem.md) +- [03-tooling-strategy.md](./03-tooling-strategy.md) +- [04-static-security-analysis-depth-tooling.md](./04-static-security-analysis-depth-tooling.md) +- [05-dependency-supply-chain-detection-tooling.md](./05-dependency-supply-chain-detection-tooling.md) +- [06-code-quality-maintainability-signal-tooling.md](./06-code-quality-maintainability-signal-tooling.md) +- [07-delivery-strategy.md](./07-delivery-strategy.md) +- [08-issue-sync-strategy.md](./08-issue-sync-strategy.md) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/diagrams/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/diagrams/README.md new file mode 100644 index 00000000..f93d1b98 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/diagrams/README.md @@ -0,0 +1,16 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Architecture Diagrams Index + +## Contents + +- Add C4 and deployment diagrams in this folder. +- Keep diagram files named with ordered prefixes when sequence matters (`01_`, `02_`, ...). + +## Recommended Diagrams + +- `01_system-context.mmd` (C4 L1) +- `02_container-view.mmd` (C4 L2) +- `03_deployment-view.mmd` (runtime/deployment) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/specs/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/specs/README.md new file mode 100644 index 00000000..abdab96a --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/architecture/specs/README.md @@ -0,0 +1,12 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Specs Docs Index + +## Contents + +- [01_functional_spec.md](./01_functional_spec.md) +- [02_technical_spec.md](./02_technical_spec.md) +- [03_api_spec.md](./03_api_spec.md) +- [04_data_models.md](./04_data_models.md) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/engineering/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/engineering/README.md new file mode 100644 index 00000000..9deaffc9 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/engineering/README.md @@ -0,0 +1,16 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Engineering Docs Index + +## Contents + +- [01_setup.md](./01_setup.md) +- [02_coding_standards.md](./02_coding_standards.md) +- [03_testing.md](./03_testing.md) +- [04_git_workflow.md](./04_git_workflow.md) +- [05_security.md](./05_security.md) +- [06_pr_documentation.md](./06_pr_documentation.md) +- [07_changelog.md](./07_changelog.md) +- [08_scaffold_management.md](./08_scaffold_management.md) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/README.md new file mode 100644 index 00000000..ecab947d --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/README.md @@ -0,0 +1,67 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# History + +Historical documentation for significant PRs and implementations in agentkit-forge. + +## Directory Structure + +| Directory | Description | +| -------------------------------------- | ---------------------------------------------- | +| [implementations/](./implementations/) | Major implementations and architecture changes | +| [bug-fixes/](./bug-fixes/) | Complex or critical bug resolutions | +| [features/](./features/) | New feature launches | +| [migrations/](./migrations/) | Major migrations and upgrades | +| [issues/](./issues/) | Issues encountered during development sessions | +| [lessons-learned/](./lessons-learned/) | Lessons learned from retrospectives | + +## Naming Convention + +Files use the format: `XXXX-YYYY-MM-DD-[title]-[type].md` + +- `XXXX` — sequential 4-digit number (maintained in [.index.json](./.index.json)) +- `YYYY-MM-DD` — completion date +- `[title]` — kebab-case title +- `[type]` — `implementation`, `bugfix`, `feature`, `migration`, `issue`, or `lesson` + +## Creating New Documentation + +Use the provided script to generate a new document from the correct template: + +```bash +# Bash +./scripts/create-doc.sh implementation "Feature Name" <pr-number> +./scripts/create-doc.sh bugfix "Bug Description" <pr-number> +./scripts/create-doc.sh feature "Feature Name" <pr-number> +./scripts/create-doc.sh migration "Migration Name" <pr-number> +./scripts/create-doc.sh issue "Issue Title" +./scripts/create-doc.sh lesson "Lesson Title" +``` + +> **Note:** Issue and lesson records are created automatically via +> `/review --focus=retrospective`, not through the create-doc script. +> +> **Fallback:** When `gh` CLI is unavailable (proxy failures, air-gapped +> environments), use `./scripts/create-doc.sh issue "Title"` to record issues +> locally, then run `./scripts/sync-issues.sh --apply` once access is restored. + +The `/review` command with `--focus=retrospective` automates issue and lesson +creation at end-of-session (non-blocking — never gates delivery): + +```bash +# Via agent command +/review --focus=retrospective # Full retrospective: issues + lessons +/review --focus=retrospective --dry-run # Preview without writing +/review --focus=retrospective --open-issues # Also create GitHub issues for unresolved problems +``` + +```powershell +# PowerShell +./scripts/create-doc.ps1 implementation "Feature Name" <pr-number> +``` + +Or use the `/document-history` slash command for auto-detection of type and title from session context. + +See [docs/engineering/06_pr_documentation.md](../engineering/06_pr_documentation.md) for the full documentation strategy. diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/bug-fixes/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/bug-fixes/README.md new file mode 100644 index 00000000..011ae350 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/bug-fixes/README.md @@ -0,0 +1,8 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Bug Fixes + +Historical records of complex or critical bug resolutions. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/features/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/features/README.md new file mode 100644 index 00000000..4e4a4c82 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/features/README.md @@ -0,0 +1,8 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Features + +Historical records of new feature launches. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/implementations/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/implementations/README.md new file mode 100644 index 00000000..afc0d54d --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/implementations/README.md @@ -0,0 +1,8 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Implementations + +Historical records of major implementations, architecture changes, and significant refactoring. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/issues/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/issues/README.md new file mode 100644 index 00000000..53ac6b6a --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/issues/README.md @@ -0,0 +1,42 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Issues + +Historical records of issues encountered during development sessions. + +## Creating Issue Records + +### Preferred: GitHub Issues via `gh` + +When the GitHub CLI is available and authenticated, create issues directly: + +```bash +gh issue create --title "Issue Title" --body "Description" +``` + +### Fallback: Local Issue Docs + +When `gh` is unavailable (no CLI installed, proxy/auth failures, air-gapped +environments), record issues locally as structured markdown: + +```bash +./scripts/create-doc.sh issue "Issue Title" +``` + +Issues are also logged automatically by `/review --focus=retrospective` at the +end of a session. + +### Syncing Local Issues to GitHub + +Once `gh` access is restored, sync local issue docs to GitHub Issues: + +```bash +./scripts/sync-issues.sh # Dry-run by default +./scripts/sync-issues.sh --apply # Create GitHub Issues and mark synced +``` + +See [ADR-08](../../architecture/decisions/08-issue-sync-strategy.md) for +the sync strategy and automation decisions. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/lessons-learned/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/lessons-learned/README.md new file mode 100644 index 00000000..5acf19fb --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/lessons-learned/README.md @@ -0,0 +1,11 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Lessons Learned + +Historical records of lessons learned during development sessions. + +Lessons are logged automatically by `/review --focus=retrospective` at the end of +a session, or manually via `scripts/create-doc.sh lesson "Lesson Title"`. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/migrations/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/migrations/README.md new file mode 100644 index 00000000..672df4f0 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/history/migrations/README.md @@ -0,0 +1,8 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Migrations + +Historical records of major migrations and upgrades. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/integrations/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/integrations/README.md new file mode 100644 index 00000000..48aa94c7 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/integrations/README.md @@ -0,0 +1,11 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Integrations Docs Index + +## Contents + +- [01_external_apis.md](./01_external_apis.md) +- [02_webhooks.md](./02_webhooks.md) +- [03_sdk.md](./03_sdk.md) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/operations/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/operations/README.md new file mode 100644 index 00000000..5918083e --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/operations/README.md @@ -0,0 +1,13 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Operations Docs Index + +## Contents + +- [01_deployment.md](./01_deployment.md) +- [02_monitoring.md](./02_monitoring.md) +- [03_incident_response.md](./03_incident_response.md) +- [04_troubleshooting.md](./04_troubleshooting.md) +- [05_slos_slis.md](./05_slos_slis.md) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/product/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/product/README.md new file mode 100644 index 00000000..ce11aaf5 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/product/README.md @@ -0,0 +1,12 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Product Docs Index + +## Contents + +- [01_prd.md](./01_prd.md) +- [02_user_stories.md](./02_user_stories.md) +- [03_roadmap.md](./03_roadmap.md) +- [04_personas.md](./04_personas.md) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/reference/README.md b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/reference/README.md new file mode 100644 index 00000000..3921959d --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/docs/reference/README.md @@ -0,0 +1,14 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Reference Docs Index + +## Contents + +- [01_glossary.md](./01_glossary.md) +- [02_faq.md](./02_faq.md) +- [03_changelog.md](./03_changelog.md) +- [04_contributing.md](./04_contributing.md) +- [05_project_yaml_reference.md](./05_project_yaml_reference.md) +- [ai_handoffs/](./ai_handoffs/) diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/analyze-agents.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/analyze-agents.sh new file mode 100644 index 00000000..fd5324d6 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/analyze-agents.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/analyze-agents.sh +# Generates agent/team relationship matrices from spec files. +# +# Usage: +# ./scripts/analyze-agents.sh [--output <path>] [--matrix <n>] [--format <fmt>] +# +# Options: +# --output <path> Output file (default: docs/agents/agent-team-matrix.md) +# --matrix <n> Specific matrix: 1-8, supplementary, all (default: all) +# --format <fmt> Output format: markdown, json (default: markdown) + +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +node "$PROJECT_ROOT/.agentkit/engines/node/src/cli.mjs" analyze-agents "$@" diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/check-documentation-requirement.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/check-documentation-requirement.sh new file mode 100644 index 00000000..944d7501 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/check-documentation-requirement.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/check-documentation-requirement.sh +# Analyzes staged or changed files to determine whether PR documentation is required. +# +# Usage (pre-commit hook): +# ./scripts/check-documentation-requirement.sh +# +# Exit codes: +# 0 — documentation not required or already present +# 1 — documentation required but not present (when --strict is passed) +# +# Environment variables: +# GITHUB_BASE_REF — set automatically in GitHub Actions PR workflows +# STRICT — set to "true" to exit 1 when documentation is required + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HISTORY_DIR="$REPO_ROOT/docs/history" +STRICT="${STRICT:-false}" + +# --------------------------------------------------------------------------- +# Collect changed files +# --------------------------------------------------------------------------- + +if [[ -n "${GITHUB_BASE_REF:-}" ]]; then + # Running inside GitHub Actions pull_request event + CHANGED_FILES=$(git diff --name-only "origin/${GITHUB_BASE_REF}" HEAD 2>/dev/null || git diff --name-only HEAD~1 HEAD) +else + # Running locally — inspect staged files, fall back to last commit + CHANGED_FILES=$(git diff --cached --name-only 2>/dev/null) + if [[ -z "$CHANGED_FILES" ]]; then + CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || true) + fi +fi + +if [[ -z "$CHANGED_FILES" ]]; then + echo "ℹ️ No changed files detected." + exit 0 +fi + +# --------------------------------------------------------------------------- +# Impact assessment +# --------------------------------------------------------------------------- + +IMPACT_HIGH=false +IMPACT_MEDIUM=false + +while IFS= read -r file; do + # High impact: project files, CI, security configs, infrastructure + if [[ "$file" == *.csproj || "$file" == package.json || "$file" == Cargo.toml || \ + "$file" == go.mod || "$file" == pyproject.toml || "$file" == build.gradle || \ + "$file" == .github/workflows/*.yml || "$file" == .github/workflows/*.yaml || \ + "$file" == Dockerfile* || "$file" == docker-compose*.yml || \ + "$file" == **/terraform/**/*.tf || "$file" == **/infra/**/*.tf ]]; then + IMPACT_HIGH=true + # Medium impact: source code files + elif [[ "$file" == src/**/*.cs || "$file" == src/**/*.ts || "$file" == src/**/*.tsx || \ + "$file" == src/**/*.py || "$file" == src/**/*.rs || "$file" == src/**/*.go || \ + "$file" == lib/**/*.* || "$file" == packages/**/*.* ]]; then + IMPACT_MEDIUM=true + fi +done <<< "$CHANGED_FILES" + +# --------------------------------------------------------------------------- +# Count changed files +# --------------------------------------------------------------------------- + +CHANGED_COUNT=$(echo "$CHANGED_FILES" | wc -l | tr -d ' ') + +if [[ "$CHANGED_COUNT" -gt 50 ]]; then + IMPACT_HIGH=true +fi + +# --------------------------------------------------------------------------- +# Check if documentation already exists for this branch/PR +# --------------------------------------------------------------------------- + +# Count history docs that have been staged or added in this branch +HISTORY_DOCS=0 +if [[ -n "${GITHUB_BASE_REF:-}" ]]; then + HISTORY_DOCS=$(git diff --name-only "origin/${GITHUB_BASE_REF}" HEAD -- 'docs/history/**/*.md' 2>/dev/null | grep -v 'README\.md\|TEMPLATE-' | wc -l | tr -d ' ' || echo 0) +else + HISTORY_DOCS=$(git diff --cached --name-only -- 'docs/history/*.md' 'docs/history/**/*.md' 2>/dev/null | grep -v 'README\.md\|TEMPLATE-' | wc -l | tr -d ' ' || echo 0) +fi + +# --------------------------------------------------------------------------- +# Output assessment +# --------------------------------------------------------------------------- + +if [[ "$IMPACT_HIGH" == true ]]; then + echo "⚠️ HIGH IMPACT change detected — documentation required" + echo " Changed files: $CHANGED_COUNT" + if [[ "$HISTORY_DOCS" -gt 0 ]]; then + echo "✅ Documentation found ($HISTORY_DOCS new doc(s) in docs/history/)" + exit 0 + else + echo " Run: ./scripts/create-doc.sh <type> \"<title>\" <pr-number>" + echo " See: docs/engineering/06_pr_documentation.md" + if [[ "$STRICT" == "true" ]]; then + exit 1 + fi + fi +elif [[ "$IMPACT_MEDIUM" == true ]]; then + echo "ℹ️ MEDIUM IMPACT change detected — documentation recommended" + echo " Run: ./scripts/create-doc.sh <type> \"<title>\" <pr-number>" +else + echo "✅ LOW IMPACT change — documentation optional" +fi + +exit 0 diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/consolidate-branches.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/consolidate-branches.sh new file mode 100644 index 00000000..9aa9b746 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/consolidate-branches.sh @@ -0,0 +1,289 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# ============================================================================= +# consolidate-branches.sh — Merge all unmerged feature branches into one +# ============================================================================= +# Usage: scripts/consolidate-branches.sh [base-branch] [--dry-run] [--skip=branch1,branch2] +# +# Discovers all local and remote branches not yet merged into <base-branch>, +# filters out protected branches, and merges them one by one into the current +# branch. Uses resolve-merge.sh for auto-resolution of generated files. +# +# Arguments: +# base-branch Branch to check "merged" status against (default: main) +# --dry-run List branches that would be merged without doing anything +# --skip=X,Y Comma-separated list of branch names to skip +# +# Examples: +# scripts/consolidate-branches.sh # merge all into current +# scripts/consolidate-branches.sh dev --dry-run # preview what would merge +# scripts/consolidate-branches.sh main --skip=wip/experiment +# ============================================================================= +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# Colours (disabled when piped) +if [ -t 1 ]; then + GREEN='\033[0;32m' + YELLOW='\033[1;33m' + RED='\033[0;31m' + CYAN='\033[0;36m' + BOLD='\033[1m' + NC='\033[0m' +else + GREEN='' YELLOW='' RED='' CYAN='' BOLD='' NC='' +fi + +info() { echo -e "${CYAN}[info]${NC} $*"; } +ok() { echo -e "${GREEN}[ok]${NC} $*"; } +warn() { echo -e "${YELLOW}[warn]${NC} $*"; } +err() { echo -e "${RED}[error]${NC} $*"; } + +# --------------------------------------------------------------------------- +# Parse arguments +# --------------------------------------------------------------------------- +BASE_BRANCH="main" +DRY_RUN=false +SKIP_BRANCHES="" + +for arg in "$@"; do + case "$arg" in + --dry-run) DRY_RUN=true ;; + --skip=*) SKIP_BRANCHES="${arg#--skip=}" ;; + -*) err "Unknown flag: $arg"; exit 1 ;; + *) BASE_BRANCH="$arg" ;; + esac +done + +cd "$REPO_ROOT" + +CURRENT_BRANCH="$(git branch --show-current)" +if [ -z "$CURRENT_BRANCH" ]; then + err "Not on a branch (detached HEAD). Checkout a branch first." + exit 1 +fi + +# --------------------------------------------------------------------------- +# Protected branches — never auto-merge these +# --------------------------------------------------------------------------- +PROTECTED_BRANCHES="main master develop release" + +is_protected() { + local branch="$1" + for p in $PROTECTED_BRANCHES; do + [ "$branch" = "$p" ] && return 0 + done + return 1 +} + +is_skipped() { + local branch="$1" + if [ -n "$SKIP_BRANCHES" ]; then + IFS=',' read -ra SKIPS <<< "$SKIP_BRANCHES" + for s in "${SKIPS[@]}"; do + [ "$branch" = "$s" ] && return 0 + done + fi + return 1 +} + +# --------------------------------------------------------------------------- +# 1. Fetch all remotes +# --------------------------------------------------------------------------- +info "Fetching all remotes..." +git fetch --all --prune 2>/dev/null || warn "Fetch failed — continuing with local state" + +# --------------------------------------------------------------------------- +# 2. Discover unmerged branches +# --------------------------------------------------------------------------- +info "Finding branches not merged into ${BASE_BRANCH}..." + +# Get all remote branches not merged into base +UNMERGED=() +while IFS= read -r ref; do + [ -z "$ref" ] && continue + # Strip 'origin/' prefix for display + branch="${ref#origin/}" + + # Skip current branch, base branch, HEAD pointer + [ "$branch" = "$CURRENT_BRANCH" ] && continue + [ "$branch" = "$BASE_BRANCH" ] && continue + [ "$branch" = "HEAD" ] && continue + + # Skip protected branches + is_protected "$branch" && continue + + # Skip user-specified branches + is_skipped "$branch" && continue + + UNMERGED+=("$branch") +done < <(git branch -r --no-merged "origin/${BASE_BRANCH}" 2>/dev/null | sed 's/^[* ]*//' | sort) + +# Also check local-only branches (not on remote) +while IFS= read -r branch; do + [ -z "$branch" ] && continue + [ "$branch" = "$CURRENT_BRANCH" ] && continue + [ "$branch" = "$BASE_BRANCH" ] && continue + is_protected "$branch" && continue + is_skipped "$branch" && continue + + # Check if already in UNMERGED list + already=false + for u in "${UNMERGED[@]+"${UNMERGED[@]}"}"; do + [ "$u" = "$branch" ] && already=true && break + done + $already && continue + + UNMERGED+=("$branch") +done < <(git branch --no-merged "$BASE_BRANCH" 2>/dev/null | sed 's/^[* ]*//' | sort) + +if [ ${#UNMERGED[@]} -eq 0 ]; then + ok "No unmerged branches found. Everything is up to date with ${BASE_BRANCH}." + exit 0 +fi + +# --------------------------------------------------------------------------- +# 3. Display plan +# --------------------------------------------------------------------------- +echo "" +echo -e "${BOLD}Branch Consolidation Plan${NC}" +echo -e "${BOLD}========================${NC}" +echo "" +echo -e " Current branch: ${GREEN}${CURRENT_BRANCH}${NC}" +echo -e " Base branch: ${CYAN}${BASE_BRANCH}${NC}" +echo -e " Branches to merge: ${#UNMERGED[@]}" +echo "" + +for i in "${!UNMERGED[@]}"; do + branch="${UNMERGED[$i]}" + # Get commit count ahead of base + ahead=$(git rev-list --count "origin/${BASE_BRANCH}..origin/${branch}" 2>/dev/null || echo "?") + echo -e " $((i + 1)). ${YELLOW}${branch}${NC} (${ahead} commits ahead)" +done + +echo "" + +if $DRY_RUN; then + info "Dry run — no changes made." + exit 0 +fi + +# --------------------------------------------------------------------------- +# 4. Merge each branch +# --------------------------------------------------------------------------- +MERGED=() +FAILED=() +SKIPPED_DIRTY=() + +for branch in "${UNMERGED[@]}"; do + echo "" + echo -e "${BOLD}─────────────────────────────────────────${NC}" + info "Merging ${branch} ($(( ${#MERGED[@]} + ${#FAILED[@]} + 1 ))/${#UNMERGED[@]})..." + + # Check for uncommitted changes before each merge + if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then + warn "Uncommitted changes detected. Stashing before merge..." + git stash push -m "consolidate-branches: before merging ${branch}" 2>/dev/null + fi + + # Try merging from remote first, fall back to local + merge_ref="origin/${branch}" + if ! git rev-parse --verify "$merge_ref" &>/dev/null; then + merge_ref="$branch" + fi + + merge_output=$(git merge "$merge_ref" --no-edit 2>&1) && { + ok "Merged ${branch} cleanly." + MERGED+=("$branch") + continue + } + + # Check if it's a conflict or other error + if echo "$merge_output" | grep -qF "CONFLICT"; then + warn "Conflicts merging ${branch}. Attempting auto-resolution..." + + # Use resolve-merge logic inline (auto-resolve generated files) + auto_resolved=0 + while IFS= read -r file; do + [ -z "$file" ] && continue + case "$file" in + .claude/*|.cursor/*|.windsurf/*|.roo/*|.clinerules/*|.github/instructions/*|\ + .github/copilot-instructions.md|.github/PULL_REQUEST_TEMPLATE.md|\ + .github/agents/*|.github/chatmodes/*|.github/prompts/*|\ + .agents/*|.gemini/*|docs/*/README.md|scripts/*.sh|scripts/*.ps1|\ + AGENTS.md|UNIFIED_AGENT_TEAMS.md|COMMAND_GUIDE.md|QUALITY_GATES.md|\ + RUNBOOK_AI.md|CONTRIBUTING.md) + git checkout --theirs -- "$file" 2>/dev/null && git add "$file" 2>/dev/null + ok " Auto-resolved: $file" + auto_resolved=$((auto_resolved + 1)) + ;; + pnpm-lock.yaml|.agentkit/pnpm-lock.yaml|package-lock.json|yarn.lock|.agentkit/yarn.lock) + git checkout --theirs -- "$file" 2>/dev/null && git add "$file" 2>/dev/null + ok " Auto-resolved (lockfile): $file" + auto_resolved=$((auto_resolved + 1)) + ;; + esac + done < <(git diff --name-only --diff-filter=U 2>/dev/null) + + # Check if any conflicts remain + remaining=$(git diff --name-only --diff-filter=U 2>/dev/null || true) + if [ -z "$remaining" ]; then + git commit --no-edit 2>/dev/null + ok "Merged ${branch} (${auto_resolved} auto-resolved)." + MERGED+=("$branch") + else + err "Unresolved conflicts merging ${branch}:" + echo "$remaining" | while IFS= read -r f; do + echo -e " ${RED}✗${NC} $f" + done + warn "Aborting merge of ${branch}. Resolve manually or re-run with --skip=${branch}" + git merge --abort 2>/dev/null || true + FAILED+=("$branch") + fi + else + err "Merge of ${branch} failed (not a conflict):" + echo " $merge_output" + git merge --abort 2>/dev/null || true + FAILED+=("$branch") + fi +done + +# --------------------------------------------------------------------------- +# 5. Summary +# --------------------------------------------------------------------------- +echo "" +echo -e "${BOLD}═══════════════════════════════════════════${NC}" +echo -e "${BOLD}Consolidation Summary${NC}" +echo -e "${BOLD}═══════════════════════════════════════════${NC}" +echo "" +echo -e " ${GREEN}Merged:${NC} ${#MERGED[@]}/${#UNMERGED[@]}" + +if [ ${#MERGED[@]} -gt 0 ]; then + for b in "${MERGED[@]}"; do + echo -e " ${GREEN}✓${NC} $b" + done +fi + +if [ ${#FAILED[@]} -gt 0 ]; then + echo "" + echo -e " ${RED}Failed:${NC} ${#FAILED[@]}/${#UNMERGED[@]}" + for b in "${FAILED[@]}"; do + echo -e " ${RED}✗${NC} $b" + done + echo "" + warn "Re-run with: scripts/consolidate-branches.sh ${BASE_BRANCH} --skip=$(IFS=,; echo "${MERGED[*]}")" +fi + +echo "" +if [ ${#MERGED[@]} -gt 0 ]; then + info "Next steps:" + echo " 1. Run: pnpm -C .agentkit agentkit:sync" + echo " 2. Run: pnpm test" + echo " 3. Review with: git log --oneline -20" +fi + +exit ${#FAILED[@]} diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/create-doc.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/create-doc.sh new file mode 100644 index 00000000..318e7fe7 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/create-doc.sh @@ -0,0 +1,170 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/create-doc.sh +# Creates a new history document from the appropriate template. +# +# Usage: +# ./scripts/create-doc.sh <type> "<title>" [pr-number] +# +# Arguments: +# type Document type: implementation | bugfix | feature | migration +# title Human-readable title for the document +# pr-number Optional PR number to include in the document +# +# Examples: +# ./scripts/create-doc.sh implementation "TreatWarningsAsErrors" 42 +# ./scripts/create-doc.sh bugfix "Null Reference in Auth" 43 +# ./scripts/create-doc.sh feature "User Authentication" 44 +# ./scripts/create-doc.sh migration "Upgrade to Node 22" 45 + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HISTORY_DIR="$REPO_ROOT/docs/history" +INDEX_FILE="$HISTORY_DIR/.index.json" + +# --------------------------------------------------------------------------- +# Argument validation +# --------------------------------------------------------------------------- + +usage() { + echo "Usage: $0 <type> \"<title>\" [pr-number]" + echo " type: implementation | bugfix | feature | migration | issue | lesson" + exit 1 +} + +if [[ $# -lt 2 ]]; then + usage +fi + +TYPE="$1" +TITLE="$2" +PR_NUMBER="${3:-}" + +case "$TYPE" in + implementation|bugfix|feature|migration|issue|lesson) ;; + *) echo "Error: unknown type '$TYPE'. Must be one of: implementation, bugfix, feature, migration, issue, lesson"; exit 1 ;; +esac + +# --------------------------------------------------------------------------- +# Determine subdirectory from type +# --------------------------------------------------------------------------- + +case "$TYPE" in + implementation) SUBDIR="implementations" ;; + bugfix) SUBDIR="bug-fixes" ;; + feature) SUBDIR="features" ;; + migration) SUBDIR="migrations" ;; + issue) SUBDIR="issues" ;; + lesson) SUBDIR="lessons-learned" ;; +esac + +# --------------------------------------------------------------------------- +# Read and update the sequential index +# --------------------------------------------------------------------------- + +if [[ ! -f "$INDEX_FILE" ]]; then + echo '{"sequences":{"implementation":1,"bugfix":1,"feature":1,"migration":1,"issue":1,"lesson":1},"entries":[]}' > "$INDEX_FILE" +fi + +# Use node to read the current sequence number safely (no user input interpolated) +SEQ_NUM=$(node - "$INDEX_FILE" "$TYPE" << 'NODEEOF' + const [,, indexFile, type] = process.argv; + const fs = require('fs'); + const idx = JSON.parse(fs.readFileSync(indexFile, 'utf8')); + process.stdout.write(String(idx.sequences[type] || 1)); +NODEEOF +) + +PADDED=$(printf "%04d" "$SEQ_NUM") +DATE=$(date +%Y-%m-%d) + +# Sanitize title: lowercase, spaces to hyphens, remove non-alphanumeric except hyphens +SLUG=$(echo "$TITLE" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/-\+/-/g' | sed 's/^-\|-$//g') + +FILENAME="${PADDED}-${DATE}-${SLUG}-${TYPE}.md" +DEST_DIR="$HISTORY_DIR/$SUBDIR" +DEST_FILE="$DEST_DIR/$FILENAME" + +mkdir -p "$DEST_DIR" + +# --------------------------------------------------------------------------- +# Copy template and substitute placeholders +# --------------------------------------------------------------------------- + +TEMPLATE_SRC="$REPO_ROOT/.agentkit/templates/docs/history/$SUBDIR/TEMPLATE-${TYPE}.md" + +if [[ ! -f "$TEMPLATE_SRC" ]]; then + echo "Error: template not found at $TEMPLATE_SRC" + exit 1 +fi + +PR_REF="${PR_NUMBER:+#${PR_NUMBER}}" + +# Perform literal replacements using Node.js to avoid sed injection +TITLE_VAL="$TITLE" DATE_VAL="$DATE" PR_REF_VAL="${PR_REF:-[#PR-Number]}" \ +node - "$TEMPLATE_SRC" "$DEST_FILE" << 'NODEEOF' + const fs = require('fs'); + const [,, src, dest] = process.argv; + let content = fs.readFileSync(src, 'utf8'); + + const replacements = { + '[Feature/Change Name]': process.env.TITLE_VAL, + '[Bug Description]': process.env.TITLE_VAL, + '[Feature Name]': process.env.TITLE_VAL, + '[Migration Name]': process.env.TITLE_VAL, + '[Issue Title]': process.env.TITLE_VAL, + '[Lesson Title]': process.env.TITLE_VAL, + '[YYYY-MM-DD]': process.env.DATE_VAL, + '[#PR-Number]': process.env.PR_REF_VAL + }; + + for (const [placeholder, value] of Object.entries(replacements)) { + content = content.split(placeholder).join(value); + } + + fs.writeFileSync(dest, content, 'utf8'); +NODEEOF + +# --------------------------------------------------------------------------- +# Update index +# --------------------------------------------------------------------------- + +node - "$INDEX_FILE" "$TYPE" "$SEQ_NUM" "$TITLE" "$DATE" "${PR_NUMBER:-}" "$SUBDIR/$FILENAME" << 'NODEEOF' + const [,, indexFile, type, seqNum, title, date, pr, file] = process.argv; + const fs = require('fs'); + const idx = JSON.parse(fs.readFileSync(indexFile, 'utf8')); + idx.sequences[type] = (idx.sequences[type] || 1) + 1; + idx.entries = idx.entries || []; + idx.entries.push({ number: Number(seqNum), type, title, date, pr, file }); + fs.writeFileSync(indexFile, JSON.stringify(idx, null, 2) + '\n'); +NODEEOF + +echo "Created: $DEST_FILE" + +# --------------------------------------------------------------------------- +# Update CHANGELOG.md +# --------------------------------------------------------------------------- + +# Map history doc type to changelog section +case "$TYPE" in + feature) CHANGELOG_SECTION="Added" ;; + implementation) CHANGELOG_SECTION="Added" ;; + bugfix) CHANGELOG_SECTION="Fixed" ;; + migration) CHANGELOG_SECTION="Changed" ;; + issue) CHANGELOG_SECTION="" ;; # Issues don't go in changelog + lesson) CHANGELOG_SECTION="" ;; # Lessons don't go in changelog +esac + +UPDATE_CHANGELOG="$SCRIPT_DIR/update-changelog.sh" +if [[ -z "$CHANGELOG_SECTION" ]]; then + echo "ℹ️ ${TYPE} records are not added to CHANGELOG.md — skipping changelog update." +elif [[ -f "$UPDATE_CHANGELOG" ]]; then + bash "$UPDATE_CHANGELOG" "$CHANGELOG_SECTION" "$TITLE" "${PR_NUMBER:-}" "$SUBDIR/$FILENAME" || \ + echo "⚠️ Could not update CHANGELOG.md — please add the entry manually." +else + echo "ℹ️ update-changelog.sh not found — skipping changelog update." +fi diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/resolve-merge.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/resolve-merge.sh new file mode 100644 index 00000000..a3daecff --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/resolve-merge.sh @@ -0,0 +1,162 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# ============================================================================= +# resolve-merge.sh — Apply standard merge conflict resolutions +# ============================================================================= +# Usage: scripts/resolve-merge.sh [target-branch] +# +# Merges origin/<target-branch> into the current branch and auto-resolves +# generated/framework-managed files per the AgentKit merge resolution matrix. +# Remaining conflicts (engine source, spec files) are listed for manual review. +# ============================================================================= +set -euo pipefail + +TARGET="${1:-main}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# Colours (disabled when piped) +if [ -t 1 ]; then + GREEN='\033[0;32m' + YELLOW='\033[1;33m' + RED='\033[0;31m' + CYAN='\033[0;36m' + NC='\033[0m' +else + GREEN='' YELLOW='' RED='' CYAN='' NC='' +fi + +info() { echo -e "${CYAN}[info]${NC} $*"; } +ok() { echo -e "${GREEN}[ok]${NC} $*"; } +warn() { echo -e "${YELLOW}[warn]${NC} $*"; } +err() { echo -e "${RED}[error]${NC} $*"; } + +cd "$REPO_ROOT" + +# --------------------------------------------------------------------------- +# 1. Fetch and attempt merge +# --------------------------------------------------------------------------- +info "Fetching origin/${TARGET}..." +git fetch origin "$TARGET" 2>/dev/null || { + err "Failed to fetch origin/${TARGET}. Check your remote." + exit 1 +} + +CURRENT_BRANCH="$(git branch --show-current)" +info "Merging origin/${TARGET} into ${CURRENT_BRANCH}..." + +merge_output=$(git merge "origin/${TARGET}" --no-edit 2>&1) && { + ok "Merge completed cleanly — no conflicts." + exit 0 +} + +# Distinguish real merge conflicts from other failures +if ! echo "$merge_output" | grep -qF "CONFLICT"; then + err "Merge failed for a reason other than conflicts:" + echo "$merge_output" + exit 1 +fi + +info "Merge conflicts detected. Applying resolution matrix..." + +# --------------------------------------------------------------------------- +# 2. Auto-resolve generated files (KEEP_THEIRS — accept upstream) +# --------------------------------------------------------------------------- +GENERATED_PATTERNS=( + '.agents/skills/*/SKILL.md' + '.github/agents/*.agent.md' + '.github/chatmodes/*.chatmode.md' + '.github/prompts/*.prompt.md' + 'docs/*/README.md' + '.github/copilot-instructions.md' + '.github/PULL_REQUEST_TEMPLATE.md' +) + +auto_resolved=0 +for pattern in "${GENERATED_PATTERNS[@]}"; do + # Find conflicted files matching this pattern + while IFS= read -r file; do + [ -z "$file" ] && continue + if git checkout --theirs -- "$file" 2>/dev/null; then + git add "$file" 2>/dev/null + ok "Auto-resolved (accept upstream): $file" + auto_resolved=$((auto_resolved + 1)) + fi + done < <(git diff --name-only --diff-filter=U | grep -E "$pattern" 2>/dev/null || true) +done + +# --------------------------------------------------------------------------- +# 3. Auto-resolve lockfiles (KEEP_THEIRS — accept upstream, regenerate later) +# --------------------------------------------------------------------------- +LOCKFILE_PATTERNS=( + 'pnpm-lock.yaml' + '.agentkit/pnpm-lock.yaml' + 'package-lock.json' + '.agentkit/package-lock.json' +) + +for lockfile in "${LOCKFILE_PATTERNS[@]}"; do + if git diff --name-only --diff-filter=U | grep -qx "$lockfile" 2>/dev/null; then + if git checkout --theirs -- "$lockfile" 2>/dev/null; then + git add "$lockfile" 2>/dev/null + ok "Auto-resolved (accept upstream): $lockfile" + auto_resolved=$((auto_resolved + 1)) + fi + fi +done + +# --------------------------------------------------------------------------- +# 4. Auto-resolve generated config (KEEP_THEIRS) +# --------------------------------------------------------------------------- +GENERATED_CONFIGS=( + '.gemini/config.yaml' +) + +for config in "${GENERATED_CONFIGS[@]}"; do + if git diff --name-only --diff-filter=U | grep -qx "$config" 2>/dev/null; then + if git checkout --theirs -- "$config" 2>/dev/null; then + git add "$config" 2>/dev/null + ok "Auto-resolved (accept upstream): $config" + auto_resolved=$((auto_resolved + 1)) + fi + fi +done + +# --------------------------------------------------------------------------- +# 5. Report remaining conflicts +# --------------------------------------------------------------------------- +REMAINING="$(git diff --name-only --diff-filter=U 2>/dev/null || true)" + +echo "" +info "Auto-resolved: ${auto_resolved} file(s)" + +if [ -n "$REMAINING" ]; then + echo "" + warn "Manual merge required for the following file(s):" + echo "" + while IFS= read -r file; do + [ -z "$file" ] && continue + # Categorise for the developer + case "$file" in + .agentkit/engines/*) echo -e " ${RED}[engine]${NC} $file — semantic merge required (runtime logic)" ;; + .agentkit/spec/*) echo -e " ${YELLOW}[spec]${NC} $file — preserve both intents" ;; + *) echo -e " ${CYAN}[source]${NC} $file" ;; + esac + done <<< "$REMAINING" + echo "" + info "Resolve the files above, then run: git add -A && git commit" + exit 1 +else + ok "All conflicts resolved automatically." + info "Committing merge..." + git commit --no-edit + ok "Merge committed successfully." + + # Suggest lockfile regeneration + if git diff --name-only "HEAD~1..HEAD" | grep -q "lock\.\(yaml\|json\)$" 2>/dev/null; then + echo "" + warn "Lockfiles were updated. Consider running: pnpm install" + fi +fi diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/setup-agentkit-branch-governance.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/setup-agentkit-branch-governance.sh new file mode 100644 index 00000000..f955e11b --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/setup-agentkit-branch-governance.sh @@ -0,0 +1,128 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +set -euo pipefail + +REPO="" +DRY_RUN=false +SKIP_DEFAULT_BRANCH=false +SKIP_PROTECTION=false + +while [[ $# -gt 0 ]]; do + case "$1" in + --repo) + if [[ $# -lt 2 || -z "${2:-}" || "${2:-}" == -* ]]; then + echo "Error: --repo requires a value in the form owner/name" + exit 1 + fi + REPO="$2" + shift 2 + ;; + --dry-run) + DRY_RUN=true + shift + ;; + --skip-default-branch) + SKIP_DEFAULT_BRANCH=true + shift + ;; + --skip-protection) + SKIP_PROTECTION=true + shift + ;; + --help|-h) + echo "Usage: $(basename "$0") [--repo owner/name] [--dry-run] [--skip-default-branch] [--skip-protection]" + exit 0 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +if ! command -v gh >/dev/null 2>&1; then + echo "gh CLI is not installed. Install from https://cli.github.com/" + exit 1 +fi + +if ! gh auth status >/dev/null 2>&1; then + echo "gh CLI is not authenticated. Run 'gh auth login' first." + exit 1 +fi + +if [[ -z "$REPO" ]]; then + REPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner' 2>/dev/null || true) +fi + +if [[ -z "$REPO" ]]; then + echo "Could not determine repository. Pass --repo <owner/name>." + exit 1 +fi + +echo "=== AgentKit Branch Governance Setup ===" +echo "Repository: $REPO" +echo "DryRun: $DRY_RUN" +echo + +if [[ "$SKIP_DEFAULT_BRANCH" == false ]]; then + if [[ "$DRY_RUN" == true ]]; then + echo "[dry-run] Would set default branch to 'main' for $REPO" + else + gh api --method PATCH "/repos/$REPO" -f default_branch='main' >/dev/null + echo "Default branch set to 'main'." + fi +fi + +PAYLOAD=$(cat <<'JSON' +{ + "required_status_checks": { + "strict": true, + "contexts": [ + "Test", + "Validate", + "Branch Protection / branch-rules" + ] + }, + "enforce_admins": false, + "required_pull_request_reviews": { + "required_approving_review_count": 1, + "dismiss_stale_reviews": true, + "require_code_owner_reviews": true, + "require_last_push_approval": false + }, + "restrictions": null, + "required_linear_history": true, + "allow_force_pushes": false, + "allow_deletions": false, + "block_creations": false, + "required_conversation_resolution": true +} +JSON +) + +if [[ "$SKIP_PROTECTION" == false ]]; then + # Deduplicate: if defaultBranch is 'main', don't apply twice + for BRANCH in $(echo "main main" | tr ' ' '\n' | awk '!seen[$0]++'); do + # Skip if the branch does not exist on the remote + if ! gh api "/repos/$REPO/branches/$BRANCH" --silent 2>/dev/null; then + echo "[skip] Branch '$BRANCH' does not exist on $REPO — skipping protection." + continue + fi + + if [[ "$DRY_RUN" == true ]]; then + echo "[dry-run] Would apply branch protection to $REPO/$BRANCH" + continue + fi + + gh api --method PUT "/repos/$REPO/branches/$BRANCH/protection" --input - <<< "$PAYLOAD" >/dev/null + echo "Branch protection applied to $BRANCH." + done +fi + +echo +echo "Done." +for BRANCH in $(echo "main main" | tr ' ' '\n' | awk '!seen[$0]++'); do + echo "Verify with: gh api /repos/$REPO/branches/$BRANCH/protection" +done diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/sync-issues.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/sync-issues.sh new file mode 100644 index 00000000..9ace772a --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/sync-issues.sh @@ -0,0 +1,180 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/sync-issues.sh +# Syncs local issue docs (docs/history/issues/) to GitHub Issues. +# +# Local issue markdown files that have "gh_synced: false" are candidates for +# sync. In dry-run mode (default) the script prints what would be created. +# With --apply it creates GitHub Issues via `gh` and stamps the file with the +# resulting issue number. +# +# Usage: +# ./scripts/sync-issues.sh # Dry-run — preview only +# ./scripts/sync-issues.sh --apply # Create GitHub Issues +# ./scripts/sync-issues.sh --apply --label "from-local" # Add extra label +# +# Requirements: +# - gh CLI installed and authenticated +# - Current directory inside the git repository + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +ISSUES_DIR="$REPO_ROOT/docs/history/issues" + +APPLY=false +EXTRA_LABEL="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --apply) APPLY=true; shift ;; + --label) + [[ $# -ge 2 ]] || { echo "Error: --label requires a value"; exit 1; } + EXTRA_LABEL="$2"; shift 2 ;; + -h|--help) + echo "Usage: $0 [--apply] [--label <label>]" + echo " --apply Create GitHub Issues (default is dry-run)" + echo " --label Extra label to add to created issues" + exit 0 + ;; + *) echo "Unknown option: $1"; exit 1 ;; + esac +done + +# --------------------------------------------------------------------------- +# Preflight checks (only needed when actually creating issues) +# --------------------------------------------------------------------------- + +if [[ "$APPLY" == true ]]; then + if ! command -v gh &>/dev/null; then + echo "Error: gh CLI is not installed. Install it from https://cli.github.com/" + exit 1 + fi + + if ! gh auth status &>/dev/null; then + echo "Error: gh is not authenticated. Run 'gh auth login' first." + exit 1 + fi +fi + +# --------------------------------------------------------------------------- +# Discover unsynced issue files +# --------------------------------------------------------------------------- + +CANDIDATES=0 +SKIPPED=0 +FAILED=0 + +# Glob matches the enforced naming convention: XXXX-YYYY-MM-DD-slug-issue.md +# Files created outside create-doc.sh without the -issue suffix are not picked up. +for issue_file in "$ISSUES_DIR"/*-issue.md; do + [[ -f "$issue_file" ]] || continue + + basename_file="$(basename "$issue_file")" + + # Skip templates + if [[ "$basename_file" == TEMPLATE-* ]]; then + continue + fi + + # Check sync status + if ! grep -q 'gh_synced.*false' "$issue_file" 2>/dev/null; then + SKIPPED=$((SKIPPED + 1)) + continue + fi + + # Extract title from first H1 (|| true prevents set -e exit on no match) + TITLE="$(grep -m1 '^# ' "$issue_file" | sed 's/^# //' | sed 's/ - Issue Record$//')" || true + if [[ -z "$TITLE" ]]; then + TITLE="$basename_file" + fi + + # Extract severity for labeling + SEVERITY="$(grep -m1 '^\*\*Severity\*\*:' "$issue_file" | sed 's/.*: *//' | tr '[:upper:]' '[:lower:]')" || true + if [[ -z "$SEVERITY" ]]; then + echo " [warn] No severity found in $basename_file — defaulting to unlabelled" + fi + + # Extract summary section as the issue body + BODY="$(sed -n '/^## Summary$/,/^## /{/^## Summary$/d;/^## /d;p}' "$issue_file" | sed '/^$/N;/^\n$/d')" + if [[ -z "$BODY" ]]; then + echo " [warn] No ## Summary section found in $basename_file — using fallback body" + BODY="Synced from local issue doc: $basename_file" + fi + + # Append a link back to the local file + BODY="$BODY + +--- +_Synced from \`docs/history/issues/$basename_file\`_" + + # Build labels + LABELS="synced-from-local" + if [[ -n "$SEVERITY" && "$SEVERITY" != *"["* ]]; then + LABELS="$LABELS,severity:$SEVERITY" + fi + if [[ -n "$EXTRA_LABEL" ]]; then + LABELS="$LABELS,$EXTRA_LABEL" + fi + + if [[ "$APPLY" == false ]]; then + echo "[dry-run] Would create issue: \"$TITLE\"" + echo " Labels: $LABELS" + echo " Source: $basename_file" + echo "" + CANDIDATES=$((CANDIDATES + 1)) + continue + fi + + # Create the GitHub Issue — capture stderr separately so it can be surfaced + # on failure without polluting the URL on success. + echo "Creating issue: \"$TITLE\" ..." + GH_STDERR_FILE="$(mktemp)" + ISSUE_URL="$(gh issue create \ + --title "$TITLE" \ + --body "$BODY" \ + --label "$LABELS" 2>"$GH_STDERR_FILE")" || { + echo " FAILED to create issue: \"$TITLE\"" + echo " gh stderr: $(cat "$GH_STDERR_FILE")" + rm -f "$GH_STDERR_FILE" + FAILED=$((FAILED + 1)) + continue + } + rm -f "$GH_STDERR_FILE" + + # Extract issue number from URL (https://github.com/owner/repo/issues/123) + ISSUE_NUMBER="${ISSUE_URL##*/}" + if [[ ! "$ISSUE_NUMBER" =~ ^[0-9]+$ ]]; then + ISSUE_NUMBER="$(echo "$ISSUE_URL" | grep -oE '[0-9]+$')" || true + [[ -z "$ISSUE_NUMBER" ]] && ISSUE_NUMBER="unknown" + fi + + echo " Created: $ISSUE_URL (#$ISSUE_NUMBER)" + + # Stamp the local file with sync metadata (portable: temp file instead of sed -i). + SYNC_DATE="$(date +%Y-%m-%d)" + TMPFILE="$(mktemp)" + sed \ + -e "s/^\(- \*\*gh_synced\*\*:\) .*/\1 true/" \ + -e "s/^\(- \*\*gh_issue_number\*\*:\) .*/\1 #$ISSUE_NUMBER/" \ + -e "s/^\(- \*\*gh_synced_at\*\*:\) .*/\1 $SYNC_DATE/" \ + -e "s|\(- \*\*Issue tracker\*\*:\) \[GitHub Issue.*\]|\1 $ISSUE_URL|" \ + "$issue_file" > "$TMPFILE" && mv "$TMPFILE" "$issue_file" + + CANDIDATES=$((CANDIDATES + 1)) +done + +# --------------------------------------------------------------------------- +# Summary +# --------------------------------------------------------------------------- + +echo "---" +if [[ "$APPLY" == false ]]; then + echo "Dry-run complete. $CANDIDATES issue(s) would be created, $SKIPPED already synced." + echo "Run with --apply to create GitHub Issues." +else + echo "Sync complete. $CANDIDATES created, $SKIPPED already synced, $FAILED failed." +fi diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/sync-split-pr.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/sync-split-pr.sh new file mode 100644 index 00000000..1bbf61ac --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/sync-split-pr.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +set -euo pipefail + +BASE_BRANCH="" +NEW_BRANCH="" +COMMIT_MESSAGE="chore(sync): regenerate generated outputs" +PR_TITLE="chore(sync): regenerate generated outputs" +DRY_RUN=0 + +while [[ $# -gt 0 ]]; do + case "$1" in + --base) + BASE_BRANCH="${2:-}" + shift 2 + ;; + --branch) + NEW_BRANCH="${2:-}" + shift 2 + ;; + --commit-message) + COMMIT_MESSAGE="${2:-}" + shift 2 + ;; + --pr-title) + PR_TITLE="${2:-}" + shift 2 + ;; + --dry-run) + DRY_RUN=1 + shift + ;; + -h|--help) + cat <<'EOF' +Usage: scripts/sync-split-pr.sh [options] + +Creates a dedicated branch + commit + PR for files produced by `agentkit:sync`. + +Options: + --base <branch> PR base branch (default: current branch) + --branch <name> Branch name for sync commit (default: chore/sync-generated-<utc>) + --commit-message <msg> Commit message + --pr-title <title> PR title + --dry-run Run sync and report changes without creating branch/commit/PR + -h, --help Show help +EOF + exit 0 + ;; + *) + echo "Unknown option: $1" >&2 + exit 1 + ;; + esac +done + +if [[ -n "$(git status --porcelain)" ]]; then + echo "Working tree is not clean. Commit/stash/discard changes before running sync split." >&2 + exit 1 +fi + +CURRENT_BRANCH="$(git branch --show-current)" +if [[ -z "$BASE_BRANCH" ]]; then + BASE_BRANCH="$CURRENT_BRANCH" +fi + +if [[ -z "$NEW_BRANCH" ]]; then + TS="$(date -u +%Y%m%d-%H%M%S)" + NEW_BRANCH="chore/sync-generated-$TS" +fi + +echo "Running sync..." +pnpm -C .agentkit agentkit:sync + +CHANGED_FILES="$(git status --porcelain)" +if [[ -z "$CHANGED_FILES" ]]; then + echo "No sync-generated changes detected." + mkdir -p .agentkit/logs + printf '{"timestamp":"%s","tool":"sync-split-pr","outcome":"no_changes","base":"%s","branch":"%s"}\n' \ + "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$BASE_BRANCH" "$CURRENT_BRANCH" >> .agentkit/logs/tool-usage.jsonl + exit 0 +fi + +FILES_COUNT="$(git status --porcelain | wc -l | tr -d ' ')" +echo "Detected $FILES_COUNT changed file(s) from sync." + +if [[ "$DRY_RUN" -eq 1 ]]; then + echo "Dry run enabled; not creating branch/commit/PR." + git status --short + mkdir -p .agentkit/logs + printf '{"timestamp":"%s","tool":"sync-split-pr","outcome":"dry_run","files":%s,"base":"%s","branch":"%s"}\n' \ + "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$FILES_COUNT" "$BASE_BRANCH" "$CURRENT_BRANCH" >> .agentkit/logs/tool-usage.jsonl + exit 0 +fi + +git checkout -b "$NEW_BRANCH" +git add -A +git commit -m "$COMMIT_MESSAGE" +git push -u origin "$NEW_BRANCH" + +PR_BODY="Automated sync-only PR. + +- Source branch: $CURRENT_BRANCH +- Sync command: pnpm -C .agentkit agentkit:sync +- Changed files: $FILES_COUNT" + +PR_URL="$(gh pr create --base "$BASE_BRANCH" --head "$NEW_BRANCH" --title "$PR_TITLE" --body "$PR_BODY")" +echo "Created PR: $PR_URL" + +mkdir -p .agentkit/logs +printf '{"timestamp":"%s","tool":"sync-split-pr","outcome":"pr_created","files":%s,"base":"%s","source":"%s","syncBranch":"%s","prUrl":"%s"}\n' \ + "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$FILES_COUNT" "$BASE_BRANCH" "$CURRENT_BRANCH" "$NEW_BRANCH" "$PR_URL" >> .agentkit/logs/tool-usage.jsonl diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/update-changelog.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/update-changelog.sh new file mode 100644 index 00000000..e5693e00 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/update-changelog.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/update-changelog.sh +# Inserts an entry into the [Unreleased] section of CHANGELOG.md. +# +# Usage: +# ./scripts/update-changelog.sh <section> "<description>" [pr-number] [history-doc-path] +# +# Arguments: +# section Changelog section: Added | Fixed | Changed | Removed | Security | Deprecated +# description Human-readable description of the change +# pr-number Optional PR number (e.g. 42) +# history-doc-path Optional relative path to the history document +# +# Examples: +# ./scripts/update-changelog.sh Added "New user auth feature" 44 +# ./scripts/update-changelog.sh Fixed "Null reference in login flow" 43 \ +# "docs/history/bug-fixes/0001-2026-03-01-null-reference-bugfix.md" + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +CHANGELOG="$REPO_ROOT/CHANGELOG.md" + +# --------------------------------------------------------------------------- +# Argument validation +# --------------------------------------------------------------------------- + +usage() { + echo "Usage: $0 <section> \"<description>\" [pr-number] [history-doc-path]" + echo " section: Added | Fixed | Changed | Removed | Security | Deprecated" + exit 1 +} + +if [[ $# -lt 2 ]]; then + usage +fi + +SECTION="$1" +DESCRIPTION="$2" +PR_NUMBER="${3:-}" +HISTORY_DOC="${4:-}" + +case "$SECTION" in + Added|Fixed|Changed|Removed|Security|Deprecated) ;; + *) echo "Error: unknown section '$SECTION'. Must be one of: Added, Fixed, Changed, Removed, Security, Deprecated"; exit 1 ;; +esac + +if [[ ! -f "$CHANGELOG" ]]; then + echo "Error: CHANGELOG.md not found at $CHANGELOG" + exit 1 +fi + +# --------------------------------------------------------------------------- +# Build the entry line +# --------------------------------------------------------------------------- + +ENTRY="- $DESCRIPTION" + +if [[ -n "$PR_NUMBER" && -n "$HISTORY_DOC" ]]; then + ENTRY="$ENTRY ([#${PR_NUMBER}](../../pull/${PR_NUMBER}), [history](${HISTORY_DOC}))" +elif [[ -n "$PR_NUMBER" ]]; then + ENTRY="$ENTRY ([#${PR_NUMBER}](../../pull/${PR_NUMBER}))" +elif [[ -n "$HISTORY_DOC" ]]; then + ENTRY="$ENTRY ([history](${HISTORY_DOC}))" +fi + +# --------------------------------------------------------------------------- +# Insert entry into CHANGELOG.md using Node.js for reliable multiline editing +# --------------------------------------------------------------------------- + +node - "$CHANGELOG" "$SECTION" "$ENTRY" << 'NODEEOF' +const [,, changelogPath, section, entry] = process.argv; +const fs = require('fs'); +const content = fs.readFileSync(changelogPath, 'utf8'); +const lines = content.split('\n'); + +// Find the [Unreleased] section +const unreleasedIdx = lines.findIndex(l => /^## \[Unreleased\]/i.test(l)); +if (unreleasedIdx === -1) { + console.error('Error: could not find ## [Unreleased] section in CHANGELOG.md'); + process.exit(1); +} + +// Find or create the target ### section within [Unreleased] +// The [Unreleased] block ends at the next ## line +let blockEnd = lines.findIndex((l, i) => i > unreleasedIdx && /^## /.test(l)); +if (blockEnd === -1) blockEnd = lines.length; + +const sectionHeader = `### ${section}`; +let sectionIdx = lines.findIndex((l, i) => i > unreleasedIdx && i < blockEnd && l.trim() === sectionHeader); + +if (sectionIdx === -1) { + // Section doesn't exist — insert before blockEnd (or before the next ---/## delimiter) + let insertAt = blockEnd; + // Look for a trailing --- separator just before blockEnd + for (let i = blockEnd - 1; i > unreleasedIdx; i--) { + if (lines[i].trim() === '---') { insertAt = i; break; } + if (lines[i].trim() !== '') break; + } + lines.splice(insertAt, 0, '', sectionHeader, entry); +} else { + // Section exists — insert after the header line (and any existing entries) + let insertAt = sectionIdx + 1; + // Find the end of this section's entries (next ### or ## or blank+##/###) + while ( + insertAt < blockEnd && + lines[insertAt].trim() !== '' && + !lines[insertAt].startsWith('###') && + !lines[insertAt].startsWith('##') + ) { + insertAt++; + } + lines.splice(insertAt, 0, entry); +} + +fs.writeFileSync(changelogPath, lines.join('\n'), 'utf8'); +console.log(`Updated CHANGELOG.md — ${section}: ${entry}`); +NODEEOF diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/validate-documentation.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/validate-documentation.sh new file mode 100644 index 00000000..e5a60220 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/validate-documentation.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/validate-documentation.sh +# Validates that history documents meet structural requirements. +# +# Usage: +# ./scripts/validate-documentation.sh [file...] +# +# If no files are given, validates all markdown files under docs/history/. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HISTORY_DIR="$REPO_ROOT/docs/history" + +ERRORS=0 + +validate_file() { + local file="$1" + local base + base="$(basename "$file")" + + # Skip template and README files + if [[ "$base" == TEMPLATE-* || "$base" == README.md ]]; then + return 0 + fi + + # Validate naming convention: XXXX-YYYY-MM-DD-*-{type}.md + if ! [[ "$base" =~ ^[0-9]{4}-[0-9]{4}-[0-9]{2}-[0-9]{2}-.+-(implementation|bugfix|feature|migration)\.md$ ]]; then + echo "❌ $file" + echo " Invalid filename format. Expected: XXXX-YYYY-MM-DD-[title]-[type].md" + ERRORS=$((ERRORS + 1)) + return 0 + fi + + # Check that required placeholder sections have been filled in + if grep -q '\[YYYY-MM-DD\]' "$file"; then + echo "❌ $file" + echo " Unfilled placeholder: [YYYY-MM-DD]" + ERRORS=$((ERRORS + 1)) + fi + + if grep -q '\[#PR-Number\]' "$file"; then + echo "⚠️ $file" + echo " Missing PR number: [#PR-Number] not replaced" + fi + + # Check that file is non-empty beyond the title line + local line_count + line_count=$(wc -l < "$file") + if [[ "$line_count" -lt 10 ]]; then + echo "❌ $file" + echo " Document too short ($line_count lines). Please fill in the template." + ERRORS=$((ERRORS + 1)) + fi +} + +# Determine files to validate +if [[ $# -gt 0 ]]; then + FILES=("$@") +else + mapfile -t FILES < <(find "$HISTORY_DIR" -name "*.md" -not -name "README.md" -not -name "TEMPLATE-*" 2>/dev/null || true) +fi + +if [[ ${#FILES[@]} -eq 0 ]]; then + echo "ℹ️ No history documents found to validate." + exit 0 +fi + +for f in "${FILES[@]}"; do + validate_file "$f" +done + +if [[ "$ERRORS" -gt 0 ]]; then + echo "" + echo "Found $ERRORS validation error(s)." + exit 1 +else + echo "✅ All history documents are valid." +fi diff --git a/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/validate-numbering.sh b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/validate-numbering.sh new file mode 100644 index 00000000..00c2a506 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/.scaffold-cache/scripts/validate-numbering.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/validate-numbering.sh +# Validates the sequential numbering of history documents against .index.json. +# +# Usage: +# ./scripts/validate-numbering.sh + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HISTORY_DIR="$REPO_ROOT/docs/history" +INDEX_FILE="$HISTORY_DIR/.index.json" + +ERRORS=0 + +if [[ ! -f "$INDEX_FILE" ]]; then + echo "ℹ️ No .index.json found at $INDEX_FILE — skipping numbering validation." + exit 0 +fi + +# Check for duplicate sequence numbers per type +for subdir in implementations bug-fixes features migrations; do + case "$subdir" in + implementations) TYPE="implementation" ;; + bug-fixes) TYPE="bugfix" ;; + features) TYPE="feature" ;; + migrations) TYPE="migration" ;; + esac + + DIR="$HISTORY_DIR/$subdir" + if [[ ! -d "$DIR" ]]; then + continue + fi + + declare -A seen_numbers=() + + while IFS= read -r -d '' file; do + base="$(basename "$file")" + # Skip templates and READMEs + if [[ "$base" == TEMPLATE-* || "$base" == README.md ]]; then + continue + fi + # Extract leading 4-digit number + if [[ "$base" =~ ^([0-9]{4})- ]]; then + num="${BASH_REMATCH[1]}" + if [[ -n "${seen_numbers[$num]+x}" ]]; then + echo "❌ Duplicate number $num in $subdir/:" + echo " ${seen_numbers[$num]}" + echo " $base" + ERRORS=$((ERRORS + 1)) + else + seen_numbers[$num]="$base" + fi + fi + done < <(find "$DIR" -maxdepth 1 -name "*.md" -print0 2>/dev/null || true) + + unset seen_numbers +done + +if [[ "$ERRORS" -gt 0 ]]; then + echo "" + echo "Found $ERRORS numbering error(s)." + exit 1 +else + echo "✅ Sequential numbering is valid." +fi diff --git a/.claude/worktrees/focused-colden/.agentkit/logs/usage-2026-03-16.jsonl b/.claude/worktrees/focused-colden/.agentkit/logs/usage-2026-03-16.jsonl new file mode 100644 index 00000000..1406244c --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/logs/usage-2026-03-16.jsonl @@ -0,0 +1,8 @@ +{ + "timestamp": "2026-03-16T21:11:08.000Z", + "event": "session_start", + "sessionId": "ee01d53c-5eba-4fc9-9de2-73b21ff7a6b9", + "user": "6d0e0d6bc477", + "branch": "claude/focused-colden", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\focused-colden" +} diff --git a/.claude/worktrees/focused-colden/.agentkit/logs/usage-2026-03-17.jsonl b/.claude/worktrees/focused-colden/.agentkit/logs/usage-2026-03-17.jsonl new file mode 100644 index 00000000..14ae0190 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/logs/usage-2026-03-17.jsonl @@ -0,0 +1,24 @@ +{ + "timestamp": "2026-03-17T02:10:54.000Z", + "event": "session_start", + "sessionId": "ee01d53c-5eba-4fc9-9de2-73b21ff7a6b9", + "user": "6d0e0d6bc477", + "branch": "claude/focused-colden", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\focused-colden" +} +{ + "timestamp": "2026-03-17T03:55:20.000Z", + "event": "session_start", + "sessionId": "ee01d53c-5eba-4fc9-9de2-73b21ff7a6b9", + "user": "6d0e0d6bc477", + "branch": "claude/focused-colden", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\focused-colden" +} +{ + "timestamp": "2026-03-17T06:54:30.000Z", + "event": "session_start", + "sessionId": "ee01d53c-5eba-4fc9-9de2-73b21ff7a6b9", + "user": "6d0e0d6bc477", + "branch": "claude/focused-colden", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\focused-colden" +} diff --git a/.claude/worktrees/focused-colden/.agentkit/package-lock.json b/.claude/worktrees/focused-colden/.agentkit/package-lock.json new file mode 100644 index 00000000..0ecd531d --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/package-lock.json @@ -0,0 +1,2764 @@ +{ + "name": "agentkit-forge-runtime", + "version": "3.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "agentkit-forge-runtime", + "version": "3.1.0", + "dependencies": { + "@clack/prompts": "^1.0.1", + "js-yaml": "^4.1.0" + }, + "devDependencies": { + "markdownlint-cli2": "^0.18.1", + "prettier": "^3.5.3", + "vitest": "^4.0.18" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@clack/core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.0.1.tgz", + "integrity": "sha512-WKeyK3NOBwDOzagPR5H08rFk9D/WuN705yEbuZvKqlkmoLM2woKtXb10OO2k1NoSU4SFG947i2/SCYh+2u5e4g==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.0.1.tgz", + "integrity": "sha512-/42G73JkuYdyWZ6m8d/CJtBrGl1Hegyc7Fy78m5Ob+jF85TOUmLR5XLce/U3LxYAw0kJ8CT5aI99RIvPHcGp/Q==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.0.1", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/katex": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", + "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/expect": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "chai": "^6.2.1", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.0.18", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.18", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.18", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.18", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/katex": { + "version": "0.16.33", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.33.tgz", + "integrity": "sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.38.0.tgz", + "integrity": "sha512-xaSxkaU7wY/0852zGApM8LdlIfGCW8ETZ0Rr62IQtAnUMlMuifsg09vWJcNYeL4f0anvr8Vo4ZQar8jGpV0btQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "4.0.2", + "micromark-core-commonmark": "2.0.3", + "micromark-extension-directive": "4.0.0", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.1", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.18.1.tgz", + "integrity": "sha512-/4Osri9QFGCZOCTkfA8qJF+XGjKYERSHkXzxSyS1hd3ZERJGjvsUao2h4wdnvpHp6Tu2Jh/bPHM0FE9JJza6ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "14.1.0", + "js-yaml": "4.1.0", + "jsonc-parser": "3.3.1", + "markdown-it": "14.1.0", + "markdownlint": "0.38.0", + "markdownlint-cli2-formatter-default": "0.0.5", + "micromatch": "4.0.8" + }, + "bin": { + "markdownlint-cli2": "markdownlint-cli2-bin.mjs" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2-formatter-default": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.5.tgz", + "integrity": "sha512-4XKTwQ5m1+Txo2kuQ3Jgpo/KmnG+X90dWt4acufg6HVGadTUG5hzHF/wssp9b5MBYOMCnZ9RMPaU//uHsszF8Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + }, + "peerDependencies": { + "markdownlint-cli2": ">=0.0.4" + } + }, + "node_modules/markdownlint-cli2/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", + "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.0.18", + "@vitest/mocker": "4.0.18", + "@vitest/pretty-format": "4.0.18", + "@vitest/runner": "4.0.18", + "@vitest/snapshot": "4.0.18", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "es-module-lexer": "^1.7.0", + "expect-type": "^1.2.2", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.10.0", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-preview": "4.0.18", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/ui": "4.0.18", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/.claude/worktrees/focused-colden/.agentkit/state/orchestrator.json.template b/.claude/worktrees/focused-colden/.agentkit/state/orchestrator.json.template new file mode 100644 index 00000000..076c20ed --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/state/orchestrator.json.template @@ -0,0 +1,25 @@ +{ + "schema_version": "1.0.0", + "repo_id": "agentkit-forge", + "branch": "main", + "session_id": "", + "current_phase": 1, + "phase_name": "Discovery", + "last_phase_completed": 0, + "next_action": "Run /orchestrate to begin project assessment", + "team_progress": { + "team-backend": { "status": "idle", "notes": "" }, + "team-frontend": { "status": "idle", "notes": "" }, + "team-data": { "status": "idle", "notes": "" }, + "team-infra": { "status": "idle", "notes": "" }, + "team-devops": { "status": "idle", "notes": "" }, + "team-testing": { "status": "idle", "notes": "" }, + "team-security": { "status": "idle", "notes": "" }, + "team-docs": { "status": "idle", "notes": "" }, + "team-product": { "status": "idle", "notes": "" }, + "team-quality": { "status": "idle", "notes": "" } + }, + "todo_items": [], + "recent_results": [], + "completed": false +} diff --git a/.claude/worktrees/focused-colden/.agentkit/state/schema.json b/.claude/worktrees/focused-colden/.agentkit/state/schema.json new file mode 100644 index 00000000..7bfdc405 --- /dev/null +++ b/.claude/worktrees/focused-colden/.agentkit/state/schema.json @@ -0,0 +1,138 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AgentKit Forge Orchestrator State", + "description": "Schema for the orchestrator state file managed by /orchestrate", + "type": "object", + "required": ["schema_version", "repo_id", "current_phase", "phase_name", "team_progress"], + "properties": { + "schema_version": { + "type": "string", + "const": "1.0.0", + "description": "Schema version for forward compatibility" + }, + "repo_id": { + "type": "string", + "description": "Repository identifier (from .agentkit-repo)" + }, + "branch": { + "type": "string", + "description": "Current git branch" + }, + "session_id": { + "type": "string", + "description": "Current session identifier" + }, + "current_phase": { + "type": "integer", + "minimum": 1, + "maximum": 5, + "description": "Current lifecycle phase (1-5)" + }, + "phase_name": { + "type": "string", + "enum": ["Discovery", "Planning", "Implementation", "Validation", "Ship"], + "description": "Human-readable phase name" + }, + "last_phase_completed": { + "type": "integer", + "minimum": 0, + "maximum": 5, + "description": "Last fully completed phase (0 = none)" + }, + "next_action": { + "type": "string", + "description": "Recommended next action" + }, + "team_progress": { + "type": "object", + "description": "Per-team status tracking", + "patternProperties": { + "^team-": { + "type": "object", + "required": ["status"], + "properties": { + "status": { + "type": "string", + "enum": ["idle", "in_progress", "blocked", "done"] + }, + "notes": { + "type": "string" + }, + "last_updated": { + "type": "string", + "format": "date-time" + }, + "assigned_to": { + "type": "string" + } + } + } + } + }, + "todo_items": { + "type": "array", + "items": { + "type": "object", + "required": ["id", "title", "status"], + "properties": { + "id": { "type": "string" }, + "title": { "type": "string" }, + "status": { + "type": "string", + "enum": ["pending", "in_progress", "done", "blocked"] + }, + "team": { "type": "string" }, + "priority": { + "type": "string", + "enum": ["critical", "high", "medium", "low"] + } + } + } + }, + "recent_results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "timestamp": { "type": "string", "format": "date-time" }, + "action": { "type": "string" }, + "result": { "type": "string" }, + "team": { "type": "string" } + } + } + }, + "completed": { + "type": "boolean", + "description": "Whether all phases are complete" + }, + "last_healthcheck": { + "type": "string", + "format": "date-time", + "description": "Timestamp of last healthcheck run" + }, + "health_status": { + "type": "string", + "enum": ["HEALTHY", "UNHEALTHY"], + "description": "Overall health status from last healthcheck" + }, + "session_metrics": { + "type": "object", + "description": "Cost tracking session metrics", + "properties": { + "current_session_id": { + "type": "string", + "description": "Active session ID for cost tracking" + }, + "total_sessions": { + "type": "integer", + "description": "Total sessions recorded" + }, + "last_session_end": { + "type": "string", + "format": "date-time", + "description": "When the last session ended" + } + } + } + } +} diff --git a/.claude/worktrees/focused-colden/.claude/settings.local.json b/.claude/worktrees/focused-colden/.claude/settings.local.json new file mode 100644 index 00000000..db9b92be --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/settings.local.json @@ -0,0 +1,40 @@ +{ + "permissions": { + "allow": [ + "Bash(git ls-remote https://github.com/actions/checkout.git refs/tags/v4.2.2)", + "Bash(git ls-remote https://github.com/anthropics/claude-code-action.git refs/tags/v1)", + "Bash(git ls-remote https://github.com/actions/github-script.git refs/tags/v7)", + "Bash(pnpm -C .agentkit test)", + "Bash(pnpm -C .agentkit vitest run src/__tests__/prettier.test.mjs src/__tests__/expansion-analyzer.test.mjs src/__tests__/budget-guard.test.mjs src/__tests__/feature-manager.test.mjs src/__tests__/backlog-store.test.mjs src/__tests__/discover.test.mjs)", + "Bash(pnpm -C .agentkit agentkit:sync)", + "Bash(grep -rn 'uses:' .agentkit/templates/github/workflows/*.yml)", + "Bash(grep -rn 'uses:.*@[a-f0-9]\\\\{40\\\\}' .agentkit/templates/github/workflows/*.yml)", + "Bash(grep -rn 'uses:.*@v[0-9]' .agentkit/templates/github/workflows/*.yml)", + "Bash(git ls-remote https://github.com/pnpm/action-setup.git refs/tags/v4.2.0)", + "Bash(git ls-remote https://github.com/actions/setup-node.git refs/tags/v4.4.0)", + "Bash(git ls-remote https://github.com/actions/setup-python.git refs/tags/v5.6.0)", + "Bash(git ls-remote https://github.com/pnpm/action-setup.git refs/tags/v4)", + "Bash(git checkout -- AGENT_TEAMS.md .clinerules/git-workflow.md)", + "Bash(for branch in dev chore/merge-all-open-branches ci/enforce-sha-pinning-and-templates claude/fix-full-tier-black-elements-gkgln docs/consolidate-pending-items docs/restructure-agentkit-docs fix/review-findings-round1 fix/template-numbered-paths refactor/remove-team-prefix)", + "Bash(do echo \"=== $branch ===\")", + "Bash(git checkout -- .)", + "Bash(git pull)", + "Bash(git cherry-pick 097e0cc --no-edit)", + "Bash(git remote prune origin)", + "Bash(pnpm -C /c/Users/smitj/repos/retort/.agentkit test)", + "Bash(gh repo list JustAGhosT --limit 50)", + "Bash(gh label create \"priority:P3\" --repo phoenixvc/cognitive-mesh --color \"0E8A16\" --description \"Priority 3 - Nice to have\")", + "Bash(git add -A)", + "Bash(gh label list --repo phoenixvc/cognitive-mesh --json name,description,color --limit 100)", + "Bash(gh label list --repo JustAGhosT/retort --json name,description,color --limit 100)", + "mcp__filesystem__read_multiple_files", + "Bash(grep -E \"\\\\.\\(yml|yaml|json|ts|js\\)$\")", + "Bash(gh label:*)", + "Bash(git add:*)", + "Bash(gh api:*)", + "WebSearch", + "WebFetch(domain:buildermethods.com)", + "WebFetch(domain:github.com)" + ] + } +} diff --git a/.claude/worktrees/focused-colden/.claude/state/events.log b/.claude/worktrees/focused-colden/.claude/state/events.log new file mode 100644 index 00000000..48ed9c92 --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/events.log @@ -0,0 +1,105 @@ +{"timestamp":"2026-02-26T17:31:21.524Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":92388},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1253},{"step":"build","status":"FAIL","durationMs":2299}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T17:32:22.387Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":57877},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1756}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T17:40:11.462Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":300556},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":12726},{"step":"build","status":"FAIL","durationMs":4619}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T17:44:14.114Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":236951},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":2693}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T17:57:01.313Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":54449},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1488},{"step":"build","status":"FAIL","durationMs":1535}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T17:57:39.437Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":35135},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1489}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T18:00:44.882Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":18855},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":599},{"step":"build","status":"FAIL","durationMs":755}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T18:00:57.395Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":11525},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":587}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T22:50:22.150Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":43407},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1370},{"step":"build","status":"FAIL","durationMs":1982}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T22:50:57.402Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":34361},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":485}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T22:59:44.909Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":72662},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1055},{"step":"build","status":"FAIL","durationMs":1767}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T23:00:12.840Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":26869},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":598}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T23:27:21.525Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":54059},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1538},{"step":"build","status":"FAIL","durationMs":2558}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T23:27:55.191Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":31691},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1126}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T23:47:11.830Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":54257},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":2146},{"step":"build","status":"FAIL","durationMs":3389}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T23:47:43.881Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":30944},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":619}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-28T15:41:34.550Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":118},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":15063},{"step":"build","status":"FAIL","durationMs":4029}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-28T15:41:38.884Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":29},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3080}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-01T04:51:06.914Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":43},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-01T04:51:08.526Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":19},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-01T04:54:06.715Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":53},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":28}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-01T04:54:08.867Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":75},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-01T05:10:28.549Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":106},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":22},{"step":"build","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-01T05:10:30.610Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":19},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T14:57:27.967Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":158},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":7}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T14:57:29.567Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":22},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T15:01:59.380Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":30},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T15:02:00.404Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":20},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:05:27.157Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":20},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1913},{"step":"build","status":"FAIL","durationMs":3071}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:05:57.398Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":22},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:05:59.276Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":16},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:14:48.130Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":26},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":8},{"step":"build","status":"FAIL","durationMs":153}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:14:55.776Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":438},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":35}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:16:15.728Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":46},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":101184},{"step":"build","status":"FAIL","durationMs":9256}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:19:12.380Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":29},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":7},{"step":"build","status":"FAIL","durationMs":11}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:19:14.119Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":21},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:25:42.885Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":27},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":8},{"step":"build","status":"FAIL","durationMs":160}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:25:46.626Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":181},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":26}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:27:05.654Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":18},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"PASS","durationMs":95529},{"step":"build","status":"PASS","durationMs":7674}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:32:51.735Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":252},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":75},{"step":"build","status":"FAIL","durationMs":42}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:32:55.553Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":192},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":22}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:34:25.998Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":23},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":120925},{"step":"build","status":"PASS","durationMs":7972}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:36:16.808Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":109},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":10},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:36:19.087Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":51},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:39:23.323Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":269},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":37},{"step":"build","status":"FAIL","durationMs":46}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:39:26.597Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":142},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":27}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:41:21.411Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":262},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":138},{"step":"build","status":"FAIL","durationMs":74}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:41:25.946Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":179},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":68}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:42:47.046Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":16},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":92882},{"step":"build","status":"PASS","durationMs":10552}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:43:49.613Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":250},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":81},{"step":"build","status":"FAIL","durationMs":105}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:43:53.957Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":444},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":19}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T18:57:58.751Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":64},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":7},{"step":"build","status":"FAIL","durationMs":7}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T18:58:00.655Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":40},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T18:58:46.509Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":24},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":60941},{"step":"build","status":"PASS","durationMs":3076}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:00:40.415Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":83},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":97},{"step":"build","status":"FAIL","durationMs":171}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:00:50.568Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":562},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":58}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T19:15:27.769Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":48},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":7}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:15:29.811Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":19},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T19:18:40.784Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":56},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:18:42.732Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":21},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T19:36:57.250Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":25},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:36:58.289Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":17},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:14:44.559Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":45},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":11}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:14:46.176Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":40},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:20:45.419Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":72},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4},{"step":"build","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:20:46.671Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":17},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:21:33.859Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":21},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:21:35.551Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":24},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:22:37.730Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":36},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":7}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:22:39.534Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":16},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:23:58.276Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":56},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:23:59.332Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":17},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:27:17.403Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":231},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":17},{"step":"build","status":"FAIL","durationMs":15}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:27:19.502Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":75},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":14}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-04T10:20:44.292Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":15},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T11:40:03.234Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":12},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T11:40:14.944Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":24},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T11:40:16.696Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":20},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-04T13:37:02.860Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":37},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T13:37:04.586Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":18},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-04T14:57:52.992Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"PASS","durationMs":12865},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-04T16:26:18.432Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"PASS","durationMs":8533},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T18:50:47.548Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":10054},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T18:53:17.017Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":9339},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +[2026-03-11T03:17:17.000Z] [HANDOFF] [ORCHESTRATOR] Session complete. Done: 6 items. Blockers: 0. Next: "Start Phase 1 cost-provider-schema on feat/cost-provider-schema branch". +[2026-03-11T17:00:03Z] [ORCHESTRATE] [W1] Phase 5 Ship. Tests: 110/110. Sync: clean. Branch: fix/ci-remediation. Commits ahead: 51. Ready for PR to main. +[2026-03-15T07:06:00Z] [ORCHESTRATE] [W1] Phase 5 Ship. Branch: feat/source-code-conventions. Build: pass. agentkit:check fails (Duplicate export auditUnresolvedPlaceholders). orchestrator.test.mjs: 22 failed. Health: at_risk. Next: fix test/check then PR. +[2026-03-15T07:13:00Z] [ORCHESTRATE] [W1] Phase 5 Ship. Branch: feat/source-code-conventions. Build: pass. No lock. Validation: build re-run PASS. Tests running in background. Health: at_risk (check CLI + orchestrator tests). Next: fix then PR to main. +[2026-03-15T07:16:00Z] [ORCHESTRATE] [W1] Fixed check.mjs duplicate export (auditUnresolvedPlaceholders). agentkit:check runs; format PASS. NB added to CLAUDE.md: this repo may modify .agentkit files. Next: orchestrator.test.mjs fixes then PR. +[2026-03-15T09:25:00Z] [ORCHESTRATE] [W1] Phase 5 Ship. Fixed orchestrator.test.mjs: unique temp dir per test (TEST_BASE/run-id), removed afterEach rmSync. 39/39 orchestrator tests pass. Health: healthy. Next: Create PR to main. +[2026-03-15T11:30:00Z] [ORCHESTRATE] [W1] Phase 2 Planning. Scope: all P0 and P1. Discovery: AGENT_TEAMS.md present; CI workflows present (ci.yml, branch-protection, etc.). Healthcheck: UNHEALTHY (typecheck/test/build fail in agentkit:check). Created 7 task files in .claude/state/tasks/ for P0 (2) and P1 (5). Next: teams implement then Phase 4 Validation. +[2026-03-15T12:05:00Z] [ORCHESTRATE] [W1] Assess-only run. Branch: fix/generated-files-and-conflict-markers. Phase 2. Tasks: 7 submitted, 0 in progress, 0 completed. Health: UNHEALTHY. Check: format PASS; typecheck/test/build FAIL. Next: run /team-infra, /team-quality, /team-backend, /team-data to implement tasks; then re-run /orchestrate for Validation. +[2026-03-15T12:15:00Z] [TEAM] [backend] Completed 2 items. Changes: 1 file (docs/api/07_framework-api-conventions.md). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T12:25:00Z] [TEAM] [infra] Rejected task-p0-ci-pipeline (out of scope; suggested team-devops). Completed 1 item (task-p1-staging-env). Changes: infra/README.md, docker-compose.yml. Tests: 0 added, 0 modified. Gate: N/A. +[2026-03-15T12:35:00Z] [TEAM] [data] Completed 2 items. Changes: db/README.md, migrations/README.md. Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T12:45:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (PRD index). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:00:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (P1 backlog section). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:10:00Z] [ORCHESTRATE] [W1] Assess. Branch: fix/generated-files-and-conflict-markers. Phase 2. Tasks: 5 completed, 1 rejected (P0 CI → devops), 1 submitted (P0 test-framework). Health: UNHEALTHY (format/typecheck/test/build FAIL). Next: /team-quality for task-p0-test-framework; reassign P0 CI to DevOps; then Phase 4 Validation. +[2026-03-15T13:15:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (link to PLAN-gh371). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:20:00Z] [ORCHESTRATE] [W1] Assess-only. Branch: fix/generated-files-and-conflict-markers. Phase 2. Tasks: 5 completed, 1 rejected, 1 submitted (task-p0-test-framework). Health: UNHEALTHY. Next: /team-quality; reassign P0 CI to DevOps; Phase 4 Validation. +[2026-03-15T13:25:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (GH#328 plan note, link to implementation plans). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:30:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (next PRD number 008 in Creating a New PRD). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:35:00Z] [TEAM] [product] No delegated tasks; no additional backlog items completed (P1/P2 require plans or implementation). Scope: docs/product/**, docs/prd/**. +[2026-03-15T13:40:00Z] [TEAM] [docs] Completed 1 item. Changes: CONTRIBUTING.md (link to docs hub in Discovery phase). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-17T04:35:00Z] [HANDOFF] [ORCHESTRATOR] Session complete. Done: 6 items (findings report, ADR-10, adoption roadmap, competitive landscape, PR review responses, merge conflict resolution). Blockers: 0. Next: "Review and merge PR #428, then begin Phase 1 implementation of ADR-10 (.agents/ sync target)". diff --git a/.claude/worktrees/focused-colden/.claude/state/orchestrator.json b/.claude/worktrees/focused-colden/.claude/state/orchestrator.json new file mode 100644 index 00000000..ad4dd611 --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/orchestrator.json @@ -0,0 +1,72 @@ +{ + "schema_version": "1.0.0", + "repo_id": "JustAGhosT/retort", + "branch": "fix/generated-files-and-conflict-markers", + "session_id": "2026-03-15", + "current_phase": 2, + "phase_name": "Planning", + "last_phase_completed": 1, + "next_action": "Complete task-p0-test-framework (team-quality). Reassign P0 CI to DevOps. Then run Phase 4 Validation.", + "lastHealthcheck": "2026-03-15T13:10:00Z", + "healthStatus": "unhealthy", + "healthDetails": { + "dependencies": "pass", + "format": "FAIL", + "lint": "SKIP (eslint not found)", + "typecheck": "FAIL", + "tests": "FAIL", + "build": "FAIL", + "syncDrift": "not run" + }, + "taskSummary": { + "total": 7, + "completed": 5, + "rejected": 1, + "submitted": 1 + }, + "backlogSnapshot": [ + {"priority": "P0", "team": "T4-Infrastructure", "task": "Configure CI pipeline for main branch"}, + {"priority": "P0", "team": "T10-Quality", "task": "Set up test framework and coverage thresholds"}, + {"priority": "P1", "team": "T1-Backend", "task": "Define core API route structure"}, + {"priority": "P1", "team": "T3-Data", "task": "Design initial database schema"}, + {"priority": "P1", "team": "T1-Backend", "task": "Implement health check endpoint"}, + {"priority": "P1", "team": "T3-Data", "task": "Create migration tooling setup"}, + {"priority": "P1", "team": "T4-Infrastructure", "task": "Set up staging environment"} + ], + "team_progress": { + "backend": { "status": "idle", "notes": "Completed task-p1-api-routes, task-p1-health-check (docs/api/07_framework-api-conventions.md)." }, + "frontend": { "status": "idle", "notes": "start TUI component merged and tested" }, + "data": { "status": "idle", "notes": "Completed task-p1-db-schema, task-p1-migration-tooling (db/README.md, migrations/README.md; repo has no DB, adopters own schema and migrations)." }, + "infra": { "status": "idle", "notes": "Rejected P0 CI (DevOps scope). Completed P1 staging: infra/README.md, docker-compose.yml." }, + "devops": { "status": "idle", "notes": "Configurable package manager implemented" }, + "testing": { "status": "complete", "notes": "110 tests green, ConversationFlow flakiness fixed" }, + "security": { "status": "idle", "notes": "" }, + "docs": { "status": "idle", "notes": "CONTRIBUTING.md: link to docs hub (docs/README.md) in Discovery phase." }, + "product": { "status": "idle", "notes": "PRD index, P1 backlog, PLAN-gh371 link, docs/planning link, next PRD number (008) in Creating a New PRD." }, + "quality": { "status": "complete", "notes": "Review findings addressed, sync drift clean" } + }, + "todo_items": [], + "recent_results": [ + { + "date": "2026-03-11", + "action": "Fixed ConversationFlow test flakiness (ink-select-input event loop yields)", + "status": "done" + }, + { + "date": "2026-03-11", + "action": "Added pnpm-workspace.yaml packages field", + "status": "done" + }, + { + "date": "2026-03-11", + "action": "Regenerated lockfile after version pinning", + "status": "done" + }, + { + "date": "2026-03-11", + "action": "Verified sync drift clean (533 files, 0 changes)", + "status": "done" + } + ], + "completed": false +} diff --git a/.claude/worktrees/focused-colden/.claude/state/orchestrator.json.template b/.claude/worktrees/focused-colden/.claude/state/orchestrator.json.template new file mode 100644 index 00000000..076c20ed --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/orchestrator.json.template @@ -0,0 +1,25 @@ +{ + "schema_version": "1.0.0", + "repo_id": "agentkit-forge", + "branch": "main", + "session_id": "", + "current_phase": 1, + "phase_name": "Discovery", + "last_phase_completed": 0, + "next_action": "Run /orchestrate to begin project assessment", + "team_progress": { + "team-backend": { "status": "idle", "notes": "" }, + "team-frontend": { "status": "idle", "notes": "" }, + "team-data": { "status": "idle", "notes": "" }, + "team-infra": { "status": "idle", "notes": "" }, + "team-devops": { "status": "idle", "notes": "" }, + "team-testing": { "status": "idle", "notes": "" }, + "team-security": { "status": "idle", "notes": "" }, + "team-docs": { "status": "idle", "notes": "" }, + "team-product": { "status": "idle", "notes": "" }, + "team-quality": { "status": "idle", "notes": "" } + }, + "todo_items": [], + "recent_results": [], + "completed": false +} diff --git a/.claude/worktrees/focused-colden/.claude/state/schema.json b/.claude/worktrees/focused-colden/.claude/state/schema.json new file mode 100644 index 00000000..5206822c --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/schema.json @@ -0,0 +1,138 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Retort Orchestrator State", + "description": "Schema for the orchestrator state file managed by /orchestrate", + "type": "object", + "required": ["schema_version", "repo_id", "current_phase", "phase_name", "team_progress"], + "properties": { + "schema_version": { + "type": "string", + "const": "1.0.0", + "description": "Schema version for forward compatibility" + }, + "repo_id": { + "type": "string", + "description": "Repository identifier (from .agentkit-repo)" + }, + "branch": { + "type": "string", + "description": "Current git branch" + }, + "session_id": { + "type": "string", + "description": "Current session identifier" + }, + "current_phase": { + "type": "integer", + "minimum": 1, + "maximum": 5, + "description": "Current lifecycle phase (1-5)" + }, + "phase_name": { + "type": "string", + "enum": ["Discovery", "Planning", "Implementation", "Validation", "Ship"], + "description": "Human-readable phase name" + }, + "last_phase_completed": { + "type": "integer", + "minimum": 0, + "maximum": 5, + "description": "Last fully completed phase (0 = none)" + }, + "next_action": { + "type": "string", + "description": "Recommended next action" + }, + "team_progress": { + "type": "object", + "description": "Per-team status tracking", + "patternProperties": { + "^team-": { + "type": "object", + "required": ["status"], + "properties": { + "status": { + "type": "string", + "enum": ["idle", "in_progress", "blocked", "done"] + }, + "notes": { + "type": "string" + }, + "last_updated": { + "type": "string", + "format": "date-time" + }, + "assigned_to": { + "type": "string" + } + } + } + } + }, + "todo_items": { + "type": "array", + "items": { + "type": "object", + "required": ["id", "title", "status"], + "properties": { + "id": { "type": "string" }, + "title": { "type": "string" }, + "status": { + "type": "string", + "enum": ["pending", "in_progress", "done", "blocked"] + }, + "team": { "type": "string" }, + "priority": { + "type": "string", + "enum": ["critical", "high", "medium", "low"] + } + } + } + }, + "recent_results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "timestamp": { "type": "string", "format": "date-time" }, + "action": { "type": "string" }, + "result": { "type": "string" }, + "team": { "type": "string" } + } + } + }, + "completed": { + "type": "boolean", + "description": "Whether all phases are complete" + }, + "last_healthcheck": { + "type": "string", + "format": "date-time", + "description": "Timestamp of last healthcheck run" + }, + "health_status": { + "type": "string", + "enum": ["HEALTHY", "UNHEALTHY"], + "description": "Overall health status from last healthcheck" + }, + "session_metrics": { + "type": "object", + "description": "Cost tracking session metrics", + "properties": { + "current_session_id": { + "type": "string", + "description": "Active session ID for cost tracking" + }, + "total_sessions": { + "type": "integer", + "description": "Total sessions recorded" + }, + "last_session_end": { + "type": "string", + "format": "date-time", + "description": "When the last session ended" + } + } + } + } +} diff --git a/.claude/worktrees/focused-colden/.claude/state/tasks/task-p0-ci-pipeline.json b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p0-ci-pipeline.json new file mode 100644 index 00000000..e656cf8b --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p0-ci-pipeline.json @@ -0,0 +1,22 @@ +{ + "id": "task-p0-ci-pipeline", + "type": "implement", + "status": "rejected", + "priority": "P0", + "delegator": "orchestrator", + "assignees": ["team-infra"], + "title": "Configure CI pipeline for main branch", + "description": "GitHub Actions workflow; scope: branch-protection, drift check, quality gates on main. Ensure required status checks align with ci.yml, branch-protection.yml, and drift/sync validation.", + "acceptanceCriteria": [ + "Workflow runs on push/PR to main (and dev per existing)", + "Drift check (sync then git diff) runs and is required for main", + "Quality gates (test, validate) are required; branch protection documented or enforced" + ], + "scope": [".github/workflows/**", "docs/operations/**"], + "backlogItemId": "P0-T4-CI-pipeline", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P0: Configure CI pipeline for main. See AGENT_BACKLOG.md Active Sprint." }, + { "role": "executor", "from": "infra", "timestamp": "2026-03-15T12:25:00Z", "content": "Rejected: task scope is .github/workflows/** and docs/operations/**, which is DevOps (CI/CD, pipelines), not Infra (IaC, terraform, bicep, pulumi). Suggested team: team-devops." } + ], + "artifacts": [] +} diff --git a/.claude/worktrees/focused-colden/.claude/state/tasks/task-p0-test-framework.json b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p0-test-framework.json new file mode 100644 index 00000000..e69de29b diff --git a/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-api-routes.json b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-api-routes.json new file mode 100644 index 00000000..b76ef61f --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-api-routes.json @@ -0,0 +1,24 @@ +{ + "id": "task-p1-api-routes", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-backend"], + "title": "Define core API route structure", + "description": "REST endpoints for v1. Define route layout and conventions for the project (or document that this repo is framework-only and adopters define routes).", + "acceptanceCriteria": [ + "API route structure documented or implemented per project conventions", + "REST v1 layout clear for downstream adopters or for this repo if applicable" + ], + "scope": ["apps/api/**", "services/**", "docs/api/**"], + "backlogItemId": "P1-T1-api-routes", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Define core API route structure. See AGENT_BACKLOG.md." }, + { "role": "executor", "from": "backend", "timestamp": "2026-03-15T12:15:00Z", "content": "Completed. Repo is framework-only (no apps/api or services). Added docs/api/07_framework-api-conventions.md documenting recommended route structure (base /api, url-segment versioning, envelope, cursor pagination) for adopters." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["docs/api/07_framework-api-conventions.md"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-db-schema.json b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-db-schema.json new file mode 100644 index 00000000..b52354a2 --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-db-schema.json @@ -0,0 +1,25 @@ +{ + "id": "task-p1-db-schema", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-data"], + "title": "Design initial database schema", + "description": "Depends on T1 API design. Design initial schema for the project (or document that this repo has no DB and adopters own schema).", + "acceptanceCriteria": [ + "Schema design or decision documented", + "Dependencies on API design acknowledged" + ], + "scope": ["db/**", "migrations/**", "prisma/**", "docs/architecture/**"], + "dependsOn": ["task-p1-api-routes"], + "backlogItemId": "P1-T3-db-schema", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Design initial database schema. Depends on T1." }, + { "role": "executor", "from": "data", "timestamp": "2026-03-15T12:35:00Z", "content": "Completed. Repo has no database (CLAUDE.md: Database none, ORM none). Added db/README.md documenting that adopters own schema and referencing API conventions; dependency on API design acknowledged." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["db/README.md"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-health-check.json b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-health-check.json new file mode 100644 index 00000000..10b652ef --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-health-check.json @@ -0,0 +1,24 @@ +{ + "id": "task-p1-health-check", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-backend"], + "title": "Implement health check endpoint", + "description": "Implement /api/health (or equivalent) for the application.", + "acceptanceCriteria": [ + "Health check endpoint implemented and documented", + "Returns appropriate status for load balancers or readiness probes" + ], + "scope": ["apps/api/**", "services/**", "docs/api/**"], + "backlogItemId": "P1-T1-health-check", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Implement health check endpoint. See Backlog." }, + { "role": "executor", "from": "backend", "timestamp": "2026-03-15T12:15:00Z", "content": "Completed. No application server in this repo (framework-only). Documented health check convention in docs/api/07_framework-api-conventions.md: GET /api/health or GET /health, 200 + { status: ok } for adopters." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["docs/api/07_framework-api-conventions.md"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-migration-tooling.json b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-migration-tooling.json new file mode 100644 index 00000000..4e72185f --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-migration-tooling.json @@ -0,0 +1,24 @@ +{ + "id": "task-p1-migration-tooling", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-data"], + "title": "Create migration tooling setup", + "description": "Prisma or Drizzle (or document choice). Set up migration tooling for the project.", + "acceptanceCriteria": [ + "Migration tooling chosen and documented or implemented", + "Basic migration workflow documented" + ], + "scope": ["db/**", "migrations/**", "prisma/**", "package.json"], + "backlogItemId": "P1-T3-migration-tooling", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Create migration tooling setup. See Backlog." }, + { "role": "executor", "from": "data", "timestamp": "2026-03-15T12:35:00Z", "content": "Completed. Repo has no DB. Added migrations/README.md documenting that adopters choose Prisma or Drizzle and documenting basic migration workflow (define schema, generate migration, run migrations)." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["migrations/README.md"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-staging-env.json b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-staging-env.json new file mode 100644 index 00000000..19f40686 --- /dev/null +++ b/.claude/worktrees/focused-colden/.claude/state/tasks/task-p1-staging-env.json @@ -0,0 +1,24 @@ +{ + "id": "task-p1-staging-env", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-infra"], + "title": "Set up staging environment", + "description": "Docker Compose (or equivalent) for staging. Set up staging environment for the project.", + "acceptanceCriteria": [ + "Staging environment defined (e.g. docker-compose or IaC)", + "Documented how to run and deploy to staging" + ], + "scope": ["infra/**", "docker/**", "docker-compose*.yml", "docs/operations/**"], + "backlogItemId": "P1-T4-staging", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Set up staging environment. See Backlog." }, + { "role": "executor", "from": "infra", "timestamp": "2026-03-15T12:25:00Z", "content": "Completed. Added infra/README.md (staging and local validation; adopters define their own staging). Added docker-compose.yml at repo root with profile 'sync' to run pnpm install + agentkit:sync in a container for staging-like validation." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["infra/README.md", "docker-compose.yml"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/focused-colden/package-lock.json b/.claude/worktrees/focused-colden/package-lock.json new file mode 100644 index 00000000..24372cf6 --- /dev/null +++ b/.claude/worktrees/focused-colden/package-lock.json @@ -0,0 +1,31 @@ +{ + "name": "retort-root", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "retort-root", + "dependencies": { + "js-yaml": "^4.1.1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + } + } +} diff --git a/.claude/worktrees/tender-margulis/.agentkit/.manifest.json b/.claude/worktrees/tender-margulis/.agentkit/.manifest.json new file mode 100644 index 00000000..f044e15e --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.manifest.json @@ -0,0 +1,1873 @@ +{ + "generatedAt": "2026-03-17T07:03:33.588Z", + "version": "3.1.0", + "repoName": "agentkit-forge", + "files": { + ".agentkit/state/orchestrator.json.template": { + "hash": "b70e87b7211b" + }, + ".agents/skills/analyze-agents/SKILL.md": { + "hash": "e42eee25c9fd" + }, + ".agents/skills/brand/SKILL.md": { + "hash": "4f819e2e0d69" + }, + ".agents/skills/build/SKILL.md": { + "hash": "d325dae8f934" + }, + ".agents/skills/check/SKILL.md": { + "hash": "fc46476bca7b" + }, + ".agents/skills/cost/SKILL.md": { + "hash": "834badf6646b" + }, + ".agents/skills/cost-centres/SKILL.md": { + "hash": "3140d48f16b0" + }, + ".agents/skills/deploy/SKILL.md": { + "hash": "2e1330fd693e" + }, + ".agents/skills/discover/SKILL.md": { + "hash": "9ac71caf6992" + }, + ".agents/skills/doctor/SKILL.md": { + "hash": "9d9e7ffcaf71" + }, + ".agents/skills/document-history/SKILL.md": { + "hash": "e82dbff8c514" + }, + ".agentkit/state/schema.json": { + "hash": "b47a7efcd922" + }, + ".agents/skills/expand/SKILL.md": { + "hash": "d9883bcc8f88" + }, + ".agents/skills/feature-flow/SKILL.md": { + "hash": "ec9b155a84e6" + }, + ".agents/skills/feature-configure/SKILL.md": { + "hash": "c11f2cc3273b" + }, + ".agents/skills/feature-review/SKILL.md": { + "hash": "da38a280ec45" + }, + ".agents/skills/format/SKILL.md": { + "hash": "0cdb87886f36" + }, + ".agents/skills/backlog/SKILL.md": { + "hash": "2dc8e5c1d39b" + }, + ".agents/skills/import-issues/SKILL.md": { + "hash": "e2d105f8b201" + }, + ".agents/skills/infra-eval/SKILL.md": { + "hash": "37505d91a1c5" + }, + ".agents/skills/plan/SKILL.md": { + "hash": "71c44b0ef7b1" + }, + ".agents/skills/preflight/SKILL.md": { + "hash": "85c05dc2c072" + }, + ".agents/skills/review/SKILL.md": { + "hash": "00b236ee680f" + }, + ".agents/skills/project-status/SKILL.md": { + "hash": "9a47cc64914b" + }, + ".agents/skills/orchestrate/SKILL.md": { + "hash": "2b6c677c66a3" + }, + ".agents/skills/scaffold/SKILL.md": { + "hash": "ff8fb03eecd2" + }, + ".agents/skills/security/SKILL.md": { + "hash": "3127f1e216c9" + }, + ".agents/skills/start/SKILL.md": { + "hash": "f0cd8fd39b4a" + }, + ".agents/skills/sync-backlog/SKILL.md": { + "hash": "6a3ad80bff8d" + }, + ".agents/skills/sync/SKILL.md": { + "hash": "c25161dc8913" + }, + ".agents/skills/test/SKILL.md": { + "hash": "3c02bdac8593" + }, + ".agents/skills/validate/SKILL.md": { + "hash": "30bc2a0427be" + }, + ".ai/cursorrules": { + "hash": "32f8f48220f6" + }, + ".ai/README.md": { + "hash": "608c681edb4e" + }, + ".ai/continuerules": { + "hash": "2d40023b7c45" + }, + ".ai/windsurfrules": { + "hash": "2d40023b7c45" + }, + ".claude/agents/adoption-strategist.md": { + "hash": "e0f5197c5140" + }, + ".claude/agents/brand-guardian.md": { + "hash": "06321324ad8c" + }, + ".claude/agents/backend.md": { + "hash": "738bca85b556" + }, + ".claude/agents/content-strategist.md": { + "hash": "bdea95fbdc97" + }, + ".claude/agents/cost-ops-monitor.md": { + "hash": "9f195cfb5ab3" + }, + ".claude/agents/data.md": { + "hash": "95222b841a68" + }, + ".claude/agents/dependency-watcher.md": { + "hash": "1317fdcdbdc6" + }, + ".claude/agents/coverage-tracker.md": { + "hash": "faf2173529c5" + }, + ".claude/agents/devops.md": { + "hash": "8623979399e3" + }, + ".claude/agents/expansion-analyst.md": { + "hash": "1acec03026a0" + }, + ".claude/agents/frontend.md": { + "hash": "2e553b7926ef" + }, + ".claude/agents/flow-designer.md": { + "hash": "0e0423753fd8" + }, + ".claude/agents/feature-ops.md": { + "hash": "f7a55b2e0a57" + }, + ".claude/agents/environment-manager.md": { + "hash": "7630c0856682" + }, + ".claude/agents/governance-advisor.md": { + "hash": "6fde5c50bf67" + }, + ".claude/agents/grant-hunter.md": { + "hash": "906ddfa7eeb1" + }, + ".claude/agents/infra.md": { + "hash": "49829cf96e63" + }, + ".claude/agents/input-clarifier.md": { + "hash": "10e22accb2c0" + }, + ".claude/agents/integration-tester.md": { + "hash": "9c537deec75e" + }, + ".claude/agents/mission-definer.md": { + "hash": "530ef4249f0b" + }, + ".claude/agents/impact-assessor.md": { + "hash": "86fdde8309c2" + }, + ".claude/agents/portfolio-analyst.md": { + "hash": "b85f4d82d325" + }, + ".claude/agents/product-manager.md": { + "hash": "ae255ee14143" + }, + ".claude/agents/model-economist.md": { + "hash": "87e470197ac4" + }, + ".claude/agents/project-shipper.md": { + "hash": "627257130af4" + }, + ".claude/agents/prompt-engineer.md": { + "hash": "3f98b589828e" + }, + ".claude/agents/release-manager.md": { + "hash": "74293815fa62" + }, + ".claude/agents/retrospective-analyst.md": { + "hash": "ee7cdb422865" + }, + ".claude/agents/roadmap-tracker.md": { + "hash": "89ddfff0b104" + }, + ".claude/agents/role-architect.md": { + "hash": "ff8dfe28ea56" + }, + ".claude/agents/growth-analyst.md": { + "hash": "f8eec3b1e625" + }, + ".claude/agents/security-auditor.md": { + "hash": "1cbf3ad0f91d" + }, + ".claude/agents/spec-compliance-auditor.md": { + "hash": "177cc631b0a2" + }, + ".claude/agents/team-validator.md": { + "hash": "bee9c68baeac" + }, + ".claude/agents/ui-designer.md": { + "hash": "a3e99552415f" + }, + ".claude/agents/release-coordinator.md": { + "hash": "df573b60959d" + }, + ".claude/agents/vendor-arbitrage-analyst.md": { + "hash": "48daa9f47218" + }, + ".claude/commands/backlog.md": { + "hash": "22a8d07575b3" + }, + ".claude/agents/test-lead.md": { + "hash": "45e8abd92aaf" + }, + ".claude/commands/check.md": { + "hash": "ca6dd1de5d9a" + }, + ".claude/commands/cost.md": { + "hash": "2392989dddaa" + }, + ".claude/commands/deploy.md": { + "hash": "adc2c2629b09" + }, + ".claude/commands/brand.md": { + "hash": "472c7438a795" + }, + ".claude/agents/token-efficiency-engineer.md": { + "hash": "c5e07b99dbc3" + }, + ".claude/commands/discover.md": { + "hash": "8fe679961a27" + }, + ".claude/commands/build.md": { + "hash": "fee9680802e1" + }, + ".claude/commands/cost-centres.md": { + "hash": "07ead7d1c63f" + }, + ".claude/commands/expand.md": { + "hash": "f3b8f79ccd05" + }, + ".claude/commands/document-history.md": { + "hash": "c99673f9ae3c" + }, + ".claude/commands/feature-flow.md": { + "hash": "d1b8207a2a5a" + }, + ".claude/commands/feature-configure.md": { + "hash": "ee21aacdcd29" + }, + ".claude/commands/format.md": { + "hash": "a3f0eee9b52e" + }, + ".claude/commands/import-issues.md": { + "hash": "6331f512f2b8" + }, + ".claude/commands/feature-review.md": { + "hash": "fced358b99eb" + }, + ".claude/commands/infra-eval.md": { + "hash": "8a58ea808952" + }, + ".claude/commands/doctor.md": { + "hash": "8fa0fd26e893" + }, + ".claude/commands/project-status.md": { + "hash": "0565edacffae" + }, + ".claude/commands/plan.md": { + "hash": "0eca590818b3" + }, + ".claude/commands/scaffold.md": { + "hash": "4b3cd870e0fc" + }, + ".claude/commands/review.md": { + "hash": "e32bc6f663ab" + }, + ".claude/commands/orchestrate.md": { + "hash": "574c6938b38d" + }, + ".claude/commands/start.md": { + "hash": "d172290d22db" + }, + ".claude/commands/security.md": { + "hash": "5efa63762b04" + }, + ".claude/commands/preflight.md": { + "hash": "4a65b6271bd6" + }, + ".claude/commands/sync.md": { + "hash": "efd3cfb56eed" + }, + ".claude/commands/sync-backlog.md": { + "hash": "2352a7d04323" + }, + ".claude/commands/team-backend.md": { + "hash": "f7e4f2d9d9b7" + }, + ".claude/commands/team-cost-ops.md": { + "hash": "812a2d58a81e" + }, + ".claude/commands/team-data.md": { + "hash": "ac4681cf9293" + }, + ".claude/commands/team-devops.md": { + "hash": "715a51cc4892" + }, + ".claude/commands/team-forge.md": { + "hash": "ff14d00c8c6c" + }, + ".claude/commands/team-frontend.md": { + "hash": "93f516367115" + }, + ".claude/commands/team-docs.md": { + "hash": "3deff18a07e9" + }, + ".claude/commands/team-infra.md": { + "hash": "436ecc831ca4" + }, + ".claude/commands/team-quality.md": { + "hash": "201199588ab2" + }, + ".claude/commands/team-product.md": { + "hash": "d0388844667d" + }, + ".claude/commands/team-strategic-ops.md": { + "hash": "5c65b47e2d4f" + }, + ".claude/commands/team-testing.md": { + "hash": "0d04836de633" + }, + ".claude/commands/test.md": { + "hash": "dff6e64066e4" + }, + ".claude/commands/team-security.md": { + "hash": "39f9d0c7d438" + }, + ".claude/commands/validate.md": { + "hash": "db126df15cad" + }, + ".claude/hooks/budget-guard-check.sh": { + "hash": "4fabe38fe963" + }, + ".claude/hooks/guard-destructive-commands.ps1": { + "hash": "55a58d211c2c" + }, + ".claude/hooks/pre-push-validate.sh": { + "hash": "86db6d107d60" + }, + ".claude/hooks/protect-sensitive.ps1": { + "hash": "59c32beeb28b" + }, + ".claude/hooks/protect-sensitive.sh": { + "hash": "f064ddda7879" + }, + ".claude/hooks/guard-destructive-commands.sh": { + "hash": "155b707b2af0" + }, + ".claude/hooks/protect-templates.ps1": { + "hash": "0b14c70ee6ef" + }, + ".claude/hooks/session-start.sh": { + "hash": "bf976e3ffb1a" + }, + ".claude/hooks/protect-templates.sh": { + "hash": "04a1d69ea578" + }, + ".claude/hooks/session-start.ps1": { + "hash": "7d50dcf043f4" + }, + ".claude/hooks/stop-build-check.sh": { + "hash": "8aecebcef7b7" + }, + ".claude/hooks/warn-uncommitted.ps1": { + "hash": "e01cd78b2c17" + }, + ".claude/hooks/warn-uncommitted.sh": { + "hash": "b224fa6b1b1f" + }, + ".claude/rules/blockchain.md": { + "hash": "6ebb3c6166c1" + }, + ".claude/rules/agent-conduct.md": { + "hash": "a9204d8e7dc4" + }, + ".claude/hooks/stop-build-check.ps1": { + "hash": "16d00d311940" + }, + ".claude/rules/dependency-management.md": { + "hash": "d0089754e232" + }, + ".claude/rules/ci-cd.md": { + "hash": "4eb972787de8" + }, + ".claude/rules/dotnet.md": { + "hash": "afd3bc539ab3" + }, + ".claude/rules/git-workflow.md": { + "hash": "16df971f4442" + }, + ".claude/rules/iac.md": { + "hash": "7389f06f50fe" + }, + ".claude/rules/documentation.md": { + "hash": "041b08cabcc0" + }, + ".claude/rules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".claude/rules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".claude/rules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".claude/rules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".claude/rules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".claude/rules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".claude/rules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".claude/rules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".claude/rules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".claude/rules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".claude/rules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".claude/rules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".claude/rules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".claude/rules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".claude/rules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".claude/rules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".claude/rules/python.md": { + "hash": "842f7d201c27" + }, + ".claude/rules/quality.md": { + "hash": "478859ffbb93" + }, + ".claude/rules/rust.md": { + "hash": "653b8dfb73b5" + }, + ".claude/rules/template-protection.md": { + "hash": "e0eca318e94b" + }, + ".claude/rules/testing.md": { + "hash": "3e7853b624e1" + }, + ".claude/rules/typescript.md": { + "hash": "1b050804b6ef" + }, + ".claude/settings.json": { + "hash": "b5f6aee20306" + }, + ".claude/skills/analyze-agents/SKILL.md": { + "hash": "3d77831e022a" + }, + ".claude/rules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".claude/rules/security.md": { + "hash": "3ed7f09d1ad0" + }, + ".claude/skills/backlog/SKILL.md": { + "hash": "de8c81512467" + }, + ".claude/skills/brand/SKILL.md": { + "hash": "b4de2f51b106" + }, + ".claude/skills/cost/SKILL.md": { + "hash": "7276c4052975" + }, + ".claude/skills/check/SKILL.md": { + "hash": "6d7d38148af5" + }, + ".claude/skills/cost-centres/SKILL.md": { + "hash": "738667d8716f" + }, + ".claude/skills/deploy/SKILL.md": { + "hash": "f5cbd6d04c02" + }, + ".claude/skills/doctor/SKILL.md": { + "hash": "310dce98d8f4" + }, + ".claude/skills/document-history/SKILL.md": { + "hash": "074d8a3cab21" + }, + ".claude/skills/build/SKILL.md": { + "hash": "77448a90e59b" + }, + ".claude/skills/discover/SKILL.md": { + "hash": "ef2e7d50b511" + }, + ".claude/skills/expand/SKILL.md": { + "hash": "fd58b1775fd1" + }, + ".claude/skills/feature-flow/SKILL.md": { + "hash": "cd75ad612f63" + }, + ".claude/skills/format/SKILL.md": { + "hash": "3f2951d68edf" + }, + ".claude/skills/import-issues/SKILL.md": { + "hash": "7fb72bc4c4a2" + }, + ".claude/skills/infra-eval/SKILL.md": { + "hash": "7a4eedae11b3" + }, + ".claude/skills/orchestrate/SKILL.md": { + "hash": "8950d5dbb641" + }, + ".claude/skills/feature-review/SKILL.md": { + "hash": "b556218af259" + }, + ".claude/skills/feature-configure/SKILL.md": { + "hash": "4320cc00be36" + }, + ".claude/skills/plan/SKILL.md": { + "hash": "28fd3cc22953" + }, + ".claude/skills/scaffold/SKILL.md": { + "hash": "9291d71bc86b" + }, + ".claude/skills/security/SKILL.md": { + "hash": "1520feb2bf97" + }, + ".claude/skills/start/SKILL.md": { + "hash": "a987a611b567" + }, + ".claude/skills/preflight/SKILL.md": { + "hash": "b6ad1a083bac" + }, + ".claude/skills/project-status/SKILL.md": { + "hash": "8df33d0cb8c9" + }, + ".claude/skills/sync/SKILL.md": { + "hash": "19de7f1cc4cb" + }, + ".claude/skills/review/SKILL.md": { + "hash": "8386eb6c97ee" + }, + ".claude/skills/sync-backlog/SKILL.md": { + "hash": "cea14e0c67fc" + }, + ".claude/skills/validate/SKILL.md": { + "hash": "112b57703063" + }, + ".clinerules/agent-conduct.md": { + "hash": "58310e525ade" + }, + ".clinerules/ai-cost-ops.md": { + "hash": "464c1fde7714" + }, + ".claude/skills/test/SKILL.md": { + "hash": "21da74147f13" + }, + ".clinerules/ci-cd.md": { + "hash": "d6b6698178f3" + }, + ".clinerules/blockchain.md": { + "hash": "21750f5c565c" + }, + ".clinerules/dependency-management.md": { + "hash": "909464fb0495" + }, + ".clinerules/documentation.md": { + "hash": "a947fca57aca" + }, + ".clinerules/iac.md": { + "hash": "12318597c6ca" + }, + ".clinerules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".clinerules/dotnet.md": { + "hash": "d978b656d898" + }, + ".clinerules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".clinerules/finops.md": { + "hash": "c02b0486012f" + }, + ".clinerules/git-workflow.md": { + "hash": "0ce8ea97c321" + }, + ".clinerules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".clinerules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".clinerules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".clinerules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".clinerules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".clinerules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".clinerules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".clinerules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".clinerules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".clinerules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".clinerules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".clinerules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".clinerules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".clinerules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".clinerules/rust.md": { + "hash": "dc2f173fa092" + }, + ".clinerules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".clinerules/security.md": { + "hash": "9cefb19e63e5" + }, + ".clinerules/python.md": { + "hash": "0d1ed61bb8dc" + }, + ".clinerules/template-protection.md": { + "hash": "ea83904b6713" + }, + ".cursor/commands/analyze-agents.md": { + "hash": "024e3cec1f56" + }, + ".cursor/commands/brand.md": { + "hash": "63960929d9fc" + }, + ".cursor/commands/backlog.md": { + "hash": "c6b5aa7de695" + }, + ".clinerules/typescript.md": { + "hash": "c77f9043197a" + }, + ".clinerules/testing.md": { + "hash": "fba2f07c5a5b" + }, + ".cursor/commands/build.md": { + "hash": "74cc820e6fc1" + }, + ".cursor/commands/cost-centres.md": { + "hash": "143856799eda" + }, + ".cursor/commands/check.md": { + "hash": "9373b3fca5ff" + }, + ".cursor/commands/deploy.md": { + "hash": "cd5b2f461cd7" + }, + ".cursor/commands/discover.md": { + "hash": "60be19c91420" + }, + ".cursor/commands/cost.md": { + "hash": "9c338e5f33b1" + }, + ".cursor/commands/doctor.md": { + "hash": "c619f9e3b1e6" + }, + ".cursor/commands/expand.md": { + "hash": "089462f22f52" + }, + ".cursor/commands/document-history.md": { + "hash": "975b4458c2c1" + }, + ".cursor/commands/feature-flow.md": { + "hash": "7d7a302552c6" + }, + ".cursor/commands/feature-review.md": { + "hash": "021c98874605" + }, + ".cursor/commands/format.md": { + "hash": "5be0e24ce07a" + }, + ".cursor/commands/feature-configure.md": { + "hash": "9b071a084415" + }, + ".cursor/commands/import-issues.md": { + "hash": "2acded7ac4fa" + }, + ".cursor/commands/infra-eval.md": { + "hash": "313ed28d7c7f" + }, + ".cursor/commands/orchestrate.md": { + "hash": "e2f5928cdb2f" + }, + ".cursor/commands/plan.md": { + "hash": "0af99fb78d12" + }, + ".cursor/commands/project-status.md": { + "hash": "7a0056181045" + }, + ".cursor/commands/review.md": { + "hash": "e1853e4abdb9" + }, + ".cursor/commands/preflight.md": { + "hash": "6d1a97bd57d5" + }, + ".cursor/commands/scaffold.md": { + "hash": "69986b1530cf" + }, + ".cursor/commands/sync.md": { + "hash": "513bea4ea974" + }, + ".cursor/commands/security.md": { + "hash": "1a4e4a4d8cf6" + }, + ".cursor/commands/sync-backlog.md": { + "hash": "a6282eab6689" + }, + ".cursor/commands/validate.md": { + "hash": "5bc457b26628" + }, + ".cursor/rules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".cursor/rules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".cursor/rules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".cursor/rules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".cursor/rules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".cursor/commands/test.md": { + "hash": "0f83a2bdea71" + }, + ".cursor/rules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".cursor/commands/start.md": { + "hash": "a72ec5c139fe" + }, + ".cursor/rules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".cursor/rules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".cursor/rules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".cursor/rules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".cursor/rules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".cursor/rules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".cursor/rules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".cursor/rules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".cursor/rules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".cursor/rules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".cursor/rules/orchestrate.mdc": { + "hash": "9853913b4857" + }, + ".cursor/rules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".cursor/rules/security.mdc": { + "hash": "24c286e725a3" + }, + ".cursor/rules/project-context.mdc": { + "hash": "dd6859b78404" + }, + ".cursor/rules/team-backend.mdc": { + "hash": "66c7510720e1" + }, + ".cursor/rules/team-data.mdc": { + "hash": "412987c5fb0e" + }, + ".cursor/rules/team-docs.mdc": { + "hash": "b0ccc30e6b77" + }, + ".cursor/rules/team-cost-ops.mdc": { + "hash": "545aecedca0b" + }, + ".cursor/rules/team-forge.mdc": { + "hash": "a238f2cc330b" + }, + ".cursor/rules/team-infra.mdc": { + "hash": "d5f6f094dc30" + }, + ".cursor/rules/team-frontend.mdc": { + "hash": "82a998fe0de5" + }, + ".cursor/rules/team-product.mdc": { + "hash": "153f579d8b04" + }, + ".cursor/rules/team-security.mdc": { + "hash": "9778f59babaa" + }, + ".cursor/rules/team-devops.mdc": { + "hash": "0fe62d640199" + }, + ".cursor/rules/team-quality.mdc": { + "hash": "f70002d21c69" + }, + ".cursor/rules/team-strategic-ops.mdc": { + "hash": "00d0e2e368e4" + }, + ".cursor/rules/team-testing.mdc": { + "hash": "e5e949b5a9ad" + }, + ".gemini/config.yaml": { + "hash": "8f50c65f25fb" + }, + ".editorconfig": { + "hash": "fa09dda3d2e2" + }, + ".github/agents/adoption-strategist.agent.md": { + "hash": "5d2836dcb475" + }, + ".github/agents/backend.agent.md": { + "hash": "0d127baccf58" + }, + ".github/agents/content-strategist.agent.md": { + "hash": "c2544a299b60" + }, + ".gitattributes": { + "hash": "90af26762384" + }, + ".github/agents/brand-guardian.agent.md": { + "hash": "c2461a9a8466" + }, + ".github/agents/cost-ops-monitor.agent.md": { + "hash": "4188ea493644" + }, + ".github/agents/coverage-tracker.agent.md": { + "hash": "0ec9cd09509b" + }, + ".gemini/styleguide.md": { + "hash": "b3f330f5df8f" + }, + ".github/agents/data.agent.md": { + "hash": "a55f855de262" + }, + ".github/agents/expansion-analyst.agent.md": { + "hash": "45e7e34e7877" + }, + ".github/agents/devops.agent.md": { + "hash": "ffe4f3317ec8" + }, + ".github/agents/dependency-watcher.agent.md": { + "hash": "e85baf4d0d46" + }, + ".github/agents/environment-manager.agent.md": { + "hash": "d2e9a801a5e5" + }, + ".github/agents/flow-designer.agent.md": { + "hash": "d09c5f1d7cd2" + }, + ".github/agents/feature-ops.agent.md": { + "hash": "c4ba3dc907f6" + }, + ".github/agents/governance-advisor.agent.md": { + "hash": "35e92bcae9d0" + }, + ".github/agents/frontend.agent.md": { + "hash": "778677e3a2f1" + }, + ".github/agents/grant-hunter.agent.md": { + "hash": "7d849df31023" + }, + ".github/agents/impact-assessor.agent.md": { + "hash": "98a4559e208d" + }, + ".github/agents/infra.agent.md": { + "hash": "8c8d3a4f1adf" + }, + ".github/agents/input-clarifier.agent.md": { + "hash": "63f969a72bc4" + }, + ".github/agents/mission-definer.agent.md": { + "hash": "4ba6262d5eb8" + }, + ".github/agents/integration-tester.agent.md": { + "hash": "b34beafad1bd" + }, + ".github/agents/model-economist.agent.md": { + "hash": "b3ea5f80581d" + }, + ".github/agents/portfolio-analyst.agent.md": { + "hash": "fa3fe9e48a52" + }, + ".github/agents/product-manager.agent.md": { + "hash": "9d3da17ae6f3" + }, + ".github/agents/project-shipper.agent.md": { + "hash": "93e8ef14bb8f" + }, + ".github/agents/prompt-engineer.agent.md": { + "hash": "778f224899a3" + }, + ".github/agents/retrospective-analyst.agent.md": { + "hash": "143b2fd6c727" + }, + ".github/agents/roadmap-tracker.agent.md": { + "hash": "0fdd8e9b7985" + }, + ".github/agents/role-architect.agent.md": { + "hash": "217b0f7d6bc5" + }, + ".github/agents/security-auditor.agent.md": { + "hash": "1f8a11a72b17" + }, + ".github/agents/spec-compliance-auditor.agent.md": { + "hash": "e2b66fe05d2b" + }, + ".github/agents/team-validator.agent.md": { + "hash": "046b30086c5b" + }, + ".github/agents/test-lead.agent.md": { + "hash": "6561c9a0a1c2" + }, + ".github/agents/token-efficiency-engineer.agent.md": { + "hash": "12997f39f2cb" + }, + ".github/agents/ui-designer.agent.md": { + "hash": "337cddf83447" + }, + ".github/agents/vendor-arbitrage-analyst.agent.md": { + "hash": "627c29b70357" + }, + ".github/agents/growth-analyst.agent.md": { + "hash": "25e3b42da3aa" + }, + ".github/agents/release-coordinator.agent.md": { + "hash": "dfa94cb6ff6f" + }, + ".github/agents/release-manager.agent.md": { + "hash": "e58484632ca0" + }, + ".github/chatmodes/team-backend.chatmode.md": { + "hash": "ac8f69b82220" + }, + ".github/chatmodes/team-cost-ops.chatmode.md": { + "hash": "121bbf207ca4" + }, + ".github/chatmodes/team-devops.chatmode.md": { + "hash": "978de914aab8" + }, + ".github/chatmodes/team-data.chatmode.md": { + "hash": "0afb7a28f351" + }, + ".github/chatmodes/team-forge.chatmode.md": { + "hash": "b04f7d8a9d9a" + }, + ".github/chatmodes/team-frontend.chatmode.md": { + "hash": "cce72ab3a795" + }, + ".github/chatmodes/team-infra.chatmode.md": { + "hash": "5850b3a37256" + }, + ".github/chatmodes/team-docs.chatmode.md": { + "hash": "c204bd1f1788" + }, + ".github/chatmodes/team-product.chatmode.md": { + "hash": "03428a19c477" + }, + ".github/chatmodes/team-quality.chatmode.md": { + "hash": "7bc2b2f277e1" + }, + ".github/chatmodes/team-strategic-ops.chatmode.md": { + "hash": "8b337da42662" + }, + ".github/ai-framework-ci.yml": { + "hash": "d33ebabcb073" + }, + ".github/chatmodes/team-testing.chatmode.md": { + "hash": "074a36442ca2" + }, + ".github/CODEOWNERS": { + "hash": "ccf003556232" + }, + ".github/chatmodes/team-security.chatmode.md": { + "hash": "09342e8fc4bc" + }, + ".github/copilot-instructions.md": { + "hash": "c8bb26bb2cba" + }, + ".github/instructions/code-verify.md": { + "hash": "f82d9d55fc86" + }, + ".github/instructions/docs.md": { + "hash": "dca898c99b6c" + }, + ".github/instructions/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".github/instructions/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".github/instructions/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".github/instructions/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".github/instructions/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".github/instructions/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".github/instructions/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".github/instructions/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".github/instructions/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".github/instructions/languages/python.md": { + "hash": "63b439981bbc" + }, + ".github/instructions/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".github/instructions/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".github/instructions/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".github/instructions/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".github/instructions/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".github/instructions/marketing.md": { + "hash": "84860c42a466" + }, + ".github/instructions/performance.md": { + "hash": "4f8cd32aeb7e" + }, + ".github/instructions/quality.md": { + "hash": "d2d93df02537" + }, + ".github/instructions/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".github/instructions/languages/security.md": { + "hash": "1c73e7635578" + }, + ".github/instructions/testing.md": { + "hash": "ee3e0d11b01b" + }, + ".github/instructions/README.md": { + "hash": "a79739379379" + }, + ".github/ISSUE_TEMPLATE/feature_request.yml": { + "hash": "79e7e3da99d0" + }, + ".github/ISSUE_TEMPLATE/bug_report.yml": { + "hash": "0b7c12b0e1bb" + }, + ".github/prompts/backlog.prompt.md": { + "hash": "45f1abd24d72" + }, + ".github/ISSUE_TEMPLATE/config.yml": { + "hash": "47344ff5c32c" + }, + ".github/prompts/brand.prompt.md": { + "hash": "0c6c0002f942" + }, + ".github/prompts/build.prompt.md": { + "hash": "046bffc8791e" + }, + ".github/prompts/check.prompt.md": { + "hash": "cc0bdba2f08f" + }, + ".github/prompts/cost.prompt.md": { + "hash": "8d2d9868723a" + }, + ".github/prompts/deploy.prompt.md": { + "hash": "fc9569e74c5d" + }, + ".github/prompts/discover.prompt.md": { + "hash": "e04bdf639b4a" + }, + ".github/prompts/analyze-agents.prompt.md": { + "hash": "19e1dc8432f0" + }, + ".github/prompts/document-history.prompt.md": { + "hash": "d9f170e31ace" + }, + ".github/prompts/doctor.prompt.md": { + "hash": "1dad8d876f62" + }, + ".github/prompts/expand.prompt.md": { + "hash": "ff9445bec477" + }, + ".github/prompts/feature-review.prompt.md": { + "hash": "cf81881f51f5" + }, + ".github/prompts/feature-configure.prompt.md": { + "hash": "ce35b4c465e6" + }, + ".github/prompts/format.prompt.md": { + "hash": "94a0505df23e" + }, + ".github/prompts/cost-centres.prompt.md": { + "hash": "6baa174774e6" + }, + ".github/prompts/import-issues.prompt.md": { + "hash": "4b2701705479" + }, + ".github/prompts/infra-eval.prompt.md": { + "hash": "a8b15916f960" + }, + ".github/prompts/orchestrate.prompt.md": { + "hash": "63451784c289" + }, + ".github/prompts/preflight.prompt.md": { + "hash": "52dcd9cbf075" + }, + ".github/prompts/feature-flow.prompt.md": { + "hash": "b82d78500eb3" + }, + ".github/prompts/review.prompt.md": { + "hash": "94016ba6950b" + }, + ".github/prompts/plan.prompt.md": { + "hash": "69797faa11a4" + }, + ".github/prompts/project-status.prompt.md": { + "hash": "328769323130" + }, + ".github/prompts/scaffold.prompt.md": { + "hash": "22240d89615d" + }, + ".github/prompts/security.prompt.md": { + "hash": "953693049d80" + }, + ".github/prompts/start.prompt.md": { + "hash": "97357c17d8fe" + }, + ".github/prompts/sync-backlog.prompt.md": { + "hash": "9cea7fd68060" + }, + ".github/prompts/sync.prompt.md": { + "hash": "7e7773332996" + }, + ".github/prompts/test.prompt.md": { + "hash": "871f38d6af82" + }, + ".github/prompts/validate.prompt.md": { + "hash": "028479c6d2e2" + }, + ".github/scripts/resolve-merge.ps1": { + "hash": "0cd5d9407b89" + }, + ".github/scripts/resolve-merge.sh": { + "hash": "7ce68cb84a3a" + }, + ".github/scripts/setup-branch-protection.ps1": { + "hash": "160cb7bb55b1" + }, + ".github/scripts/setup-branch-protection.sh": { + "hash": "6eb664b21ee4" + }, + ".github/workflows/breaking-change-detection.yml": { + "hash": "bcd2f5c2e450" + }, + ".github/scripts/README.md": { + "hash": "3124e25a7cfa" + }, + ".github/workflows/coverage-report.yml": { + "hash": "80dafccc5b8f" + }, + ".github/workflows/dependency-audit.yml": { + "hash": "fc376b5eef06" + }, + ".github/workflows/documentation-quality.yml": { + "hash": "6088b2095f59" + }, + ".github/workflows/documentation-validation.yml": { + "hash": "01abb4c23ec9" + }, + ".github/workflows/pr-validation.yml": { + "hash": "2c316a51ea66" + }, + ".github/workflows/retrospective-quality.yml": { + "hash": "74474e570115" + }, + ".gitmessage": { + "hash": "3f5666033096" + }, + ".markdownlint.json": { + "hash": "afe70a444035" + }, + ".prettierrc": { + "hash": "7288d28eacd8" + }, + ".roo/rules/agent-conduct.md": { + "hash": "1f4b060a86eb" + }, + ".github/PULL_REQUEST_TEMPLATE.md": { + "hash": "10b91e98a082" + }, + ".roo/rules/ci-cd.md": { + "hash": "56d669134c88" + }, + ".roo/rules/ai-cost-ops.md": { + "hash": "2c38e075d4db" + }, + ".roo/rules/dependency-management.md": { + "hash": "10ec56bb6292" + }, + ".roo/rules/blockchain.md": { + "hash": "205b3ca13935" + }, + ".roo/rules/finops.md": { + "hash": "17a63264e7b1" + }, + ".roo/rules/documentation.md": { + "hash": "ff90f251ce71" + }, + ".roo/rules/git-workflow.md": { + "hash": "ae185cb50c40" + }, + ".roo/rules/iac.md": { + "hash": "2024c73bc61a" + }, + ".roo/rules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".roo/rules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".roo/rules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".roo/rules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".roo/rules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".roo/rules/dotnet.md": { + "hash": "8b8461bcf286" + }, + ".roo/rules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".roo/rules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".roo/rules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".roo/rules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".roo/rules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".roo/rules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".roo/rules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".roo/rules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".roo/rules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".roo/rules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".roo/rules/python.md": { + "hash": "7b9a642b9197" + }, + ".roo/rules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".roo/rules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".roo/rules/template-protection.md": { + "hash": "2097e8899fab" + }, + ".roo/rules/security.md": { + "hash": "a05714124061" + }, + ".roo/rules/typescript.md": { + "hash": "5bff848ce5b6" + }, + ".roo/rules/testing.md": { + "hash": "f420798449b7" + }, + ".vscode/settings.json": { + "hash": "4af945c89151" + }, + ".windsurf/commands/analyze-agents.md": { + "hash": "371f6c3bd7d5" + }, + ".windsurf/commands/backlog.md": { + "hash": "68b4263fc444" + }, + ".windsurf/commands/build.md": { + "hash": "7fc64a835712" + }, + ".windsurf/commands/brand.md": { + "hash": "1eb99e2c4883" + }, + ".roo/rules/rust.md": { + "hash": "f68627a539a3" + }, + ".windsurf/commands/check.md": { + "hash": "780d7cb5ba53" + }, + ".windsurf/commands/cost-centres.md": { + "hash": "16f70ee610a8" + }, + ".windsurf/commands/cost.md": { + "hash": "6b9a7ee00d03" + }, + ".windsurf/commands/discover.md": { + "hash": "438676ab6872" + }, + ".windsurf/commands/doctor.md": { + "hash": "e40703581729" + }, + ".windsurf/commands/document-history.md": { + "hash": "57554e0ae8d7" + }, + ".windsurf/commands/expand.md": { + "hash": "62310f81603e" + }, + ".windsurf/commands/deploy.md": { + "hash": "bb64704796af" + }, + ".windsurf/commands/feature-configure.md": { + "hash": "31f4a7a16fe7" + }, + ".windsurf/commands/feature-review.md": { + "hash": "9c212c4c7afe" + }, + ".windsurf/commands/feature-flow.md": { + "hash": "840122cc19aa" + }, + ".windsurf/commands/infra-eval.md": { + "hash": "359a364a00e5" + }, + ".windsurf/commands/orchestrate.md": { + "hash": "1d9602ce2908" + }, + ".windsurf/commands/plan.md": { + "hash": "0bf8e69458de" + }, + ".windsurf/commands/preflight.md": { + "hash": "2d35df2ccd8e" + }, + ".vscode/extensions.json": { + "hash": "dd20fd0751ba" + }, + ".windsurf/commands/format.md": { + "hash": "10cda487929d" + }, + ".windsurf/commands/project-status.md": { + "hash": "a85e72f6794e" + }, + ".windsurf/commands/review.md": { + "hash": "ebd187ab3d06" + }, + ".windsurf/commands/security.md": { + "hash": "4878d4daa234" + }, + ".windsurf/commands/import-issues.md": { + "hash": "9b714f3d4b02" + }, + ".windsurf/commands/sync.md": { + "hash": "d4678bf06724" + }, + ".windsurf/commands/sync-backlog.md": { + "hash": "bf720daf3704" + }, + ".windsurf/commands/test.md": { + "hash": "73463ed24c36" + }, + ".windsurf/commands/validate.md": { + "hash": "02d1c93720c5" + }, + ".windsurf/commands/scaffold.md": { + "hash": "c57cd1471acf" + }, + ".windsurf/commands/start.md": { + "hash": "7cc5267d9274" + }, + ".windsurf/rules/languages/agent-conduct.md": { + "hash": "dfa139fec0e9" + }, + ".windsurf/rules/languages/blockchain.md": { + "hash": "7fc6185f787c" + }, + ".windsurf/rules/languages/documentation.md": { + "hash": "1987c9f42ff1" + }, + ".windsurf/rules/languages/ai-cost-ops.md": { + "hash": "a1ae9bf2bed7" + }, + ".windsurf/rules/languages/dotnet.md": { + "hash": "d32abad9b778" + }, + ".windsurf/rules/languages/ci-cd.md": { + "hash": "ee4914ac0781" + }, + ".windsurf/rules/languages/finops.md": { + "hash": "26ed29eca172" + }, + ".windsurf/rules/languages/dependency-management.md": { + "hash": "e03ef3668bb4" + }, + ".windsurf/rules/languages/git-workflow.md": { + "hash": "1fdb78c70ab0" + }, + ".windsurf/rules/languages/README.md": { + "hash": "1525f51b3b52" + }, + ".windsurf/rules/languages/rust.md": { + "hash": "4d57482d5c8b" + }, + ".windsurf/rules/languages/python.md": { + "hash": "63b439981bbc" + }, + ".windsurf/rules/languages/iac.md": { + "hash": "8e3e330610df" + }, + ".windsurf/rules/languages/template-protection.md": { + "hash": "da0cc75841da" + }, + ".windsurf/rules/languages/typescript.md": { + "hash": "02ce5a9b6f2f" + }, + ".windsurf/rules/languages/testing.md": { + "hash": "2e8c3bd2fd50" + }, + ".windsurf/rules/orchestrate.md": { + "hash": "0eea9715c9db" + }, + ".windsurf/rules/security.md": { + "hash": "6a39548b2255" + }, + ".windsurf/rules/team-cost-ops.md": { + "hash": "69db0e22010d" + }, + ".windsurf/rules/team-data.md": { + "hash": "2fa55fd04223" + }, + ".windsurf/rules/team-devops.md": { + "hash": "06c93f75dcd3" + }, + ".windsurf/rules/team-forge.md": { + "hash": "13f5fa696b1d" + }, + ".windsurf/rules/team-backend.md": { + "hash": "ec288e9b54ce" + }, + ".windsurf/rules/team-docs.md": { + "hash": "f019d83abc58" + }, + ".windsurf/rules/team-frontend.md": { + "hash": "e9a5f425646d" + }, + ".windsurf/rules/languages/security.md": { + "hash": "1c73e7635578" + }, + ".windsurf/rules/team-product.md": { + "hash": "81f4929e42f3" + }, + ".windsurf/rules/project.md": { + "hash": "cc8ae6d95221" + }, + ".windsurf/rules/team-testing.md": { + "hash": "505b7caae49d" + }, + ".windsurf/rules/team-security.md": { + "hash": "a7c778d35665" + }, + ".windsurf/workflows/phase-execution.yml": { + "hash": "81054e1a3272" + }, + "AGENTS.md": { + "hash": "911950e72f75" + }, + ".windsurf/workflows/full-assessment.yml": { + "hash": "57d1220ee8ac" + }, + "AGENT_BACKLOG.md": { + "hash": "f45282123027" + }, + "CHANGELOG.md": { + "hash": "8cb5a19628b1" + }, + "AGENT_TEAMS.md": { + "hash": "725ada7d289f" + }, + ".windsurf/rules/team-strategic-ops.md": { + "hash": "c1d8c4f33abe" + }, + "CLAUDE.md": { + "hash": "4e7b5fb72c4c" + }, + ".windsurf/rules/team-quality.md": { + "hash": "afb908c98b76" + }, + ".windsurf/rules/team-infra.md": { + "hash": "fb977ea917c1" + }, + "docs/api/01_overview.md": { + "hash": "342e9d07b13f" + }, + "docs/api/02_endpoints.md": { + "hash": "43eb1cc5a21f" + }, + "CONTRIBUTING.md": { + "hash": "afd7d3c16416" + }, + "docs/api/04_examples.md": { + "hash": "7c21b7bcf311" + }, + "docs/api/03_authentication.md": { + "hash": "26ef4da3ef56" + }, + "docs/api/05_errors.md": { + "hash": "ed2e5a6e94ed" + }, + "docs/api/06_versioning.md": { + "hash": "bd878ba8a2f6" + }, + "COMMAND_GUIDE.md": { + "hash": "4600c6725f0d" + }, + "docs/architecture/01_overview.md": { + "hash": "df6efc6fda78" + }, + "docs/architecture/decisions/01-adopt-agentkit-forge.md": { + "hash": "552c1023dcf2" + }, + "docs/api/README.md": { + "hash": "5a266ea2df82" + }, + "docs/agents/agent-team-matrix.md": { + "hash": "09345b713ca1" + }, + "docs/architecture/decisions/03-tooling-strategy.md": { + "hash": "b2700e569966" + }, + "docs/architecture/decisions/05-dependency-supply-chain-detection-tooling.md": { + "hash": "6ccff01874c7" + }, + "docs/architecture/decisions/06-code-quality-maintainability-signal-tooling.md": { + "hash": "3fb3fc9fd6ff" + }, + "docs/architecture/decisions/04-static-security-analysis-depth-tooling.md": { + "hash": "998c41843f21" + }, + "docs/architecture/decisions/02-fallback-policy-tokens-problem.md": { + "hash": "31295d24794e" + }, + "docs/architecture/decisions/README.md": { + "hash": "28b5d189b354" + }, + "docs/architecture/diagrams/.gitkeep": { + "hash": "64edc5f9f589" + }, + "docs/architecture/README.md": { + "hash": "a867a017c8a0" + }, + "docs/architecture/specs/02_technical_spec.md": { + "hash": "b603c83e06d5" + }, + "docs/architecture/diagrams/README.md": { + "hash": "782485a4f5ef" + }, + "docs/architecture/specs/01_functional_spec.md": { + "hash": "cb36564f8ddd" + }, + "docs/architecture/specs/03_api_spec.md": { + "hash": "d5a1811ddc75" + }, + "docs/architecture/specs/README.md": { + "hash": "7c4e52efbd0d" + }, + "docs/architecture/specs/04_data_models.md": { + "hash": "a77400c5387c" + }, + "docs/engineering/02_coding_standards.md": { + "hash": "cf4473c84515" + }, + "docs/engineering/03_testing.md": { + "hash": "7cbc67b07b25" + }, + "docs/engineering/04_git_workflow.md": { + "hash": "8621780ffdcb" + }, + "docs/engineering/05_security.md": { + "hash": "b2fd1574733d" + }, + "docs/engineering/06_pr_documentation.md": { + "hash": "74d9c99fc82a" + }, + "docs/engineering/README.md": { + "hash": "35afee261b38" + }, + "docs/engineering/07_changelog.md": { + "hash": "945e28ab8b34" + }, + "docs/history/.index.json": { + "hash": "7beb781687f2" + }, + "docs/history/bug-fixes/README.md": { + "hash": "78dcabc86f74" + }, + "docs/history/bug-fixes/TEMPLATE-bugfix.md": { + "hash": "7873d84034ec" + }, + "docs/history/features/README.md": { + "hash": "7a6b10981688" + }, + "docs/history/features/TEMPLATE-feature.md": { + "hash": "c704b2662b57" + }, + "docs/history/implementations/README.md": { + "hash": "938114ecc966" + }, + "docs/history/implementations/TEMPLATE-implementation.md": { + "hash": "d4b4ad9bf6cc" + }, + "docs/history/issues/README.md": { + "hash": "3e5d149f1a6c" + }, + "docs/history/issues/TEMPLATE-issue.md": { + "hash": "b133cb73cdc5" + }, + "docs/history/lessons-learned/README.md": { + "hash": "b21e63388be4" + }, + "docs/history/lessons-learned/TEMPLATE-lesson.md": { + "hash": "810fcf97423b" + }, + "docs/engineering/01_setup.md": { + "hash": "225879d37c28" + }, + "docs/history/migrations/README.md": { + "hash": "7b023cecc53d" + }, + "docs/history/migrations/TEMPLATE-migration.md": { + "hash": "97272242bd4e" + }, + "docs/history/README.md": { + "hash": "8feb37cbe0c0" + }, + "docs/integrations/02_webhooks.md": { + "hash": "b9e1b977bf00" + }, + "docs/integrations/README.md": { + "hash": "105308932223" + }, + "docs/operations/01_deployment.md": { + "hash": "8fc948f3e280" + }, + "docs/operations/02_monitoring.md": { + "hash": "0d1c7d4a021e" + }, + "docs/operations/03_incident_response.md": { + "hash": "549b6f418202" + }, + "docs/operations/04_troubleshooting.md": { + "hash": "a8c0364e80c9" + }, + "docs/operations/05_slos_slis.md": { + "hash": "2cbf5f2188dd" + }, + "docs/operations/README.md": { + "hash": "62c405f25743" + }, + "docs/planning/TEMPLATE-plan.md": { + "hash": "305534965f0e" + }, + "docs/product/01_prd.md": { + "hash": "80c041b82e0d" + }, + "docs/integrations/01_external_apis.md": { + "hash": "17bc92567b46" + }, + "docs/integrations/03_sdk.md": { + "hash": "c05a8a69392d" + }, + "docs/product/02_user_stories.md": { + "hash": "fce181fc7087" + }, + "docs/product/03_roadmap.md": { + "hash": "c24ab738099b" + }, + "docs/product/README.md": { + "hash": "43db13443d26" + }, + "docs/reference/03_changelog.md": { + "hash": "4bd7c9e727aa" + }, + "docs/reference/02_faq.md": { + "hash": "ac95d6fb41ec" + }, + "docs/reference/04_contributing.md": { + "hash": "b33e1d721718" + }, + "docs/reference/README.md": { + "hash": "c09171b9b8a1" + }, + "GEMINI.md": { + "hash": "a59e2d67b8dd" + }, + "MIGRATIONS.md": { + "hash": "e880b3edb24c" + }, + "docs/product/04_personas.md": { + "hash": "609113c06c69" + }, + "QUALITY_GATES.md": { + "hash": "e3158c924e6e" + }, + "docs/README.md": { + "hash": "0a5900bf46af" + }, + "docs/reference/01_glossary.md": { + "hash": "2f571539f2ff" + }, + "scripts/analyze-agents.sh": { + "hash": "dfd5f15e5267" + }, + "scripts/analyze-agents.ps1": { + "hash": "e66c881de65a" + }, + "scripts/check-documentation-requirement.sh": { + "hash": "0604d65be8db" + }, + "scripts/consolidate-branches.sh": { + "hash": "f345de274644" + }, + "scripts/create-doc.sh": { + "hash": "c170336b69e0" + }, + "scripts/create-doc.ps1": { + "hash": "207501b71fe6" + }, + "scripts/resolve-merge.ps1": { + "hash": "1ae33673ef63" + }, + "scripts/resolve-merge.sh": { + "hash": "29048f9dc59d" + }, + "scripts/setup-agentkit-branch-governance.ps1": { + "hash": "ac356d29ce05" + }, + "scripts/setup-agentkit-branch-governance.sh": { + "hash": "cecf99c1c59a" + }, + "RUNBOOK_AI.md": { + "hash": "2a0d351455dc" + }, + "scripts/sync-issues.sh": { + "hash": "5728f842fda3" + }, + "scripts/sync-split-pr.ps1": { + "hash": "199b5056c32e" + }, + "scripts/sync-split-pr.sh": { + "hash": "169e29683f7b" + }, + "scripts/update-changelog.sh": { + "hash": "146f6934a4ee" + }, + "scripts/consolidate-branches.ps1": { + "hash": "767265430308" + }, + "scripts/validate-documentation.sh": { + "hash": "c00c47269a24" + }, + "scripts/validate-numbering.sh": { + "hash": "d78c153d05ee" + }, + "UNIFIED_AGENT_TEAMS.md": { + "hash": "506e38f9e21c" + }, + "SECURITY.md": { + "hash": "a926751bc190" + }, + "WARP.md": { + "hash": "24ca1510e68e" + }, + "scripts/update-changelog.ps1": { + "hash": "3b64bfbcfc25" + } + } +} diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/AGENT_TEAMS.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/AGENT_TEAMS.md new file mode 100644 index 00000000..ed649683 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/AGENT_TEAMS.md @@ -0,0 +1,80 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Agent Teams — agentkit-forge + +> Repo-local team mapping derived from `.agentkit/spec/teams.yaml`. +> Customize the **Status**, **Primary Scope**, **Tech Stack**, and **Lead Agent** +> columns for your repository. The orchestrator uses this file for task dispatch. + +--- + +## Overview + +This document maps the canonical AgentKit team definitions (see +[UNIFIED_AGENT_TEAMS.md](./UNIFIED_AGENT_TEAMS.md)) to the concrete structure +of this repository. Not all teams may be active — mark inactive teams so the +orchestrator skips them during dispatch. + +--- + +## Team Roster + +| Team | ID | Focus | Scope | Accepts | Handoff Chain | Status | Lead Agent | +| ---- | -- | ----- | ----- | ------- | ------------- | ------ | ---------- | +| BACKEND | backend | API, services, core logic | `apps/api/**`, `services/**`, `src/server/**`, `controllers/**` | implement, review, plan | testing → docs | Active | — | +| FRONTEND | frontend | UI, components, PWA | `apps/web/**`, `apps/marketing/**`, `src/client/**`, `components/**` | implement, review, plan | testing → docs | Active | — | +| DATA | data | Database, models, migrations | `db/**`, `migrations/**`, `models/**`, `prisma/**` | implement, review, plan | backend → testing | Active | — | +| INFRA | infra | IaC, cloud, Terraform/Bicep | `infra/**`, `terraform/**`, `bicep/**`, `pulumi/**` | implement, review, plan, investigate | devops → security | Active | — | +| DEVOPS | devops | CI/CD, pipelines, automation | `.github/workflows/**`, `scripts/**`, `docker/**`, `**/Dockerfile*` | implement, review, plan | testing → security | Active | — | +| TESTING | testing | Unit, E2E, integration tests | `**/*.test.*`, `**/*.spec.*`, `tests/**`, `e2e/**`, `playwright/**` | implement, review, test | quality | Active | — | +| SECURITY | security | Auth, compliance, audit | `auth/**`, `security/**`, `middleware/auth*` | review, investigate | — | Active | — | +| DOCUMENTATION | docs | Docs, ADRs, guides | `docs/**`, `docs/architecture/decisions/**`, `.github/**`, `README.md`, `CHANGELOG.md`, `CONTRIBUTING.md` | implement, review, document | — | Active | — | +| PRODUCT | product | Features, PRDs, roadmap | `docs/product/**`, `docs/prd/**` | plan, review | backend → frontend | Active | — | +| QUALITY | quality | Code review, refactoring, bugs, reliability, session retrospectives | `**/*` | review, investigate | — | Active | — | +| TEAMFORGE | forge | Meta-team — creates, validates, and deploys new agent team specifications | `.agentkit/spec/**`, `docs/planning/agents-teams/**`, `docs/architecture/**` | plan, review, investigate, document | quality → docs | Active | — | +| STRATEGIC OPS | strategic-ops | Cross-project coordination, framework governance, portfolio-level planning | `docs/planning/**`, `docs/architecture/**`, `.agentkit/spec/**`, `AGENT_BACKLOG.md`, `UNIFIED_AGENT_TEAMS.md`, `AGENT_TEAMS.md` | plan, review, investigate, document | product → quality | Active | — | +| COST OPS | cost-ops | AI infrastructure cost reduction, vendor optimization, token efficiency | `docs/cost-ops/**`, `docs/planning/cost/**`, `config/models/**`, `config/pricing/**` | investigate, review, plan, document, implement | infra → product → strategic-ops | Active | — | + +--- + +## How to Customize + +### Activating / Deactivating a Team + +1. Change the **Status** column from `Inactive` to `Active` (or vice versa). +2. Fill in the **Primary Scope** with actual directory paths in this repo. +3. Set the **Tech Stack** to reflect the tools and frameworks used. +4. Assign a **Lead Agent** identifier (used for mentions and escalation). +5. Add any relevant notes about the team's role. + +The orchestrator will skip inactive teams during `/orchestrate` dispatch. + +### Adding Custom Scope Patterns + +Each team's scope patterns determine which files the orchestrator will assign +to that team. Use glob patterns: + +``` +src/server/** — all files under src/server/ +src/api/*.ts — TypeScript files directly in src/api/ +tests/unit/server/* — server unit tests +``` + +--- + +## Scope Overlap Resolution + +When multiple teams have overlapping scope patterns, the orchestrator uses +these priority rules: + +1. **Most specific pattern wins.** A deeper path match takes precedence. +2. **Explicit assignment overrides.** A task explicitly assigned to a team + via `--teams` flag takes precedence over pattern matching. +3. **Primary scope takes priority.** The team whose scope lists the most + specific matching directory owns the file. + +--- + +_Customize this file for your repository. User edits are preserved across syncs._ +_Canonical team definitions: [UNIFIED_AGENT_TEAMS.md](./UNIFIED_AGENT_TEAMS.md)_ diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/README.md new file mode 100644 index 00000000..9484b549 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/README.md @@ -0,0 +1,47 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# agentkit-forge — Documentation + +Welcome to the agentkit-forge documentation hub. This index links to every +documentation category maintained by this repository. + +## Categories + +| Category | Description | +| -------------------------------------- | ----------------------------------------------------- | +| [Product](./product/) | Product vision, strategy, personas, PRDs | +| [Architecture](./architecture/) | Specs, ADRs, diagrams, tech stack decisions | +| [Orchestration](./orchestration/) | Orchestration guide, PM guide, concurrency protocol | +| [Agents](./agents/) | Agent catalog, roles, team mappings | +| [API](./api/) | API reference, authentication, versioning, and errors | +| [Operations](./operations/) | CI/CD, deployments, monitoring, and troubleshooting | +| [Engineering](./engineering/) | Setup, coding standards, testing, and contributing | +| [Integrations](./integrations/) | External APIs, webhooks, and SDK | +| [Reference](./reference/) | Glossary, acronyms, FAQ, and tool config | +| [Handoffs](./handoffs/) | AI session handoff documents | +| [History](./history/) | Bug fixes, features, implementations, lessons | + +## Quick Links + +- [Architecture Overview](./architecture/01_overview.md) +- [Orchestration Guide](./orchestration/overview.md) +- [PM Guide](./orchestration/pm-guide.md) +- [Agent Catalog](./agents/catalog.md) +- [API Overview](./api/01_overview.md) +- [Getting Started](./engineering/01_setup.md) +- [Changelog](./reference/03_changelog.md) + +- [PRD Library](./product/prd/README.md) + + +## Conventions + +- Placeholder tokens `agentkit-forge` and `3.1.0` are replaced at sync time. +- Do **not** edit generated files directly — run `pnpm -C .agentkit agentkit:sync` + to regenerate them from the AgentKit Forge spec and overlays. + +--- + +Generated by AgentKit Forge v3.1.0 diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/api/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/api/README.md new file mode 100644 index 00000000..e91f44ae --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/api/README.md @@ -0,0 +1,14 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# API Docs Index + +## Contents + +- [01_overview.md](./01_overview.md) +- [02_endpoints.md](./02_endpoints.md) +- [03_authentication.md](./03_authentication.md) +- [04_examples.md](./04_examples.md) +- [05_errors.md](./05_errors.md) +- [06_versioning.md](./06_versioning.md) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/README.md new file mode 100644 index 00000000..de2050fe --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/README.md @@ -0,0 +1,12 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Architecture Docs Index + +## Contents + +- [01_overview.md](./01_overview.md) — Architecture overview and entry point +- [specs/](./specs/) — Functional, technical, and API specifications +- [diagrams/](./diagrams/) — Architecture diagrams +- [decisions/](./decisions/) — Architecture Decision Records (ADRs) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/decisions/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/decisions/README.md new file mode 100644 index 00000000..e488986f --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/decisions/README.md @@ -0,0 +1,16 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# ADR Index + +## Decision Records + +- [01-adopt-agentkit-forge.md](./01-adopt-agentkit-forge.md) +- [02-fallback-policy-tokens-problem.md](./02-fallback-policy-tokens-problem.md) +- [03-tooling-strategy.md](./03-tooling-strategy.md) +- [04-static-security-analysis-depth-tooling.md](./04-static-security-analysis-depth-tooling.md) +- [05-dependency-supply-chain-detection-tooling.md](./05-dependency-supply-chain-detection-tooling.md) +- [06-code-quality-maintainability-signal-tooling.md](./06-code-quality-maintainability-signal-tooling.md) +- [07-delivery-strategy.md](./07-delivery-strategy.md) +- [08-issue-sync-strategy.md](./08-issue-sync-strategy.md) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/diagrams/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/diagrams/README.md new file mode 100644 index 00000000..f93d1b98 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/diagrams/README.md @@ -0,0 +1,16 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Architecture Diagrams Index + +## Contents + +- Add C4 and deployment diagrams in this folder. +- Keep diagram files named with ordered prefixes when sequence matters (`01_`, `02_`, ...). + +## Recommended Diagrams + +- `01_system-context.mmd` (C4 L1) +- `02_container-view.mmd` (C4 L2) +- `03_deployment-view.mmd` (runtime/deployment) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/specs/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/specs/README.md new file mode 100644 index 00000000..abdab96a --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/architecture/specs/README.md @@ -0,0 +1,12 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Specs Docs Index + +## Contents + +- [01_functional_spec.md](./01_functional_spec.md) +- [02_technical_spec.md](./02_technical_spec.md) +- [03_api_spec.md](./03_api_spec.md) +- [04_data_models.md](./04_data_models.md) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/engineering/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/engineering/README.md new file mode 100644 index 00000000..9deaffc9 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/engineering/README.md @@ -0,0 +1,16 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Engineering Docs Index + +## Contents + +- [01_setup.md](./01_setup.md) +- [02_coding_standards.md](./02_coding_standards.md) +- [03_testing.md](./03_testing.md) +- [04_git_workflow.md](./04_git_workflow.md) +- [05_security.md](./05_security.md) +- [06_pr_documentation.md](./06_pr_documentation.md) +- [07_changelog.md](./07_changelog.md) +- [08_scaffold_management.md](./08_scaffold_management.md) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/README.md new file mode 100644 index 00000000..ecab947d --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/README.md @@ -0,0 +1,67 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# History + +Historical documentation for significant PRs and implementations in agentkit-forge. + +## Directory Structure + +| Directory | Description | +| -------------------------------------- | ---------------------------------------------- | +| [implementations/](./implementations/) | Major implementations and architecture changes | +| [bug-fixes/](./bug-fixes/) | Complex or critical bug resolutions | +| [features/](./features/) | New feature launches | +| [migrations/](./migrations/) | Major migrations and upgrades | +| [issues/](./issues/) | Issues encountered during development sessions | +| [lessons-learned/](./lessons-learned/) | Lessons learned from retrospectives | + +## Naming Convention + +Files use the format: `XXXX-YYYY-MM-DD-[title]-[type].md` + +- `XXXX` — sequential 4-digit number (maintained in [.index.json](./.index.json)) +- `YYYY-MM-DD` — completion date +- `[title]` — kebab-case title +- `[type]` — `implementation`, `bugfix`, `feature`, `migration`, `issue`, or `lesson` + +## Creating New Documentation + +Use the provided script to generate a new document from the correct template: + +```bash +# Bash +./scripts/create-doc.sh implementation "Feature Name" <pr-number> +./scripts/create-doc.sh bugfix "Bug Description" <pr-number> +./scripts/create-doc.sh feature "Feature Name" <pr-number> +./scripts/create-doc.sh migration "Migration Name" <pr-number> +./scripts/create-doc.sh issue "Issue Title" +./scripts/create-doc.sh lesson "Lesson Title" +``` + +> **Note:** Issue and lesson records are created automatically via +> `/review --focus=retrospective`, not through the create-doc script. +> +> **Fallback:** When `gh` CLI is unavailable (proxy failures, air-gapped +> environments), use `./scripts/create-doc.sh issue "Title"` to record issues +> locally, then run `./scripts/sync-issues.sh --apply` once access is restored. + +The `/review` command with `--focus=retrospective` automates issue and lesson +creation at end-of-session (non-blocking — never gates delivery): + +```bash +# Via agent command +/review --focus=retrospective # Full retrospective: issues + lessons +/review --focus=retrospective --dry-run # Preview without writing +/review --focus=retrospective --open-issues # Also create GitHub issues for unresolved problems +``` + +```powershell +# PowerShell +./scripts/create-doc.ps1 implementation "Feature Name" <pr-number> +``` + +Or use the `/document-history` slash command for auto-detection of type and title from session context. + +See [docs/engineering/06_pr_documentation.md](../engineering/06_pr_documentation.md) for the full documentation strategy. diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/bug-fixes/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/bug-fixes/README.md new file mode 100644 index 00000000..011ae350 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/bug-fixes/README.md @@ -0,0 +1,8 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Bug Fixes + +Historical records of complex or critical bug resolutions. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/features/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/features/README.md new file mode 100644 index 00000000..4e4a4c82 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/features/README.md @@ -0,0 +1,8 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Features + +Historical records of new feature launches. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/implementations/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/implementations/README.md new file mode 100644 index 00000000..afc0d54d --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/implementations/README.md @@ -0,0 +1,8 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Implementations + +Historical records of major implementations, architecture changes, and significant refactoring. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/issues/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/issues/README.md new file mode 100644 index 00000000..53ac6b6a --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/issues/README.md @@ -0,0 +1,42 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Issues + +Historical records of issues encountered during development sessions. + +## Creating Issue Records + +### Preferred: GitHub Issues via `gh` + +When the GitHub CLI is available and authenticated, create issues directly: + +```bash +gh issue create --title "Issue Title" --body "Description" +``` + +### Fallback: Local Issue Docs + +When `gh` is unavailable (no CLI installed, proxy/auth failures, air-gapped +environments), record issues locally as structured markdown: + +```bash +./scripts/create-doc.sh issue "Issue Title" +``` + +Issues are also logged automatically by `/review --focus=retrospective` at the +end of a session. + +### Syncing Local Issues to GitHub + +Once `gh` access is restored, sync local issue docs to GitHub Issues: + +```bash +./scripts/sync-issues.sh # Dry-run by default +./scripts/sync-issues.sh --apply # Create GitHub Issues and mark synced +``` + +See [ADR-08](../../architecture/decisions/08-issue-sync-strategy.md) for +the sync strategy and automation decisions. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/lessons-learned/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/lessons-learned/README.md new file mode 100644 index 00000000..5acf19fb --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/lessons-learned/README.md @@ -0,0 +1,11 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Lessons Learned + +Historical records of lessons learned during development sessions. + +Lessons are logged automatically by `/review --focus=retrospective` at the end of +a session, or manually via `scripts/create-doc.sh lesson "Lesson Title"`. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/migrations/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/migrations/README.md new file mode 100644 index 00000000..672df4f0 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/history/migrations/README.md @@ -0,0 +1,8 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> +# Migrations + +Historical records of major migrations and upgrades. + +See [docs/history/README.md](../README.md) for naming conventions and usage. diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/integrations/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/integrations/README.md new file mode 100644 index 00000000..48aa94c7 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/integrations/README.md @@ -0,0 +1,11 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Integrations Docs Index + +## Contents + +- [01_external_apis.md](./01_external_apis.md) +- [02_webhooks.md](./02_webhooks.md) +- [03_sdk.md](./03_sdk.md) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/operations/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/operations/README.md new file mode 100644 index 00000000..5918083e --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/operations/README.md @@ -0,0 +1,13 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Operations Docs Index + +## Contents + +- [01_deployment.md](./01_deployment.md) +- [02_monitoring.md](./02_monitoring.md) +- [03_incident_response.md](./03_incident_response.md) +- [04_troubleshooting.md](./04_troubleshooting.md) +- [05_slos_slis.md](./05_slos_slis.md) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/product/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/product/README.md new file mode 100644 index 00000000..ce11aaf5 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/product/README.md @@ -0,0 +1,12 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Product Docs Index + +## Contents + +- [01_prd.md](./01_prd.md) +- [02_user_stories.md](./02_user_stories.md) +- [03_roadmap.md](./03_roadmap.md) +- [04_personas.md](./04_personas.md) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/reference/README.md b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/reference/README.md new file mode 100644 index 00000000..3921959d --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/docs/reference/README.md @@ -0,0 +1,14 @@ +<!-- GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT --> +<!-- Source: .agentkit/spec + .agentkit/overlays/agentkit-forge --> +<!-- Regenerate: pnpm -C .agentkit agentkit:sync --> + +# Reference Docs Index + +## Contents + +- [01_glossary.md](./01_glossary.md) +- [02_faq.md](./02_faq.md) +- [03_changelog.md](./03_changelog.md) +- [04_contributing.md](./04_contributing.md) +- [05_project_yaml_reference.md](./05_project_yaml_reference.md) +- [ai_handoffs/](./ai_handoffs/) diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/analyze-agents.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/analyze-agents.sh new file mode 100644 index 00000000..fd5324d6 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/analyze-agents.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/analyze-agents.sh +# Generates agent/team relationship matrices from spec files. +# +# Usage: +# ./scripts/analyze-agents.sh [--output <path>] [--matrix <n>] [--format <fmt>] +# +# Options: +# --output <path> Output file (default: docs/agents/agent-team-matrix.md) +# --matrix <n> Specific matrix: 1-8, supplementary, all (default: all) +# --format <fmt> Output format: markdown, json (default: markdown) + +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +node "$PROJECT_ROOT/.agentkit/engines/node/src/cli.mjs" analyze-agents "$@" diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/check-documentation-requirement.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/check-documentation-requirement.sh new file mode 100644 index 00000000..944d7501 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/check-documentation-requirement.sh @@ -0,0 +1,115 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/check-documentation-requirement.sh +# Analyzes staged or changed files to determine whether PR documentation is required. +# +# Usage (pre-commit hook): +# ./scripts/check-documentation-requirement.sh +# +# Exit codes: +# 0 — documentation not required or already present +# 1 — documentation required but not present (when --strict is passed) +# +# Environment variables: +# GITHUB_BASE_REF — set automatically in GitHub Actions PR workflows +# STRICT — set to "true" to exit 1 when documentation is required + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HISTORY_DIR="$REPO_ROOT/docs/history" +STRICT="${STRICT:-false}" + +# --------------------------------------------------------------------------- +# Collect changed files +# --------------------------------------------------------------------------- + +if [[ -n "${GITHUB_BASE_REF:-}" ]]; then + # Running inside GitHub Actions pull_request event + CHANGED_FILES=$(git diff --name-only "origin/${GITHUB_BASE_REF}" HEAD 2>/dev/null || git diff --name-only HEAD~1 HEAD) +else + # Running locally — inspect staged files, fall back to last commit + CHANGED_FILES=$(git diff --cached --name-only 2>/dev/null) + if [[ -z "$CHANGED_FILES" ]]; then + CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD 2>/dev/null || true) + fi +fi + +if [[ -z "$CHANGED_FILES" ]]; then + echo "ℹ️ No changed files detected." + exit 0 +fi + +# --------------------------------------------------------------------------- +# Impact assessment +# --------------------------------------------------------------------------- + +IMPACT_HIGH=false +IMPACT_MEDIUM=false + +while IFS= read -r file; do + # High impact: project files, CI, security configs, infrastructure + if [[ "$file" == *.csproj || "$file" == package.json || "$file" == Cargo.toml || \ + "$file" == go.mod || "$file" == pyproject.toml || "$file" == build.gradle || \ + "$file" == .github/workflows/*.yml || "$file" == .github/workflows/*.yaml || \ + "$file" == Dockerfile* || "$file" == docker-compose*.yml || \ + "$file" == **/terraform/**/*.tf || "$file" == **/infra/**/*.tf ]]; then + IMPACT_HIGH=true + # Medium impact: source code files + elif [[ "$file" == src/**/*.cs || "$file" == src/**/*.ts || "$file" == src/**/*.tsx || \ + "$file" == src/**/*.py || "$file" == src/**/*.rs || "$file" == src/**/*.go || \ + "$file" == lib/**/*.* || "$file" == packages/**/*.* ]]; then + IMPACT_MEDIUM=true + fi +done <<< "$CHANGED_FILES" + +# --------------------------------------------------------------------------- +# Count changed files +# --------------------------------------------------------------------------- + +CHANGED_COUNT=$(echo "$CHANGED_FILES" | wc -l | tr -d ' ') + +if [[ "$CHANGED_COUNT" -gt 50 ]]; then + IMPACT_HIGH=true +fi + +# --------------------------------------------------------------------------- +# Check if documentation already exists for this branch/PR +# --------------------------------------------------------------------------- + +# Count history docs that have been staged or added in this branch +HISTORY_DOCS=0 +if [[ -n "${GITHUB_BASE_REF:-}" ]]; then + HISTORY_DOCS=$(git diff --name-only "origin/${GITHUB_BASE_REF}" HEAD -- 'docs/history/**/*.md' 2>/dev/null | grep -v 'README\.md\|TEMPLATE-' | wc -l | tr -d ' ' || echo 0) +else + HISTORY_DOCS=$(git diff --cached --name-only -- 'docs/history/*.md' 'docs/history/**/*.md' 2>/dev/null | grep -v 'README\.md\|TEMPLATE-' | wc -l | tr -d ' ' || echo 0) +fi + +# --------------------------------------------------------------------------- +# Output assessment +# --------------------------------------------------------------------------- + +if [[ "$IMPACT_HIGH" == true ]]; then + echo "⚠️ HIGH IMPACT change detected — documentation required" + echo " Changed files: $CHANGED_COUNT" + if [[ "$HISTORY_DOCS" -gt 0 ]]; then + echo "✅ Documentation found ($HISTORY_DOCS new doc(s) in docs/history/)" + exit 0 + else + echo " Run: ./scripts/create-doc.sh <type> \"<title>\" <pr-number>" + echo " See: docs/engineering/06_pr_documentation.md" + if [[ "$STRICT" == "true" ]]; then + exit 1 + fi + fi +elif [[ "$IMPACT_MEDIUM" == true ]]; then + echo "ℹ️ MEDIUM IMPACT change detected — documentation recommended" + echo " Run: ./scripts/create-doc.sh <type> \"<title>\" <pr-number>" +else + echo "✅ LOW IMPACT change — documentation optional" +fi + +exit 0 diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/consolidate-branches.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/consolidate-branches.sh new file mode 100644 index 00000000..9aa9b746 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/consolidate-branches.sh @@ -0,0 +1,289 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# ============================================================================= +# consolidate-branches.sh — Merge all unmerged feature branches into one +# ============================================================================= +# Usage: scripts/consolidate-branches.sh [base-branch] [--dry-run] [--skip=branch1,branch2] +# +# Discovers all local and remote branches not yet merged into <base-branch>, +# filters out protected branches, and merges them one by one into the current +# branch. Uses resolve-merge.sh for auto-resolution of generated files. +# +# Arguments: +# base-branch Branch to check "merged" status against (default: main) +# --dry-run List branches that would be merged without doing anything +# --skip=X,Y Comma-separated list of branch names to skip +# +# Examples: +# scripts/consolidate-branches.sh # merge all into current +# scripts/consolidate-branches.sh dev --dry-run # preview what would merge +# scripts/consolidate-branches.sh main --skip=wip/experiment +# ============================================================================= +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# Colours (disabled when piped) +if [ -t 1 ]; then + GREEN='\033[0;32m' + YELLOW='\033[1;33m' + RED='\033[0;31m' + CYAN='\033[0;36m' + BOLD='\033[1m' + NC='\033[0m' +else + GREEN='' YELLOW='' RED='' CYAN='' BOLD='' NC='' +fi + +info() { echo -e "${CYAN}[info]${NC} $*"; } +ok() { echo -e "${GREEN}[ok]${NC} $*"; } +warn() { echo -e "${YELLOW}[warn]${NC} $*"; } +err() { echo -e "${RED}[error]${NC} $*"; } + +# --------------------------------------------------------------------------- +# Parse arguments +# --------------------------------------------------------------------------- +BASE_BRANCH="main" +DRY_RUN=false +SKIP_BRANCHES="" + +for arg in "$@"; do + case "$arg" in + --dry-run) DRY_RUN=true ;; + --skip=*) SKIP_BRANCHES="${arg#--skip=}" ;; + -*) err "Unknown flag: $arg"; exit 1 ;; + *) BASE_BRANCH="$arg" ;; + esac +done + +cd "$REPO_ROOT" + +CURRENT_BRANCH="$(git branch --show-current)" +if [ -z "$CURRENT_BRANCH" ]; then + err "Not on a branch (detached HEAD). Checkout a branch first." + exit 1 +fi + +# --------------------------------------------------------------------------- +# Protected branches — never auto-merge these +# --------------------------------------------------------------------------- +PROTECTED_BRANCHES="main master develop release" + +is_protected() { + local branch="$1" + for p in $PROTECTED_BRANCHES; do + [ "$branch" = "$p" ] && return 0 + done + return 1 +} + +is_skipped() { + local branch="$1" + if [ -n "$SKIP_BRANCHES" ]; then + IFS=',' read -ra SKIPS <<< "$SKIP_BRANCHES" + for s in "${SKIPS[@]}"; do + [ "$branch" = "$s" ] && return 0 + done + fi + return 1 +} + +# --------------------------------------------------------------------------- +# 1. Fetch all remotes +# --------------------------------------------------------------------------- +info "Fetching all remotes..." +git fetch --all --prune 2>/dev/null || warn "Fetch failed — continuing with local state" + +# --------------------------------------------------------------------------- +# 2. Discover unmerged branches +# --------------------------------------------------------------------------- +info "Finding branches not merged into ${BASE_BRANCH}..." + +# Get all remote branches not merged into base +UNMERGED=() +while IFS= read -r ref; do + [ -z "$ref" ] && continue + # Strip 'origin/' prefix for display + branch="${ref#origin/}" + + # Skip current branch, base branch, HEAD pointer + [ "$branch" = "$CURRENT_BRANCH" ] && continue + [ "$branch" = "$BASE_BRANCH" ] && continue + [ "$branch" = "HEAD" ] && continue + + # Skip protected branches + is_protected "$branch" && continue + + # Skip user-specified branches + is_skipped "$branch" && continue + + UNMERGED+=("$branch") +done < <(git branch -r --no-merged "origin/${BASE_BRANCH}" 2>/dev/null | sed 's/^[* ]*//' | sort) + +# Also check local-only branches (not on remote) +while IFS= read -r branch; do + [ -z "$branch" ] && continue + [ "$branch" = "$CURRENT_BRANCH" ] && continue + [ "$branch" = "$BASE_BRANCH" ] && continue + is_protected "$branch" && continue + is_skipped "$branch" && continue + + # Check if already in UNMERGED list + already=false + for u in "${UNMERGED[@]+"${UNMERGED[@]}"}"; do + [ "$u" = "$branch" ] && already=true && break + done + $already && continue + + UNMERGED+=("$branch") +done < <(git branch --no-merged "$BASE_BRANCH" 2>/dev/null | sed 's/^[* ]*//' | sort) + +if [ ${#UNMERGED[@]} -eq 0 ]; then + ok "No unmerged branches found. Everything is up to date with ${BASE_BRANCH}." + exit 0 +fi + +# --------------------------------------------------------------------------- +# 3. Display plan +# --------------------------------------------------------------------------- +echo "" +echo -e "${BOLD}Branch Consolidation Plan${NC}" +echo -e "${BOLD}========================${NC}" +echo "" +echo -e " Current branch: ${GREEN}${CURRENT_BRANCH}${NC}" +echo -e " Base branch: ${CYAN}${BASE_BRANCH}${NC}" +echo -e " Branches to merge: ${#UNMERGED[@]}" +echo "" + +for i in "${!UNMERGED[@]}"; do + branch="${UNMERGED[$i]}" + # Get commit count ahead of base + ahead=$(git rev-list --count "origin/${BASE_BRANCH}..origin/${branch}" 2>/dev/null || echo "?") + echo -e " $((i + 1)). ${YELLOW}${branch}${NC} (${ahead} commits ahead)" +done + +echo "" + +if $DRY_RUN; then + info "Dry run — no changes made." + exit 0 +fi + +# --------------------------------------------------------------------------- +# 4. Merge each branch +# --------------------------------------------------------------------------- +MERGED=() +FAILED=() +SKIPPED_DIRTY=() + +for branch in "${UNMERGED[@]}"; do + echo "" + echo -e "${BOLD}─────────────────────────────────────────${NC}" + info "Merging ${branch} ($(( ${#MERGED[@]} + ${#FAILED[@]} + 1 ))/${#UNMERGED[@]})..." + + # Check for uncommitted changes before each merge + if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then + warn "Uncommitted changes detected. Stashing before merge..." + git stash push -m "consolidate-branches: before merging ${branch}" 2>/dev/null + fi + + # Try merging from remote first, fall back to local + merge_ref="origin/${branch}" + if ! git rev-parse --verify "$merge_ref" &>/dev/null; then + merge_ref="$branch" + fi + + merge_output=$(git merge "$merge_ref" --no-edit 2>&1) && { + ok "Merged ${branch} cleanly." + MERGED+=("$branch") + continue + } + + # Check if it's a conflict or other error + if echo "$merge_output" | grep -qF "CONFLICT"; then + warn "Conflicts merging ${branch}. Attempting auto-resolution..." + + # Use resolve-merge logic inline (auto-resolve generated files) + auto_resolved=0 + while IFS= read -r file; do + [ -z "$file" ] && continue + case "$file" in + .claude/*|.cursor/*|.windsurf/*|.roo/*|.clinerules/*|.github/instructions/*|\ + .github/copilot-instructions.md|.github/PULL_REQUEST_TEMPLATE.md|\ + .github/agents/*|.github/chatmodes/*|.github/prompts/*|\ + .agents/*|.gemini/*|docs/*/README.md|scripts/*.sh|scripts/*.ps1|\ + AGENTS.md|UNIFIED_AGENT_TEAMS.md|COMMAND_GUIDE.md|QUALITY_GATES.md|\ + RUNBOOK_AI.md|CONTRIBUTING.md) + git checkout --theirs -- "$file" 2>/dev/null && git add "$file" 2>/dev/null + ok " Auto-resolved: $file" + auto_resolved=$((auto_resolved + 1)) + ;; + pnpm-lock.yaml|.agentkit/pnpm-lock.yaml|package-lock.json|yarn.lock|.agentkit/yarn.lock) + git checkout --theirs -- "$file" 2>/dev/null && git add "$file" 2>/dev/null + ok " Auto-resolved (lockfile): $file" + auto_resolved=$((auto_resolved + 1)) + ;; + esac + done < <(git diff --name-only --diff-filter=U 2>/dev/null) + + # Check if any conflicts remain + remaining=$(git diff --name-only --diff-filter=U 2>/dev/null || true) + if [ -z "$remaining" ]; then + git commit --no-edit 2>/dev/null + ok "Merged ${branch} (${auto_resolved} auto-resolved)." + MERGED+=("$branch") + else + err "Unresolved conflicts merging ${branch}:" + echo "$remaining" | while IFS= read -r f; do + echo -e " ${RED}✗${NC} $f" + done + warn "Aborting merge of ${branch}. Resolve manually or re-run with --skip=${branch}" + git merge --abort 2>/dev/null || true + FAILED+=("$branch") + fi + else + err "Merge of ${branch} failed (not a conflict):" + echo " $merge_output" + git merge --abort 2>/dev/null || true + FAILED+=("$branch") + fi +done + +# --------------------------------------------------------------------------- +# 5. Summary +# --------------------------------------------------------------------------- +echo "" +echo -e "${BOLD}═══════════════════════════════════════════${NC}" +echo -e "${BOLD}Consolidation Summary${NC}" +echo -e "${BOLD}═══════════════════════════════════════════${NC}" +echo "" +echo -e " ${GREEN}Merged:${NC} ${#MERGED[@]}/${#UNMERGED[@]}" + +if [ ${#MERGED[@]} -gt 0 ]; then + for b in "${MERGED[@]}"; do + echo -e " ${GREEN}✓${NC} $b" + done +fi + +if [ ${#FAILED[@]} -gt 0 ]; then + echo "" + echo -e " ${RED}Failed:${NC} ${#FAILED[@]}/${#UNMERGED[@]}" + for b in "${FAILED[@]}"; do + echo -e " ${RED}✗${NC} $b" + done + echo "" + warn "Re-run with: scripts/consolidate-branches.sh ${BASE_BRANCH} --skip=$(IFS=,; echo "${MERGED[*]}")" +fi + +echo "" +if [ ${#MERGED[@]} -gt 0 ]; then + info "Next steps:" + echo " 1. Run: pnpm -C .agentkit agentkit:sync" + echo " 2. Run: pnpm test" + echo " 3. Review with: git log --oneline -20" +fi + +exit ${#FAILED[@]} diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/create-doc.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/create-doc.sh new file mode 100644 index 00000000..318e7fe7 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/create-doc.sh @@ -0,0 +1,170 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/create-doc.sh +# Creates a new history document from the appropriate template. +# +# Usage: +# ./scripts/create-doc.sh <type> "<title>" [pr-number] +# +# Arguments: +# type Document type: implementation | bugfix | feature | migration +# title Human-readable title for the document +# pr-number Optional PR number to include in the document +# +# Examples: +# ./scripts/create-doc.sh implementation "TreatWarningsAsErrors" 42 +# ./scripts/create-doc.sh bugfix "Null Reference in Auth" 43 +# ./scripts/create-doc.sh feature "User Authentication" 44 +# ./scripts/create-doc.sh migration "Upgrade to Node 22" 45 + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HISTORY_DIR="$REPO_ROOT/docs/history" +INDEX_FILE="$HISTORY_DIR/.index.json" + +# --------------------------------------------------------------------------- +# Argument validation +# --------------------------------------------------------------------------- + +usage() { + echo "Usage: $0 <type> \"<title>\" [pr-number]" + echo " type: implementation | bugfix | feature | migration | issue | lesson" + exit 1 +} + +if [[ $# -lt 2 ]]; then + usage +fi + +TYPE="$1" +TITLE="$2" +PR_NUMBER="${3:-}" + +case "$TYPE" in + implementation|bugfix|feature|migration|issue|lesson) ;; + *) echo "Error: unknown type '$TYPE'. Must be one of: implementation, bugfix, feature, migration, issue, lesson"; exit 1 ;; +esac + +# --------------------------------------------------------------------------- +# Determine subdirectory from type +# --------------------------------------------------------------------------- + +case "$TYPE" in + implementation) SUBDIR="implementations" ;; + bugfix) SUBDIR="bug-fixes" ;; + feature) SUBDIR="features" ;; + migration) SUBDIR="migrations" ;; + issue) SUBDIR="issues" ;; + lesson) SUBDIR="lessons-learned" ;; +esac + +# --------------------------------------------------------------------------- +# Read and update the sequential index +# --------------------------------------------------------------------------- + +if [[ ! -f "$INDEX_FILE" ]]; then + echo '{"sequences":{"implementation":1,"bugfix":1,"feature":1,"migration":1,"issue":1,"lesson":1},"entries":[]}' > "$INDEX_FILE" +fi + +# Use node to read the current sequence number safely (no user input interpolated) +SEQ_NUM=$(node - "$INDEX_FILE" "$TYPE" << 'NODEEOF' + const [,, indexFile, type] = process.argv; + const fs = require('fs'); + const idx = JSON.parse(fs.readFileSync(indexFile, 'utf8')); + process.stdout.write(String(idx.sequences[type] || 1)); +NODEEOF +) + +PADDED=$(printf "%04d" "$SEQ_NUM") +DATE=$(date +%Y-%m-%d) + +# Sanitize title: lowercase, spaces to hyphens, remove non-alphanumeric except hyphens +SLUG=$(echo "$TITLE" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | sed 's/-\+/-/g' | sed 's/^-\|-$//g') + +FILENAME="${PADDED}-${DATE}-${SLUG}-${TYPE}.md" +DEST_DIR="$HISTORY_DIR/$SUBDIR" +DEST_FILE="$DEST_DIR/$FILENAME" + +mkdir -p "$DEST_DIR" + +# --------------------------------------------------------------------------- +# Copy template and substitute placeholders +# --------------------------------------------------------------------------- + +TEMPLATE_SRC="$REPO_ROOT/.agentkit/templates/docs/history/$SUBDIR/TEMPLATE-${TYPE}.md" + +if [[ ! -f "$TEMPLATE_SRC" ]]; then + echo "Error: template not found at $TEMPLATE_SRC" + exit 1 +fi + +PR_REF="${PR_NUMBER:+#${PR_NUMBER}}" + +# Perform literal replacements using Node.js to avoid sed injection +TITLE_VAL="$TITLE" DATE_VAL="$DATE" PR_REF_VAL="${PR_REF:-[#PR-Number]}" \ +node - "$TEMPLATE_SRC" "$DEST_FILE" << 'NODEEOF' + const fs = require('fs'); + const [,, src, dest] = process.argv; + let content = fs.readFileSync(src, 'utf8'); + + const replacements = { + '[Feature/Change Name]': process.env.TITLE_VAL, + '[Bug Description]': process.env.TITLE_VAL, + '[Feature Name]': process.env.TITLE_VAL, + '[Migration Name]': process.env.TITLE_VAL, + '[Issue Title]': process.env.TITLE_VAL, + '[Lesson Title]': process.env.TITLE_VAL, + '[YYYY-MM-DD]': process.env.DATE_VAL, + '[#PR-Number]': process.env.PR_REF_VAL + }; + + for (const [placeholder, value] of Object.entries(replacements)) { + content = content.split(placeholder).join(value); + } + + fs.writeFileSync(dest, content, 'utf8'); +NODEEOF + +# --------------------------------------------------------------------------- +# Update index +# --------------------------------------------------------------------------- + +node - "$INDEX_FILE" "$TYPE" "$SEQ_NUM" "$TITLE" "$DATE" "${PR_NUMBER:-}" "$SUBDIR/$FILENAME" << 'NODEEOF' + const [,, indexFile, type, seqNum, title, date, pr, file] = process.argv; + const fs = require('fs'); + const idx = JSON.parse(fs.readFileSync(indexFile, 'utf8')); + idx.sequences[type] = (idx.sequences[type] || 1) + 1; + idx.entries = idx.entries || []; + idx.entries.push({ number: Number(seqNum), type, title, date, pr, file }); + fs.writeFileSync(indexFile, JSON.stringify(idx, null, 2) + '\n'); +NODEEOF + +echo "Created: $DEST_FILE" + +# --------------------------------------------------------------------------- +# Update CHANGELOG.md +# --------------------------------------------------------------------------- + +# Map history doc type to changelog section +case "$TYPE" in + feature) CHANGELOG_SECTION="Added" ;; + implementation) CHANGELOG_SECTION="Added" ;; + bugfix) CHANGELOG_SECTION="Fixed" ;; + migration) CHANGELOG_SECTION="Changed" ;; + issue) CHANGELOG_SECTION="" ;; # Issues don't go in changelog + lesson) CHANGELOG_SECTION="" ;; # Lessons don't go in changelog +esac + +UPDATE_CHANGELOG="$SCRIPT_DIR/update-changelog.sh" +if [[ -z "$CHANGELOG_SECTION" ]]; then + echo "ℹ️ ${TYPE} records are not added to CHANGELOG.md — skipping changelog update." +elif [[ -f "$UPDATE_CHANGELOG" ]]; then + bash "$UPDATE_CHANGELOG" "$CHANGELOG_SECTION" "$TITLE" "${PR_NUMBER:-}" "$SUBDIR/$FILENAME" || \ + echo "⚠️ Could not update CHANGELOG.md — please add the entry manually." +else + echo "ℹ️ update-changelog.sh not found — skipping changelog update." +fi diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/resolve-merge.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/resolve-merge.sh new file mode 100644 index 00000000..a3daecff --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/resolve-merge.sh @@ -0,0 +1,162 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# ============================================================================= +# resolve-merge.sh — Apply standard merge conflict resolutions +# ============================================================================= +# Usage: scripts/resolve-merge.sh [target-branch] +# +# Merges origin/<target-branch> into the current branch and auto-resolves +# generated/framework-managed files per the AgentKit merge resolution matrix. +# Remaining conflicts (engine source, spec files) are listed for manual review. +# ============================================================================= +set -euo pipefail + +TARGET="${1:-main}" +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# Colours (disabled when piped) +if [ -t 1 ]; then + GREEN='\033[0;32m' + YELLOW='\033[1;33m' + RED='\033[0;31m' + CYAN='\033[0;36m' + NC='\033[0m' +else + GREEN='' YELLOW='' RED='' CYAN='' NC='' +fi + +info() { echo -e "${CYAN}[info]${NC} $*"; } +ok() { echo -e "${GREEN}[ok]${NC} $*"; } +warn() { echo -e "${YELLOW}[warn]${NC} $*"; } +err() { echo -e "${RED}[error]${NC} $*"; } + +cd "$REPO_ROOT" + +# --------------------------------------------------------------------------- +# 1. Fetch and attempt merge +# --------------------------------------------------------------------------- +info "Fetching origin/${TARGET}..." +git fetch origin "$TARGET" 2>/dev/null || { + err "Failed to fetch origin/${TARGET}. Check your remote." + exit 1 +} + +CURRENT_BRANCH="$(git branch --show-current)" +info "Merging origin/${TARGET} into ${CURRENT_BRANCH}..." + +merge_output=$(git merge "origin/${TARGET}" --no-edit 2>&1) && { + ok "Merge completed cleanly — no conflicts." + exit 0 +} + +# Distinguish real merge conflicts from other failures +if ! echo "$merge_output" | grep -qF "CONFLICT"; then + err "Merge failed for a reason other than conflicts:" + echo "$merge_output" + exit 1 +fi + +info "Merge conflicts detected. Applying resolution matrix..." + +# --------------------------------------------------------------------------- +# 2. Auto-resolve generated files (KEEP_THEIRS — accept upstream) +# --------------------------------------------------------------------------- +GENERATED_PATTERNS=( + '.agents/skills/*/SKILL.md' + '.github/agents/*.agent.md' + '.github/chatmodes/*.chatmode.md' + '.github/prompts/*.prompt.md' + 'docs/*/README.md' + '.github/copilot-instructions.md' + '.github/PULL_REQUEST_TEMPLATE.md' +) + +auto_resolved=0 +for pattern in "${GENERATED_PATTERNS[@]}"; do + # Find conflicted files matching this pattern + while IFS= read -r file; do + [ -z "$file" ] && continue + if git checkout --theirs -- "$file" 2>/dev/null; then + git add "$file" 2>/dev/null + ok "Auto-resolved (accept upstream): $file" + auto_resolved=$((auto_resolved + 1)) + fi + done < <(git diff --name-only --diff-filter=U | grep -E "$pattern" 2>/dev/null || true) +done + +# --------------------------------------------------------------------------- +# 3. Auto-resolve lockfiles (KEEP_THEIRS — accept upstream, regenerate later) +# --------------------------------------------------------------------------- +LOCKFILE_PATTERNS=( + 'pnpm-lock.yaml' + '.agentkit/pnpm-lock.yaml' + 'package-lock.json' + '.agentkit/package-lock.json' +) + +for lockfile in "${LOCKFILE_PATTERNS[@]}"; do + if git diff --name-only --diff-filter=U | grep -qx "$lockfile" 2>/dev/null; then + if git checkout --theirs -- "$lockfile" 2>/dev/null; then + git add "$lockfile" 2>/dev/null + ok "Auto-resolved (accept upstream): $lockfile" + auto_resolved=$((auto_resolved + 1)) + fi + fi +done + +# --------------------------------------------------------------------------- +# 4. Auto-resolve generated config (KEEP_THEIRS) +# --------------------------------------------------------------------------- +GENERATED_CONFIGS=( + '.gemini/config.yaml' +) + +for config in "${GENERATED_CONFIGS[@]}"; do + if git diff --name-only --diff-filter=U | grep -qx "$config" 2>/dev/null; then + if git checkout --theirs -- "$config" 2>/dev/null; then + git add "$config" 2>/dev/null + ok "Auto-resolved (accept upstream): $config" + auto_resolved=$((auto_resolved + 1)) + fi + fi +done + +# --------------------------------------------------------------------------- +# 5. Report remaining conflicts +# --------------------------------------------------------------------------- +REMAINING="$(git diff --name-only --diff-filter=U 2>/dev/null || true)" + +echo "" +info "Auto-resolved: ${auto_resolved} file(s)" + +if [ -n "$REMAINING" ]; then + echo "" + warn "Manual merge required for the following file(s):" + echo "" + while IFS= read -r file; do + [ -z "$file" ] && continue + # Categorise for the developer + case "$file" in + .agentkit/engines/*) echo -e " ${RED}[engine]${NC} $file — semantic merge required (runtime logic)" ;; + .agentkit/spec/*) echo -e " ${YELLOW}[spec]${NC} $file — preserve both intents" ;; + *) echo -e " ${CYAN}[source]${NC} $file" ;; + esac + done <<< "$REMAINING" + echo "" + info "Resolve the files above, then run: git add -A && git commit" + exit 1 +else + ok "All conflicts resolved automatically." + info "Committing merge..." + git commit --no-edit + ok "Merge committed successfully." + + # Suggest lockfile regeneration + if git diff --name-only "HEAD~1..HEAD" | grep -q "lock\.\(yaml\|json\)$" 2>/dev/null; then + echo "" + warn "Lockfiles were updated. Consider running: pnpm install" + fi +fi diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/setup-agentkit-branch-governance.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/setup-agentkit-branch-governance.sh new file mode 100644 index 00000000..f955e11b --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/setup-agentkit-branch-governance.sh @@ -0,0 +1,128 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +set -euo pipefail + +REPO="" +DRY_RUN=false +SKIP_DEFAULT_BRANCH=false +SKIP_PROTECTION=false + +while [[ $# -gt 0 ]]; do + case "$1" in + --repo) + if [[ $# -lt 2 || -z "${2:-}" || "${2:-}" == -* ]]; then + echo "Error: --repo requires a value in the form owner/name" + exit 1 + fi + REPO="$2" + shift 2 + ;; + --dry-run) + DRY_RUN=true + shift + ;; + --skip-default-branch) + SKIP_DEFAULT_BRANCH=true + shift + ;; + --skip-protection) + SKIP_PROTECTION=true + shift + ;; + --help|-h) + echo "Usage: $(basename "$0") [--repo owner/name] [--dry-run] [--skip-default-branch] [--skip-protection]" + exit 0 + ;; + *) + echo "Unknown option: $1" + exit 1 + ;; + esac +done + +if ! command -v gh >/dev/null 2>&1; then + echo "gh CLI is not installed. Install from https://cli.github.com/" + exit 1 +fi + +if ! gh auth status >/dev/null 2>&1; then + echo "gh CLI is not authenticated. Run 'gh auth login' first." + exit 1 +fi + +if [[ -z "$REPO" ]]; then + REPO=$(gh repo view --json nameWithOwner -q '.nameWithOwner' 2>/dev/null || true) +fi + +if [[ -z "$REPO" ]]; then + echo "Could not determine repository. Pass --repo <owner/name>." + exit 1 +fi + +echo "=== AgentKit Branch Governance Setup ===" +echo "Repository: $REPO" +echo "DryRun: $DRY_RUN" +echo + +if [[ "$SKIP_DEFAULT_BRANCH" == false ]]; then + if [[ "$DRY_RUN" == true ]]; then + echo "[dry-run] Would set default branch to 'main' for $REPO" + else + gh api --method PATCH "/repos/$REPO" -f default_branch='main' >/dev/null + echo "Default branch set to 'main'." + fi +fi + +PAYLOAD=$(cat <<'JSON' +{ + "required_status_checks": { + "strict": true, + "contexts": [ + "Test", + "Validate", + "Branch Protection / branch-rules" + ] + }, + "enforce_admins": false, + "required_pull_request_reviews": { + "required_approving_review_count": 1, + "dismiss_stale_reviews": true, + "require_code_owner_reviews": true, + "require_last_push_approval": false + }, + "restrictions": null, + "required_linear_history": true, + "allow_force_pushes": false, + "allow_deletions": false, + "block_creations": false, + "required_conversation_resolution": true +} +JSON +) + +if [[ "$SKIP_PROTECTION" == false ]]; then + # Deduplicate: if defaultBranch is 'main', don't apply twice + for BRANCH in $(echo "main main" | tr ' ' '\n' | awk '!seen[$0]++'); do + # Skip if the branch does not exist on the remote + if ! gh api "/repos/$REPO/branches/$BRANCH" --silent 2>/dev/null; then + echo "[skip] Branch '$BRANCH' does not exist on $REPO — skipping protection." + continue + fi + + if [[ "$DRY_RUN" == true ]]; then + echo "[dry-run] Would apply branch protection to $REPO/$BRANCH" + continue + fi + + gh api --method PUT "/repos/$REPO/branches/$BRANCH/protection" --input - <<< "$PAYLOAD" >/dev/null + echo "Branch protection applied to $BRANCH." + done +fi + +echo +echo "Done." +for BRANCH in $(echo "main main" | tr ' ' '\n' | awk '!seen[$0]++'); do + echo "Verify with: gh api /repos/$REPO/branches/$BRANCH/protection" +done diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/sync-issues.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/sync-issues.sh new file mode 100644 index 00000000..9ace772a --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/sync-issues.sh @@ -0,0 +1,180 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/sync-issues.sh +# Syncs local issue docs (docs/history/issues/) to GitHub Issues. +# +# Local issue markdown files that have "gh_synced: false" are candidates for +# sync. In dry-run mode (default) the script prints what would be created. +# With --apply it creates GitHub Issues via `gh` and stamps the file with the +# resulting issue number. +# +# Usage: +# ./scripts/sync-issues.sh # Dry-run — preview only +# ./scripts/sync-issues.sh --apply # Create GitHub Issues +# ./scripts/sync-issues.sh --apply --label "from-local" # Add extra label +# +# Requirements: +# - gh CLI installed and authenticated +# - Current directory inside the git repository + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +ISSUES_DIR="$REPO_ROOT/docs/history/issues" + +APPLY=false +EXTRA_LABEL="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --apply) APPLY=true; shift ;; + --label) + [[ $# -ge 2 ]] || { echo "Error: --label requires a value"; exit 1; } + EXTRA_LABEL="$2"; shift 2 ;; + -h|--help) + echo "Usage: $0 [--apply] [--label <label>]" + echo " --apply Create GitHub Issues (default is dry-run)" + echo " --label Extra label to add to created issues" + exit 0 + ;; + *) echo "Unknown option: $1"; exit 1 ;; + esac +done + +# --------------------------------------------------------------------------- +# Preflight checks (only needed when actually creating issues) +# --------------------------------------------------------------------------- + +if [[ "$APPLY" == true ]]; then + if ! command -v gh &>/dev/null; then + echo "Error: gh CLI is not installed. Install it from https://cli.github.com/" + exit 1 + fi + + if ! gh auth status &>/dev/null; then + echo "Error: gh is not authenticated. Run 'gh auth login' first." + exit 1 + fi +fi + +# --------------------------------------------------------------------------- +# Discover unsynced issue files +# --------------------------------------------------------------------------- + +CANDIDATES=0 +SKIPPED=0 +FAILED=0 + +# Glob matches the enforced naming convention: XXXX-YYYY-MM-DD-slug-issue.md +# Files created outside create-doc.sh without the -issue suffix are not picked up. +for issue_file in "$ISSUES_DIR"/*-issue.md; do + [[ -f "$issue_file" ]] || continue + + basename_file="$(basename "$issue_file")" + + # Skip templates + if [[ "$basename_file" == TEMPLATE-* ]]; then + continue + fi + + # Check sync status + if ! grep -q 'gh_synced.*false' "$issue_file" 2>/dev/null; then + SKIPPED=$((SKIPPED + 1)) + continue + fi + + # Extract title from first H1 (|| true prevents set -e exit on no match) + TITLE="$(grep -m1 '^# ' "$issue_file" | sed 's/^# //' | sed 's/ - Issue Record$//')" || true + if [[ -z "$TITLE" ]]; then + TITLE="$basename_file" + fi + + # Extract severity for labeling + SEVERITY="$(grep -m1 '^\*\*Severity\*\*:' "$issue_file" | sed 's/.*: *//' | tr '[:upper:]' '[:lower:]')" || true + if [[ -z "$SEVERITY" ]]; then + echo " [warn] No severity found in $basename_file — defaulting to unlabelled" + fi + + # Extract summary section as the issue body + BODY="$(sed -n '/^## Summary$/,/^## /{/^## Summary$/d;/^## /d;p}' "$issue_file" | sed '/^$/N;/^\n$/d')" + if [[ -z "$BODY" ]]; then + echo " [warn] No ## Summary section found in $basename_file — using fallback body" + BODY="Synced from local issue doc: $basename_file" + fi + + # Append a link back to the local file + BODY="$BODY + +--- +_Synced from \`docs/history/issues/$basename_file\`_" + + # Build labels + LABELS="synced-from-local" + if [[ -n "$SEVERITY" && "$SEVERITY" != *"["* ]]; then + LABELS="$LABELS,severity:$SEVERITY" + fi + if [[ -n "$EXTRA_LABEL" ]]; then + LABELS="$LABELS,$EXTRA_LABEL" + fi + + if [[ "$APPLY" == false ]]; then + echo "[dry-run] Would create issue: \"$TITLE\"" + echo " Labels: $LABELS" + echo " Source: $basename_file" + echo "" + CANDIDATES=$((CANDIDATES + 1)) + continue + fi + + # Create the GitHub Issue — capture stderr separately so it can be surfaced + # on failure without polluting the URL on success. + echo "Creating issue: \"$TITLE\" ..." + GH_STDERR_FILE="$(mktemp)" + ISSUE_URL="$(gh issue create \ + --title "$TITLE" \ + --body "$BODY" \ + --label "$LABELS" 2>"$GH_STDERR_FILE")" || { + echo " FAILED to create issue: \"$TITLE\"" + echo " gh stderr: $(cat "$GH_STDERR_FILE")" + rm -f "$GH_STDERR_FILE" + FAILED=$((FAILED + 1)) + continue + } + rm -f "$GH_STDERR_FILE" + + # Extract issue number from URL (https://github.com/owner/repo/issues/123) + ISSUE_NUMBER="${ISSUE_URL##*/}" + if [[ ! "$ISSUE_NUMBER" =~ ^[0-9]+$ ]]; then + ISSUE_NUMBER="$(echo "$ISSUE_URL" | grep -oE '[0-9]+$')" || true + [[ -z "$ISSUE_NUMBER" ]] && ISSUE_NUMBER="unknown" + fi + + echo " Created: $ISSUE_URL (#$ISSUE_NUMBER)" + + # Stamp the local file with sync metadata (portable: temp file instead of sed -i). + SYNC_DATE="$(date +%Y-%m-%d)" + TMPFILE="$(mktemp)" + sed \ + -e "s/^\(- \*\*gh_synced\*\*:\) .*/\1 true/" \ + -e "s/^\(- \*\*gh_issue_number\*\*:\) .*/\1 #$ISSUE_NUMBER/" \ + -e "s/^\(- \*\*gh_synced_at\*\*:\) .*/\1 $SYNC_DATE/" \ + -e "s|\(- \*\*Issue tracker\*\*:\) \[GitHub Issue.*\]|\1 $ISSUE_URL|" \ + "$issue_file" > "$TMPFILE" && mv "$TMPFILE" "$issue_file" + + CANDIDATES=$((CANDIDATES + 1)) +done + +# --------------------------------------------------------------------------- +# Summary +# --------------------------------------------------------------------------- + +echo "---" +if [[ "$APPLY" == false ]]; then + echo "Dry-run complete. $CANDIDATES issue(s) would be created, $SKIPPED already synced." + echo "Run with --apply to create GitHub Issues." +else + echo "Sync complete. $CANDIDATES created, $SKIPPED already synced, $FAILED failed." +fi diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/sync-split-pr.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/sync-split-pr.sh new file mode 100644 index 00000000..1bbf61ac --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/sync-split-pr.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +set -euo pipefail + +BASE_BRANCH="" +NEW_BRANCH="" +COMMIT_MESSAGE="chore(sync): regenerate generated outputs" +PR_TITLE="chore(sync): regenerate generated outputs" +DRY_RUN=0 + +while [[ $# -gt 0 ]]; do + case "$1" in + --base) + BASE_BRANCH="${2:-}" + shift 2 + ;; + --branch) + NEW_BRANCH="${2:-}" + shift 2 + ;; + --commit-message) + COMMIT_MESSAGE="${2:-}" + shift 2 + ;; + --pr-title) + PR_TITLE="${2:-}" + shift 2 + ;; + --dry-run) + DRY_RUN=1 + shift + ;; + -h|--help) + cat <<'EOF' +Usage: scripts/sync-split-pr.sh [options] + +Creates a dedicated branch + commit + PR for files produced by `agentkit:sync`. + +Options: + --base <branch> PR base branch (default: current branch) + --branch <name> Branch name for sync commit (default: chore/sync-generated-<utc>) + --commit-message <msg> Commit message + --pr-title <title> PR title + --dry-run Run sync and report changes without creating branch/commit/PR + -h, --help Show help +EOF + exit 0 + ;; + *) + echo "Unknown option: $1" >&2 + exit 1 + ;; + esac +done + +if [[ -n "$(git status --porcelain)" ]]; then + echo "Working tree is not clean. Commit/stash/discard changes before running sync split." >&2 + exit 1 +fi + +CURRENT_BRANCH="$(git branch --show-current)" +if [[ -z "$BASE_BRANCH" ]]; then + BASE_BRANCH="$CURRENT_BRANCH" +fi + +if [[ -z "$NEW_BRANCH" ]]; then + TS="$(date -u +%Y%m%d-%H%M%S)" + NEW_BRANCH="chore/sync-generated-$TS" +fi + +echo "Running sync..." +pnpm -C .agentkit agentkit:sync + +CHANGED_FILES="$(git status --porcelain)" +if [[ -z "$CHANGED_FILES" ]]; then + echo "No sync-generated changes detected." + mkdir -p .agentkit/logs + printf '{"timestamp":"%s","tool":"sync-split-pr","outcome":"no_changes","base":"%s","branch":"%s"}\n' \ + "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$BASE_BRANCH" "$CURRENT_BRANCH" >> .agentkit/logs/tool-usage.jsonl + exit 0 +fi + +FILES_COUNT="$(git status --porcelain | wc -l | tr -d ' ')" +echo "Detected $FILES_COUNT changed file(s) from sync." + +if [[ "$DRY_RUN" -eq 1 ]]; then + echo "Dry run enabled; not creating branch/commit/PR." + git status --short + mkdir -p .agentkit/logs + printf '{"timestamp":"%s","tool":"sync-split-pr","outcome":"dry_run","files":%s,"base":"%s","branch":"%s"}\n' \ + "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$FILES_COUNT" "$BASE_BRANCH" "$CURRENT_BRANCH" >> .agentkit/logs/tool-usage.jsonl + exit 0 +fi + +git checkout -b "$NEW_BRANCH" +git add -A +git commit -m "$COMMIT_MESSAGE" +git push -u origin "$NEW_BRANCH" + +PR_BODY="Automated sync-only PR. + +- Source branch: $CURRENT_BRANCH +- Sync command: pnpm -C .agentkit agentkit:sync +- Changed files: $FILES_COUNT" + +PR_URL="$(gh pr create --base "$BASE_BRANCH" --head "$NEW_BRANCH" --title "$PR_TITLE" --body "$PR_BODY")" +echo "Created PR: $PR_URL" + +mkdir -p .agentkit/logs +printf '{"timestamp":"%s","tool":"sync-split-pr","outcome":"pr_created","files":%s,"base":"%s","source":"%s","syncBranch":"%s","prUrl":"%s"}\n' \ + "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$FILES_COUNT" "$BASE_BRANCH" "$CURRENT_BRANCH" "$NEW_BRANCH" "$PR_URL" >> .agentkit/logs/tool-usage.jsonl diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/update-changelog.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/update-changelog.sh new file mode 100644 index 00000000..e5693e00 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/update-changelog.sh @@ -0,0 +1,122 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/update-changelog.sh +# Inserts an entry into the [Unreleased] section of CHANGELOG.md. +# +# Usage: +# ./scripts/update-changelog.sh <section> "<description>" [pr-number] [history-doc-path] +# +# Arguments: +# section Changelog section: Added | Fixed | Changed | Removed | Security | Deprecated +# description Human-readable description of the change +# pr-number Optional PR number (e.g. 42) +# history-doc-path Optional relative path to the history document +# +# Examples: +# ./scripts/update-changelog.sh Added "New user auth feature" 44 +# ./scripts/update-changelog.sh Fixed "Null reference in login flow" 43 \ +# "docs/history/bug-fixes/0001-2026-03-01-null-reference-bugfix.md" + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +CHANGELOG="$REPO_ROOT/CHANGELOG.md" + +# --------------------------------------------------------------------------- +# Argument validation +# --------------------------------------------------------------------------- + +usage() { + echo "Usage: $0 <section> \"<description>\" [pr-number] [history-doc-path]" + echo " section: Added | Fixed | Changed | Removed | Security | Deprecated" + exit 1 +} + +if [[ $# -lt 2 ]]; then + usage +fi + +SECTION="$1" +DESCRIPTION="$2" +PR_NUMBER="${3:-}" +HISTORY_DOC="${4:-}" + +case "$SECTION" in + Added|Fixed|Changed|Removed|Security|Deprecated) ;; + *) echo "Error: unknown section '$SECTION'. Must be one of: Added, Fixed, Changed, Removed, Security, Deprecated"; exit 1 ;; +esac + +if [[ ! -f "$CHANGELOG" ]]; then + echo "Error: CHANGELOG.md not found at $CHANGELOG" + exit 1 +fi + +# --------------------------------------------------------------------------- +# Build the entry line +# --------------------------------------------------------------------------- + +ENTRY="- $DESCRIPTION" + +if [[ -n "$PR_NUMBER" && -n "$HISTORY_DOC" ]]; then + ENTRY="$ENTRY ([#${PR_NUMBER}](../../pull/${PR_NUMBER}), [history](${HISTORY_DOC}))" +elif [[ -n "$PR_NUMBER" ]]; then + ENTRY="$ENTRY ([#${PR_NUMBER}](../../pull/${PR_NUMBER}))" +elif [[ -n "$HISTORY_DOC" ]]; then + ENTRY="$ENTRY ([history](${HISTORY_DOC}))" +fi + +# --------------------------------------------------------------------------- +# Insert entry into CHANGELOG.md using Node.js for reliable multiline editing +# --------------------------------------------------------------------------- + +node - "$CHANGELOG" "$SECTION" "$ENTRY" << 'NODEEOF' +const [,, changelogPath, section, entry] = process.argv; +const fs = require('fs'); +const content = fs.readFileSync(changelogPath, 'utf8'); +const lines = content.split('\n'); + +// Find the [Unreleased] section +const unreleasedIdx = lines.findIndex(l => /^## \[Unreleased\]/i.test(l)); +if (unreleasedIdx === -1) { + console.error('Error: could not find ## [Unreleased] section in CHANGELOG.md'); + process.exit(1); +} + +// Find or create the target ### section within [Unreleased] +// The [Unreleased] block ends at the next ## line +let blockEnd = lines.findIndex((l, i) => i > unreleasedIdx && /^## /.test(l)); +if (blockEnd === -1) blockEnd = lines.length; + +const sectionHeader = `### ${section}`; +let sectionIdx = lines.findIndex((l, i) => i > unreleasedIdx && i < blockEnd && l.trim() === sectionHeader); + +if (sectionIdx === -1) { + // Section doesn't exist — insert before blockEnd (or before the next ---/## delimiter) + let insertAt = blockEnd; + // Look for a trailing --- separator just before blockEnd + for (let i = blockEnd - 1; i > unreleasedIdx; i--) { + if (lines[i].trim() === '---') { insertAt = i; break; } + if (lines[i].trim() !== '') break; + } + lines.splice(insertAt, 0, '', sectionHeader, entry); +} else { + // Section exists — insert after the header line (and any existing entries) + let insertAt = sectionIdx + 1; + // Find the end of this section's entries (next ### or ## or blank+##/###) + while ( + insertAt < blockEnd && + lines[insertAt].trim() !== '' && + !lines[insertAt].startsWith('###') && + !lines[insertAt].startsWith('##') + ) { + insertAt++; + } + lines.splice(insertAt, 0, entry); +} + +fs.writeFileSync(changelogPath, lines.join('\n'), 'utf8'); +console.log(`Updated CHANGELOG.md — ${section}: ${entry}`); +NODEEOF diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/validate-documentation.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/validate-documentation.sh new file mode 100644 index 00000000..e5a60220 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/validate-documentation.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/validate-documentation.sh +# Validates that history documents meet structural requirements. +# +# Usage: +# ./scripts/validate-documentation.sh [file...] +# +# If no files are given, validates all markdown files under docs/history/. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HISTORY_DIR="$REPO_ROOT/docs/history" + +ERRORS=0 + +validate_file() { + local file="$1" + local base + base="$(basename "$file")" + + # Skip template and README files + if [[ "$base" == TEMPLATE-* || "$base" == README.md ]]; then + return 0 + fi + + # Validate naming convention: XXXX-YYYY-MM-DD-*-{type}.md + if ! [[ "$base" =~ ^[0-9]{4}-[0-9]{4}-[0-9]{2}-[0-9]{2}-.+-(implementation|bugfix|feature|migration)\.md$ ]]; then + echo "❌ $file" + echo " Invalid filename format. Expected: XXXX-YYYY-MM-DD-[title]-[type].md" + ERRORS=$((ERRORS + 1)) + return 0 + fi + + # Check that required placeholder sections have been filled in + if grep -q '\[YYYY-MM-DD\]' "$file"; then + echo "❌ $file" + echo " Unfilled placeholder: [YYYY-MM-DD]" + ERRORS=$((ERRORS + 1)) + fi + + if grep -q '\[#PR-Number\]' "$file"; then + echo "⚠️ $file" + echo " Missing PR number: [#PR-Number] not replaced" + fi + + # Check that file is non-empty beyond the title line + local line_count + line_count=$(wc -l < "$file") + if [[ "$line_count" -lt 10 ]]; then + echo "❌ $file" + echo " Document too short ($line_count lines). Please fill in the template." + ERRORS=$((ERRORS + 1)) + fi +} + +# Determine files to validate +if [[ $# -gt 0 ]]; then + FILES=("$@") +else + mapfile -t FILES < <(find "$HISTORY_DIR" -name "*.md" -not -name "README.md" -not -name "TEMPLATE-*" 2>/dev/null || true) +fi + +if [[ ${#FILES[@]} -eq 0 ]]; then + echo "ℹ️ No history documents found to validate." + exit 0 +fi + +for f in "${FILES[@]}"; do + validate_file "$f" +done + +if [[ "$ERRORS" -gt 0 ]]; then + echo "" + echo "Found $ERRORS validation error(s)." + exit 1 +else + echo "✅ All history documents are valid." +fi diff --git a/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/validate-numbering.sh b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/validate-numbering.sh new file mode 100644 index 00000000..00c2a506 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/.scaffold-cache/scripts/validate-numbering.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash +# GENERATED by AgentKit Forge v3.1.0 — DO NOT EDIT +# Source: .agentkit/spec + .agentkit/overlays/agentkit-forge +# Regenerate: pnpm -C .agentkit agentkit:sync +# scripts/validate-numbering.sh +# Validates the sequential numbering of history documents against .index.json. +# +# Usage: +# ./scripts/validate-numbering.sh + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HISTORY_DIR="$REPO_ROOT/docs/history" +INDEX_FILE="$HISTORY_DIR/.index.json" + +ERRORS=0 + +if [[ ! -f "$INDEX_FILE" ]]; then + echo "ℹ️ No .index.json found at $INDEX_FILE — skipping numbering validation." + exit 0 +fi + +# Check for duplicate sequence numbers per type +for subdir in implementations bug-fixes features migrations; do + case "$subdir" in + implementations) TYPE="implementation" ;; + bug-fixes) TYPE="bugfix" ;; + features) TYPE="feature" ;; + migrations) TYPE="migration" ;; + esac + + DIR="$HISTORY_DIR/$subdir" + if [[ ! -d "$DIR" ]]; then + continue + fi + + declare -A seen_numbers=() + + while IFS= read -r -d '' file; do + base="$(basename "$file")" + # Skip templates and READMEs + if [[ "$base" == TEMPLATE-* || "$base" == README.md ]]; then + continue + fi + # Extract leading 4-digit number + if [[ "$base" =~ ^([0-9]{4})- ]]; then + num="${BASH_REMATCH[1]}" + if [[ -n "${seen_numbers[$num]+x}" ]]; then + echo "❌ Duplicate number $num in $subdir/:" + echo " ${seen_numbers[$num]}" + echo " $base" + ERRORS=$((ERRORS + 1)) + else + seen_numbers[$num]="$base" + fi + fi + done < <(find "$DIR" -maxdepth 1 -name "*.md" -print0 2>/dev/null || true) + + unset seen_numbers +done + +if [[ "$ERRORS" -gt 0 ]]; then + echo "" + echo "Found $ERRORS numbering error(s)." + exit 1 +else + echo "✅ Sequential numbering is valid." +fi diff --git a/.claude/worktrees/tender-margulis/.agentkit/logs/usage-2026-03-16.jsonl b/.claude/worktrees/tender-margulis/.agentkit/logs/usage-2026-03-16.jsonl new file mode 100644 index 00000000..ec570e61 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/logs/usage-2026-03-16.jsonl @@ -0,0 +1,16 @@ +{ + "timestamp": "2026-03-16T21:12:21.000Z", + "event": "session_start", + "sessionId": "3b5b142a-2318-46de-8e68-3b2a1156ec61", + "user": "6d0e0d6bc477", + "branch": "claude/tender-margulis", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\tender-margulis" +} +{ + "timestamp": "2026-03-16T23:15:13.000Z", + "event": "session_start", + "sessionId": "3b5b142a-2318-46de-8e68-3b2a1156ec61", + "user": "6d0e0d6bc477", + "branch": "claude/tender-margulis", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\tender-margulis" +} diff --git a/.claude/worktrees/tender-margulis/.agentkit/logs/usage-2026-03-17.jsonl b/.claude/worktrees/tender-margulis/.agentkit/logs/usage-2026-03-17.jsonl new file mode 100644 index 00000000..b090941e --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/logs/usage-2026-03-17.jsonl @@ -0,0 +1,32 @@ +{ + "timestamp": "2026-03-17T01:36:58.000Z", + "event": "session_start", + "sessionId": "3b5b142a-2318-46de-8e68-3b2a1156ec61", + "user": "6d0e0d6bc477", + "branch": "claude/tender-margulis", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\tender-margulis" +} +{ + "timestamp": "2026-03-17T02:03:22.000Z", + "event": "session_start", + "sessionId": "3b5b142a-2318-46de-8e68-3b2a1156ec61", + "user": "6d0e0d6bc477", + "branch": "claude/tender-margulis", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\tender-margulis" +} +{ + "timestamp": "2026-03-17T05:00:11.000Z", + "event": "session_start", + "sessionId": "3b5b142a-2318-46de-8e68-3b2a1156ec61", + "user": "6d0e0d6bc477", + "branch": "claude/tender-margulis", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\tender-margulis" +} +{ + "timestamp": "2026-03-17T09:06:27.000Z", + "event": "session_start", + "sessionId": "3b5b142a-2318-46de-8e68-3b2a1156ec61", + "user": "6d0e0d6bc477", + "branch": "claude/tender-margulis", + "cwd": "C:\\Users\\smitj\\repos\\agentkit-forge\\.claude\\worktrees\\tender-margulis" +} diff --git a/.claude/worktrees/tender-margulis/.agentkit/package-lock.json b/.claude/worktrees/tender-margulis/.agentkit/package-lock.json new file mode 100644 index 00000000..0ecd531d --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/package-lock.json @@ -0,0 +1,2764 @@ +{ + "name": "agentkit-forge-runtime", + "version": "3.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "agentkit-forge-runtime", + "version": "3.1.0", + "dependencies": { + "@clack/prompts": "^1.0.1", + "js-yaml": "^4.1.0" + }, + "devDependencies": { + "markdownlint-cli2": "^0.18.1", + "prettier": "^3.5.3", + "vitest": "^4.0.18" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@clack/core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-1.0.1.tgz", + "integrity": "sha512-WKeyK3NOBwDOzagPR5H08rFk9D/WuN705yEbuZvKqlkmoLM2woKtXb10OO2k1NoSU4SFG947i2/SCYh+2u5e4g==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-1.0.1.tgz", + "integrity": "sha512-/42G73JkuYdyWZ6m8d/CJtBrGl1Hegyc7Fy78m5Ob+jF85TOUmLR5XLce/U3LxYAw0kJ8CT5aI99RIvPHcGp/Q==", + "license": "MIT", + "dependencies": { + "@clack/core": "1.0.1", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/katex": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", + "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vitest/expect": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "chai": "^6.2.1", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.0.18", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.18", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.18", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.18", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/katex": { + "version": "0.16.33", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.33.tgz", + "integrity": "sha512-q3N5u+1sY9Bu7T4nlXoiRBXWfwSefNGoKeOwekV+gw0cAXQlz2Ww6BLcmBxVDeXBMUDQv6fK5bcNaJLxob3ZQA==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdownlint": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.38.0.tgz", + "integrity": "sha512-xaSxkaU7wY/0852zGApM8LdlIfGCW8ETZ0Rr62IQtAnUMlMuifsg09vWJcNYeL4f0anvr8Vo4ZQar8jGpV0btQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "4.0.2", + "micromark-core-commonmark": "2.0.3", + "micromark-extension-directive": "4.0.0", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.1", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.18.1.tgz", + "integrity": "sha512-/4Osri9QFGCZOCTkfA8qJF+XGjKYERSHkXzxSyS1hd3ZERJGjvsUao2h4wdnvpHp6Tu2Jh/bPHM0FE9JJza6ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "14.1.0", + "js-yaml": "4.1.0", + "jsonc-parser": "3.3.1", + "markdown-it": "14.1.0", + "markdownlint": "0.38.0", + "markdownlint-cli2-formatter-default": "0.0.5", + "micromatch": "4.0.8" + }, + "bin": { + "markdownlint-cli2": "markdownlint-cli2-bin.mjs" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + } + }, + "node_modules/markdownlint-cli2-formatter-default": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.5.tgz", + "integrity": "sha512-4XKTwQ5m1+Txo2kuQ3Jgpo/KmnG+X90dWt4acufg6HVGadTUG5hzHF/wssp9b5MBYOMCnZ9RMPaU//uHsszF8Q==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + }, + "peerDependencies": { + "markdownlint-cli2": ">=0.0.4" + } + }, + "node_modules/markdownlint-cli2/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", + "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.0.18", + "@vitest/mocker": "4.0.18", + "@vitest/pretty-format": "4.0.18", + "@vitest/runner": "4.0.18", + "@vitest/snapshot": "4.0.18", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "es-module-lexer": "^1.7.0", + "expect-type": "^1.2.2", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.10.0", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-preview": "4.0.18", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/ui": "4.0.18", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/.claude/worktrees/tender-margulis/.agentkit/state/orchestrator.json.template b/.claude/worktrees/tender-margulis/.agentkit/state/orchestrator.json.template new file mode 100644 index 00000000..076c20ed --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/state/orchestrator.json.template @@ -0,0 +1,25 @@ +{ + "schema_version": "1.0.0", + "repo_id": "agentkit-forge", + "branch": "main", + "session_id": "", + "current_phase": 1, + "phase_name": "Discovery", + "last_phase_completed": 0, + "next_action": "Run /orchestrate to begin project assessment", + "team_progress": { + "team-backend": { "status": "idle", "notes": "" }, + "team-frontend": { "status": "idle", "notes": "" }, + "team-data": { "status": "idle", "notes": "" }, + "team-infra": { "status": "idle", "notes": "" }, + "team-devops": { "status": "idle", "notes": "" }, + "team-testing": { "status": "idle", "notes": "" }, + "team-security": { "status": "idle", "notes": "" }, + "team-docs": { "status": "idle", "notes": "" }, + "team-product": { "status": "idle", "notes": "" }, + "team-quality": { "status": "idle", "notes": "" } + }, + "todo_items": [], + "recent_results": [], + "completed": false +} diff --git a/.claude/worktrees/tender-margulis/.agentkit/state/schema.json b/.claude/worktrees/tender-margulis/.agentkit/state/schema.json new file mode 100644 index 00000000..7bfdc405 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.agentkit/state/schema.json @@ -0,0 +1,138 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AgentKit Forge Orchestrator State", + "description": "Schema for the orchestrator state file managed by /orchestrate", + "type": "object", + "required": ["schema_version", "repo_id", "current_phase", "phase_name", "team_progress"], + "properties": { + "schema_version": { + "type": "string", + "const": "1.0.0", + "description": "Schema version for forward compatibility" + }, + "repo_id": { + "type": "string", + "description": "Repository identifier (from .agentkit-repo)" + }, + "branch": { + "type": "string", + "description": "Current git branch" + }, + "session_id": { + "type": "string", + "description": "Current session identifier" + }, + "current_phase": { + "type": "integer", + "minimum": 1, + "maximum": 5, + "description": "Current lifecycle phase (1-5)" + }, + "phase_name": { + "type": "string", + "enum": ["Discovery", "Planning", "Implementation", "Validation", "Ship"], + "description": "Human-readable phase name" + }, + "last_phase_completed": { + "type": "integer", + "minimum": 0, + "maximum": 5, + "description": "Last fully completed phase (0 = none)" + }, + "next_action": { + "type": "string", + "description": "Recommended next action" + }, + "team_progress": { + "type": "object", + "description": "Per-team status tracking", + "patternProperties": { + "^team-": { + "type": "object", + "required": ["status"], + "properties": { + "status": { + "type": "string", + "enum": ["idle", "in_progress", "blocked", "done"] + }, + "notes": { + "type": "string" + }, + "last_updated": { + "type": "string", + "format": "date-time" + }, + "assigned_to": { + "type": "string" + } + } + } + } + }, + "todo_items": { + "type": "array", + "items": { + "type": "object", + "required": ["id", "title", "status"], + "properties": { + "id": { "type": "string" }, + "title": { "type": "string" }, + "status": { + "type": "string", + "enum": ["pending", "in_progress", "done", "blocked"] + }, + "team": { "type": "string" }, + "priority": { + "type": "string", + "enum": ["critical", "high", "medium", "low"] + } + } + } + }, + "recent_results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "timestamp": { "type": "string", "format": "date-time" }, + "action": { "type": "string" }, + "result": { "type": "string" }, + "team": { "type": "string" } + } + } + }, + "completed": { + "type": "boolean", + "description": "Whether all phases are complete" + }, + "last_healthcheck": { + "type": "string", + "format": "date-time", + "description": "Timestamp of last healthcheck run" + }, + "health_status": { + "type": "string", + "enum": ["HEALTHY", "UNHEALTHY"], + "description": "Overall health status from last healthcheck" + }, + "session_metrics": { + "type": "object", + "description": "Cost tracking session metrics", + "properties": { + "current_session_id": { + "type": "string", + "description": "Active session ID for cost tracking" + }, + "total_sessions": { + "type": "integer", + "description": "Total sessions recorded" + }, + "last_session_end": { + "type": "string", + "format": "date-time", + "description": "When the last session ended" + } + } + } + } +} diff --git a/.claude/worktrees/tender-margulis/.claude/settings.local.json b/.claude/worktrees/tender-margulis/.claude/settings.local.json new file mode 100644 index 00000000..b36185b5 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/settings.local.json @@ -0,0 +1,37 @@ +{ + "permissions": { + "allow": [ + "Bash(git ls-remote https://github.com/actions/checkout.git refs/tags/v4.2.2)", + "Bash(git ls-remote https://github.com/anthropics/claude-code-action.git refs/tags/v1)", + "Bash(git ls-remote https://github.com/actions/github-script.git refs/tags/v7)", + "Bash(pnpm -C .agentkit test)", + "Bash(pnpm -C .agentkit vitest run src/__tests__/prettier.test.mjs src/__tests__/expansion-analyzer.test.mjs src/__tests__/budget-guard.test.mjs src/__tests__/feature-manager.test.mjs src/__tests__/backlog-store.test.mjs src/__tests__/discover.test.mjs)", + "Bash(pnpm -C .agentkit agentkit:sync)", + "Bash(grep -rn 'uses:' .agentkit/templates/github/workflows/*.yml)", + "Bash(grep -rn 'uses:.*@[a-f0-9]\\\\{40\\\\}' .agentkit/templates/github/workflows/*.yml)", + "Bash(grep -rn 'uses:.*@v[0-9]' .agentkit/templates/github/workflows/*.yml)", + "Bash(git ls-remote https://github.com/pnpm/action-setup.git refs/tags/v4.2.0)", + "Bash(git ls-remote https://github.com/actions/setup-node.git refs/tags/v4.4.0)", + "Bash(git ls-remote https://github.com/actions/setup-python.git refs/tags/v5.6.0)", + "Bash(git ls-remote https://github.com/pnpm/action-setup.git refs/tags/v4)", + "Bash(git checkout -- AGENT_TEAMS.md .clinerules/git-workflow.md)", + "Bash(for branch in dev chore/merge-all-open-branches ci/enforce-sha-pinning-and-templates claude/fix-full-tier-black-elements-gkgln docs/consolidate-pending-items docs/restructure-agentkit-docs fix/review-findings-round1 fix/template-numbered-paths refactor/remove-team-prefix)", + "Bash(do echo \"=== $branch ===\")", + "Bash(git checkout -- .)", + "Bash(git pull)", + "Bash(git cherry-pick 097e0cc --no-edit)", + "Bash(git remote prune origin)", + "Bash(pnpm -C /c/Users/smitj/repos/retort/.agentkit test)", + "Bash(gh repo list JustAGhosT --limit 50)", + "Bash(gh label create \"priority:P3\" --repo phoenixvc/cognitive-mesh --color \"0E8A16\" --description \"Priority 3 - Nice to have\")", + "Bash(git add -A)", + "Bash(gh label list --repo phoenixvc/cognitive-mesh --json name,description,color --limit 100)", + "Bash(gh label list --repo JustAGhosT/retort --json name,description,color --limit 100)", + "mcp__filesystem__read_multiple_files", + "Bash(grep -E \"\\\\.\\(yml|yaml|json|ts|js\\)$\")", + "Bash(gh label:*)", + "Bash(git add:*)", + "Bash(gh api:*)" + ] + } +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/events.log b/.claude/worktrees/tender-margulis/.claude/state/events.log new file mode 100644 index 00000000..30a818dd --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/events.log @@ -0,0 +1,104 @@ +{"timestamp":"2026-02-26T17:31:21.524Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":92388},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1253},{"step":"build","status":"FAIL","durationMs":2299}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T17:32:22.387Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":57877},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1756}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T17:40:11.462Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":300556},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":12726},{"step":"build","status":"FAIL","durationMs":4619}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T17:44:14.114Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":236951},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":2693}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T17:57:01.313Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":54449},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1488},{"step":"build","status":"FAIL","durationMs":1535}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T17:57:39.437Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":35135},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1489}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T18:00:44.882Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":18855},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":599},{"step":"build","status":"FAIL","durationMs":755}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T18:00:57.395Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":11525},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":587}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T22:50:22.150Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":43407},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1370},{"step":"build","status":"FAIL","durationMs":1982}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T22:50:57.402Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":34361},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":485}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T22:59:44.909Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":72662},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1055},{"step":"build","status":"FAIL","durationMs":1767}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T23:00:12.840Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":26869},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":598}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T23:27:21.525Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":54059},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1538},{"step":"build","status":"FAIL","durationMs":2558}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T23:27:55.191Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":31691},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1126}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-26T23:47:11.830Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":54257},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":2146},{"step":"build","status":"FAIL","durationMs":3389}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-26T23:47:43.881Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":30944},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":619}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-02-28T15:41:34.550Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":118},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":15063},{"step":"build","status":"FAIL","durationMs":4029}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-02-28T15:41:38.884Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":29},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3080}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-01T04:51:06.914Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":43},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-01T04:51:08.526Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":19},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-01T04:54:06.715Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":53},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":28}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-01T04:54:08.867Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":75},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-01T05:10:28.549Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":106},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":22},{"step":"build","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-01T05:10:30.610Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":19},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T14:57:27.967Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":158},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":7}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T14:57:29.567Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":22},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T15:01:59.380Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":30},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T15:02:00.404Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":20},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:05:27.157Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":20},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":1913},{"step":"build","status":"FAIL","durationMs":3071}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:05:57.398Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":22},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:05:59.276Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":16},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:14:48.130Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":26},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":8},{"step":"build","status":"FAIL","durationMs":153}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:14:55.776Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":438},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":35}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:16:15.728Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":46},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":101184},{"step":"build","status":"FAIL","durationMs":9256}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:19:12.380Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":29},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":7},{"step":"build","status":"FAIL","durationMs":11}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:19:14.119Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":21},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:25:42.885Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":27},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":8},{"step":"build","status":"FAIL","durationMs":160}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:25:46.626Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":181},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":26}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:27:05.654Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":18},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"PASS","durationMs":95529},{"step":"build","status":"PASS","durationMs":7674}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:32:51.735Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":252},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":75},{"step":"build","status":"FAIL","durationMs":42}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:32:55.553Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":192},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":22}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:34:25.998Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":23},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":120925},{"step":"build","status":"PASS","durationMs":7972}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:36:16.808Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":109},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":10},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:36:19.087Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":51},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:39:23.323Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":269},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":37},{"step":"build","status":"FAIL","durationMs":46}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:39:26.597Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":142},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":27}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:41:21.411Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":262},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":138},{"step":"build","status":"FAIL","durationMs":74}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:41:25.946Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":179},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":68}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T17:42:47.046Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":16},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":92882},{"step":"build","status":"PASS","durationMs":10552}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:43:49.613Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":250},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":81},{"step":"build","status":"FAIL","durationMs":105}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T17:43:53.957Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":444},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":19}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T18:57:58.751Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":64},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":7},{"step":"build","status":"FAIL","durationMs":7}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T18:58:00.655Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":40},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T18:58:46.509Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":24},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":60941},{"step":"build","status":"PASS","durationMs":3076}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:00:40.415Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":83},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":97},{"step":"build","status":"FAIL","durationMs":171}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:00:50.568Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":562},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":58}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T19:15:27.769Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":48},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":7}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:15:29.811Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":19},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T19:18:40.784Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":56},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:18:42.732Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":21},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T19:36:57.250Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":25},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T19:36:58.289Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":17},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:14:44.559Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":45},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":11}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:14:46.176Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":40},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:20:45.419Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":72},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4},{"step":"build","status":"FAIL","durationMs":8}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:20:46.671Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":17},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:21:33.859Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":21},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:21:35.551Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":24},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:22:37.730Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":36},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":7}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:22:39.534Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":16},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:23:58.276Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":56},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":9}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:23:59.332Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":17},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-03T20:27:17.403Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":231},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":17},{"step":"build","status":"FAIL","durationMs":15}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-03T20:27:19.502Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":75},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":14}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-04T10:20:44.292Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":15},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T11:40:03.234Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":12},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T11:40:14.944Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":24},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6},{"step":"build","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T11:40:16.696Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":20},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":6}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-04T13:37:02.860Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":37},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5},{"step":"build","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T13:37:04.586Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":18},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":5}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-04T14:57:52.992Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"PASS","durationMs":12865},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4}]}],"flags":{"fix":false,"fast":true,"stack":null}} +{"timestamp":"2026-03-04T16:26:18.432Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"PASS","durationMs":8533},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T18:50:47.548Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":10054},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":4},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +{"timestamp":"2026-03-04T18:53:17.017Z","action":"check_completed","overallStatus":"FAIL","stacks":[{"stack":"node","steps":[{"step":"format","status":"FAIL","durationMs":9339},{"step":"lint","status":"SKIP","durationMs":0},{"step":"typecheck","status":"SKIP","durationMs":0},{"step":"test","status":"FAIL","durationMs":3},{"step":"build","status":"FAIL","durationMs":3}]}],"flags":{"fix":false,"fast":false,"stack":null}} +[2026-03-11T03:17:17.000Z] [HANDOFF] [ORCHESTRATOR] Session complete. Done: 6 items. Blockers: 0. Next: "Start Phase 1 cost-provider-schema on feat/cost-provider-schema branch". +[2026-03-11T17:00:03Z] [ORCHESTRATE] [W1] Phase 5 Ship. Tests: 110/110. Sync: clean. Branch: fix/ci-remediation. Commits ahead: 51. Ready for PR to main. +[2026-03-15T07:06:00Z] [ORCHESTRATE] [W1] Phase 5 Ship. Branch: feat/source-code-conventions. Build: pass. agentkit:check fails (Duplicate export auditUnresolvedPlaceholders). orchestrator.test.mjs: 22 failed. Health: at_risk. Next: fix test/check then PR. +[2026-03-15T07:13:00Z] [ORCHESTRATE] [W1] Phase 5 Ship. Branch: feat/source-code-conventions. Build: pass. No lock. Validation: build re-run PASS. Tests running in background. Health: at_risk (check CLI + orchestrator tests). Next: fix then PR to main. +[2026-03-15T07:16:00Z] [ORCHESTRATE] [W1] Fixed check.mjs duplicate export (auditUnresolvedPlaceholders). agentkit:check runs; format PASS. NB added to CLAUDE.md: this repo may modify .agentkit files. Next: orchestrator.test.mjs fixes then PR. +[2026-03-15T09:25:00Z] [ORCHESTRATE] [W1] Phase 5 Ship. Fixed orchestrator.test.mjs: unique temp dir per test (TEST_BASE/run-id), removed afterEach rmSync. 39/39 orchestrator tests pass. Health: healthy. Next: Create PR to main. +[2026-03-15T11:30:00Z] [ORCHESTRATE] [W1] Phase 2 Planning. Scope: all P0 and P1. Discovery: AGENT_TEAMS.md present; CI workflows present (ci.yml, branch-protection, etc.). Healthcheck: UNHEALTHY (typecheck/test/build fail in agentkit:check). Created 7 task files in .claude/state/tasks/ for P0 (2) and P1 (5). Next: teams implement then Phase 4 Validation. +[2026-03-15T12:05:00Z] [ORCHESTRATE] [W1] Assess-only run. Branch: fix/generated-files-and-conflict-markers. Phase 2. Tasks: 7 submitted, 0 in progress, 0 completed. Health: UNHEALTHY. Check: format PASS; typecheck/test/build FAIL. Next: run /team-infra, /team-quality, /team-backend, /team-data to implement tasks; then re-run /orchestrate for Validation. +[2026-03-15T12:15:00Z] [TEAM] [backend] Completed 2 items. Changes: 1 file (docs/api/07_framework-api-conventions.md). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T12:25:00Z] [TEAM] [infra] Rejected task-p0-ci-pipeline (out of scope; suggested team-devops). Completed 1 item (task-p1-staging-env). Changes: infra/README.md, docker-compose.yml. Tests: 0 added, 0 modified. Gate: N/A. +[2026-03-15T12:35:00Z] [TEAM] [data] Completed 2 items. Changes: db/README.md, migrations/README.md. Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T12:45:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (PRD index). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:00:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (P1 backlog section). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:10:00Z] [ORCHESTRATE] [W1] Assess. Branch: fix/generated-files-and-conflict-markers. Phase 2. Tasks: 5 completed, 1 rejected (P0 CI → devops), 1 submitted (P0 test-framework). Health: UNHEALTHY (format/typecheck/test/build FAIL). Next: /team-quality for task-p0-test-framework; reassign P0 CI to DevOps; then Phase 4 Validation. +[2026-03-15T13:15:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (link to PLAN-gh371). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:20:00Z] [ORCHESTRATE] [W1] Assess-only. Branch: fix/generated-files-and-conflict-markers. Phase 2. Tasks: 5 completed, 1 rejected, 1 submitted (task-p0-test-framework). Health: UNHEALTHY. Next: /team-quality; reassign P0 CI to DevOps; Phase 4 Validation. +[2026-03-15T13:25:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (GH#328 plan note, link to implementation plans). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:30:00Z] [TEAM] [product] Completed 1 item. Changes: docs/product/prd/README.md (next PRD number 008 in Creating a New PRD). Tests: 0 added, 0 modified. Gate: N/A (docs only). +[2026-03-15T13:35:00Z] [TEAM] [product] No delegated tasks; no additional backlog items completed (P1/P2 require plans or implementation). Scope: docs/product/**, docs/prd/**. +[2026-03-15T13:40:00Z] [TEAM] [docs] Completed 1 item. Changes: CONTRIBUTING.md (link to docs hub in Discovery phase). Tests: 0 added, 0 modified. Gate: N/A (docs only). diff --git a/.claude/worktrees/tender-margulis/.claude/state/orchestrator.json b/.claude/worktrees/tender-margulis/.claude/state/orchestrator.json new file mode 100644 index 00000000..ad4dd611 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/orchestrator.json @@ -0,0 +1,72 @@ +{ + "schema_version": "1.0.0", + "repo_id": "JustAGhosT/retort", + "branch": "fix/generated-files-and-conflict-markers", + "session_id": "2026-03-15", + "current_phase": 2, + "phase_name": "Planning", + "last_phase_completed": 1, + "next_action": "Complete task-p0-test-framework (team-quality). Reassign P0 CI to DevOps. Then run Phase 4 Validation.", + "lastHealthcheck": "2026-03-15T13:10:00Z", + "healthStatus": "unhealthy", + "healthDetails": { + "dependencies": "pass", + "format": "FAIL", + "lint": "SKIP (eslint not found)", + "typecheck": "FAIL", + "tests": "FAIL", + "build": "FAIL", + "syncDrift": "not run" + }, + "taskSummary": { + "total": 7, + "completed": 5, + "rejected": 1, + "submitted": 1 + }, + "backlogSnapshot": [ + {"priority": "P0", "team": "T4-Infrastructure", "task": "Configure CI pipeline for main branch"}, + {"priority": "P0", "team": "T10-Quality", "task": "Set up test framework and coverage thresholds"}, + {"priority": "P1", "team": "T1-Backend", "task": "Define core API route structure"}, + {"priority": "P1", "team": "T3-Data", "task": "Design initial database schema"}, + {"priority": "P1", "team": "T1-Backend", "task": "Implement health check endpoint"}, + {"priority": "P1", "team": "T3-Data", "task": "Create migration tooling setup"}, + {"priority": "P1", "team": "T4-Infrastructure", "task": "Set up staging environment"} + ], + "team_progress": { + "backend": { "status": "idle", "notes": "Completed task-p1-api-routes, task-p1-health-check (docs/api/07_framework-api-conventions.md)." }, + "frontend": { "status": "idle", "notes": "start TUI component merged and tested" }, + "data": { "status": "idle", "notes": "Completed task-p1-db-schema, task-p1-migration-tooling (db/README.md, migrations/README.md; repo has no DB, adopters own schema and migrations)." }, + "infra": { "status": "idle", "notes": "Rejected P0 CI (DevOps scope). Completed P1 staging: infra/README.md, docker-compose.yml." }, + "devops": { "status": "idle", "notes": "Configurable package manager implemented" }, + "testing": { "status": "complete", "notes": "110 tests green, ConversationFlow flakiness fixed" }, + "security": { "status": "idle", "notes": "" }, + "docs": { "status": "idle", "notes": "CONTRIBUTING.md: link to docs hub (docs/README.md) in Discovery phase." }, + "product": { "status": "idle", "notes": "PRD index, P1 backlog, PLAN-gh371 link, docs/planning link, next PRD number (008) in Creating a New PRD." }, + "quality": { "status": "complete", "notes": "Review findings addressed, sync drift clean" } + }, + "todo_items": [], + "recent_results": [ + { + "date": "2026-03-11", + "action": "Fixed ConversationFlow test flakiness (ink-select-input event loop yields)", + "status": "done" + }, + { + "date": "2026-03-11", + "action": "Added pnpm-workspace.yaml packages field", + "status": "done" + }, + { + "date": "2026-03-11", + "action": "Regenerated lockfile after version pinning", + "status": "done" + }, + { + "date": "2026-03-11", + "action": "Verified sync drift clean (533 files, 0 changes)", + "status": "done" + } + ], + "completed": false +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/orchestrator.json.template b/.claude/worktrees/tender-margulis/.claude/state/orchestrator.json.template new file mode 100644 index 00000000..076c20ed --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/orchestrator.json.template @@ -0,0 +1,25 @@ +{ + "schema_version": "1.0.0", + "repo_id": "agentkit-forge", + "branch": "main", + "session_id": "", + "current_phase": 1, + "phase_name": "Discovery", + "last_phase_completed": 0, + "next_action": "Run /orchestrate to begin project assessment", + "team_progress": { + "team-backend": { "status": "idle", "notes": "" }, + "team-frontend": { "status": "idle", "notes": "" }, + "team-data": { "status": "idle", "notes": "" }, + "team-infra": { "status": "idle", "notes": "" }, + "team-devops": { "status": "idle", "notes": "" }, + "team-testing": { "status": "idle", "notes": "" }, + "team-security": { "status": "idle", "notes": "" }, + "team-docs": { "status": "idle", "notes": "" }, + "team-product": { "status": "idle", "notes": "" }, + "team-quality": { "status": "idle", "notes": "" } + }, + "todo_items": [], + "recent_results": [], + "completed": false +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/schema.json b/.claude/worktrees/tender-margulis/.claude/state/schema.json new file mode 100644 index 00000000..5206822c --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/schema.json @@ -0,0 +1,138 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Retort Orchestrator State", + "description": "Schema for the orchestrator state file managed by /orchestrate", + "type": "object", + "required": ["schema_version", "repo_id", "current_phase", "phase_name", "team_progress"], + "properties": { + "schema_version": { + "type": "string", + "const": "1.0.0", + "description": "Schema version for forward compatibility" + }, + "repo_id": { + "type": "string", + "description": "Repository identifier (from .agentkit-repo)" + }, + "branch": { + "type": "string", + "description": "Current git branch" + }, + "session_id": { + "type": "string", + "description": "Current session identifier" + }, + "current_phase": { + "type": "integer", + "minimum": 1, + "maximum": 5, + "description": "Current lifecycle phase (1-5)" + }, + "phase_name": { + "type": "string", + "enum": ["Discovery", "Planning", "Implementation", "Validation", "Ship"], + "description": "Human-readable phase name" + }, + "last_phase_completed": { + "type": "integer", + "minimum": 0, + "maximum": 5, + "description": "Last fully completed phase (0 = none)" + }, + "next_action": { + "type": "string", + "description": "Recommended next action" + }, + "team_progress": { + "type": "object", + "description": "Per-team status tracking", + "patternProperties": { + "^team-": { + "type": "object", + "required": ["status"], + "properties": { + "status": { + "type": "string", + "enum": ["idle", "in_progress", "blocked", "done"] + }, + "notes": { + "type": "string" + }, + "last_updated": { + "type": "string", + "format": "date-time" + }, + "assigned_to": { + "type": "string" + } + } + } + } + }, + "todo_items": { + "type": "array", + "items": { + "type": "object", + "required": ["id", "title", "status"], + "properties": { + "id": { "type": "string" }, + "title": { "type": "string" }, + "status": { + "type": "string", + "enum": ["pending", "in_progress", "done", "blocked"] + }, + "team": { "type": "string" }, + "priority": { + "type": "string", + "enum": ["critical", "high", "medium", "low"] + } + } + } + }, + "recent_results": { + "type": "array", + "items": { + "type": "object", + "properties": { + "timestamp": { "type": "string", "format": "date-time" }, + "action": { "type": "string" }, + "result": { "type": "string" }, + "team": { "type": "string" } + } + } + }, + "completed": { + "type": "boolean", + "description": "Whether all phases are complete" + }, + "last_healthcheck": { + "type": "string", + "format": "date-time", + "description": "Timestamp of last healthcheck run" + }, + "health_status": { + "type": "string", + "enum": ["HEALTHY", "UNHEALTHY"], + "description": "Overall health status from last healthcheck" + }, + "session_metrics": { + "type": "object", + "description": "Cost tracking session metrics", + "properties": { + "current_session_id": { + "type": "string", + "description": "Active session ID for cost tracking" + }, + "total_sessions": { + "type": "integer", + "description": "Total sessions recorded" + }, + "last_session_end": { + "type": "string", + "format": "date-time", + "description": "When the last session ended" + } + } + } + } +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p0-ci-pipeline.json b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p0-ci-pipeline.json new file mode 100644 index 00000000..e656cf8b --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p0-ci-pipeline.json @@ -0,0 +1,22 @@ +{ + "id": "task-p0-ci-pipeline", + "type": "implement", + "status": "rejected", + "priority": "P0", + "delegator": "orchestrator", + "assignees": ["team-infra"], + "title": "Configure CI pipeline for main branch", + "description": "GitHub Actions workflow; scope: branch-protection, drift check, quality gates on main. Ensure required status checks align with ci.yml, branch-protection.yml, and drift/sync validation.", + "acceptanceCriteria": [ + "Workflow runs on push/PR to main (and dev per existing)", + "Drift check (sync then git diff) runs and is required for main", + "Quality gates (test, validate) are required; branch protection documented or enforced" + ], + "scope": [".github/workflows/**", "docs/operations/**"], + "backlogItemId": "P0-T4-CI-pipeline", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P0: Configure CI pipeline for main. See AGENT_BACKLOG.md Active Sprint." }, + { "role": "executor", "from": "infra", "timestamp": "2026-03-15T12:25:00Z", "content": "Rejected: task scope is .github/workflows/** and docs/operations/**, which is DevOps (CI/CD, pipelines), not Infra (IaC, terraform, bicep, pulumi). Suggested team: team-devops." } + ], + "artifacts": [] +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p0-test-framework.json b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p0-test-framework.json new file mode 100644 index 00000000..e69de29b diff --git a/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-api-routes.json b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-api-routes.json new file mode 100644 index 00000000..b76ef61f --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-api-routes.json @@ -0,0 +1,24 @@ +{ + "id": "task-p1-api-routes", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-backend"], + "title": "Define core API route structure", + "description": "REST endpoints for v1. Define route layout and conventions for the project (or document that this repo is framework-only and adopters define routes).", + "acceptanceCriteria": [ + "API route structure documented or implemented per project conventions", + "REST v1 layout clear for downstream adopters or for this repo if applicable" + ], + "scope": ["apps/api/**", "services/**", "docs/api/**"], + "backlogItemId": "P1-T1-api-routes", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Define core API route structure. See AGENT_BACKLOG.md." }, + { "role": "executor", "from": "backend", "timestamp": "2026-03-15T12:15:00Z", "content": "Completed. Repo is framework-only (no apps/api or services). Added docs/api/07_framework-api-conventions.md documenting recommended route structure (base /api, url-segment versioning, envelope, cursor pagination) for adopters." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["docs/api/07_framework-api-conventions.md"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-db-schema.json b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-db-schema.json new file mode 100644 index 00000000..b52354a2 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-db-schema.json @@ -0,0 +1,25 @@ +{ + "id": "task-p1-db-schema", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-data"], + "title": "Design initial database schema", + "description": "Depends on T1 API design. Design initial schema for the project (or document that this repo has no DB and adopters own schema).", + "acceptanceCriteria": [ + "Schema design or decision documented", + "Dependencies on API design acknowledged" + ], + "scope": ["db/**", "migrations/**", "prisma/**", "docs/architecture/**"], + "dependsOn": ["task-p1-api-routes"], + "backlogItemId": "P1-T3-db-schema", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Design initial database schema. Depends on T1." }, + { "role": "executor", "from": "data", "timestamp": "2026-03-15T12:35:00Z", "content": "Completed. Repo has no database (CLAUDE.md: Database none, ORM none). Added db/README.md documenting that adopters own schema and referencing API conventions; dependency on API design acknowledged." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["db/README.md"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-health-check.json b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-health-check.json new file mode 100644 index 00000000..10b652ef --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-health-check.json @@ -0,0 +1,24 @@ +{ + "id": "task-p1-health-check", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-backend"], + "title": "Implement health check endpoint", + "description": "Implement /api/health (or equivalent) for the application.", + "acceptanceCriteria": [ + "Health check endpoint implemented and documented", + "Returns appropriate status for load balancers or readiness probes" + ], + "scope": ["apps/api/**", "services/**", "docs/api/**"], + "backlogItemId": "P1-T1-health-check", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Implement health check endpoint. See Backlog." }, + { "role": "executor", "from": "backend", "timestamp": "2026-03-15T12:15:00Z", "content": "Completed. No application server in this repo (framework-only). Documented health check convention in docs/api/07_framework-api-conventions.md: GET /api/health or GET /health, 200 + { status: ok } for adopters." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["docs/api/07_framework-api-conventions.md"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-migration-tooling.json b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-migration-tooling.json new file mode 100644 index 00000000..4e72185f --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-migration-tooling.json @@ -0,0 +1,24 @@ +{ + "id": "task-p1-migration-tooling", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-data"], + "title": "Create migration tooling setup", + "description": "Prisma or Drizzle (or document choice). Set up migration tooling for the project.", + "acceptanceCriteria": [ + "Migration tooling chosen and documented or implemented", + "Basic migration workflow documented" + ], + "scope": ["db/**", "migrations/**", "prisma/**", "package.json"], + "backlogItemId": "P1-T3-migration-tooling", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Create migration tooling setup. See Backlog." }, + { "role": "executor", "from": "data", "timestamp": "2026-03-15T12:35:00Z", "content": "Completed. Repo has no DB. Added migrations/README.md documenting that adopters choose Prisma or Drizzle and documenting basic migration workflow (define schema, generate migration, run migrations)." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["migrations/README.md"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-staging-env.json b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-staging-env.json new file mode 100644 index 00000000..19f40686 --- /dev/null +++ b/.claude/worktrees/tender-margulis/.claude/state/tasks/task-p1-staging-env.json @@ -0,0 +1,24 @@ +{ + "id": "task-p1-staging-env", + "type": "implement", + "status": "completed", + "priority": "P1", + "delegator": "orchestrator", + "assignees": ["team-infra"], + "title": "Set up staging environment", + "description": "Docker Compose (or equivalent) for staging. Set up staging environment for the project.", + "acceptanceCriteria": [ + "Staging environment defined (e.g. docker-compose or IaC)", + "Documented how to run and deploy to staging" + ], + "scope": ["infra/**", "docker/**", "docker-compose*.yml", "docs/operations/**"], + "backlogItemId": "P1-T4-staging", + "messages": [ + { "role": "delegator", "from": "orchestrator", "timestamp": "2026-03-15T12:00:00Z", "content": "P1: Set up staging environment. See Backlog." }, + { "role": "executor", "from": "infra", "timestamp": "2026-03-15T12:25:00Z", "content": "Completed. Added infra/README.md (staging and local validation; adopters define their own staging). Added docker-compose.yml at repo root with profile 'sync' to run pnpm install + agentkit:sync in a container for staging-like validation." } + ], + "artifacts": [ + { "type": "files-changed", "paths": ["infra/README.md", "docker-compose.yml"] }, + { "type": "test-results", "passed": 0, "failed": 0, "testsAdded": 0, "testsModified": 0 } + ] +} diff --git a/.claude/worktrees/tender-margulis/package-lock.json b/.claude/worktrees/tender-margulis/package-lock.json new file mode 100644 index 00000000..24372cf6 --- /dev/null +++ b/.claude/worktrees/tender-margulis/package-lock.json @@ -0,0 +1,31 @@ +{ + "name": "retort-root", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "retort-root", + "dependencies": { + "js-yaml": "^4.1.1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + } + } +} diff --git a/package.json b/package.json index 5107548e..d82310c4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "agentkit-forge-root", + "name": "retort-root", "private": true, "packageManager": "pnpm@10.30.3", "engines": { @@ -17,17 +17,21 @@ "test": "pnpm -C .agentkit test", "test:start": "vitest run --config vitest.config.mjs", "test:start:coverage": "vitest run --config vitest.config.mjs --coverage", - "build": "pnpm -C .agentkit agentkit:validate", + "build": "pnpm -C .agentkit retort:validate", "lint:md": "pnpm -C .agentkit lint:md", "lint:md:fix": "pnpm -C .agentkit lint:md:fix", "sync:split-pr": "pwsh -NoLogo -NoProfile -NonInteractive -File scripts/sync-split-pr.ps1", "sync:split-pr:dry": "pwsh -NoLogo -NoProfile -NonInteractive -File scripts/sync-split-pr.ps1 -DryRun", "sync:split-pr:sh": "bash scripts/sync-split-pr.sh", "sync:split-pr:sh:dry": "bash scripts/sync-split-pr.sh --dry-run", + "retort:install": "pnpm -C .agentkit install", + "retort:sync": "pnpm -C .agentkit retort:sync", + "retort:validate": "pnpm -C .agentkit retort:validate", + "retort:setup": "pnpm -C .agentkit install && pnpm -C .agentkit retort:sync && pnpm -C .agentkit retort:validate", "ak:install": "pnpm -C .agentkit install", - "ak:sync": "pnpm -C .agentkit agentkit:sync", - "ak:validate": "pnpm -C .agentkit agentkit:validate", - "ak:setup": "pnpm -C .agentkit install && pnpm -C .agentkit agentkit:sync && pnpm -C .agentkit agentkit:validate" + "ak:sync": "pnpm -C .agentkit retort:sync", + "ak:validate": "pnpm -C .agentkit retort:validate", + "ak:setup": "pnpm -C .agentkit install && pnpm -C .agentkit retort:sync && pnpm -C .agentkit retort:validate" }, "dependencies": { "fuse.js": "7.1.0",