@rosetears/aili-pi 0.1.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/LICENSE +21 -0
- package/README.md +109 -0
- package/THIRD_PARTY_NOTICES.md +64 -0
- package/extensions/index.ts +6 -0
- package/install.sh +5 -0
- package/manifests/adapter-evidence.json +45 -0
- package/manifests/capabilities.json +124 -0
- package/manifests/live-verification.json +26 -0
- package/manifests/provenance.json +71 -0
- package/manifests/roles.json +474 -0
- package/manifests/sbom.json +7797 -0
- package/manifests/skill-compatibility.json +8100 -0
- package/manifests/subagent-provenance.json +37 -0
- package/package.json +91 -0
- package/prompts/build.md +8 -0
- package/prompts/define.md +8 -0
- package/prompts/ideate.md +8 -0
- package/prompts/local-review.md +8 -0
- package/prompts/ship.md +8 -0
- package/roles/agent-evaluator.md +47 -0
- package/roles/ai-regression-scout.md +47 -0
- package/roles/browser-qa-runner.md +47 -0
- package/roles/code-reviewer.md +47 -0
- package/roles/code-scout.md +47 -0
- package/roles/convergence-reviewer.md +55 -0
- package/roles/doc-researcher.md +47 -0
- package/roles/e2e-artifact-runner.md +47 -0
- package/roles/implementer.md +47 -0
- package/roles/opensource-sanitizer.md +47 -0
- package/roles/plan-auditor.md +47 -0
- package/roles/pr-test-analyzer.md +47 -0
- package/roles/security-auditor.md +47 -0
- package/roles/silent-failure-reviewer.md +47 -0
- package/roles/spec-miner.md +47 -0
- package/roles/test-coverage-reviewer.md +47 -0
- package/roles/test-engineer.md +48 -0
- package/roles/web-performance-auditor.md +47 -0
- package/roles/web-researcher.md +47 -0
- package/scripts/apply-adapter-evidence.ts +73 -0
- package/scripts/bootstrap.sh +180 -0
- package/scripts/generate-provenance.ts +143 -0
- package/scripts/local-package-e2e.ts +51 -0
- package/scripts/sync-roles.ts +213 -0
- package/scripts/sync-skills.ts +356 -0
- package/scripts/validate-runtime.ts +11 -0
- package/skills/academic-paper-review/SKILL.md +81 -0
- package/skills/agents-md-initialization/SKILL.md +121 -0
- package/skills/agents-md-initialization/references/agents-template.md +83 -0
- package/skills/agents-md-initialization/references/agents_md.py +215 -0
- package/skills/ai-regression-scout/SKILL.md +24 -0
- package/skills/aili-delivery-flow/SKILL.md +125 -0
- package/skills/aili-delivery-flow/references/artifact-contracts.md +138 -0
- package/skills/aili-delivery-flow/references/backend-routing.md +40 -0
- package/skills/aili-delivery-flow/references/build-execution-loop.md +113 -0
- package/skills/aili-delivery-flow/references/build-goal-mode.md +3 -0
- package/skills/aili-delivery-flow/references/direct-vs-delegated-work.md +38 -0
- package/skills/aili-delivery-flow/references/implementation-packages.md +54 -0
- package/skills/aili-delivery-flow/references/lifecycle.md +127 -0
- package/skills/aili-delivery-flow/references/protocols/acceptance-test-plan.md +18 -0
- package/skills/aili-delivery-flow/references/protocols/alignment-questionnaire.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/closeout-report.md +101 -0
- package/skills/aili-delivery-flow/references/protocols/compact-evidence-pack.md +46 -0
- package/skills/aili-delivery-flow/references/protocols/idea-brief.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/implementation-package.md +53 -0
- package/skills/aili-delivery-flow/references/protocols/research-evidence-pack.md +19 -0
- package/skills/aili-delivery-flow/references/protocols/review-report.md +7 -0
- package/skills/aili-delivery-flow/references/protocols/spec-draft.md +12 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-result.md +60 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-task-packet.md +29 -0
- package/skills/aili-delivery-flow/references/protocols/worktree-context.md +109 -0
- package/skills/aili-delivery-flow/references/questionnaire-policy.md +62 -0
- package/skills/aili-delivery-flow/references/review-repair-loop.md +16 -0
- package/skills/aili-delivery-flow/references/test-document-policy.md +35 -0
- package/skills/android-native-dev/SKILL.md +722 -0
- package/skills/android-native-dev/references/accessibility.md +209 -0
- package/skills/android-native-dev/references/adaptive-screens.md +231 -0
- package/skills/android-native-dev/references/design-style-guide.md +365 -0
- package/skills/android-native-dev/references/functional-requirements.md +229 -0
- package/skills/android-native-dev/references/motion-system.md +203 -0
- package/skills/android-native-dev/references/performance-stability.md +223 -0
- package/skills/android-native-dev/references/privacy-security.md +244 -0
- package/skills/android-native-dev/references/testing.md +554 -0
- package/skills/android-native-dev/references/visual-design.md +246 -0
- package/skills/api-and-interface-design/SKILL.md +318 -0
- package/skills/browser-qa/SKILL.md +32 -0
- package/skills/browser-testing-with-devtools/SKILL.md +323 -0
- package/skills/build-failure-repair/SKILL.md +49 -0
- package/skills/chart-visualization/SKILL.md +73 -0
- package/skills/ci-cd-and-automation/SKILL.md +353 -0
- package/skills/code-review-and-quality/SKILL.md +375 -0
- package/skills/code-review-quality-gates/SKILL.md +132 -0
- package/skills/code-simplification/SKILL.md +371 -0
- package/skills/comment-accuracy-review/SKILL.md +37 -0
- package/skills/consulting-analysis/SKILL.md +69 -0
- package/skills/context-engineering/SKILL.md +375 -0
- package/skills/coverage-review/SKILL.md +24 -0
- package/skills/data-analysis/SKILL.md +74 -0
- package/skills/deprecation-and-migration/SKILL.md +222 -0
- package/skills/documentation-and-adrs/SKILL.md +330 -0
- package/skills/e2e-artifact-handling/SKILL.md +30 -0
- package/skills/evidence-scoped-retrospective/SKILL.md +156 -0
- package/skills/explain-by-allegory/SKILL.md +99 -0
- package/skills/flutter-dev/SKILL.md +162 -0
- package/skills/flutter-dev/references/animations.md +497 -0
- package/skills/flutter-dev/references/bloc-state.md +281 -0
- package/skills/flutter-dev/references/forms.md +656 -0
- package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
- package/skills/flutter-dev/references/localization.md +510 -0
- package/skills/flutter-dev/references/networking.md +566 -0
- package/skills/flutter-dev/references/performance.md +305 -0
- package/skills/flutter-dev/references/platform-specific.md +417 -0
- package/skills/flutter-dev/references/project-structure.md +273 -0
- package/skills/flutter-dev/references/riverpod-state.md +232 -0
- package/skills/flutter-dev/references/testing.md +364 -0
- package/skills/flutter-dev/references/widget-patterns.md +233 -0
- package/skills/frontend-dev/SKILL.md +468 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
- package/skills/frontend-dev/references/env-setup.md +33 -0
- package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
- package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
- package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
- package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
- package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
- package/skills/frontend-dev/references/minimax-voice-catalog.md +685 -0
- package/skills/frontend-dev/references/motion-recipes.md +407 -0
- package/skills/frontend-dev/references/troubleshooting.md +85 -0
- package/skills/frontend-dev/scripts/minimax_image.py +137 -0
- package/skills/frontend-dev/scripts/minimax_music.py +157 -0
- package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
- package/skills/frontend-dev/scripts/minimax_video.py +187 -0
- package/skills/frontend-dev/templates/generator_template.js +223 -0
- package/skills/frontend-dev/templates/viewer.html +599 -0
- package/skills/frontend-ui-engineering/SKILL.md +367 -0
- package/skills/fullstack-dev/SKILL.md +819 -0
- package/skills/fullstack-dev/references/api-design.md +444 -0
- package/skills/fullstack-dev/references/auth-flow.md +165 -0
- package/skills/fullstack-dev/references/db-schema.md +706 -0
- package/skills/fullstack-dev/references/django-best-practices.md +466 -0
- package/skills/fullstack-dev/references/environment-management.md +78 -0
- package/skills/fullstack-dev/references/release-checklist.md +278 -0
- package/skills/fullstack-dev/references/technology-selection.md +254 -0
- package/skills/fullstack-dev/references/testing-strategy.md +404 -0
- package/skills/git-workflow-and-versioning/SKILL.md +446 -0
- package/skills/github-evidence-triage/SKILL.md +115 -0
- package/skills/harness-evolution/SKILL.md +59 -0
- package/skills/harness-evolution/references/activation-matrix.md +13 -0
- package/skills/harness-evolution/references/approval-policy.md +20 -0
- package/skills/harness-evolution/references/change-report-template.md +33 -0
- package/skills/harness-evolution/references/component-taxonomy.md +19 -0
- package/skills/harness-evolution/references/verdict-policy.md +13 -0
- package/skills/harness-issue-triage/SKILL.md +72 -0
- package/skills/harness-issue-triage/references/component-diagnosis.md +25 -0
- package/skills/harness-issue-triage/references/triage-report-template.md +34 -0
- package/skills/harness-optimization-audit/SKILL.md +125 -0
- package/skills/idea-refine/SKILL.md +191 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/SKILL.upstream.md +178 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/examples.md +238 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/frameworks.md +99 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/refinement-criteria.md +113 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/scripts/idea-refine.upstream.sh +15 -0
- package/skills/incremental-implementation/SKILL.md +252 -0
- package/skills/ios-application-dev/SKILL.md +212 -0
- package/skills/ios-application-dev/references/accessibility.md +259 -0
- package/skills/ios-application-dev/references/graphics-animation.md +350 -0
- package/skills/ios-application-dev/references/layout-system.md +199 -0
- package/skills/ios-application-dev/references/metal-shader.md +178 -0
- package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
- package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
- package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
- package/skills/ios-application-dev/references/system-integration.md +401 -0
- package/skills/ios-application-dev/references/uikit-components.md +297 -0
- package/skills/local-review-gate/SKILL.md +207 -0
- package/skills/local-review-gate/references/addyosmani-code-review-rubric.md +33 -0
- package/skills/local-review-gate/references/codex-github-compatibility.md +26 -0
- package/skills/local-review-gate/references/ecc-code-review-adaptation.md +40 -0
- package/skills/local-review-gate/references/graphify-local-review.md +33 -0
- package/skills/local-review-gate/references/orchestration-adaptation.md +51 -0
- package/skills/local-review-gate/references/review-repair-lane-adaptation.md +46 -0
- package/skills/local-review-gate/references/upstream-provenance.md +61 -0
- package/skills/mature-project-pattern-research/SKILL.md +155 -0
- package/skills/mature-project-pattern-research/references/research-rubric.md +45 -0
- package/skills/minimax-docx/LICENSE +21 -0
- package/skills/minimax-docx/SKILL.md +273 -0
- package/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
- package/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
- package/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
- package/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
- package/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
- package/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
- package/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
- package/skills/minimax-docx/references/cjk_typography.md +357 -0
- package/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
- package/skills/minimax-docx/references/comments_guide.md +191 -0
- package/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
- package/skills/minimax-docx/references/design_principles.md +819 -0
- package/skills/minimax-docx/references/openxml_element_order.md +308 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
- package/skills/minimax-docx/references/openxml_namespaces.md +82 -0
- package/skills/minimax-docx/references/openxml_units.md +72 -0
- package/skills/minimax-docx/references/scenario_a_create.md +284 -0
- package/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
- package/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
- package/skills/minimax-docx/references/track_changes_guide.md +200 -0
- package/skills/minimax-docx/references/troubleshooting.md +506 -0
- package/skills/minimax-docx/references/typography_guide.md +294 -0
- package/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
- package/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
- package/skills/minimax-docx/scripts/docx_preview.sh +37 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/skills/minimax-docx/scripts/env_check.sh +196 -0
- package/skills/minimax-docx/scripts/setup.ps1 +274 -0
- package/skills/minimax-docx/scripts/setup.sh +504 -0
- package/skills/minimax-pdf/README.md +222 -0
- package/skills/minimax-pdf/SKILL.md +218 -0
- package/skills/minimax-pdf/design/design.md +381 -0
- package/skills/minimax-pdf/scripts/cover.py +1579 -0
- package/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
- package/skills/minimax-pdf/scripts/fill_write.py +242 -0
- package/skills/minimax-pdf/scripts/make.sh +491 -0
- package/skills/minimax-pdf/scripts/merge.py +112 -0
- package/skills/minimax-pdf/scripts/palette.py +521 -0
- package/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
- package/skills/minimax-pdf/scripts/render_body.py +1052 -0
- package/skills/minimax-pdf/scripts/render_cover.js +111 -0
- package/skills/minimax-xlsx/SKILL.md +156 -0
- package/skills/minimax-xlsx/references/create.md +691 -0
- package/skills/minimax-xlsx/references/edit.md +684 -0
- package/skills/minimax-xlsx/references/fix.md +37 -0
- package/skills/minimax-xlsx/references/format.md +768 -0
- package/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
- package/skills/minimax-xlsx/references/read-analyze.md +97 -0
- package/skills/minimax-xlsx/references/validate.md +772 -0
- package/skills/minimax-xlsx/scripts/formula_check.py +422 -0
- package/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
- package/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
- package/skills/minimax-xlsx/scripts/style_audit.py +575 -0
- package/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
- package/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
- package/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
- package/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
- package/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
- package/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
- package/skills/newsletter-generation/SKILL.md +71 -0
- package/skills/oss-release-readiness/SKILL.md +47 -0
- package/skills/parallel-subagent-dispatch/SKILL.md +58 -0
- package/skills/performance-optimization/SKILL.md +364 -0
- package/skills/planning-and-task-breakdown/SKILL.md +290 -0
- package/skills/pptx-generator/SKILL.md +275 -0
- package/skills/pptx-generator/references/design-system.md +392 -0
- package/skills/pptx-generator/references/editing.md +162 -0
- package/skills/pptx-generator/references/pitfalls.md +112 -0
- package/skills/pptx-generator/references/pptxgenjs.md +420 -0
- package/skills/pptx-generator/references/slide-types.md +413 -0
- package/skills/pr-test-analysis/SKILL.md +24 -0
- package/skills/react-native-dev/SKILL.md +180 -0
- package/skills/react-native-dev/references/animations.md +254 -0
- package/skills/react-native-dev/references/components.md +124 -0
- package/skills/react-native-dev/references/engineering.md +527 -0
- package/skills/react-native-dev/references/forms.md +300 -0
- package/skills/react-native-dev/references/native-capabilities.md +163 -0
- package/skills/react-native-dev/references/navigation.md +271 -0
- package/skills/react-native-dev/references/networking.md +346 -0
- package/skills/react-native-dev/references/performance.md +215 -0
- package/skills/react-native-dev/references/state-management.md +230 -0
- package/skills/react-native-dev/references/styling.md +117 -0
- package/skills/react-native-dev/references/testing.md +341 -0
- package/skills/requirements-grilling/SKILL.md +447 -0
- package/skills/requirements-grilling/references/ADR-FORMAT.md +46 -0
- package/skills/requirements-grilling/references/CONTEXT-FORMAT.md +41 -0
- package/skills/requirements-grilling/references/INTERVIEW-PACKET-FORMAT.md +62 -0
- package/skills/requirements-grilling/references/MIT-LICENSE-MATT-POCOCK.md +25 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/interview-me/SKILL.upstream.md +225 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/NOTICE.md +12 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/batch-grill-me/SKILL.upstream.md +15 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grill-me/SKILL.upstream.md +7 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grilling/SKILL.upstream.md +12 -0
- package/skills/review-pipeline/SKILL.md +38 -0
- package/skills/rose-memory/SKILL.md +210 -0
- package/skills/rose-memory/references/README.md +48 -0
- package/skills/rose-memory/references/memory_cli.py +2384 -0
- package/skills/rose-memory/references/schema.sql +315 -0
- package/skills/security-and-hardening/SKILL.md +369 -0
- package/skills/session-handoff/SKILL.md +88 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/handoff/SKILL.upstream.md +16 -0
- package/skills/session-handoff/scripts/session_handoff.py +764 -0
- package/skills/shader-dev/SKILL.md +316 -0
- package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
- package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
- package/skills/shader-dev/reference/anti-aliasing.md +71 -0
- package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
- package/skills/shader-dev/reference/camera-effects.md +80 -0
- package/skills/shader-dev/reference/cellular-automata.md +635 -0
- package/skills/shader-dev/reference/color-palette.md +481 -0
- package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
- package/skills/shader-dev/reference/domain-repetition.md +436 -0
- package/skills/shader-dev/reference/domain-warping.md +419 -0
- package/skills/shader-dev/reference/fluid-simulation.md +425 -0
- package/skills/shader-dev/reference/fractal-rendering.md +525 -0
- package/skills/shader-dev/reference/lighting-model.md +639 -0
- package/skills/shader-dev/reference/matrix-transform.md +535 -0
- package/skills/shader-dev/reference/multipass-buffer.md +571 -0
- package/skills/shader-dev/reference/normal-estimation.md +418 -0
- package/skills/shader-dev/reference/particle-system.md +589 -0
- package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
- package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
- package/skills/shader-dev/reference/post-processing.md +375 -0
- package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
- package/skills/shader-dev/reference/procedural-noise.md +551 -0
- package/skills/shader-dev/reference/ray-marching.md +396 -0
- package/skills/shader-dev/reference/sdf-2d.md +724 -0
- package/skills/shader-dev/reference/sdf-3d.md +805 -0
- package/skills/shader-dev/reference/sdf-tricks.md +63 -0
- package/skills/shader-dev/reference/shadow-techniques.md +476 -0
- package/skills/shader-dev/reference/simulation-physics.md +644 -0
- package/skills/shader-dev/reference/sound-synthesis.md +578 -0
- package/skills/shader-dev/reference/terrain-rendering.md +839 -0
- package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
- package/skills/shader-dev/reference/texture-sampling.md +553 -0
- package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
- package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
- package/skills/shader-dev/reference/voxel-rendering.md +701 -0
- package/skills/shader-dev/reference/water-ocean.md +445 -0
- package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
- package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
- package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
- package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
- package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
- package/skills/shader-dev/techniques/camera-effects.md +115 -0
- package/skills/shader-dev/techniques/cellular-automata.md +531 -0
- package/skills/shader-dev/techniques/color-palette.md +380 -0
- package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
- package/skills/shader-dev/techniques/domain-repetition.md +333 -0
- package/skills/shader-dev/techniques/domain-warping.md +414 -0
- package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
- package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
- package/skills/shader-dev/techniques/lighting-model.md +527 -0
- package/skills/shader-dev/techniques/matrix-transform.md +455 -0
- package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
- package/skills/shader-dev/techniques/normal-estimation.md +318 -0
- package/skills/shader-dev/techniques/particle-system.md +1203 -0
- package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
- package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
- package/skills/shader-dev/techniques/post-processing.md +788 -0
- package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
- package/skills/shader-dev/techniques/procedural-noise.md +554 -0
- package/skills/shader-dev/techniques/ray-marching.md +467 -0
- package/skills/shader-dev/techniques/sdf-2d.md +631 -0
- package/skills/shader-dev/techniques/sdf-3d.md +589 -0
- package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
- package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
- package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
- package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
- package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
- package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
- package/skills/shader-dev/techniques/texture-sampling.md +382 -0
- package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
- package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
- package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
- package/skills/shader-dev/techniques/water-ocean.md +490 -0
- package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
- package/skills/shipping-and-launch/SKILL.md +334 -0
- package/skills/silent-failure-hunting/SKILL.md +24 -0
- package/skills/source-driven-development/SKILL.md +223 -0
- package/skills/spec-driven-development/SKILL.md +235 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/spec-driven-development/SKILL.upstream.md +206 -0
- package/skills/strategy-stress-test/SKILL.md +185 -0
- package/skills/systematic-literature-review/SKILL.md +77 -0
- package/skills/test-document-generator/SKILL.md +152 -0
- package/skills/test-document-generator/references/test-document-template.md +45 -0
- package/skills/test-driven-development/SKILL.md +399 -0
- package/skills/write-skills/GLOSSARY.md +113 -0
- package/skills/write-skills/SKILL.md +133 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/GLOSSARY.md +201 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/SKILL.upstream.md +83 -0
- package/src/runtime/child-guard.ts +70 -0
- package/src/runtime/conflicts.ts +25 -0
- package/src/runtime/contracts.ts +9 -0
- package/src/runtime/doctor.ts +134 -0
- package/src/runtime/global-resources.ts +152 -0
- package/src/runtime/index.ts +23 -0
- package/src/runtime/lifecycle.ts +19 -0
- package/src/runtime/native-integrations.ts +44 -0
- package/src/runtime/path-boundaries.ts +69 -0
- package/src/runtime/registry.ts +213 -0
- package/src/runtime/roles.ts +64 -0
- package/src/runtime/rose-context.ts +24 -0
- package/src/runtime/subagents.ts +426 -0
- package/templates/APPEND_SYSTEM.md +12 -0
- package/upstream/aili-workflows.lock.json +3226 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
|
|
2
|
+
CREATE TABLE IF NOT EXISTS schema_migration (
|
|
3
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
4
|
+
version INTEGER NOT NULL,
|
|
5
|
+
name TEXT NOT NULL,
|
|
6
|
+
checksum TEXT NOT NULL,
|
|
7
|
+
applied_at TEXT NOT NULL,
|
|
8
|
+
UNIQUE(version)
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS memory_receipt (
|
|
12
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
13
|
+
receipt_key TEXT NOT NULL UNIQUE,
|
|
14
|
+
operation TEXT NOT NULL,
|
|
15
|
+
status TEXT NOT NULL CHECK (status IN ('ok','error')),
|
|
16
|
+
payload_json TEXT NOT NULL DEFAULT '{}',
|
|
17
|
+
created_at TEXT NOT NULL
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
CREATE TABLE IF NOT EXISTS session (
|
|
21
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
22
|
+
session_key TEXT NOT NULL UNIQUE,
|
|
23
|
+
project TEXT NOT NULL,
|
|
24
|
+
agent TEXT NOT NULL,
|
|
25
|
+
started_at TEXT NOT NULL,
|
|
26
|
+
ended_at TEXT,
|
|
27
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
CREATE TABLE IF NOT EXISTS task (
|
|
31
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
32
|
+
task_key TEXT NOT NULL UNIQUE,
|
|
33
|
+
session_id INTEGER REFERENCES session(id) ON DELETE SET NULL,
|
|
34
|
+
project TEXT NOT NULL,
|
|
35
|
+
agent TEXT NOT NULL,
|
|
36
|
+
title TEXT NOT NULL,
|
|
37
|
+
scope_text TEXT NOT NULL DEFAULT '',
|
|
38
|
+
status TEXT NOT NULL CHECK (status IN ('active','blocked','completed','cancelled')),
|
|
39
|
+
started_at TEXT NOT NULL,
|
|
40
|
+
completed_at TEXT,
|
|
41
|
+
outcome TEXT,
|
|
42
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
CREATE TABLE IF NOT EXISTS memory_event (
|
|
46
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
47
|
+
session_id INTEGER REFERENCES session(id) ON DELETE SET NULL,
|
|
48
|
+
task_id INTEGER REFERENCES task(id) ON DELETE SET NULL,
|
|
49
|
+
event_type TEXT NOT NULL,
|
|
50
|
+
state TEXT,
|
|
51
|
+
summary TEXT NOT NULL DEFAULT '',
|
|
52
|
+
payload_json TEXT NOT NULL DEFAULT '{}',
|
|
53
|
+
created_at TEXT NOT NULL
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
CREATE TABLE IF NOT EXISTS memory_fact (
|
|
57
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
58
|
+
session_id INTEGER REFERENCES session(id) ON DELETE SET NULL,
|
|
59
|
+
project TEXT NOT NULL,
|
|
60
|
+
agent TEXT NOT NULL,
|
|
61
|
+
fact_key TEXT NOT NULL,
|
|
62
|
+
fact_text TEXT NOT NULL,
|
|
63
|
+
category TEXT NOT NULL,
|
|
64
|
+
confidence TEXT NOT NULL DEFAULT 'medium'
|
|
65
|
+
CHECK (confidence IN ('low','medium','high')),
|
|
66
|
+
status TEXT NOT NULL DEFAULT 'active'
|
|
67
|
+
CHECK (status IN ('active','superseded','rejected','expired')),
|
|
68
|
+
sensitive INTEGER NOT NULL DEFAULT 0 CHECK (sensitive IN (0,1)),
|
|
69
|
+
indexable INTEGER NOT NULL DEFAULT 1 CHECK (indexable IN (0,1)),
|
|
70
|
+
first_seen_at TEXT NOT NULL,
|
|
71
|
+
last_seen_at TEXT NOT NULL,
|
|
72
|
+
superseded_by INTEGER REFERENCES memory_fact(id),
|
|
73
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
74
|
+
UNIQUE(project, agent, fact_key)
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
CREATE TABLE IF NOT EXISTS claim (
|
|
78
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
79
|
+
session_id INTEGER REFERENCES session(id) ON DELETE SET NULL,
|
|
80
|
+
task_id INTEGER REFERENCES task(id) ON DELETE SET NULL,
|
|
81
|
+
project TEXT NOT NULL,
|
|
82
|
+
agent TEXT NOT NULL,
|
|
83
|
+
claim_key TEXT NOT NULL,
|
|
84
|
+
claim_text TEXT NOT NULL,
|
|
85
|
+
verification_status TEXT NOT NULL
|
|
86
|
+
CHECK (verification_status IN ('unverified','verified','disputed','superseded')),
|
|
87
|
+
evidence_summary TEXT NOT NULL DEFAULT '',
|
|
88
|
+
sensitive INTEGER NOT NULL DEFAULT 0 CHECK (sensitive IN (0,1)),
|
|
89
|
+
indexable INTEGER NOT NULL DEFAULT 1 CHECK (indexable IN (0,1)),
|
|
90
|
+
created_at TEXT NOT NULL,
|
|
91
|
+
updated_at TEXT NOT NULL,
|
|
92
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
93
|
+
UNIQUE(project, agent, claim_key)
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
CREATE TABLE IF NOT EXISTS finding (
|
|
97
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
98
|
+
session_id INTEGER REFERENCES session(id) ON DELETE SET NULL,
|
|
99
|
+
task_id INTEGER REFERENCES task(id) ON DELETE SET NULL,
|
|
100
|
+
project TEXT NOT NULL,
|
|
101
|
+
agent TEXT NOT NULL,
|
|
102
|
+
kind TEXT NOT NULL
|
|
103
|
+
CHECK (kind IN ('correction','failure','review_rejection','preference','risk','observation')),
|
|
104
|
+
category TEXT NOT NULL,
|
|
105
|
+
severity TEXT NOT NULL DEFAULT 'normal'
|
|
106
|
+
CHECK (severity IN ('low','normal','high','critical')),
|
|
107
|
+
wrong_behavior TEXT NOT NULL DEFAULT '',
|
|
108
|
+
correct_behavior TEXT NOT NULL DEFAULT '',
|
|
109
|
+
summary TEXT NOT NULL,
|
|
110
|
+
raw_ref TEXT NOT NULL DEFAULT '',
|
|
111
|
+
sensitive INTEGER NOT NULL DEFAULT 0 CHECK (sensitive IN (0,1)),
|
|
112
|
+
indexable INTEGER NOT NULL DEFAULT 1 CHECK (indexable IN (0,1)),
|
|
113
|
+
created_at TEXT NOT NULL,
|
|
114
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
CREATE TABLE IF NOT EXISTS evidence (
|
|
118
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
119
|
+
session_id INTEGER REFERENCES session(id) ON DELETE SET NULL,
|
|
120
|
+
task_id INTEGER REFERENCES task(id) ON DELETE SET NULL,
|
|
121
|
+
project TEXT NOT NULL,
|
|
122
|
+
agent TEXT NOT NULL,
|
|
123
|
+
source_type TEXT NOT NULL
|
|
124
|
+
CHECK (source_type IN ('finding','claim','memory_event','task','file','diff','test','user_confirmation')),
|
|
125
|
+
source_id INTEGER,
|
|
126
|
+
evidence_key TEXT NOT NULL,
|
|
127
|
+
evidence_text TEXT NOT NULL,
|
|
128
|
+
evidence_hash TEXT NOT NULL,
|
|
129
|
+
weight INTEGER NOT NULL DEFAULT 1 CHECK (weight >= 0),
|
|
130
|
+
sensitive INTEGER NOT NULL DEFAULT 0 CHECK (sensitive IN (0,1)),
|
|
131
|
+
indexable INTEGER NOT NULL DEFAULT 1 CHECK (indexable IN (0,1)),
|
|
132
|
+
created_at TEXT NOT NULL,
|
|
133
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
134
|
+
UNIQUE(project, agent, evidence_key)
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
CREATE TABLE IF NOT EXISTS rule_candidate (
|
|
138
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
139
|
+
project TEXT NOT NULL,
|
|
140
|
+
agent TEXT NOT NULL,
|
|
141
|
+
rule_key TEXT NOT NULL,
|
|
142
|
+
normalized_rule_hash TEXT NOT NULL,
|
|
143
|
+
rule_text TEXT NOT NULL,
|
|
144
|
+
category TEXT NOT NULL,
|
|
145
|
+
severity TEXT NOT NULL DEFAULT 'normal'
|
|
146
|
+
CHECK (severity IN ('low','normal','high','critical')),
|
|
147
|
+
status TEXT NOT NULL DEFAULT 'memory'
|
|
148
|
+
CHECK (status IN (
|
|
149
|
+
'memory',
|
|
150
|
+
'candidate',
|
|
151
|
+
'needs_reconciliation',
|
|
152
|
+
'approved',
|
|
153
|
+
'promoted',
|
|
154
|
+
'rejected',
|
|
155
|
+
'superseded',
|
|
156
|
+
'expired'
|
|
157
|
+
)),
|
|
158
|
+
score INTEGER NOT NULL DEFAULT 0 CHECK (score >= 0),
|
|
159
|
+
mention_count INTEGER NOT NULL DEFAULT 0 CHECK (mention_count >= 0),
|
|
160
|
+
session_count INTEGER NOT NULL DEFAULT 0 CHECK (session_count >= 0),
|
|
161
|
+
evidence_count INTEGER NOT NULL DEFAULT 0 CHECK (evidence_count >= 0),
|
|
162
|
+
promotion_target TEXT NOT NULL DEFAULT 'AGENTS.md',
|
|
163
|
+
target_scope TEXT NOT NULL DEFAULT 'project_root_agents'
|
|
164
|
+
CHECK (target_scope IN ('project_root_agents')),
|
|
165
|
+
conflicts_json TEXT NOT NULL DEFAULT '[]',
|
|
166
|
+
requires_user_approval INTEGER NOT NULL DEFAULT 1 CHECK (requires_user_approval IN (0,1)),
|
|
167
|
+
first_seen_at TEXT NOT NULL,
|
|
168
|
+
last_seen_at TEXT NOT NULL,
|
|
169
|
+
approved_at TEXT,
|
|
170
|
+
promoted_at TEXT,
|
|
171
|
+
superseded_by INTEGER REFERENCES rule_candidate(id),
|
|
172
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
173
|
+
UNIQUE(project, agent, rule_key)
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
CREATE TABLE IF NOT EXISTS rule_candidate_evidence (
|
|
177
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
178
|
+
rule_id INTEGER NOT NULL REFERENCES rule_candidate(id) ON DELETE CASCADE,
|
|
179
|
+
evidence_id INTEGER NOT NULL REFERENCES evidence(id) ON DELETE RESTRICT,
|
|
180
|
+
signal_type TEXT NOT NULL
|
|
181
|
+
CHECK (signal_type IN (
|
|
182
|
+
'long_term_instruction',
|
|
183
|
+
'correction_after_drift',
|
|
184
|
+
'review_rejection',
|
|
185
|
+
'ordinary_preference',
|
|
186
|
+
'evidence_backed_failure',
|
|
187
|
+
'risk_signal',
|
|
188
|
+
'user_confirmation'
|
|
189
|
+
)),
|
|
190
|
+
weight INTEGER NOT NULL CHECK (weight >= 0),
|
|
191
|
+
created_at TEXT NOT NULL,
|
|
192
|
+
UNIQUE(rule_id, evidence_id)
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
CREATE TABLE IF NOT EXISTS instruction_snapshot (
|
|
196
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
197
|
+
target_path TEXT NOT NULL,
|
|
198
|
+
target_scope TEXT NOT NULL
|
|
199
|
+
CHECK (target_scope IN ('project_root_agents')),
|
|
200
|
+
hash_algorithm TEXT NOT NULL DEFAULT 'sha256',
|
|
201
|
+
content_hash TEXT NOT NULL,
|
|
202
|
+
summary TEXT NOT NULL DEFAULT '',
|
|
203
|
+
captured_at TEXT NOT NULL,
|
|
204
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
CREATE TABLE IF NOT EXISTS rule_patch (
|
|
208
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
209
|
+
rule_id INTEGER NOT NULL REFERENCES rule_candidate(id) ON DELETE CASCADE,
|
|
210
|
+
target_path TEXT NOT NULL DEFAULT 'AGENTS.md',
|
|
211
|
+
target_scope TEXT NOT NULL DEFAULT 'project_root_agents'
|
|
212
|
+
CHECK (target_scope IN ('project_root_agents')),
|
|
213
|
+
base_snapshot_id INTEGER NOT NULL REFERENCES instruction_snapshot(id),
|
|
214
|
+
base_hash TEXT NOT NULL,
|
|
215
|
+
patch_hash TEXT NOT NULL,
|
|
216
|
+
proposed_rule_hash TEXT NOT NULL,
|
|
217
|
+
patch_text TEXT NOT NULL,
|
|
218
|
+
status TEXT NOT NULL DEFAULT 'proposed'
|
|
219
|
+
CHECK (status IN ('proposed','approved','rejected','applied','stale','failed')),
|
|
220
|
+
created_at TEXT NOT NULL,
|
|
221
|
+
updated_at TEXT NOT NULL,
|
|
222
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
CREATE TABLE IF NOT EXISTS rule_decision (
|
|
226
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
227
|
+
rule_id INTEGER NOT NULL REFERENCES rule_candidate(id) ON DELETE CASCADE,
|
|
228
|
+
patch_id INTEGER NOT NULL REFERENCES rule_patch(id) ON DELETE CASCADE,
|
|
229
|
+
decision TEXT NOT NULL
|
|
230
|
+
CHECK (decision IN ('approved','rejected','superseded','needs_reconciliation')),
|
|
231
|
+
approved_rule_hash TEXT,
|
|
232
|
+
approved_patch_hash TEXT,
|
|
233
|
+
actor TEXT NOT NULL,
|
|
234
|
+
reason TEXT NOT NULL DEFAULT '',
|
|
235
|
+
decided_at TEXT NOT NULL,
|
|
236
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
237
|
+
);
|
|
238
|
+
|
|
239
|
+
CREATE TABLE IF NOT EXISTS rule_promotion (
|
|
240
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
241
|
+
rule_id INTEGER NOT NULL REFERENCES rule_candidate(id) ON DELETE CASCADE,
|
|
242
|
+
patch_id INTEGER NOT NULL REFERENCES rule_patch(id) ON DELETE CASCADE,
|
|
243
|
+
decision_id INTEGER NOT NULL REFERENCES rule_decision(id) ON DELETE RESTRICT,
|
|
244
|
+
mode TEXT NOT NULL CHECK (mode IN ('apply','record_applied')),
|
|
245
|
+
target_path TEXT NOT NULL,
|
|
246
|
+
old_target_hash TEXT NOT NULL,
|
|
247
|
+
new_target_hash TEXT NOT NULL,
|
|
248
|
+
applied_by TEXT NOT NULL,
|
|
249
|
+
applied_at TEXT NOT NULL,
|
|
250
|
+
metadata_json TEXT NOT NULL DEFAULT '{}',
|
|
251
|
+
UNIQUE(patch_id)
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
CREATE TABLE IF NOT EXISTS audit_run (
|
|
255
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
256
|
+
audit_key TEXT NOT NULL UNIQUE,
|
|
257
|
+
operation TEXT NOT NULL,
|
|
258
|
+
status TEXT NOT NULL CHECK (status IN ('ok','error')),
|
|
259
|
+
checks_json TEXT NOT NULL DEFAULT '{}',
|
|
260
|
+
created_at TEXT NOT NULL
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
CREATE TABLE IF NOT EXISTS search_doc (
|
|
264
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
265
|
+
project TEXT NOT NULL,
|
|
266
|
+
agent TEXT NOT NULL,
|
|
267
|
+
doc_type TEXT NOT NULL,
|
|
268
|
+
source_table TEXT,
|
|
269
|
+
source_id INTEGER,
|
|
270
|
+
title TEXT NOT NULL DEFAULT '',
|
|
271
|
+
body TEXT NOT NULL,
|
|
272
|
+
summary TEXT NOT NULL DEFAULT '',
|
|
273
|
+
sensitive INTEGER NOT NULL DEFAULT 0 CHECK (sensitive IN (0,1)),
|
|
274
|
+
indexable INTEGER NOT NULL DEFAULT 1 CHECK (indexable IN (0,1)),
|
|
275
|
+
created_at TEXT NOT NULL,
|
|
276
|
+
updated_at TEXT NOT NULL,
|
|
277
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_search_doc_source
|
|
281
|
+
ON search_doc(project, agent, source_table, source_id)
|
|
282
|
+
WHERE source_table IS NOT NULL AND source_id IS NOT NULL;
|
|
283
|
+
|
|
284
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS search_fts USING fts5(
|
|
285
|
+
title,
|
|
286
|
+
body,
|
|
287
|
+
summary,
|
|
288
|
+
content='search_doc',
|
|
289
|
+
content_rowid='id'
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
CREATE TRIGGER IF NOT EXISTS search_doc_ai AFTER INSERT ON search_doc
|
|
293
|
+
WHEN new.sensitive = 0 AND new.indexable = 1
|
|
294
|
+
BEGIN
|
|
295
|
+
INSERT INTO search_fts(rowid, title, body, summary)
|
|
296
|
+
VALUES (new.id, new.title, new.body, new.summary);
|
|
297
|
+
END;
|
|
298
|
+
|
|
299
|
+
CREATE TRIGGER IF NOT EXISTS search_doc_ad AFTER DELETE ON search_doc
|
|
300
|
+
WHEN old.sensitive = 0 AND old.indexable = 1
|
|
301
|
+
BEGIN
|
|
302
|
+
INSERT INTO search_fts(search_fts, rowid, title, body, summary)
|
|
303
|
+
VALUES ('delete', old.id, old.title, old.body, old.summary);
|
|
304
|
+
END;
|
|
305
|
+
|
|
306
|
+
CREATE TRIGGER IF NOT EXISTS search_doc_au AFTER UPDATE ON search_doc
|
|
307
|
+
BEGIN
|
|
308
|
+
INSERT INTO search_fts(search_fts, rowid, title, body, summary)
|
|
309
|
+
SELECT 'delete', old.id, old.title, old.body, old.summary
|
|
310
|
+
WHERE old.sensitive = 0 AND old.indexable = 1;
|
|
311
|
+
|
|
312
|
+
INSERT INTO search_fts(rowid, title, body, summary)
|
|
313
|
+
SELECT new.id, new.title, new.body, new.summary
|
|
314
|
+
WHERE new.sensitive = 0 AND new.indexable = 1;
|
|
315
|
+
END;
|
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: security-and-hardening
|
|
3
|
+
description: Perform a bounded security design/hardening pass for explicit security or threat-model intent, or a concrete auth/authorization/secret/untrusted-input/file-upload/sensitive-data risk; do not trigger for every input, data store, third-party call, implementation, review, or release.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Security and Hardening
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Security-first development practices for web applications. Treat every external input as hostile, every secret as sacred, and every authorization check as mandatory. Security isn't a phase — it's a constraint on every line of code that touches user data, authentication, or external systems.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- The user explicitly asks for security review, hardening, or threat modeling.
|
|
15
|
+
- The accepted scope changes authentication, authorization, sessions, secrets, permissions, sensitive/PII/payment data, uploads, or another named trust boundary.
|
|
16
|
+
- A concrete untrusted-input or external-callback path has a material vulnerability question the primary owner cannot resolve inline.
|
|
17
|
+
|
|
18
|
+
Near misses: ordinary validated form work, a routine API call, generic data storage, release preparation, or code review without a named security gap does not select this skill automatically.
|
|
19
|
+
|
|
20
|
+
ROSE/`aili-delivery-flow` owns lifecycle state, material decisions, exact security-sensitive operation approvals, and verification. This skill performs one bounded security loop and returns `complete`, `need-user`, `need-evidence`, `material-delta`, `blocked`, or `Unverified`. It does not invoke review, audit, testing, source research, release, or another process skill. Exact auth/security/dependency/external/secret gates and canonical claim-matched verification override generic checklist breadth below.
|
|
21
|
+
|
|
22
|
+
## The Three-Tier Boundary System
|
|
23
|
+
|
|
24
|
+
### Always Do (No Exceptions)
|
|
25
|
+
|
|
26
|
+
- **Validate all external input** at the system boundary (API routes, form handlers)
|
|
27
|
+
- **Parameterize all database queries** — never concatenate user input into SQL
|
|
28
|
+
- **Encode output** to prevent XSS (use framework auto-escaping, don't bypass it)
|
|
29
|
+
- **Use HTTPS** for all external communication
|
|
30
|
+
- **Hash passwords** with bcrypt/scrypt/argon2 (never store plaintext)
|
|
31
|
+
- **Set security headers** (CSP, HSTS, X-Frame-Options, X-Content-Type-Options)
|
|
32
|
+
- **Use httpOnly, secure, sameSite cookies** for sessions
|
|
33
|
+
- **Use current dependency-advisory evidence** when the selected release/security claim needs it; never run a network-capable audit automatically
|
|
34
|
+
|
|
35
|
+
### Ask First (Requires Human Approval)
|
|
36
|
+
|
|
37
|
+
- Adding new authentication flows or changing auth logic
|
|
38
|
+
- Storing new categories of sensitive data (PII, payment info)
|
|
39
|
+
- Adding new external service integrations
|
|
40
|
+
- Changing CORS configuration
|
|
41
|
+
- Adding file upload handlers
|
|
42
|
+
- Modifying rate limiting or throttling
|
|
43
|
+
- Granting elevated permissions or roles
|
|
44
|
+
|
|
45
|
+
🔴 **CHECKPOINT — High-risk security decisions:** stop for explicit approval before changing authentication/session behavior, storing or exposing new PII, relaxing CORS, adding uploads, changing authorization roles, or weakening rate limits/security headers. State the threat, data affected, and rollback path before editing.
|
|
46
|
+
|
|
47
|
+
### Never Do
|
|
48
|
+
|
|
49
|
+
- **Never commit secrets** to version control (API keys, passwords, tokens)
|
|
50
|
+
- **Never log sensitive data** (passwords, tokens, full credit card numbers)
|
|
51
|
+
- **Never trust client-side validation** as a security boundary
|
|
52
|
+
- **Never disable security headers** for convenience
|
|
53
|
+
- **Never use `eval()` or `innerHTML`** with user-provided data
|
|
54
|
+
- **Never store sessions in client-accessible storage** (localStorage for auth tokens)
|
|
55
|
+
- **Never expose stack traces** or internal error details to users
|
|
56
|
+
|
|
57
|
+
## Security Decision Gates
|
|
58
|
+
|
|
59
|
+
| Area | Stop before | Required evidence before implementation |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| Auth/session | New login flow, token storage change, OAuth provider, password reset | Current auth model, token lifetime/storage, revocation/error path |
|
|
62
|
+
| PII/payment | New field, logging, analytics, export, third-party sharing | Data classification, minimization plan, encryption/redaction rule |
|
|
63
|
+
| CORS | Adding wildcard, credentials, new origins, proxy bypass | Exact allowed origins, credential need, environment-specific config |
|
|
64
|
+
| Uploads | New file type, larger size, public storage, direct-to-cloud flow | MIME + magic-byte check, max size, storage ACL, malware/quarantine plan |
|
|
65
|
+
|
|
66
|
+
If the evidence is missing, return a clarification request instead of implementing a permissive default.
|
|
67
|
+
|
|
68
|
+
## OWASP Top 10 Prevention
|
|
69
|
+
|
|
70
|
+
### 1. Injection (SQL, NoSQL, OS Command)
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
// BAD: SQL injection via string concatenation
|
|
74
|
+
const query = `SELECT * FROM users WHERE id = '${userId}'`;
|
|
75
|
+
|
|
76
|
+
// GOOD: Parameterized query
|
|
77
|
+
const user = await db.query('SELECT * FROM users WHERE id = $1', [userId]);
|
|
78
|
+
|
|
79
|
+
// GOOD: ORM with parameterized input
|
|
80
|
+
const user = await prisma.user.findUnique({ where: { id: userId } });
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 2. Broken Authentication
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
// Password hashing
|
|
87
|
+
import { hash, compare } from 'bcrypt';
|
|
88
|
+
|
|
89
|
+
const SALT_ROUNDS = 12;
|
|
90
|
+
const hashedPassword = await hash(plaintext, SALT_ROUNDS);
|
|
91
|
+
const isValid = await compare(plaintext, hashedPassword);
|
|
92
|
+
|
|
93
|
+
// Session management
|
|
94
|
+
app.use(session({
|
|
95
|
+
secret: process.env.SESSION_SECRET, // From environment, not code
|
|
96
|
+
resave: false,
|
|
97
|
+
saveUninitialized: false,
|
|
98
|
+
cookie: {
|
|
99
|
+
httpOnly: true, // Not accessible via JavaScript
|
|
100
|
+
secure: true, // HTTPS only
|
|
101
|
+
sameSite: 'lax', // CSRF protection
|
|
102
|
+
maxAge: 24 * 60 * 60 * 1000, // 24 hours
|
|
103
|
+
},
|
|
104
|
+
}));
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 3. Cross-Site Scripting (XSS)
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// BAD: Rendering user input as HTML
|
|
111
|
+
element.innerHTML = userInput;
|
|
112
|
+
|
|
113
|
+
// GOOD: Use framework auto-escaping (React does this by default)
|
|
114
|
+
return <div>{userInput}</div>;
|
|
115
|
+
|
|
116
|
+
// If you MUST render HTML, sanitize first
|
|
117
|
+
import DOMPurify from 'dompurify';
|
|
118
|
+
const clean = DOMPurify.sanitize(userInput);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### 4. Broken Access Control
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
// Always check authorization, not just authentication
|
|
125
|
+
app.patch('/api/tasks/:id', authenticate, async (req, res) => {
|
|
126
|
+
const task = await taskService.findById(req.params.id);
|
|
127
|
+
|
|
128
|
+
// Check that the authenticated user owns this resource
|
|
129
|
+
if (task.ownerId !== req.user.id) {
|
|
130
|
+
return res.status(403).json({
|
|
131
|
+
error: { code: 'FORBIDDEN', message: 'Not authorized to modify this task' }
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Proceed with update
|
|
136
|
+
const updated = await taskService.update(req.params.id, req.body);
|
|
137
|
+
return res.json(updated);
|
|
138
|
+
});
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 5. Security Misconfiguration
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
// Security headers (use helmet for Express)
|
|
145
|
+
import helmet from 'helmet';
|
|
146
|
+
app.use(helmet());
|
|
147
|
+
|
|
148
|
+
// Content Security Policy
|
|
149
|
+
app.use(helmet.contentSecurityPolicy({
|
|
150
|
+
directives: {
|
|
151
|
+
defaultSrc: ["'self'"],
|
|
152
|
+
scriptSrc: ["'self'"],
|
|
153
|
+
styleSrc: ["'self'", "'unsafe-inline'"], // Tighten if possible
|
|
154
|
+
imgSrc: ["'self'", 'data:', 'https:'],
|
|
155
|
+
connectSrc: ["'self'"],
|
|
156
|
+
},
|
|
157
|
+
}));
|
|
158
|
+
|
|
159
|
+
// CORS — restrict to known origins
|
|
160
|
+
app.use(cors({
|
|
161
|
+
origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
|
|
162
|
+
credentials: true,
|
|
163
|
+
}));
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 6. Sensitive Data Exposure
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
// Never return sensitive fields in API responses
|
|
170
|
+
function sanitizeUser(user: UserRecord): PublicUser {
|
|
171
|
+
const { passwordHash, resetToken, ...publicFields } = user;
|
|
172
|
+
return publicFields;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Use environment variables for secrets
|
|
176
|
+
const API_KEY = process.env.STRIPE_API_KEY;
|
|
177
|
+
if (!API_KEY) throw new Error('STRIPE_API_KEY not configured');
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Input Validation Patterns
|
|
181
|
+
|
|
182
|
+
### Schema Validation at Boundaries
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
import { z } from 'zod';
|
|
186
|
+
|
|
187
|
+
const CreateTaskSchema = z.object({
|
|
188
|
+
title: z.string().min(1).max(200).trim(),
|
|
189
|
+
description: z.string().max(2000).optional(),
|
|
190
|
+
priority: z.enum(['low', 'medium', 'high']).default('medium'),
|
|
191
|
+
dueDate: z.string().datetime().optional(),
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// Validate at the route handler
|
|
195
|
+
app.post('/api/tasks', async (req, res) => {
|
|
196
|
+
const result = CreateTaskSchema.safeParse(req.body);
|
|
197
|
+
if (!result.success) {
|
|
198
|
+
return res.status(422).json({
|
|
199
|
+
error: {
|
|
200
|
+
code: 'VALIDATION_ERROR',
|
|
201
|
+
message: 'Invalid input',
|
|
202
|
+
details: result.error.flatten(),
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
// result.data is now typed and validated
|
|
207
|
+
const task = await taskService.create(result.data);
|
|
208
|
+
return res.status(201).json(task);
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### File Upload Safety
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// Restrict file types and sizes
|
|
216
|
+
const ALLOWED_TYPES = ['image/jpeg', 'image/png', 'image/webp'];
|
|
217
|
+
const MAX_SIZE = 5 * 1024 * 1024; // 5MB
|
|
218
|
+
|
|
219
|
+
function validateUpload(file: UploadedFile) {
|
|
220
|
+
if (!ALLOWED_TYPES.includes(file.mimetype)) {
|
|
221
|
+
throw new ValidationError('File type not allowed');
|
|
222
|
+
}
|
|
223
|
+
if (file.size > MAX_SIZE) {
|
|
224
|
+
throw new ValidationError('File too large (max 5MB)');
|
|
225
|
+
}
|
|
226
|
+
// Don't trust the file extension — check magic bytes if critical
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## Triaging npm audit Results
|
|
231
|
+
|
|
232
|
+
Not all audit findings require immediate action. Use this decision tree:
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
npm audit reports a vulnerability
|
|
236
|
+
├── Severity: critical or high
|
|
237
|
+
│ ├── Is the vulnerable code reachable in your app?
|
|
238
|
+
│ │ ├── YES --> Fix immediately (update, patch, or replace the dependency)
|
|
239
|
+
│ │ └── NO (dev-only dep, unused code path) --> Fix soon, but not a blocker
|
|
240
|
+
│ └── Is a fix available?
|
|
241
|
+
│ ├── YES --> Update to the patched version
|
|
242
|
+
│ └── NO --> Check for workarounds, consider replacing the dependency, or add to allowlist with a review date
|
|
243
|
+
├── Severity: moderate
|
|
244
|
+
│ ├── Reachable in production? --> Fix in the next release cycle
|
|
245
|
+
│ └── Dev-only? --> Fix when convenient, track in backlog
|
|
246
|
+
└── Severity: low
|
|
247
|
+
└── Track and fix during regular dependency updates
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Key questions:**
|
|
251
|
+
- Is the vulnerable function actually called in your code path?
|
|
252
|
+
- Is the dependency a runtime dependency or dev-only?
|
|
253
|
+
- Is the vulnerability exploitable given your deployment context (e.g., a server-side vulnerability in a client-only app)?
|
|
254
|
+
|
|
255
|
+
When you defer a fix, document the reason and set a review date.
|
|
256
|
+
|
|
257
|
+
## Rate Limiting
|
|
258
|
+
|
|
259
|
+
```typescript
|
|
260
|
+
import rateLimit from 'express-rate-limit';
|
|
261
|
+
|
|
262
|
+
// General API rate limit
|
|
263
|
+
app.use('/api/', rateLimit({
|
|
264
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
265
|
+
max: 100, // 100 requests per window
|
|
266
|
+
standardHeaders: true,
|
|
267
|
+
legacyHeaders: false,
|
|
268
|
+
}));
|
|
269
|
+
|
|
270
|
+
// Stricter limit for auth endpoints
|
|
271
|
+
app.use('/api/auth/', rateLimit({
|
|
272
|
+
windowMs: 15 * 60 * 1000,
|
|
273
|
+
max: 10, // 10 attempts per 15 minutes
|
|
274
|
+
}));
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Secrets Management
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
.env files:
|
|
281
|
+
├── .env.example → Committed (template with placeholder values)
|
|
282
|
+
├── .env → NOT committed (contains real secrets)
|
|
283
|
+
└── .env.local → NOT committed (local overrides)
|
|
284
|
+
|
|
285
|
+
.gitignore must include:
|
|
286
|
+
.env
|
|
287
|
+
.env.local
|
|
288
|
+
.env.*.local
|
|
289
|
+
*.pem
|
|
290
|
+
*.key
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Always check before committing:**
|
|
294
|
+
```bash
|
|
295
|
+
# Check for accidentally staged secrets
|
|
296
|
+
git diff --cached | grep -i "password\|secret\|api_key\|token"
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
## Security Review Checklist
|
|
300
|
+
|
|
301
|
+
```markdown
|
|
302
|
+
### Authentication
|
|
303
|
+
- [ ] Passwords hashed with bcrypt/scrypt/argon2 (salt rounds ≥ 12)
|
|
304
|
+
- [ ] Session tokens are httpOnly, secure, sameSite
|
|
305
|
+
- [ ] Login has rate limiting
|
|
306
|
+
- [ ] Password reset tokens expire
|
|
307
|
+
|
|
308
|
+
### Authorization
|
|
309
|
+
- [ ] Every endpoint checks user permissions
|
|
310
|
+
- [ ] Users can only access their own resources
|
|
311
|
+
- [ ] Admin actions require admin role verification
|
|
312
|
+
|
|
313
|
+
### Input
|
|
314
|
+
- [ ] All user input validated at the boundary
|
|
315
|
+
- [ ] SQL queries are parameterized
|
|
316
|
+
- [ ] HTML output is encoded/escaped
|
|
317
|
+
|
|
318
|
+
### Data
|
|
319
|
+
- [ ] No secrets in code or version control
|
|
320
|
+
- [ ] Sensitive fields excluded from API responses
|
|
321
|
+
- [ ] PII encrypted at rest (if applicable)
|
|
322
|
+
|
|
323
|
+
### Infrastructure
|
|
324
|
+
- [ ] Security headers configured (CSP, HSTS, etc.)
|
|
325
|
+
- [ ] CORS restricted to known origins
|
|
326
|
+
- [ ] Dependencies audited for vulnerabilities
|
|
327
|
+
- [ ] Error messages don't expose internals
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
## Failure Handling
|
|
331
|
+
|
|
332
|
+
| Trigger | First response | If unresolved |
|
|
333
|
+
|---|---|---|
|
|
334
|
+
| Security requirement conflicts with product request | Name the conflict and preserve the safer default | Return the exact product/security decision to ROSE; do not silently weaken controls |
|
|
335
|
+
| Audit finding has no patch | Check reachability and documented workaround | Return allowlist-versus-dependency-change disposition to ROSE; do not mutate dependencies here |
|
|
336
|
+
| Secret appears in diff/log | Stop, remove it from output, and tell the user rotation may be required | Do not commit or print more context; request incident handling guidance |
|
|
337
|
+
| Upload/CORS/auth behavior cannot be verified | Report the unverified gate and keep restrictive behavior | Do not claim hardened/secure until evidence exists |
|
|
338
|
+
|
|
339
|
+
## Common Rationalizations
|
|
340
|
+
|
|
341
|
+
| Rationalization | Reality |
|
|
342
|
+
|---|---|
|
|
343
|
+
| "This is an internal tool, security doesn't matter" | Internal tools get compromised. Attackers target the weakest link. |
|
|
344
|
+
| "We'll add security later" | Security retrofitting is 10x harder than building it in. Add it now. |
|
|
345
|
+
| "No one would try to exploit this" | Automated scanners will find it. Security by obscurity is not security. |
|
|
346
|
+
| "The framework handles security" | Frameworks provide tools, not guarantees. You still need to use them correctly. |
|
|
347
|
+
| "It's just a prototype" | Prototypes become production. Security habits from day one. |
|
|
348
|
+
|
|
349
|
+
## Red Flags
|
|
350
|
+
|
|
351
|
+
- User input passed directly to database queries, shell commands, or HTML rendering
|
|
352
|
+
- Secrets in source code or commit history
|
|
353
|
+
- API endpoints without authentication or authorization checks
|
|
354
|
+
- Missing CORS configuration or wildcard (`*`) origins
|
|
355
|
+
- No rate limiting on authentication endpoints
|
|
356
|
+
- Stack traces or internal errors exposed to users
|
|
357
|
+
- Dependencies with known critical vulnerabilities
|
|
358
|
+
|
|
359
|
+
## Verification
|
|
360
|
+
|
|
361
|
+
For the selected affected security claim, use only applicable checks chosen by the canonical verification owner:
|
|
362
|
+
|
|
363
|
+
- [ ] Dependency audit evidence is present only when dependency/release risk makes it relevant
|
|
364
|
+
- [ ] No secrets in source code or git history
|
|
365
|
+
- [ ] All user input validated at system boundaries
|
|
366
|
+
- [ ] Authentication and authorization checked on every protected endpoint
|
|
367
|
+
- [ ] Security headers present in response (check with browser DevTools)
|
|
368
|
+
- [ ] Error responses don't expose internal details
|
|
369
|
+
- [ ] Rate limiting active on auth endpoints
|