@mmerterden/multi-agent-pipeline 11.1.0 → 11.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/README.md +2 -2
- package/docs/FIGMA_PIPELINE.md +12 -25
- package/docs/architecture.md +3 -5
- package/docs/features.md +8 -8
- package/install/_common.mjs +9 -1
- package/install/_dev-only-files.mjs +0 -6
- package/install/claude.mjs +45 -18
- package/install/copilot.mjs +16 -14
- package/install/templates/copilot-instructions.md +3 -3
- package/package.json +1 -1
- package/pipeline/commands/{multi-agent.md → multi-agent/SKILL.md} +39 -39
- package/pipeline/commands/multi-agent/{analysis.md → analysis/SKILL.md} +18 -18
- package/pipeline/commands/multi-agent/{analysis-resolve.md → analysis-resolve/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{autopilot.md → autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{build-optimize.md → build-optimize/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{channels.md → channels/SKILL.md} +12 -12
- package/pipeline/commands/multi-agent/{dev.md → dev/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{dev-autopilot.md → dev-autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{dev-local.md → dev-local/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{dev-local-autopilot.md → dev-local-autopilot/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{finish.md → finish/SKILL.md} +6 -6
- package/pipeline/commands/multi-agent/{generate.md → generate/SKILL.md} +3 -3
- package/pipeline/commands/multi-agent/{help.md → help/SKILL.md} +4 -4
- package/pipeline/commands/multi-agent/{local.md → local/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{local-autopilot.md → local-autopilot/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{manual-test.md → manual-test/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/refactor/SKILL.md +257 -0
- package/pipeline/commands/multi-agent/{resume.md → resume/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{review.md → review/SKILL.md} +5 -5
- package/pipeline/commands/multi-agent/{setup.md → setup/SKILL.md} +1 -1
- package/pipeline/commands/multi-agent/{sync.md → sync/SKILL.md} +20 -58
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_account-picker.md +2 -2
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_dev-context.md +2 -2
- package/pipeline/{commands/multi-agent → multi-agent-refs}/_repo-picker.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/android-guide.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/jira.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/wiki.md +7 -7
- package/pipeline/multi-agent-refs/component-dispatch.md +92 -0
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/cross-cli-contract.md +10 -77
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/verify-by-test.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/generate-issue.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/issue-jira-triad.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/keychain.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/log-format.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/modes.md +2 -2
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/operations.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-0-init.md +10 -10
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-1-analysis.md +6 -6
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-2-planning.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-3-dev.md +10 -10
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-4-review.md +8 -8
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-5-test.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-6-commit.md +4 -4
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases/phase-7-report.md +6 -6
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/phases.md +12 -12
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/progress-contract.md +4 -4
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/swiftui-guide.md +1 -1
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/tracker-contract.md +3 -3
- package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/wiki-capture.md +4 -4
- package/pipeline/preferences-template.json +17 -1
- package/pipeline/rules/figma-pipeline.md +2 -2
- package/pipeline/schemas/prefs.schema.json +0 -34
- package/pipeline/scripts/README.md +1 -3
- package/pipeline/scripts/build-stack-plugins.mjs +1 -1
- package/pipeline/scripts/fixtures/install-layout.tsv +6 -5
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/phase-banner.sh +2 -2
- package/pipeline/scripts/review-scope.mjs +94 -0
- package/pipeline/scripts/scan-agent-config.sh +2 -2
- package/pipeline/scripts/smoke-agent-log-cost.sh +1 -1
- package/pipeline/scripts/smoke-agent-model-routing.sh +4 -4
- package/pipeline/scripts/smoke-autopilot-circuit-breaker.sh +2 -2
- package/pipeline/scripts/smoke-channels-approval-gate.sh +2 -2
- package/pipeline/scripts/smoke-channels-flow.sh +5 -5
- package/pipeline/scripts/smoke-clarify.sh +1 -1
- package/pipeline/scripts/smoke-commands-skills-parity.sh +3 -3
- package/pipeline/scripts/smoke-community-gates.sh +1 -1
- package/pipeline/scripts/smoke-compliance-skills.sh +2 -2
- package/pipeline/scripts/smoke-cost-summary.sh +1 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +17 -43
- package/pipeline/scripts/smoke-cross-phase-cohesion.sh +1 -1
- package/pipeline/scripts/smoke-dev-critic.sh +1 -1
- package/pipeline/scripts/smoke-diff-explain.sh +1 -1
- package/pipeline/scripts/smoke-diff-risk.sh +1 -1
- package/pipeline/scripts/smoke-evidence-gate.sh +1 -1
- package/pipeline/scripts/smoke-figma-dispatch.sh +46 -57
- package/pipeline/scripts/smoke-gate-hooks.sh +1 -1
- package/pipeline/scripts/smoke-generate-issue.sh +8 -8
- package/pipeline/scripts/smoke-handoff-contract.sh +3 -3
- package/pipeline/scripts/smoke-identity-isolation.sh +2 -2
- package/pipeline/scripts/smoke-intent-guard.sh +1 -1
- package/pipeline/scripts/smoke-issue-comment-template.sh +2 -2
- package/pipeline/scripts/smoke-issue-jira-triad.sh +4 -4
- package/pipeline/scripts/smoke-language-axis.sh +6 -6
- package/pipeline/scripts/smoke-learnings-ledger.sh +3 -3
- package/pipeline/scripts/smoke-mode-dispatch-drift.sh +16 -16
- package/pipeline/scripts/smoke-model-fallback.sh +3 -3
- package/pipeline/scripts/smoke-multi-repo-integration.sh +2 -2
- package/pipeline/scripts/smoke-multi-repo-worktree.sh +1 -1
- package/pipeline/scripts/smoke-no-token-prompt.sh +5 -5
- package/pipeline/scripts/smoke-phase-0-multi-repo.sh +1 -1
- package/pipeline/scripts/smoke-phase-6-multi.sh +1 -1
- package/pipeline/scripts/smoke-phase4-gates.sh +45 -0
- package/pipeline/scripts/smoke-plan-approval-gate.sh +5 -5
- package/pipeline/scripts/smoke-plan-todos.sh +3 -3
- package/pipeline/scripts/smoke-pr-review-actions.sh +3 -3
- package/pipeline/scripts/smoke-prefs-language.sh +1 -1
- package/pipeline/scripts/smoke-progress-contract.sh +2 -2
- package/pipeline/scripts/smoke-push-retry.sh +1 -1
- package/pipeline/scripts/smoke-repo-map.sh +2 -2
- package/pipeline/scripts/smoke-shadow-git.sh +1 -1
- package/pipeline/scripts/smoke-skill-authoring.sh +4 -9
- package/pipeline/scripts/smoke-tasklist-ordering.sh +10 -10
- package/pipeline/scripts/smoke-test-gap.sh +1 -1
- package/pipeline/scripts/smoke-token-budget.sh +1 -1
- package/pipeline/scripts/smoke-token-preflight.sh +2 -2
- package/pipeline/scripts/smoke-tracker-contract.sh +13 -13
- package/pipeline/scripts/smoke-tracker-tokens-invocation.sh +5 -5
- package/pipeline/scripts/smoke-triage-memory.sh +2 -2
- package/pipeline/scripts/smoke-update-check.sh +1 -1
- package/pipeline/scripts/smoke-url-enrichment.sh +2 -2
- package/pipeline/scripts/smoke-validator-gates.sh +1 -1
- package/pipeline/scripts/smoke-verify-by-test.sh +3 -3
- package/pipeline/scripts/smoke-wiki-integration.sh +9 -33
- package/pipeline/scripts/smoke-work-summary.sh +1 -1
- package/pipeline/scripts/smoke-worktree-path-convention.sh +4 -4
- package/pipeline/scripts/test-integrity-gate.mjs +83 -0
- package/pipeline/scripts/uninstall.mjs +2 -2
- package/pipeline/skills/.skill-manifest.json +40 -160
- package/pipeline/skills/.skills-index.json +21 -372
- package/pipeline/skills/shared/README.md +1 -1
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +2 -2
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +3 -3
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-finish/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +1 -1
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +116 -51
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +8 -30
- package/pipeline/skills/shared/external/backlog/BACKLOG.md +32 -0
- package/pipeline/skills/shared/external/backlog/SKILL.md +49 -0
- package/pipeline/skills/shared/external/compose-components/SKILL.md +14 -14
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +48 -0
- package/pipeline/skills/shared/external/skill-creator/audit.md +59 -0
- package/pipeline/skills/shared/external/skill-creator/checklist.md +32 -0
- package/pipeline/skills/shared/external/skill-creator/examples.md +65 -0
- package/pipeline/skills/shared/external/skill-creator/label-check.md +43 -0
- package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +83 -0
- package/pipeline/skills/shared/external/skill-creator/template.md +67 -0
- package/pipeline/skills/skills-index.md +4 -43
- package/pipeline/commands/multi-agent/refactor.md +0 -188
- package/pipeline/commands/multi-agent/refs/component-dispatch.md +0 -92
- package/pipeline/scripts/smoke-existing-discovery-gate.sh +0 -71
- package/pipeline/scripts/smoke-figma-android-parity.sh +0 -148
- package/pipeline/scripts/smoke-figma-credential-store.sh +0 -105
- package/pipeline/scripts/smoke-figma-cross-cli-inventory.sh +0 -177
- package/pipeline/scripts/smoke-figma-sync.sh +0 -149
- package/pipeline/scripts/smoke-sync-delegation.sh +0 -74
- package/pipeline/skills/figma-android/README.md +0 -38
- package/pipeline/skills/figma-android/figma-component-code-connect/SKILL.md +0 -62
- package/pipeline/skills/figma-android/figma-component-implement/SKILL.md +0 -158
- package/pipeline/skills/figma-android/figma-component-test/SKILL.md +0 -120
- package/pipeline/skills/figma-android/figma-component-wiki/SKILL.md +0 -35
- package/pipeline/skills/figma-android/figma-to-component/SKILL.md +0 -124
- package/pipeline/skills/figma-common/README.md +0 -64
- package/pipeline/skills/figma-common/figma-bottom-sheets/SKILL.md +0 -152
- package/pipeline/skills/figma-common/figma-cli-iterate/SKILL.md +0 -282
- package/pipeline/skills/figma-common/figma-cli-iterate-mend/SKILL.md +0 -503
- package/pipeline/skills/figma-common/figma-cli-lean-iterate/SKILL.md +0 -288
- package/pipeline/skills/figma-common/figma-cli-skip/SKILL.md +0 -362
- package/pipeline/skills/figma-common/figma-commit/COMMON_REBASE.md +0 -206
- package/pipeline/skills/figma-common/figma-commit/REVIEW.md +0 -337
- package/pipeline/skills/figma-common/figma-commit/SKILL.md +0 -216
- package/pipeline/skills/figma-common/figma-component-confluence-sync/SKILL.md +0 -223
- package/pipeline/skills/figma-common/figma-component-start/SKILL.md +0 -251
- package/pipeline/skills/figma-common/figma-component-status-update/SKILL.md +0 -78
- package/pipeline/skills/figma-common/figma-evolve-component/SKILL.md +0 -61
- package/pipeline/skills/figma-common/figma-fix/SKILL.md +0 -321
- package/pipeline/skills/figma-common/figma-form-integration/SKILL.md +0 -542
- package/pipeline/skills/figma-common/figma-issue/SKILL.md +0 -750
- package/pipeline/skills/figma-common/figma-iterate/SKILL.md +0 -208
- package/pipeline/skills/figma-common/figma-iteration-commit/SKILL.md +0 -1020
- package/pipeline/skills/figma-common/figma-mend/SKILL.md +0 -331
- package/pipeline/skills/figma-common/figma-navigation/SKILL.md +0 -156
- package/pipeline/skills/figma-common/figma-overlays/SKILL.md +0 -142
- package/pipeline/skills/figma-common/figma-price-integration/SKILL.md +0 -398
- package/pipeline/skills/figma-common/figma-remote-mcp-auth/SKILL.md +0 -104
- package/pipeline/skills/figma-common/figma-review/SKILL.md +0 -400
- package/pipeline/skills/figma-common/figma-setup/SKILL.md +0 -514
- package/pipeline/skills/figma-common/figma-setup/scripts/fetch-mcp-token.py +0 -592
- package/pipeline/skills/figma-common/figma-skip/SKILL.md +0 -129
- package/pipeline/skills/figma-common/figma-ui-patterns/SKILL.md +0 -105
- package/pipeline/skills/figma-common/figma-ui-patterns/patterns/animated-gradient-border.md +0 -116
- package/pipeline/skills/figma-common/figma-utility/SKILL.md +0 -274
- package/pipeline/skills/figma-common/figma-utility/scripts/figma-utility.py +0 -808
- package/pipeline/skills/figma-common/figma-validate/SKILL.md +0 -633
- package/pipeline/skills/figma-common/performance-iteration-commit-all/SKILL.md +0 -716
- package/pipeline/skills/figma-common/performance-review-next/SKILL.md +0 -238
- package/pipeline/skills/figma-common/performance-start/SKILL.md +0 -430
- package/pipeline/skills/figma-common/performance-swiftui/SKILL.md +0 -706
- package/pipeline/skills/figma-common/performance-tour/SKILL.md +0 -423
- package/pipeline/skills/figma-ios/REVIEW_CHECKLIST.md +0 -67
- package/pipeline/skills/figma-ios/figma-component-code-connect/SKILL.md +0 -178
- package/pipeline/skills/figma-ios/figma-component-implement/SKILL.md +0 -184
- package/pipeline/skills/figma-ios/figma-component-test/SKILL.md +0 -219
- package/pipeline/skills/figma-ios/figma-component-wiki/SKILL.md +0 -274
- package/pipeline/skills/figma-ios/figma-to-component/SKILL.md +0 -416
- package/pipeline/skills/figma-ios/figma-to-component/halt-return-protocol.md +0 -57
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-0-init.md +0 -307
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1-gathering.md +0 -119
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-1.5-existing-discovery.md +0 -174
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2-orchestrator.md +0 -333
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2a-testing-identifiers.md +0 -368
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2b-localization.md +0 -393
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2c-accessibility.md +0 -617
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-2d-analytics.md +0 -352
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3-orchestrator.md +0 -337
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3a-location.md +0 -206
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3b-tokens.md +0 -235
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3c-nested.md +0 -214
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3d-patterns.md +0 -902
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3e-assets.md +0 -156
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3f-utilities.md +0 -175
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3g-property-coverage.md +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-3h-variant-config.md +0 -333
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4-orchestrator.md +0 -412
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4a-configuration.md +0 -336
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4b-view.md +0 -705
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4c-documentation.md +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4d-preview.md +0 -380
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-4e-modifiers.md +0 -262
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5-orchestrator.md +0 -482
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5a-viewinspector.md +0 -274
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5b-snapshot.md +0 -636
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-5c-unit.md +0 -142
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-6-code-connect.md +0 -547
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7-wiki.md +0 -39
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-confluence-generate.md +0 -659
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-7a-wiki-generate.md +0 -580
- package/pipeline/skills/figma-ios/figma-to-component/phases/phase-8-cleanup.md +0 -51
- package/pipeline/skills/figma-ios/figma-to-component/reference/accessibility.md +0 -183
- package/pipeline/skills/figma-ios/figma-to-component/reference/analytics-events.md +0 -64
- package/pipeline/skills/figma-ios/figma-to-component/reference/code-connect.md +0 -531
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-api.md +0 -89
- package/pipeline/skills/figma-ios/figma-to-component/reference/confluence-xhtml.md +0 -155
- package/pipeline/skills/figma-ios/figma-to-component/reference/figma-to-swiftui-effects.md +0 -196
- package/pipeline/skills/figma-ios/figma-to-component/reference/halt-return-protocol.md +0 -57
- package/pipeline/skills/figma-ios/figma-to-component/reference/localization-naming.md +0 -89
- package/pipeline/skills/figma-ios/figma-to-component/reference/macros.md +0 -227
- package/pipeline/skills/figma-ios/figma-to-component/reference/missing-tokens.md +0 -157
- package/pipeline/skills/figma-ios/figma-to-component/reference/orchestrator-discipline.md +0 -90
- package/pipeline/skills/figma-ios/figma-to-component/reference/registry.md +0 -116
- package/pipeline/skills/figma-ios/figma-to-component/reference/remote-mcp-script.md +0 -153
- package/pipeline/skills/figma-ios/figma-to-component/reference/rest-api-script.md +0 -130
- package/pipeline/skills/figma-ios/figma-to-component/reference/scripts-inventory.md +0 -218
- package/pipeline/skills/figma-ios/figma-to-component/reference/snapshot-testing.md +0 -188
- package/pipeline/skills/figma-ios/figma-to-component/reference/subcomponent-graph.md +0 -93
- package/pipeline/skills/figma-ios/figma-to-component/reference/testing-identifiers-naming.md +0 -98
- package/pipeline/skills/figma-ios/figma-to-component/reference/tools.md +0 -261
- package/pipeline/skills/figma-ios/figma-to-component/reference/viewinspector.md +0 -147
- package/pipeline/skills/figma-ios/figma-to-component/reference/wiki-to-confluence-mapping.md +0 -182
- package/pipeline/skills/figma-ios/figma-to-component/scripts/apply-author-login-map.py +0 -185
- package/pipeline/skills/figma-ios/figma-to-component/scripts/backfill-status.py +0 -609
- package/pipeline/skills/figma-ios/figma-to-component/scripts/build-author-registry.py +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/scripts/bulk-sync-issues.py +0 -261
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-data-gather.py +0 -184
- package/pipeline/skills/figma-ios/figma-to-component/scripts/code-connect-publish.sh +0 -188
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status-upload.py +0 -768
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-component-status.py +0 -191
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-data-gather.py +0 -420
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-page-ids.example.json +0 -9
- package/pipeline/skills/figma-ios/figma-to-component/scripts/confluence-publish.py +0 -336
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-subcomponent-graph.py +0 -391
- package/pipeline/skills/figma-ios/figma-to-component/scripts/figma-update.py +0 -292
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/__init__.py +0 -1
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/issue_sync_propagate.py +0 -93
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/registry_writer.py +0 -299
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_backfill_status.py +0 -343
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update.py +0 -206
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_figma_update_http.py +0 -149
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_phase_clis.py +0 -281
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_registry_writer.py +0 -332
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_issue.py +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_skill_figma_review.py +0 -98
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue.py +0 -298
- package/pipeline/skills/figma-ios/figma-to-component/scripts/lib/test_update_issue_gh.py +0 -195
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase1-gather.py +0 -1298
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase2-finalize.py +0 -228
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase3-scripts.py +0 -1089
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase4-finalize.py +0 -141
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase5-finalize.py +0 -106
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase6-finalize.py +0 -162
- package/pipeline/skills/figma-ios/figma-to-component/scripts/phase7-finalize.py +0 -105
- package/pipeline/skills/figma-ios/figma-to-component/scripts/register-icons-codeconnect.py +0 -179
- package/pipeline/skills/figma-ios/figma-to-component/scripts/remote-mcp-fetch.py +0 -260
- package/pipeline/skills/figma-ios/figma-to-component/scripts/resolve-author-logins.py +0 -260
- package/pipeline/skills/figma-ios/figma-to-component/scripts/run-uicomponents-tests.sh +0 -86
- package/pipeline/skills/figma-ios/figma-to-component/scripts/sidebar-generator.py +0 -321
- package/pipeline/skills/figma-ios/figma-to-component/scripts/update-issue-from-registry.py +0 -1470
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase4.sh +0 -176
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase6.sh +0 -147
- package/pipeline/skills/figma-ios/figma-to-component/scripts/validate-phase7a.py +0 -629
- /package/pipeline/commands/multi-agent/{delete.md → delete/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{diff-explain.md → diff-explain/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{garbage-collect.md → garbage-collect/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{issue.md → issue/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{jira.md → jira/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{kill.md → kill/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{language.md → language/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{log.md → log/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{prune-logs.md → prune-logs/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{purge.md → purge/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{scan.md → scan/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{search.md → search/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{stack.md → stack/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{status.md → status/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{test.md → test/SKILL.md} +0 -0
- /package/pipeline/commands/multi-agent/{update.md → update/SKILL.md} +0 -0
- /package/pipeline/{commands/multi-agent → multi-agent-refs}/_input-parser.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/analysis-template.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/audit-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/backend-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/confluence.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/issue-comment.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr-review-actions.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/channels/pr.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/conventions-defaults.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/autopilot-circuit-breaker.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/dev-critic.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/external-context-injection.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/model-fallback.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/plan-todos.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/prior-fix-detection.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/repo-map.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/features/shadow-git.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/frontend-guide.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/knowledge.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/multi-repo-integration-build.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/picker-contract.md +0 -0
- /package/pipeline/{commands/multi-agent/refs → multi-agent-refs}/rules.md +0 -0
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
sidebar-generator.py - Idempotent _Sidebar.md generator for GitHub Wiki.
|
|
4
|
-
|
|
5
|
-
Scans the wiki directory structure and produces a deterministic _Sidebar.md.
|
|
6
|
-
No external dependencies (registry, frontmatter, etc.) - purely filesystem-based.
|
|
7
|
-
|
|
8
|
-
Usage:
|
|
9
|
-
python3 sidebar-generator.py [--wiki-root PATH] [--dry-run] [--check]
|
|
10
|
-
|
|
11
|
-
--wiki-root PATH Path to wiki repo (default: auto-detect from script location)
|
|
12
|
-
--dry-run Print to stdout instead of writing _Sidebar.md
|
|
13
|
-
--check Exit 0 if _Sidebar.md is already up-to-date, exit 1 if stale
|
|
14
|
-
"""
|
|
15
|
-
|
|
16
|
-
import argparse
|
|
17
|
-
import os
|
|
18
|
-
import sys
|
|
19
|
-
from pathlib import Path
|
|
20
|
-
from typing import Dict, List, Optional
|
|
21
|
-
|
|
22
|
-
# ── Configuration ──────────────────────────────────────────────────────────
|
|
23
|
-
|
|
24
|
-
# Top-level folders that map to sidebar sections (order preserved).
|
|
25
|
-
# Key = folder name, Value = sidebar bold heading.
|
|
26
|
-
SECTION_MAP = {
|
|
27
|
-
"DesignSystemCore": "Design System Core",
|
|
28
|
-
"MobileAppComponents": "Mobile App Components",
|
|
29
|
-
"VisualAssets": "Visual Assets",
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
# Folders to skip entirely (not component directories).
|
|
33
|
-
SKIP_FOLDERS = {"FigmaComponents", "assets", ".git"}
|
|
34
|
-
|
|
35
|
-
# Fixed header lines at the top of _Sidebar.md.
|
|
36
|
-
HEADER = """\
|
|
37
|
-
**[[Home]]**
|
|
38
|
-
**[[ComponentImplementationStatus|Component Status]]**
|
|
39
|
-
**[[BuildMetrics|Build Metrics]]**"""
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# ── Helpers ────────────────────────────────────────────────────────────────
|
|
43
|
-
|
|
44
|
-
def find_wiki_root() -> Path:
|
|
45
|
-
"""Auto-detect wiki root relative to this script's location."""
|
|
46
|
-
script_dir = Path(__file__).resolve().parent
|
|
47
|
-
# Navigate from .instructions/figma/figma-to-swiftui/scripts/ up to repo root
|
|
48
|
-
repo_root = script_dir.parent.parent.parent.parent
|
|
49
|
-
wiki_root = repo_root / "{repos.packagesContainer}" / "Packages" / "{project.slug}-wiki"
|
|
50
|
-
if not wiki_root.is_dir():
|
|
51
|
-
sys.exit(f"ERROR: Wiki root not found at {wiki_root}")
|
|
52
|
-
return wiki_root
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
def has_wiki_page(folder: Path) -> bool:
|
|
56
|
-
"""Check if a folder contains at least one .md file (excluding -iOS.md)."""
|
|
57
|
-
for item in folder.rglob("*.md"):
|
|
58
|
-
if not item.name.endswith("-iOS.md") and not item.name.startswith("_"):
|
|
59
|
-
return True
|
|
60
|
-
return False
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
def collect_components(section_root: Path) -> Dict[str, List[str]]:
|
|
64
|
-
"""
|
|
65
|
-
Walk a section folder and return {subsection_name: [component_names]}.
|
|
66
|
-
|
|
67
|
-
The subsection is the "grouping folder" - the directory that contains
|
|
68
|
-
individual component folders (which themselves contain .md files).
|
|
69
|
-
|
|
70
|
-
Structure patterns handled:
|
|
71
|
-
DesignSystemCore/Avatar/AvatarCorporateClub/AvatarCorporateClub.md
|
|
72
|
-
→ subsection="Avatar", component="AvatarCorporateClub"
|
|
73
|
-
|
|
74
|
-
DesignSystemCore/Checkbox/Checkbox.md
|
|
75
|
-
→ subsection="Checkbox", component="Checkbox"
|
|
76
|
-
|
|
77
|
-
MobileAppComponents/Components/Animations/LoadingProgress/LoadingProgress.md
|
|
78
|
-
→ subsection="Animations", component="LoadingProgress"
|
|
79
|
-
|
|
80
|
-
MobileAppComponents/FlowBasedComponents/Booker/BookerHolidayContactArea/...
|
|
81
|
-
→ subsection="Booker", component="BookerHolidayContactArea"
|
|
82
|
-
|
|
83
|
-
VisualAssets/OtherVisualAssets/Badge/AddToSiri/AddToSiri.md
|
|
84
|
-
→ subsection="Badge", component="AddToSiri"
|
|
85
|
-
|
|
86
|
-
VisualAssets/Logos/BrandLogo/LogoTkPay/LogoTkPay.md
|
|
87
|
-
→ subsection="Logos", component="LogoTkPay"
|
|
88
|
-
"""
|
|
89
|
-
result: Dict[str, List[str]] = {}
|
|
90
|
-
|
|
91
|
-
def _scan(base: Path, subsection_name: Optional[str]):
|
|
92
|
-
"""Recursively scan directories to find component leaf folders."""
|
|
93
|
-
for child in sorted(base.iterdir()):
|
|
94
|
-
if not child.is_dir() or child.name in SKIP_FOLDERS:
|
|
95
|
-
continue
|
|
96
|
-
|
|
97
|
-
# Check if this child folder directly contains a .md wiki page
|
|
98
|
-
direct_md = [
|
|
99
|
-
f for f in child.iterdir()
|
|
100
|
-
if f.is_file()
|
|
101
|
-
and f.suffix == ".md"
|
|
102
|
-
and not f.name.endswith("-iOS.md")
|
|
103
|
-
and not f.name.startswith("_")
|
|
104
|
-
]
|
|
105
|
-
|
|
106
|
-
# Check if it also has component subdirectories
|
|
107
|
-
component_subdirs = [
|
|
108
|
-
grandchild for grandchild in child.iterdir()
|
|
109
|
-
if grandchild.is_dir()
|
|
110
|
-
and grandchild.name not in SKIP_FOLDERS
|
|
111
|
-
and has_wiki_page(grandchild)
|
|
112
|
-
]
|
|
113
|
-
|
|
114
|
-
if direct_md and not component_subdirs:
|
|
115
|
-
# Pure leaf component folder with a wiki page.
|
|
116
|
-
sub = subsection_name or child.name
|
|
117
|
-
result.setdefault(sub, []).append(child.name)
|
|
118
|
-
elif direct_md and component_subdirs:
|
|
119
|
-
# Hybrid: has both a direct .md AND component subfolders.
|
|
120
|
-
# E.g. Components/Carousel/ has Carousel.md + CarouselGroup/
|
|
121
|
-
# Use child.name as subsection (not the intermediate parent).
|
|
122
|
-
sub = child.name
|
|
123
|
-
result.setdefault(sub, []).append(child.name)
|
|
124
|
-
_scan(child, sub)
|
|
125
|
-
elif component_subdirs:
|
|
126
|
-
# Pure grouping folder - recurse.
|
|
127
|
-
if _is_intermediate_folder(child, base):
|
|
128
|
-
_scan(child, subsection_name)
|
|
129
|
-
else:
|
|
130
|
-
_scan(child, child.name)
|
|
131
|
-
|
|
132
|
-
_scan(section_root, None)
|
|
133
|
-
return result
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
def _is_intermediate_folder(folder: Path, section_root: Path) -> bool:
|
|
137
|
-
"""
|
|
138
|
-
Determine if a folder is an intermediate grouping folder
|
|
139
|
-
(like Components, FlowBasedComponents, Icons, Logos, OtherVisualAssets)
|
|
140
|
-
rather than a meaningful subsection.
|
|
141
|
-
|
|
142
|
-
Intermediate folders are direct children of the section root
|
|
143
|
-
that contain further grouping subdirectories (not leaf components).
|
|
144
|
-
"""
|
|
145
|
-
if folder.parent != section_root:
|
|
146
|
-
return False
|
|
147
|
-
|
|
148
|
-
# Check if this folder's children are mostly directories with their own subdirectories
|
|
149
|
-
child_dirs = [
|
|
150
|
-
c for c in folder.iterdir()
|
|
151
|
-
if c.is_dir() and c.name not in SKIP_FOLDERS
|
|
152
|
-
]
|
|
153
|
-
if not child_dirs:
|
|
154
|
-
return False
|
|
155
|
-
|
|
156
|
-
# If none of the children have direct .md files, this is intermediate.
|
|
157
|
-
has_any_direct_md = any(
|
|
158
|
-
any(
|
|
159
|
-
f.is_file() and f.suffix == ".md"
|
|
160
|
-
and not f.name.endswith("-iOS.md")
|
|
161
|
-
and not f.name.startswith("_")
|
|
162
|
-
for f in c.iterdir()
|
|
163
|
-
)
|
|
164
|
-
for c in child_dirs
|
|
165
|
-
)
|
|
166
|
-
return not has_any_direct_md
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
def format_section(heading: str, subsections: Dict[str, List[str]]) -> str:
|
|
170
|
-
"""Format a sidebar section with its subsections and components."""
|
|
171
|
-
lines = [f"**{heading}**", ""]
|
|
172
|
-
|
|
173
|
-
for sub_name in sorted(subsections.keys()):
|
|
174
|
-
components = sorted(subsections[sub_name])
|
|
175
|
-
lines.append(f"*{sub_name}*")
|
|
176
|
-
for comp in components:
|
|
177
|
-
lines.append(f"- [[{comp}]]")
|
|
178
|
-
lines.append("")
|
|
179
|
-
|
|
180
|
-
return "\n".join(lines)
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
def generate_sidebar(wiki_root: Path) -> str:
|
|
184
|
-
"""Generate the full _Sidebar.md content."""
|
|
185
|
-
parts = [HEADER, ""]
|
|
186
|
-
|
|
187
|
-
for folder_name, heading in SECTION_MAP.items():
|
|
188
|
-
section_path = wiki_root / folder_name
|
|
189
|
-
if not section_path.is_dir():
|
|
190
|
-
continue
|
|
191
|
-
|
|
192
|
-
parts.append("---")
|
|
193
|
-
parts.append("")
|
|
194
|
-
|
|
195
|
-
subsections = collect_components(section_path)
|
|
196
|
-
if subsections:
|
|
197
|
-
parts.append(format_section(heading, subsections))
|
|
198
|
-
|
|
199
|
-
content = "\n".join(parts)
|
|
200
|
-
# Normalize: ensure single trailing newline, collapse triple+ blank lines
|
|
201
|
-
while "\n\n\n" in content:
|
|
202
|
-
content = content.replace("\n\n\n", "\n\n")
|
|
203
|
-
return content.rstrip() + "\n"
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
# ── VisualAssets special handling ──────────────────────────────────────────
|
|
207
|
-
# VisualAssets has a deeper nesting:
|
|
208
|
-
# VisualAssets/OtherVisualAssets/Badge/AddToSiri/AddToSiri.md
|
|
209
|
-
# VisualAssets/Logos/BrandLogo/LogoTkPay/LogoTkPay.md
|
|
210
|
-
# VisualAssets/Logos/PaymentLogo/CreditCardLogo/CreditCardLogo.md
|
|
211
|
-
#
|
|
212
|
-
# The subsection grouping for VisualAssets works differently:
|
|
213
|
-
# - Icons → children are grouped under their direct subfolder name (BrandIcons)
|
|
214
|
-
# - Logos → collapse BrandLogo/PaymentLogo/ThirdPartyLogo under "Logos"
|
|
215
|
-
# - OtherVisualAssets → children are grouped under their subfolder (Badge)
|
|
216
|
-
#
|
|
217
|
-
# The generic collect_components handles this because:
|
|
218
|
-
# - VisualAssets/Logos is intermediate (has BrandLogo, PaymentLogo, ThirdPartyLogo)
|
|
219
|
-
# - Each of those is a subsection candidate, but Logos grouping is preferred
|
|
220
|
-
#
|
|
221
|
-
# We override with a specialized collector for VisualAssets.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
def collect_visual_assets(section_root: Path) -> Dict[str, List[str]]:
|
|
225
|
-
"""
|
|
226
|
-
Specialized collector for VisualAssets.
|
|
227
|
-
Groups components by the level-2 subfolder for Icons/OtherVisualAssets
|
|
228
|
-
and collapses Logos into a single "Logos" subsection.
|
|
229
|
-
"""
|
|
230
|
-
result: Dict[str, List[str]] = {}
|
|
231
|
-
|
|
232
|
-
for level1 in sorted(section_root.iterdir()):
|
|
233
|
-
if not level1.is_dir() or level1.name in SKIP_FOLDERS:
|
|
234
|
-
continue
|
|
235
|
-
|
|
236
|
-
if level1.name == "Logos":
|
|
237
|
-
# Collapse all logo subfolders into one "Logos" subsection
|
|
238
|
-
for level2 in sorted(level1.iterdir()):
|
|
239
|
-
if not level2.is_dir() or level2.name in SKIP_FOLDERS:
|
|
240
|
-
continue
|
|
241
|
-
for comp_folder in sorted(level2.iterdir()):
|
|
242
|
-
if not comp_folder.is_dir() or comp_folder.name in SKIP_FOLDERS:
|
|
243
|
-
continue
|
|
244
|
-
if has_wiki_page(comp_folder):
|
|
245
|
-
result.setdefault("Logos", []).append(comp_folder.name)
|
|
246
|
-
else:
|
|
247
|
-
# Icons, OtherVisualAssets: group by level-2 folder
|
|
248
|
-
for level2 in sorted(level1.iterdir()):
|
|
249
|
-
if not level2.is_dir() or level2.name in SKIP_FOLDERS:
|
|
250
|
-
continue
|
|
251
|
-
for comp_folder in sorted(level2.iterdir()):
|
|
252
|
-
if not comp_folder.is_dir() or comp_folder.name in SKIP_FOLDERS:
|
|
253
|
-
continue
|
|
254
|
-
if has_wiki_page(comp_folder):
|
|
255
|
-
result.setdefault(level2.name, []).append(comp_folder.name)
|
|
256
|
-
|
|
257
|
-
return result
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
# Patch the generate function to use the specialized collector for VisualAssets.
|
|
261
|
-
_original_generate = generate_sidebar
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
def generate_sidebar(wiki_root: Path) -> str:
|
|
265
|
-
parts = [HEADER, ""]
|
|
266
|
-
|
|
267
|
-
for folder_name, heading in SECTION_MAP.items():
|
|
268
|
-
section_path = wiki_root / folder_name
|
|
269
|
-
if not section_path.is_dir():
|
|
270
|
-
continue
|
|
271
|
-
|
|
272
|
-
parts.append("---")
|
|
273
|
-
parts.append("")
|
|
274
|
-
|
|
275
|
-
if folder_name == "VisualAssets":
|
|
276
|
-
subsections = collect_visual_assets(section_path)
|
|
277
|
-
else:
|
|
278
|
-
subsections = collect_components(section_path)
|
|
279
|
-
|
|
280
|
-
if subsections:
|
|
281
|
-
parts.append(format_section(heading, subsections))
|
|
282
|
-
|
|
283
|
-
content = "\n".join(parts)
|
|
284
|
-
while "\n\n\n" in content:
|
|
285
|
-
content = content.replace("\n\n\n", "\n\n")
|
|
286
|
-
return content.rstrip() + "\n"
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
# ── Main ───────────────────────────────────────────────────────────────────
|
|
290
|
-
|
|
291
|
-
def main():
|
|
292
|
-
parser = argparse.ArgumentParser(description="Generate _Sidebar.md from wiki directory structure.")
|
|
293
|
-
parser.add_argument("--wiki-root", type=str, help="Path to the wiki repo root.")
|
|
294
|
-
parser.add_argument("--dry-run", action="store_true", help="Print to stdout instead of writing file.")
|
|
295
|
-
parser.add_argument("--check", action="store_true", help="Exit 1 if _Sidebar.md is stale.")
|
|
296
|
-
args = parser.parse_args()
|
|
297
|
-
|
|
298
|
-
wiki_root = Path(args.wiki_root) if args.wiki_root else find_wiki_root()
|
|
299
|
-
if not wiki_root.is_dir():
|
|
300
|
-
sys.exit(f"ERROR: Wiki root not found: {wiki_root}")
|
|
301
|
-
|
|
302
|
-
content = generate_sidebar(wiki_root)
|
|
303
|
-
sidebar_path = wiki_root / "_Sidebar.md"
|
|
304
|
-
|
|
305
|
-
if args.check:
|
|
306
|
-
if sidebar_path.exists() and sidebar_path.read_text() == content:
|
|
307
|
-
print("_Sidebar.md is up-to-date.")
|
|
308
|
-
sys.exit(0)
|
|
309
|
-
else:
|
|
310
|
-
print("_Sidebar.md is STALE - needs regeneration.")
|
|
311
|
-
sys.exit(1)
|
|
312
|
-
|
|
313
|
-
if args.dry_run:
|
|
314
|
-
print(content, end="")
|
|
315
|
-
else:
|
|
316
|
-
sidebar_path.write_text(content)
|
|
317
|
-
print(f"✓ _Sidebar.md written ({content.count(chr(10))} lines)")
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
if __name__ == "__main__":
|
|
321
|
-
main()
|