litgrok-ai 0.2.0 → 0.2.4
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/.grok/agents/litgrok-boulder-executor.md +28 -0
- package/.grok/agents/litgrok-korean-prose-editor.md +28 -0
- package/.grok/agents/litgrok-korean-style-analyzer.md +26 -0
- package/.grok/agents/litgrok-librarian-researcher.md +27 -0
- package/.grok/agents/litgrok-meaning-preservation-auditor.md +26 -0
- package/.grok/agents/litgrok-native-flow-reviewer.md +26 -0
- package/.grok/agents/litgrok-oracle-verifier.md +28 -0
- package/.grok/agents/litgrok-polish-orchestrator.md +26 -0
- package/.grok/agents/litgrok-prometheus-planner.md +27 -0
- package/.grok/agents/litgrok-qa-runner.md +29 -0
- package/.grok/agents/litgrok-quality-reviewer.md +29 -0
- package/.grok/hooks/deliverable-hedge-guard.json +1 -1
- package/.grok/hooks/plan-gate.mjs +81 -0
- package/.grok/hooks/post-compact.json +1 -1
- package/.grok/hooks/post-tool-use-failure.json +1 -1
- package/.grok/hooks/post-tool-use.json +1 -1
- package/.grok/hooks/pre-compact.json +1 -1
- package/.grok/hooks/record-passive-event.mjs +25 -5
- package/.grok/hooks/session-start.json +1 -1
- package/.grok/hooks/session-start.mjs +23 -0
- package/.grok/hooks/stop-failure.json +1 -1
- package/.grok/hooks/stop.json +1 -1
- package/.grok/hooks/stop.mjs +32 -2
- package/.grok/hooks/subagent-start.json +1 -1
- package/.grok/hooks/subagent-stop.json +1 -1
- package/.grok/hooks/user-prompt-submit.json +1 -1
- package/.grok/skills/autoconference/LICENSE +21 -0
- package/.grok/skills/autoconference/PROVENANCE.md +23 -0
- package/.grok/skills/autoconference/SKILL.md +124 -263
- package/.grok/skills/autoconference/assets/conference_template.md +76 -0
- package/.grok/skills/autoconference/assets/report_template.md +56 -0
- package/.grok/skills/autoconference/assets/synthesis_template.md +40 -0
- package/.grok/skills/autoconference/references/_canonical-corpus/manifest.json +138 -0
- package/.grok/skills/autoconference/references/agent-prompts.md +30 -0
- package/.grok/skills/autoconference/references/conference-protocol.md +21 -0
- package/.grok/skills/autoconference/references/core-principles.md +13 -0
- package/.grok/skills/autoconference/references/family-contract.md +26 -0
- package/.grok/skills/autoconference/references/modes/analyze.md +11 -0
- package/.grok/skills/autoconference/references/modes/core/convergence-guide.md +41 -0
- package/.grok/skills/autoconference/references/modes/core/crash-recovery.md +11 -0
- package/.grok/skills/autoconference/references/modes/core.md +26 -0
- package/.grok/skills/autoconference/references/modes/debate.md +11 -0
- package/.grok/skills/autoconference/references/modes/plan.md +12 -0
- package/.grok/skills/autoconference/references/modes/resume.md +11 -0
- package/.grok/skills/autoconference/references/modes/ship.md +11 -0
- package/.grok/skills/autoconference/references/modes/survey.md +11 -0
- package/.grok/skills/autoconference/references/results-logging.md +12 -0
- package/.grok/skills/autoconference/references/visualization-guide.md +10 -0
- package/.grok/skills/autoconference/scripts/init_conference.py +620 -0
- package/.grok/skills/autoconference/scripts/verify-canonical-corpus.mjs +177 -0
- package/.grok/skills/autoconference/templates/code-performance.md +59 -0
- package/.grok/skills/autoconference/templates/debate-mode.md +50 -0
- package/.grok/skills/autoconference/templates/prompt-optimization.md +58 -0
- package/.grok/skills/autoconference/templates/quick-conference.md +48 -0
- package/.grok/skills/autoconference/templates/research-synthesis.md +56 -0
- package/.grok/skills/autoconference/templates/survey-mode.md +63 -0
- package/.grok/skills/autoresearch/LICENSE +21 -0
- package/.grok/skills/autoresearch/PROVENANCE.md +22 -0
- package/.grok/skills/autoresearch/SKILL.md +133 -212
- package/.grok/skills/autoresearch/assets/report_template.md +52 -0
- package/.grok/skills/autoresearch/assets/research_template.md +38 -0
- package/.grok/skills/autoresearch/assets/results_template.tsv +2 -0
- package/.grok/skills/autoresearch/references/_canonical-corpus/manifest.json +148 -0
- package/.grok/skills/autoresearch/references/core-principles.md +16 -0
- package/.grok/skills/autoresearch/references/family-contract.md +36 -0
- package/.grok/skills/autoresearch/references/modes/core/evaluator-contract.md +12 -0
- package/.grok/skills/autoresearch/references/modes/core/stuck-detection.md +11 -0
- package/.grok/skills/autoresearch/references/modes/core.md +21 -0
- package/.grok/skills/autoresearch/references/modes/debug/investigation-techniques.md +11 -0
- package/.grok/skills/autoresearch/references/modes/debug.md +11 -0
- package/.grok/skills/autoresearch/references/modes/fix.md +11 -0
- package/.grok/skills/autoresearch/references/modes/learn.md +11 -0
- package/.grok/skills/autoresearch/references/modes/plan.md +14 -0
- package/.grok/skills/autoresearch/references/modes/predict/persona-templates.md +11 -0
- package/.grok/skills/autoresearch/references/modes/predict.md +11 -0
- package/.grok/skills/autoresearch/references/modes/reason.md +11 -0
- package/.grok/skills/autoresearch/references/modes/scenario/dimensions.md +11 -0
- package/.grok/skills/autoresearch/references/modes/scenario.md +11 -0
- package/.grok/skills/autoresearch/references/modes/security/owasp-checklist.md +11 -0
- package/.grok/skills/autoresearch/references/modes/security/stride-model.md +11 -0
- package/.grok/skills/autoresearch/references/modes/security.md +12 -0
- package/.grok/skills/autoresearch/references/modes/ship/type-checklists.md +12 -0
- package/.grok/skills/autoresearch/references/modes/ship.md +11 -0
- package/.grok/skills/autoresearch/references/results-logging.md +12 -0
- package/.grok/skills/autoresearch/references/visualization-guide.md +24 -0
- package/.grok/skills/autoresearch/scripts/init_research.py +365 -0
- package/.grok/skills/autoresearch/scripts/style_presets.py +123 -0
- package/.grok/skills/autoresearch/scripts/verify-canonical-corpus.mjs +179 -0
- package/.grok/skills/browser-drive/SKILL.md +4 -0
- package/.grok/skills/browser-drive/references/snapshot-act-loop.md +61 -0
- package/.grok/skills/debugging/SKILL.md +21 -0
- package/.grok/skills/debugging/references/methodology/00-setup.md +108 -0
- package/.grok/skills/debugging/references/methodology/02-investigate.md +126 -0
- package/.grok/skills/debugging/references/methodology/04-oracle-triple.md +106 -0
- package/.grok/skills/debugging/references/methodology/05-escalate.md +69 -0
- package/.grok/skills/debugging/references/methodology/06-fix.md +116 -0
- package/.grok/skills/debugging/references/methodology/08-qa.md +94 -0
- package/.grok/skills/debugging/references/methodology/09-cleanup.md +164 -0
- package/.grok/skills/debugging/references/methodology/partial-runtime-evidence.md +228 -0
- package/.grok/skills/debugging/references/runtimes/bundled-js-binary.md +415 -0
- package/.grok/skills/debugging/references/runtimes/go.md +252 -0
- package/.grok/skills/debugging/references/runtimes/native-binary.md +484 -0
- package/.grok/skills/debugging/references/runtimes/node.md +260 -0
- package/.grok/skills/debugging/references/runtimes/python.md +248 -0
- package/.grok/skills/debugging/references/runtimes/rust.md +234 -0
- package/.grok/skills/debugging/references/tools/ghidra.md +212 -0
- package/.grok/skills/debugging/references/tools/playwright-cli.md +194 -0
- package/.grok/skills/debugging/references/tools/pwndbg.md +263 -0
- package/.grok/skills/debugging/references/tools/pwntools.md +265 -0
- package/.grok/skills/frontend-ui-ux/LICENSE +21 -0
- package/.grok/skills/frontend-ui-ux/PROVENANCE.json +38 -0
- package/.grok/skills/frontend-ui-ux/SKILL.md +52 -43
- package/.grok/skills/frontend-ui-ux/SOURCE-MANIFEST.json +1060 -0
- package/.grok/skills/frontend-ui-ux/THIRD-PARTY-NOTICE.txt +14 -0
- package/.grok/skills/frontend-ui-ux/data/design-intelligence.json +1 -0
- package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/frontend-ATTRIBUTION.md +217 -0
- package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/frontend-LICENSE-Apache-2.0.txt +201 -0
- package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/legal/root-LICENSE +21 -0
- package/.grok/skills/frontend-ui-ux/references/_canonical-corpus/manifest.json +873 -0
- package/.grok/skills/frontend-ui-ux/references/adaptive-layout.md +92 -0
- package/.grok/skills/frontend-ui-ux/references/brand-and-imagery.md +93 -0
- package/.grok/skills/frontend-ui-ux/references/complete-contract.md +537 -39
- package/.grok/skills/frontend-ui-ux/references/composition.md +85 -0
- package/.grok/skills/frontend-ui-ux/references/creative-directions.md +80 -0
- package/.grok/skills/frontend-ui-ux/references/design/README.md +248 -0
- package/.grok/skills/frontend-ui-ux/references/design/_INDEX.md +191 -0
- package/.grok/skills/frontend-ui-ux/references/design/airbnb.md +393 -0
- package/.grok/skills/frontend-ui-ux/references/design/airtable.md +92 -0
- package/.grok/skills/frontend-ui-ux/references/design/apple.md +250 -0
- package/.grok/skills/frontend-ui-ux/references/design/aside.md +209 -0
- package/.grok/skills/frontend-ui-ux/references/design/binance.md +348 -0
- package/.grok/skills/frontend-ui-ux/references/design/bmw.md +183 -0
- package/.grok/skills/frontend-ui-ux/references/design/brutalist-skill.md +92 -0
- package/.grok/skills/frontend-ui-ux/references/design/bugatti.md +271 -0
- package/.grok/skills/frontend-ui-ux/references/design/cal.md +262 -0
- package/.grok/skills/frontend-ui-ux/references/design/claude.md +315 -0
- package/.grok/skills/frontend-ui-ux/references/design/clay.md +307 -0
- package/.grok/skills/frontend-ui-ux/references/design/clickhouse.md +284 -0
- package/.grok/skills/frontend-ui-ux/references/design/clone-from-url.md +65 -0
- package/.grok/skills/frontend-ui-ux/references/design/cohere.md +269 -0
- package/.grok/skills/frontend-ui-ux/references/design/coinbase.md +132 -0
- package/.grok/skills/frontend-ui-ux/references/design/composio.md +310 -0
- package/.grok/skills/frontend-ui-ux/references/design/cursor.md +312 -0
- package/.grok/skills/frontend-ui-ux/references/design/design-system-architecture.md +244 -0
- package/.grok/skills/frontend-ui-ux/references/design/elevenlabs.md +268 -0
- package/.grok/skills/frontend-ui-ux/references/design/expo.md +284 -0
- package/.grok/skills/frontend-ui-ux/references/design/ferrari.md +317 -0
- package/.grok/skills/frontend-ui-ux/references/design/figma.md +223 -0
- package/.grok/skills/frontend-ui-ux/references/design/framer.md +249 -0
- package/.grok/skills/frontend-ui-ux/references/design/gpt-tasteskill.md +74 -0
- package/.grok/skills/frontend-ui-ux/references/design/hashicorp.md +281 -0
- package/.grok/skills/frontend-ui-ux/references/design/ibm.md +335 -0
- package/.grok/skills/frontend-ui-ux/references/design/image-to-code-skill.md +1228 -0
- package/.grok/skills/frontend-ui-ux/references/design/imagegen-brandkit.md +798 -0
- package/.grok/skills/frontend-ui-ux/references/design/imagegen-frontend-mobile.md +1465 -0
- package/.grok/skills/frontend-ui-ux/references/design/imagegen-frontend-web.md +987 -0
- package/.grok/skills/frontend-ui-ux/references/design/intercom.md +149 -0
- package/.grok/skills/frontend-ui-ux/references/design/kraken.md +128 -0
- package/.grok/skills/frontend-ui-ux/references/design/lamborghini.md +291 -0
- package/.grok/skills/frontend-ui-ux/references/design/layout-skill.md +107 -0
- package/.grok/skills/frontend-ui-ux/references/design/lazyweb.md +77 -0
- package/.grok/skills/frontend-ui-ux/references/design/linear.app.md +370 -0
- package/.grok/skills/frontend-ui-ux/references/design/lovable.md +301 -0
- package/.grok/skills/frontend-ui-ux/references/design/mastercard.md +368 -0
- package/.grok/skills/frontend-ui-ux/references/design/meta.md +369 -0
- package/.grok/skills/frontend-ui-ux/references/design/minimalist-skill.md +85 -0
- package/.grok/skills/frontend-ui-ux/references/design/minimax.md +260 -0
- package/.grok/skills/frontend-ui-ux/references/design/mintlify.md +329 -0
- package/.grok/skills/frontend-ui-ux/references/design/miro.md +111 -0
- package/.grok/skills/frontend-ui-ux/references/design/mistral.ai.md +264 -0
- package/.grok/skills/frontend-ui-ux/references/design/mongodb.md +269 -0
- package/.grok/skills/frontend-ui-ux/references/design/nike.md +366 -0
- package/.grok/skills/frontend-ui-ux/references/design/notion.md +312 -0
- package/.grok/skills/frontend-ui-ux/references/design/nvidia.md +296 -0
- package/.grok/skills/frontend-ui-ux/references/design/ollama.md +270 -0
- package/.grok/skills/frontend-ui-ux/references/design/opencode.ai.md +284 -0
- package/.grok/skills/frontend-ui-ux/references/design/output-skill.md +49 -0
- package/.grok/skills/frontend-ui-ux/references/design/pinterest.md +233 -0
- package/.grok/skills/frontend-ui-ux/references/design/playstation.md +367 -0
- package/.grok/skills/frontend-ui-ux/references/design/posthog.md +259 -0
- package/.grok/skills/frontend-ui-ux/references/design/raycast.md +271 -0
- package/.grok/skills/frontend-ui-ux/references/design/react-dev-tooling-skill.md +230 -0
- package/.grok/skills/frontend-ui-ux/references/design/redesign-skill.md +178 -0
- package/.grok/skills/frontend-ui-ux/references/design/renault.md +314 -0
- package/.grok/skills/frontend-ui-ux/references/design/replicate.md +264 -0
- package/.grok/skills/frontend-ui-ux/references/design/resend.md +306 -0
- package/.grok/skills/frontend-ui-ux/references/design/revolut.md +188 -0
- package/.grok/skills/frontend-ui-ux/references/design/runwayml.md +247 -0
- package/.grok/skills/frontend-ui-ux/references/design/sanity.md +360 -0
- package/.grok/skills/frontend-ui-ux/references/design/sentry.md +265 -0
- package/.grok/skills/frontend-ui-ux/references/design/shopify.md +353 -0
- package/.grok/skills/frontend-ui-ux/references/design/soft-skill.md +98 -0
- package/.grok/skills/frontend-ui-ux/references/design/spacex.md +197 -0
- package/.grok/skills/frontend-ui-ux/references/design/spotify.md +249 -0
- package/.grok/skills/frontend-ui-ux/references/design/starbucks.md +583 -0
- package/.grok/skills/frontend-ui-ux/references/design/stitch-design-example.md +121 -0
- package/.grok/skills/frontend-ui-ux/references/design/stitch-skill.md +184 -0
- package/.grok/skills/frontend-ui-ux/references/design/stripe.md +325 -0
- package/.grok/skills/frontend-ui-ux/references/design/supabase.md +258 -0
- package/.grok/skills/frontend-ui-ux/references/design/superhuman.md +255 -0
- package/.grok/skills/frontend-ui-ux/references/design/taste-skill.md +1206 -0
- package/.grok/skills/frontend-ui-ux/references/design/tesla.md +289 -0
- package/.grok/skills/frontend-ui-ux/references/design/theverge.md +342 -0
- package/.grok/skills/frontend-ui-ux/references/design/together.ai.md +266 -0
- package/.grok/skills/frontend-ui-ux/references/design/uber.md +298 -0
- package/.grok/skills/frontend-ui-ux/references/design/vercel.md +313 -0
- package/.grok/skills/frontend-ui-ux/references/design/vodafone.md +426 -0
- package/.grok/skills/frontend-ui-ux/references/design/voltagent.md +326 -0
- package/.grok/skills/frontend-ui-ux/references/design/warp.md +256 -0
- package/.grok/skills/frontend-ui-ux/references/design/webflow.md +95 -0
- package/.grok/skills/frontend-ui-ux/references/design/wired.md +281 -0
- package/.grok/skills/frontend-ui-ux/references/design/wise.md +176 -0
- package/.grok/skills/frontend-ui-ux/references/design/x.ai.md +260 -0
- package/.grok/skills/frontend-ui-ux/references/design/zapier.md +331 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/EVIDENCE.md +97 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/README.md +48 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/UPSTREAM.md +80 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/lane-a-direction.md +64 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/lane-b-execution.md +65 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/lane-c-review.md +65 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/lane-d-memory.md +83 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/orchestration.md +80 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/routing.md +79 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/LICENSE +21 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/accessibility-reviewer.md +83 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/content-writer.md +132 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-builder.md +109 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-critic.md +89 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-lead.md +113 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-scout.md +78 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/design-strategist.md +121 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/heuristic-evaluator.md +268 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/inspiration-scout.md +107 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/agents/motion-designer.md +120 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/accessible-content/reference.md +101 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/adaptive-interfaces/reference.md +109 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/cognitive-accessibility/reference.md +107 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debate/reference.md +199 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-debt-tracker/reference.md +174 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-handoff/reference.md +125 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-md/reference.md +106 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-retrospective/reference.md +266 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-review/reference.md +123 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/design-system-alignment/reference.md +120 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/designpowers-critique/reference.md +164 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/heuristic-evaluation/reference.md +85 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/inclusive-personas/reference.md +98 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/inspiration-scouting/reference.md +165 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/interaction-design/reference.md +122 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/motion-choreography/reference.md +81 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/research-planning/reference.md +96 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/responsive-patterns/reference.md +77 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/synthetic-user-testing/reference.md +192 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-feedback/reference.md +165 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/taste-report/reference.md +78 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/token-architecture/reference.md +75 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/ui-composition/reference.md +117 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/usability-testing/reference.md +78 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/verification-before-shipping/reference.md +125 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/voice-and-tone/reference.md +79 -0
- package/.grok/skills/frontend-ui-ux/references/designpowers/vendor/skills/writing-design-plans/reference.md +119 -0
- package/.grok/skills/frontend-ui-ux/references/evidence-review.md +126 -0
- package/.grok/skills/frontend-ui-ux/references/implementation-platforms.md +109 -0
- package/.grok/skills/frontend-ui-ux/references/inclusive-interface.md +92 -0
- package/.grok/skills/frontend-ui-ux/references/interaction-motion.md +101 -0
- package/.grok/skills/frontend-ui-ux/references/operating-lanes.md +92 -0
- package/.grok/skills/frontend-ui-ux/references/perfection/README.md +160 -0
- package/.grok/skills/frontend-ui-ux/references/perfection/react-perf-tooling.md +127 -0
- package/.grok/skills/frontend-ui-ux/references/performance-delivery.md +93 -0
- package/.grok/skills/frontend-ui-ux/references/product-direction.md +84 -0
- package/.grok/skills/frontend-ui-ux/references/redesign-playbook.md +97 -0
- package/.grok/skills/frontend-ui-ux/references/system-foundations.md +84 -0
- package/.grok/skills/frontend-ui-ux/references/taste-direction.md +86 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/README.md +659 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/charts.csv +26 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/colors.csv +162 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/icons.csv +106 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/landing.csv +35 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/products.csv +162 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/react-performance.csv +45 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/astro.csv +54 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/flutter.csv +53 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/html-tailwind.csv +56 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/jetpack-compose.csv +53 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nextjs.csv +53 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxt-ui.csv +51 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/nuxtjs.csv +59 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react-native.csv +52 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/react.csv +54 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/shadcn.csv +61 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/svelte.csv +54 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/swiftui.csv +51 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/stacks/vue.csv +50 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/styles.csv +85 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/typography.csv +74 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/ui-reasoning.csv +162 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/ux-guidelines.csv +100 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/data/web-interface.csv +31 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/core.py +262 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/design_system.py +1148 -0
- package/.grok/skills/frontend-ui-ux/references/ui-ux-db/scripts/search.py +114 -0
- package/.grok/skills/frontend-ui-ux/references/visual-language.md +84 -0
- package/.grok/skills/frontend-ui-ux/references/visual-reconstruction.md +97 -0
- package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1alpha1.schema.json +306 -0
- package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1beta1.schema.json +291 -0
- package/.grok/skills/frontend-ui-ux/schemas/design-contract-v1beta2.schema.json +311 -0
- package/.grok/skills/frontend-ui-ux/scripts/design-contract-format.mjs +286 -0
- package/.grok/skills/frontend-ui-ux/scripts/design-contract-inventory-rules.mjs +354 -0
- package/.grok/skills/frontend-ui-ux/scripts/design-contract-rules.mjs +361 -0
- package/.grok/skills/frontend-ui-ux/scripts/design-contract-surface-rules.mjs +313 -0
- package/.grok/skills/frontend-ui-ux/scripts/design-data.mjs +68 -0
- package/.grok/skills/frontend-ui-ux/scripts/errors.mjs +12 -0
- package/.grok/skills/frontend-ui-ux/scripts/import-design-intelligence.mjs +124 -0
- package/.grok/skills/frontend-ui-ux/scripts/json-boundary.mjs +63 -0
- package/.grok/skills/frontend-ui-ux/scripts/query-design-intelligence.mjs +106 -0
- package/.grok/skills/frontend-ui-ux/scripts/search.mjs +43 -0
- package/.grok/skills/frontend-ui-ux/scripts/source-replay.mjs +153 -0
- package/.grok/skills/frontend-ui-ux/scripts/strict-json.mjs +143 -0
- package/.grok/skills/frontend-ui-ux/scripts/validate-design-contract.mjs +52 -0
- package/.grok/skills/frontend-ui-ux/scripts/verify-canonical-corpus.mjs +214 -0
- package/.grok/skills/lit-comprehend/SKILL.md +2 -0
- package/.grok/skills/lit-comprehend/references/artifact-template.md +219 -0
- package/.grok/skills/lit-comprehend/references/micro-worlds.md +195 -0
- package/.grok/skills/lit-handoff/SKILL.md +140 -40
- package/.grok/skills/lit-handoff/evals/evals.json +154 -0
- package/.grok/skills/lit-handoff/examples/HANDOFF-example-generic-auth-refactor.md +97 -0
- package/.grok/skills/lit-handoff/references/_canonical-corpus/manifest.json +17 -0
- package/.grok/skills/lit-handoff/references/source-pointer.md +31 -0
- package/.grok/skills/lit-handoff/scripts/verify-canonical-corpus.mjs +137 -0
- package/.grok/skills/lit-handoff/templates/HANDOFF.md +121 -0
- package/.grok/skills/lit-plan/SKILL.md +13 -2
- package/.grok/skills/lit-plan/scripts/scaffold-plan.mjs +259 -0
- package/.grok/skills/lit-scientific-visualization/SKILL.md +191 -227
- package/.grok/skills/lit-scientific-visualization/assets/color_palettes.py +197 -0
- package/.grok/skills/lit-scientific-visualization/assets/nature.mplstyle +75 -0
- package/.grok/skills/lit-scientific-visualization/assets/presentation.mplstyle +74 -0
- package/.grok/skills/lit-scientific-visualization/assets/publication.mplstyle +78 -0
- package/.grok/skills/lit-scientific-visualization/evals/evals.json +158 -0
- package/.grok/skills/lit-scientific-visualization/references/_canonical-corpus/manifest.json +28 -0
- package/.grok/skills/lit-scientific-visualization/references/color_palettes.md +380 -0
- package/.grok/skills/lit-scientific-visualization/references/journal_requirements.md +359 -0
- package/.grok/skills/lit-scientific-visualization/references/matplotlib_examples.md +608 -0
- package/.grok/skills/lit-scientific-visualization/references/mdanalysis_martini_visualization.md +85 -0
- package/.grok/skills/lit-scientific-visualization/references/publication_guidelines.md +217 -0
- package/.grok/skills/lit-scientific-visualization/references/seaborn_for_publications.md +293 -0
- package/.grok/skills/lit-scientific-visualization/scripts/figure_export.py +238 -0
- package/.grok/skills/lit-scientific-visualization/scripts/style_presets.py +467 -0
- package/.grok/skills/lit-scientific-visualization/scripts/verify-canonical-corpus.mjs +158 -0
- package/.grok/skills/lit-scientific-visualization/tests/test_figure_export.py +51 -0
- package/.grok/skills/lit-scientific-visualization/tests/test_style_presets.py +114 -0
- package/.grok/skills/litgoal/SKILL.md +58 -32
- package/.grok/skills/litwork/SKILL.md +45 -44
- package/.grok/skills/lsp-setup/SKILL.md +78 -0
- package/.grok/skills/lsp-setup/references/bash/README.md +54 -0
- package/.grok/skills/lsp-setup/references/c-cpp/README.md +58 -0
- package/.grok/skills/lsp-setup/references/csharp/README.md +64 -0
- package/.grok/skills/lsp-setup/references/dart/README.md +48 -0
- package/.grok/skills/lsp-setup/references/elixir/README.md +51 -0
- package/.grok/skills/lsp-setup/references/go/README.md +53 -0
- package/.grok/skills/lsp-setup/references/haskell/README.md +57 -0
- package/.grok/skills/lsp-setup/references/java/README.md +55 -0
- package/.grok/skills/lsp-setup/references/julia/README.md +56 -0
- package/.grok/skills/lsp-setup/references/kotlin/README.md +58 -0
- package/.grok/skills/lsp-setup/references/lua/README.md +48 -0
- package/.grok/skills/lsp-setup/references/php/README.md +49 -0
- package/.grok/skills/lsp-setup/references/python/README.md +60 -0
- package/.grok/skills/lsp-setup/references/ruby/README.md +53 -0
- package/.grok/skills/lsp-setup/references/rust/README.md +55 -0
- package/.grok/skills/lsp-setup/references/swift/README.md +52 -0
- package/.grok/skills/lsp-setup/references/terraform/README.md +50 -0
- package/.grok/skills/lsp-setup/references/typescript/README.md +63 -0
- package/.grok/skills/lsp-setup/references/yaml/README.md +47 -0
- package/.grok/skills/lsp-setup/references/zig/README.md +49 -0
- package/.grok/skills/lsp-setup/scripts/detect-lsp.mjs +40 -0
- package/.grok/skills/lsp-setup/scripts/lsp-server-table.mjs +309 -0
- package/.grok/skills/lsp-setup/scripts/verify-lsp.mjs +54 -0
- package/.grok/skills/programming/SKILL.md +483 -30
- package/.grok/skills/programming/references/go/README.md +90 -0
- package/.grok/skills/programming/references/go/backend-stack.md +641 -0
- package/.grok/skills/programming/references/go/bootstrap.md +328 -0
- package/.grok/skills/programming/references/go/bubbletea-v2.md +360 -0
- package/.grok/skills/programming/references/go/cobra-stack.md +468 -0
- package/.grok/skills/programming/references/go/concurrency.md +362 -0
- package/.grok/skills/programming/references/go/data-modeling.md +329 -0
- package/.grok/skills/programming/references/go/error-handling.md +359 -0
- package/.grok/skills/programming/references/go/golangci-strict.md +236 -0
- package/.grok/skills/programming/references/go/grpc-connect.md +375 -0
- package/.grok/skills/programming/references/go/libraries.md +337 -0
- package/.grok/skills/programming/references/go/one-liners.md +202 -0
- package/.grok/skills/programming/references/go/sqlc-pgx.md +471 -0
- package/.grok/skills/programming/references/go/testing.md +467 -0
- package/.grok/skills/programming/references/go/type-patterns.md +298 -0
- package/.grok/skills/programming/references/python/README.md +314 -0
- package/.grok/skills/programming/references/python/async-anyio.md +442 -0
- package/.grok/skills/programming/references/python/data-modeling.md +233 -0
- package/.grok/skills/programming/references/python/data-processing.md +133 -0
- package/.grok/skills/programming/references/python/error-handling.md +218 -0
- package/.grok/skills/programming/references/python/fastapi-stack.md +316 -0
- package/.grok/skills/programming/references/python/httpx2-optimization.md +360 -0
- package/.grok/skills/programming/references/python/libraries.md +307 -0
- package/.grok/skills/programming/references/python/one-liners.md +268 -0
- package/.grok/skills/programming/references/python/orjson-stack.md +378 -0
- package/.grok/skills/programming/references/python/pydantic-ai.md +285 -0
- package/.grok/skills/programming/references/python/pyproject-strict.md +232 -0
- package/.grok/skills/programming/references/python/textual-tui.md +201 -0
- package/.grok/skills/programming/references/python/type-patterns.md +176 -0
- package/.grok/skills/programming/references/rust/README.md +317 -0
- package/.grok/skills/programming/references/rust/async-tokio.md +299 -0
- package/.grok/skills/programming/references/rust/axum-stack.md +467 -0
- package/.grok/skills/programming/references/rust/cargo-strict.md +317 -0
- package/.grok/skills/programming/references/rust/clap-stack.md +409 -0
- package/.grok/skills/programming/references/rust/concurrency.md +375 -0
- package/.grok/skills/programming/references/rust/libraries.md +439 -0
- package/.grok/skills/programming/references/rust/one-liners.md +291 -0
- package/.grok/skills/programming/references/rust/proptest-insta.md +429 -0
- package/.grok/skills/programming/references/rust/type-state.md +354 -0
- package/.grok/skills/programming/references/rust/unsafe-discipline.md +250 -0
- package/.grok/skills/programming/references/rust/zero-cost-safety.md +527 -0
- package/.grok/skills/programming/references/rust-ub/README.md +289 -0
- package/.grok/skills/programming/references/rust-ub/miri-sanitizers-loom.md +411 -0
- package/.grok/skills/programming/references/rust-ub/ub-taxonomy.md +269 -0
- package/.grok/skills/programming/references/typescript/README.md +195 -0
- package/.grok/skills/programming/references/typescript/backend-hono.md +672 -0
- package/.grok/skills/programming/references/typescript/bootstrap.md +199 -0
- package/.grok/skills/programming/references/typescript/data-modeling.md +202 -0
- package/.grok/skills/programming/references/typescript/error-handling.md +169 -0
- package/.grok/skills/programming/references/typescript/tsconfig-strict.md +152 -0
- package/.grok/skills/programming/references/typescript/type-patterns.md +196 -0
- package/.grok/skills/review-work/SKILL.md +476 -18
- package/.grok/skills/skill-observer/SKILL.md +13 -0
- package/.grok/skills/skill-observer/references/review-contract.md +77 -0
- package/.grok/skills/skill-observer/scripts/curator.mjs +121 -0
- package/.grok/skills/skill-observer/scripts/review.mjs +347 -0
- package/.grok/skills/skill-observer/scripts/skill-loop.mjs +1979 -0
- package/.grok/skills/start-work/SKILL.md +348 -27
- package/.grok/skills/visual-qa/references/complete-contract.md +673 -10
- package/CHANGELOG.md +42 -0
- package/README.md +43 -6
- package/README_ko-KR.md +43 -6
- package/bin/litgrok.mjs +37 -1
- package/package.json +3 -1
- package/plugin.json +27 -0
- package/.grok/skills/frontend-ui-ux/references/design-contract-schema.md +0 -103
- package/.grok/skills/frontend-ui-ux/references/token-layout-tables.md +0 -41
|
@@ -0,0 +1,620 @@
|
|
|
1
|
+
"""
|
|
2
|
+
init_conference.py — Scaffold a new autoconference-skill project directory.
|
|
3
|
+
|
|
4
|
+
Usage:
|
|
5
|
+
python init_conference.py --goal "..." --metric "..." --direction {maximize|minimize} \
|
|
6
|
+
[--target "..."] [--researchers 3] [--strategy assigned] \
|
|
7
|
+
[--devils-advocate {yes|no}] [--output ./conference/]
|
|
8
|
+
|
|
9
|
+
python init_conference.py --goal "..." --mode qualitative --criteria "..." \
|
|
10
|
+
[--researchers 3] [--output ./conference/]
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import argparse
|
|
14
|
+
import math
|
|
15
|
+
import os
|
|
16
|
+
import re
|
|
17
|
+
import secrets
|
|
18
|
+
import stat
|
|
19
|
+
import string
|
|
20
|
+
import sys
|
|
21
|
+
import textwrap
|
|
22
|
+
from datetime import datetime
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
from typing import List, Optional, Tuple
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
CONFERENCE_TEMPLATE_METRIC = """\
|
|
28
|
+
# Conference: {title}
|
|
29
|
+
|
|
30
|
+
## Goal
|
|
31
|
+
{goal}
|
|
32
|
+
|
|
33
|
+
## Mode
|
|
34
|
+
metric
|
|
35
|
+
|
|
36
|
+
## Success Metric
|
|
37
|
+
- **Metric:** {metric}
|
|
38
|
+
- **Target:** {target}
|
|
39
|
+
- **Direction:** {direction}
|
|
40
|
+
|
|
41
|
+
## Researchers
|
|
42
|
+
- **Count:** {researchers}
|
|
43
|
+
- **Iterations per round:** {iterations_per_round}
|
|
44
|
+
- **Max rounds:** {max_rounds}
|
|
45
|
+
|
|
46
|
+
## Pre-Flight Gate
|
|
47
|
+
- **Researcher count:** {researchers}
|
|
48
|
+
- **Iterations per round:** {iterations_per_round}
|
|
49
|
+
- **Max rounds:** {max_rounds}
|
|
50
|
+
- **Max total iterations:** {max_total_iterations}
|
|
51
|
+
- **Success definition:** {gate_success_definition}
|
|
52
|
+
- **Critic / Devil's Advocate:** {critic_setting}
|
|
53
|
+
- **Final confirmation:** pending — Conference Chair must summarize these conditions and get explicit user confirmation before execution.
|
|
54
|
+
- **Missing or vague values:** ask the user for exact values first, then recalculate this gate and request final confirmation. Do not start Phase 1 until confirmation is explicit.
|
|
55
|
+
|
|
56
|
+
## Search Space
|
|
57
|
+
- **Allowed changes:** _Define what researchers can modify._
|
|
58
|
+
- **Forbidden changes:** _Define what must NOT change (e.g., test data, eval scripts)._
|
|
59
|
+
|
|
60
|
+
## Search Space Partitioning
|
|
61
|
+
- **Strategy:** {strategy}
|
|
62
|
+
|
|
63
|
+
{researcher_sections}
|
|
64
|
+
|
|
65
|
+
## Guard
|
|
66
|
+
{guard}
|
|
67
|
+
|
|
68
|
+
## Noise Handling
|
|
69
|
+
- **Noise runs:** {noise_runs}
|
|
70
|
+
- **Min consensus delta:** {min_delta}
|
|
71
|
+
|
|
72
|
+
## Constraints
|
|
73
|
+
- **Max total iterations:** {max_total_iterations}
|
|
74
|
+
- **Time budget:** 2h
|
|
75
|
+
- **Researcher timeout:** 30m
|
|
76
|
+
|
|
77
|
+
## Current Approach
|
|
78
|
+
_Describe the baseline. What exists now?_
|
|
79
|
+
|
|
80
|
+
## Shared Knowledge
|
|
81
|
+
<!-- Auto-populated after each round with validated findings -->
|
|
82
|
+
|
|
83
|
+
## Context & References
|
|
84
|
+
_Add relevant papers, docs, or URLs here._
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Conference Log
|
|
89
|
+
<!-- Auto-maintained by Conference Chair. Do not edit manually. -->
|
|
90
|
+
| Round | Researcher | Best Metric | Key Finding | Status |
|
|
91
|
+
|-------|-----------|-------------|-------------|--------|
|
|
92
|
+
"""
|
|
93
|
+
|
|
94
|
+
CONFERENCE_TEMPLATE_QUALITATIVE = """\
|
|
95
|
+
# Conference: {title}
|
|
96
|
+
|
|
97
|
+
## Goal
|
|
98
|
+
{goal}
|
|
99
|
+
|
|
100
|
+
## Mode
|
|
101
|
+
qualitative
|
|
102
|
+
|
|
103
|
+
## Success Criteria
|
|
104
|
+
{criteria}
|
|
105
|
+
|
|
106
|
+
## Researchers
|
|
107
|
+
- **Count:** {researchers}
|
|
108
|
+
- **Iterations per round:** {iterations_per_round}
|
|
109
|
+
- **Max rounds:** {max_rounds}
|
|
110
|
+
|
|
111
|
+
## Pre-Flight Gate
|
|
112
|
+
- **Researcher count:** {researchers}
|
|
113
|
+
- **Iterations per round:** {iterations_per_round}
|
|
114
|
+
- **Max rounds:** {max_rounds}
|
|
115
|
+
- **Max total iterations:** {max_total_iterations}
|
|
116
|
+
- **Success definition:** {gate_success_definition}
|
|
117
|
+
- **Critic / Devil's Advocate:** {critic_setting}
|
|
118
|
+
- **Final confirmation:** pending — Conference Chair must summarize these conditions and get explicit user confirmation before execution.
|
|
119
|
+
- **Missing or vague values:** ask the user for exact values first, then recalculate this gate and request final confirmation. Do not start Phase 1 until confirmation is explicit.
|
|
120
|
+
|
|
121
|
+
## Search Space
|
|
122
|
+
- **Allowed changes:** _Define what researchers can modify._
|
|
123
|
+
- **Forbidden changes:** _Define what must NOT change._
|
|
124
|
+
|
|
125
|
+
## Search Space Partitioning
|
|
126
|
+
- **Strategy:** {strategy}
|
|
127
|
+
|
|
128
|
+
{researcher_sections}
|
|
129
|
+
|
|
130
|
+
## Guard
|
|
131
|
+
{guard}
|
|
132
|
+
|
|
133
|
+
## Noise Handling
|
|
134
|
+
- **Noise runs:** {noise_runs}
|
|
135
|
+
- **Min consensus delta:** {min_delta}
|
|
136
|
+
|
|
137
|
+
## Constraints
|
|
138
|
+
- **Max total iterations:** {max_total_iterations}
|
|
139
|
+
- **Time budget:** 2h
|
|
140
|
+
- **Researcher timeout:** 30m
|
|
141
|
+
|
|
142
|
+
## Current Approach
|
|
143
|
+
_Describe the baseline. What exists now?_
|
|
144
|
+
|
|
145
|
+
## Shared Knowledge
|
|
146
|
+
<!-- Auto-populated after each round with validated findings -->
|
|
147
|
+
|
|
148
|
+
## Context & References
|
|
149
|
+
_Add relevant papers, docs, or URLs here._
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Conference Log
|
|
154
|
+
<!-- Auto-maintained by Conference Chair. Do not edit manually. -->
|
|
155
|
+
| Round | Researcher | Best Metric | Key Finding | Status |
|
|
156
|
+
|-------|-----------|-------------|-------------|--------|
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
LOG_TEMPLATE = """\
|
|
160
|
+
# Researcher {rid} Log
|
|
161
|
+
|
|
162
|
+
> Auto-generated by init_conference.py on {date}
|
|
163
|
+
> Conference goal: {goal}
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
RESEARCHER_TSV_HEADER = "iteration\tmetric_value\tdelta\tdelta_pct\tstatus\tdescription\tevaluator_source\ttimestamp\n"
|
|
170
|
+
RESEARCHER_TSV_BASELINE = "0\tTBD\t-\t-\tbaseline\tInitial state\tmanual\t{date}\n"
|
|
171
|
+
|
|
172
|
+
CONFERENCE_TSV_HEADER = (
|
|
173
|
+
"round\tresearcher\titeration\tmetric_value\tdelta\tdelta_pct\t"
|
|
174
|
+
"status\tdescription\tevaluator_source\tpeer_review_verdict\ttimestamp\n"
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
STATIC_MANAGED_FILE_LEAVES = (
|
|
178
|
+
"conference.md",
|
|
179
|
+
"conference_results.tsv",
|
|
180
|
+
"conference_events.jsonl",
|
|
181
|
+
"synthesis.md",
|
|
182
|
+
"conference_report.md",
|
|
183
|
+
"autoconference-run-state.json",
|
|
184
|
+
".autoconference-loop.pid",
|
|
185
|
+
)
|
|
186
|
+
RESEARCHER_LEAF = re.compile(r"researcher_[A-Z]_(?:log\.md|results\.tsv)\Z")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def fail(code: str, message: str) -> None:
|
|
190
|
+
print(f"Error: {code}: {message}", file=sys.stderr)
|
|
191
|
+
raise SystemExit(1)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def preflight_capabilities() -> None:
|
|
195
|
+
"""Fail before mutation unless the required Python/POSIX descriptor APIs exist."""
|
|
196
|
+
required_dir_fd = (os.open, os.mkdir, os.stat, os.unlink, os.link)
|
|
197
|
+
supported = (
|
|
198
|
+
sys.version_info >= (3, 8)
|
|
199
|
+
and hasattr(os, "O_DIRECTORY")
|
|
200
|
+
and hasattr(os, "O_NOFOLLOW")
|
|
201
|
+
and all(function in os.supports_dir_fd for function in required_dir_fd)
|
|
202
|
+
and os.listdir in os.supports_fd
|
|
203
|
+
and os.link in os.supports_follow_symlinks
|
|
204
|
+
)
|
|
205
|
+
if not supported:
|
|
206
|
+
fail(
|
|
207
|
+
"BLOCKED_UNSUPPORTED_PYTHON_POSIX_RUNTIME",
|
|
208
|
+
"requires Python 3.8+ with O_DIRECTORY, O_NOFOLLOW, dir_fd, fd-listdir, and no-follow link support",
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def open_safe_directory(path: Path) -> Tuple[int, Path]:
|
|
213
|
+
"""Create/open path one component at a time without following symlinks."""
|
|
214
|
+
absolute = Path(os.path.abspath(os.fspath(path)))
|
|
215
|
+
parts = absolute.parts
|
|
216
|
+
if not parts or not absolute.is_absolute():
|
|
217
|
+
fail("UNSAFE_OUTPUT_PATH", "output must resolve to an absolute filesystem path")
|
|
218
|
+
|
|
219
|
+
flags = os.O_RDONLY | os.O_DIRECTORY | getattr(os, "O_CLOEXEC", 0)
|
|
220
|
+
nofollow = getattr(os, "O_NOFOLLOW", 0)
|
|
221
|
+
fd = os.open(parts[0], flags | nofollow)
|
|
222
|
+
try:
|
|
223
|
+
for part in parts[1:]:
|
|
224
|
+
try:
|
|
225
|
+
info = os.stat(part, dir_fd=fd, follow_symlinks=False)
|
|
226
|
+
except FileNotFoundError:
|
|
227
|
+
try:
|
|
228
|
+
os.mkdir(part, 0o755, dir_fd=fd)
|
|
229
|
+
except FileExistsError:
|
|
230
|
+
pass
|
|
231
|
+
info = os.stat(part, dir_fd=fd, follow_symlinks=False)
|
|
232
|
+
if stat.S_ISLNK(info.st_mode):
|
|
233
|
+
fail("UNSAFE_OUTPUT_SYMLINK", f"output component is a symlink: {absolute}")
|
|
234
|
+
if not stat.S_ISDIR(info.st_mode):
|
|
235
|
+
fail("UNSAFE_OUTPUT_PATH", f"output component is not a directory: {absolute}")
|
|
236
|
+
next_fd = os.open(part, flags | nofollow, dir_fd=fd)
|
|
237
|
+
os.close(fd)
|
|
238
|
+
fd = next_fd
|
|
239
|
+
verify_directory_identity(absolute, fd)
|
|
240
|
+
return fd, absolute
|
|
241
|
+
except BaseException:
|
|
242
|
+
os.close(fd)
|
|
243
|
+
raise
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def verify_directory_identity(path: Path, fd: int) -> None:
|
|
247
|
+
try:
|
|
248
|
+
named = os.stat(path, follow_symlinks=False)
|
|
249
|
+
except OSError as error:
|
|
250
|
+
fail("UNSAFE_OUTPUT_SWAP", f"output directory identity changed: {error}")
|
|
251
|
+
opened = os.fstat(fd)
|
|
252
|
+
if stat.S_ISLNK(named.st_mode) or not stat.S_ISDIR(named.st_mode):
|
|
253
|
+
fail("UNSAFE_OUTPUT_SYMLINK", f"output directory is no longer a real directory: {path}")
|
|
254
|
+
if (named.st_dev, named.st_ino) != (opened.st_dev, opened.st_ino):
|
|
255
|
+
fail("UNSAFE_OUTPUT_SWAP", f"output directory identity changed: {path}")
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
def leaf_info(fd: int, leaf: str) -> Optional[os.stat_result]:
|
|
259
|
+
try:
|
|
260
|
+
return os.stat(leaf, dir_fd=fd, follow_symlinks=False)
|
|
261
|
+
except FileNotFoundError:
|
|
262
|
+
return None
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
def reject_unsafe_leaf(fd: int, leaf: str, *, directory: bool = False) -> None:
|
|
266
|
+
info = leaf_info(fd, leaf)
|
|
267
|
+
if info is None:
|
|
268
|
+
return
|
|
269
|
+
expected = stat.S_ISDIR(info.st_mode) if directory else stat.S_ISREG(info.st_mode)
|
|
270
|
+
if stat.S_ISLNK(info.st_mode) or not expected:
|
|
271
|
+
fail("UNSAFE_GENERATED_LEAF", f"generated leaf has unsafe type: {leaf}")
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def remove_regular_leaf(fd: int, root: Path, leaf: str) -> None:
|
|
275
|
+
reject_unsafe_leaf(fd, leaf)
|
|
276
|
+
if leaf_info(fd, leaf) is not None:
|
|
277
|
+
verify_directory_identity(root, fd)
|
|
278
|
+
os.unlink(leaf, dir_fd=fd)
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
def write_new_leaf(fd: int, root: Path, leaf: str, text: str) -> None:
|
|
282
|
+
verify_directory_identity(root, fd)
|
|
283
|
+
if leaf_info(fd, leaf) is not None:
|
|
284
|
+
fail("UNSAFE_GENERATED_LEAF", f"generated leaf appeared during scaffold: {leaf}")
|
|
285
|
+
temp = f".{leaf}.tmp-{os.getpid()}-{secrets.token_hex(6)}"
|
|
286
|
+
flags = os.O_WRONLY | os.O_CREAT | os.O_EXCL | getattr(os, "O_NOFOLLOW", 0)
|
|
287
|
+
temp_fd = None
|
|
288
|
+
temp_created = False
|
|
289
|
+
try:
|
|
290
|
+
temp_fd = os.open(temp, flags, 0o600, dir_fd=fd)
|
|
291
|
+
temp_created = True
|
|
292
|
+
try:
|
|
293
|
+
data = text.encode("utf-8")
|
|
294
|
+
while data:
|
|
295
|
+
written = os.write(temp_fd, data)
|
|
296
|
+
data = data[written:]
|
|
297
|
+
os.fsync(temp_fd)
|
|
298
|
+
finally:
|
|
299
|
+
os.close(temp_fd)
|
|
300
|
+
temp_fd = None
|
|
301
|
+
verify_directory_identity(root, fd)
|
|
302
|
+
os.link(temp, leaf, src_dir_fd=fd, dst_dir_fd=fd, follow_symlinks=False)
|
|
303
|
+
except FileExistsError:
|
|
304
|
+
fail("UNSAFE_GENERATED_LEAF", f"generated leaf appeared during scaffold: {leaf}")
|
|
305
|
+
finally:
|
|
306
|
+
if temp_fd is not None:
|
|
307
|
+
try:
|
|
308
|
+
os.close(temp_fd)
|
|
309
|
+
except OSError:
|
|
310
|
+
pass
|
|
311
|
+
if temp_created:
|
|
312
|
+
try:
|
|
313
|
+
os.unlink(temp, dir_fd=fd)
|
|
314
|
+
except FileNotFoundError:
|
|
315
|
+
pass
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
def goal_to_title(goal: str) -> str:
|
|
319
|
+
words = goal.split()
|
|
320
|
+
short = " ".join(words[:8])
|
|
321
|
+
if len(words) > 8:
|
|
322
|
+
short += "..."
|
|
323
|
+
return short.title()
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
def researcher_ids(count: int) -> List[str]:
|
|
327
|
+
return [string.ascii_uppercase[i] for i in range(count)]
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
def make_researcher_sections(rids: List[str], strategy: str) -> str:
|
|
331
|
+
if strategy != "assigned":
|
|
332
|
+
return ""
|
|
333
|
+
lines = []
|
|
334
|
+
for rid in rids:
|
|
335
|
+
lines.append(f"### Researcher {rid} Focus")
|
|
336
|
+
lines.append(f"_Describe Researcher {rid}'s exploration area._")
|
|
337
|
+
lines.append("")
|
|
338
|
+
return "\n".join(lines)
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
def parse_args() -> argparse.Namespace:
|
|
342
|
+
parser = argparse.ArgumentParser(
|
|
343
|
+
description="Scaffold a new autoconference-skill project.",
|
|
344
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
345
|
+
epilog=textwrap.dedent("""\
|
|
346
|
+
Examples:
|
|
347
|
+
# Metric mode
|
|
348
|
+
python init_conference.py \\
|
|
349
|
+
--goal "Optimize inference latency" \\
|
|
350
|
+
--metric "p95_latency_ms" \\
|
|
351
|
+
--direction minimize \\
|
|
352
|
+
--target "< 50" \\
|
|
353
|
+
--researchers 3 \\
|
|
354
|
+
--devils-advocate yes \\
|
|
355
|
+
--strategy assigned \\
|
|
356
|
+
--output ./my-conference/
|
|
357
|
+
|
|
358
|
+
# Qualitative mode
|
|
359
|
+
python init_conference.py \\
|
|
360
|
+
--goal "Survey LLM agent papers" \\
|
|
361
|
+
--mode qualitative \\
|
|
362
|
+
--criteria "Comprehensive taxonomy with 15+ papers" \\
|
|
363
|
+
--researchers 2 \\
|
|
364
|
+
--output ./lit-review/
|
|
365
|
+
"""),
|
|
366
|
+
)
|
|
367
|
+
parser.add_argument("--goal", required=True, help="Conference goal description.")
|
|
368
|
+
parser.add_argument(
|
|
369
|
+
"--mode",
|
|
370
|
+
default="metric",
|
|
371
|
+
choices=["metric", "qualitative"],
|
|
372
|
+
help="Conference mode. Default: metric",
|
|
373
|
+
)
|
|
374
|
+
parser.add_argument(
|
|
375
|
+
"--metric",
|
|
376
|
+
default=None,
|
|
377
|
+
help="Metric name to track (required for metric mode).",
|
|
378
|
+
)
|
|
379
|
+
parser.add_argument(
|
|
380
|
+
"--direction",
|
|
381
|
+
default=None,
|
|
382
|
+
choices=["maximize", "minimize"],
|
|
383
|
+
help="Whether to maximize or minimize the metric (required for metric mode).",
|
|
384
|
+
)
|
|
385
|
+
parser.add_argument(
|
|
386
|
+
"--target",
|
|
387
|
+
default=None,
|
|
388
|
+
help="Target value or expression (e.g. '> 0.9', '< 50'). Required for metric mode.",
|
|
389
|
+
)
|
|
390
|
+
parser.add_argument(
|
|
391
|
+
"--criteria",
|
|
392
|
+
default=None,
|
|
393
|
+
help="Success criteria text (required for qualitative mode).",
|
|
394
|
+
)
|
|
395
|
+
parser.add_argument(
|
|
396
|
+
"--researchers",
|
|
397
|
+
type=int,
|
|
398
|
+
default=3,
|
|
399
|
+
metavar="N",
|
|
400
|
+
help="Number of researchers. Default: 3",
|
|
401
|
+
)
|
|
402
|
+
parser.add_argument(
|
|
403
|
+
"--strategy",
|
|
404
|
+
default="free",
|
|
405
|
+
choices=["assigned", "free"],
|
|
406
|
+
help="Search space partitioning strategy. Default: free",
|
|
407
|
+
)
|
|
408
|
+
parser.add_argument(
|
|
409
|
+
"--iterations-per-round",
|
|
410
|
+
type=int,
|
|
411
|
+
default=5,
|
|
412
|
+
metavar="N",
|
|
413
|
+
help="Iterations per round per researcher. Default: 5",
|
|
414
|
+
)
|
|
415
|
+
parser.add_argument(
|
|
416
|
+
"--max-rounds",
|
|
417
|
+
type=int,
|
|
418
|
+
default=4,
|
|
419
|
+
metavar="N",
|
|
420
|
+
help="Maximum number of rounds. Default: 4",
|
|
421
|
+
)
|
|
422
|
+
parser.add_argument(
|
|
423
|
+
"--devils-advocate",
|
|
424
|
+
default=None,
|
|
425
|
+
choices=["yes", "no"],
|
|
426
|
+
help=(
|
|
427
|
+
"Whether one researcher should be assigned as a Devil's Advocate. "
|
|
428
|
+
"If omitted, conference.md marks this as a required user prompt before running."
|
|
429
|
+
),
|
|
430
|
+
)
|
|
431
|
+
parser.add_argument(
|
|
432
|
+
"--guard",
|
|
433
|
+
default=None,
|
|
434
|
+
help="Safety constraint applied to all researchers (e.g., 'Do not modify the test set').",
|
|
435
|
+
)
|
|
436
|
+
parser.add_argument(
|
|
437
|
+
"--noise-runs",
|
|
438
|
+
type=int,
|
|
439
|
+
default=1,
|
|
440
|
+
metavar="N",
|
|
441
|
+
help="Repeated evaluations to average for noise reduction. Default: 1",
|
|
442
|
+
)
|
|
443
|
+
parser.add_argument(
|
|
444
|
+
"--min-delta",
|
|
445
|
+
type=float,
|
|
446
|
+
default=0.0,
|
|
447
|
+
metavar="F",
|
|
448
|
+
help="Minimum average improvement across kept researchers to advance. Default: 0.0",
|
|
449
|
+
)
|
|
450
|
+
parser.add_argument(
|
|
451
|
+
"--output",
|
|
452
|
+
default="./conference/",
|
|
453
|
+
metavar="PATH",
|
|
454
|
+
help="Output directory. Default: ./conference/",
|
|
455
|
+
)
|
|
456
|
+
parser.add_argument(
|
|
457
|
+
"--force",
|
|
458
|
+
action="store_true",
|
|
459
|
+
help="Overwrite existing output directory without prompting.",
|
|
460
|
+
)
|
|
461
|
+
return parser.parse_args()
|
|
462
|
+
|
|
463
|
+
|
|
464
|
+
def validate_args(args: argparse.Namespace) -> None:
|
|
465
|
+
if args.mode == "metric":
|
|
466
|
+
if not args.metric:
|
|
467
|
+
print("Error: --metric is required when --mode is metric.", file=sys.stderr)
|
|
468
|
+
sys.exit(1)
|
|
469
|
+
if not args.direction:
|
|
470
|
+
print("Error: --direction is required when --mode is metric.", file=sys.stderr)
|
|
471
|
+
sys.exit(1)
|
|
472
|
+
normalized_target = args.target.strip().lower() if args.target else ""
|
|
473
|
+
if not normalized_target or normalized_target in {"tbd", "todo", "unknown"}:
|
|
474
|
+
print("Error: --target is required when --mode is metric.", file=sys.stderr)
|
|
475
|
+
sys.exit(1)
|
|
476
|
+
elif args.mode == "qualitative":
|
|
477
|
+
if not args.criteria:
|
|
478
|
+
print("Error: --criteria is required when --mode is qualitative.", file=sys.stderr)
|
|
479
|
+
sys.exit(1)
|
|
480
|
+
|
|
481
|
+
if args.researchers < 1:
|
|
482
|
+
fail("INVALID_BUDGET", "--researchers must be >= 1")
|
|
483
|
+
|
|
484
|
+
if args.researchers > 26:
|
|
485
|
+
fail("INVALID_BUDGET", "--researchers must be <= 26")
|
|
486
|
+
|
|
487
|
+
if args.iterations_per_round < 1:
|
|
488
|
+
fail("INVALID_BUDGET", "--iterations-per-round must be >= 1")
|
|
489
|
+
|
|
490
|
+
if args.max_rounds < 1:
|
|
491
|
+
fail("INVALID_BUDGET", "--max-rounds must be >= 1")
|
|
492
|
+
|
|
493
|
+
if args.noise_runs < 1:
|
|
494
|
+
fail("INVALID_BUDGET", "--noise-runs must be >= 1")
|
|
495
|
+
|
|
496
|
+
if not math.isfinite(args.min_delta) or args.min_delta < 0:
|
|
497
|
+
fail("INVALID_BUDGET", "--min-delta must be finite and >= 0")
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
def scaffold(args: argparse.Namespace) -> None:
|
|
501
|
+
date = datetime.now().strftime("%Y-%m-%d")
|
|
502
|
+
title = goal_to_title(args.goal)
|
|
503
|
+
output = Path(args.output)
|
|
504
|
+
rids = researcher_ids(args.researchers)
|
|
505
|
+
max_total_iterations = args.researchers * args.iterations_per_round * args.max_rounds
|
|
506
|
+
researcher_sections = make_researcher_sections(rids, args.strategy)
|
|
507
|
+
guard_text = args.guard if args.guard else "_No guard constraint. Leave blank or define a safety invariant._"
|
|
508
|
+
noise_runs = args.noise_runs
|
|
509
|
+
min_delta = args.min_delta
|
|
510
|
+
if args.devils_advocate == "yes":
|
|
511
|
+
critic_setting = "enabled"
|
|
512
|
+
elif args.devils_advocate == "no":
|
|
513
|
+
critic_setting = "disabled"
|
|
514
|
+
else:
|
|
515
|
+
critic_setting = "ask user before run"
|
|
516
|
+
|
|
517
|
+
fd, output = open_safe_directory(output)
|
|
518
|
+
try:
|
|
519
|
+
entries = os.listdir(fd)
|
|
520
|
+
if entries and not args.force:
|
|
521
|
+
fail(
|
|
522
|
+
"OUTPUT_NOT_EMPTY",
|
|
523
|
+
f"output directory '{output}' already exists and is not empty. Use --force to overwrite.",
|
|
524
|
+
)
|
|
525
|
+
reject_unsafe_leaf(fd, "workspace", directory=True)
|
|
526
|
+
managed = list(STATIC_MANAGED_FILE_LEAVES)
|
|
527
|
+
managed.extend(entry for entry in entries if RESEARCHER_LEAF.fullmatch(entry))
|
|
528
|
+
for leaf in managed:
|
|
529
|
+
reject_unsafe_leaf(fd, leaf)
|
|
530
|
+
if args.force:
|
|
531
|
+
for leaf in managed:
|
|
532
|
+
remove_regular_leaf(fd, output, leaf)
|
|
533
|
+
if leaf_info(fd, "workspace") is None:
|
|
534
|
+
verify_directory_identity(output, fd)
|
|
535
|
+
os.mkdir("workspace", 0o755, dir_fd=fd)
|
|
536
|
+
|
|
537
|
+
if args.mode == "metric":
|
|
538
|
+
gate_success_definition = f"metric {args.metric} ({args.direction}) target {args.target}"
|
|
539
|
+
conf_text = CONFERENCE_TEMPLATE_METRIC.format(
|
|
540
|
+
title=title,
|
|
541
|
+
goal=args.goal,
|
|
542
|
+
metric=args.metric,
|
|
543
|
+
target=args.target,
|
|
544
|
+
direction=args.direction,
|
|
545
|
+
researchers=args.researchers,
|
|
546
|
+
iterations_per_round=args.iterations_per_round,
|
|
547
|
+
max_rounds=args.max_rounds,
|
|
548
|
+
strategy=args.strategy,
|
|
549
|
+
researcher_sections=researcher_sections,
|
|
550
|
+
max_total_iterations=max_total_iterations,
|
|
551
|
+
guard=guard_text,
|
|
552
|
+
noise_runs=noise_runs,
|
|
553
|
+
min_delta=min_delta,
|
|
554
|
+
gate_success_definition=gate_success_definition,
|
|
555
|
+
critic_setting=critic_setting,
|
|
556
|
+
)
|
|
557
|
+
else:
|
|
558
|
+
gate_success_definition = f"criteria: {args.criteria}"
|
|
559
|
+
conf_text = CONFERENCE_TEMPLATE_QUALITATIVE.format(
|
|
560
|
+
title=title,
|
|
561
|
+
goal=args.goal,
|
|
562
|
+
criteria=args.criteria,
|
|
563
|
+
researchers=args.researchers,
|
|
564
|
+
iterations_per_round=args.iterations_per_round,
|
|
565
|
+
max_rounds=args.max_rounds,
|
|
566
|
+
strategy=args.strategy,
|
|
567
|
+
researcher_sections=researcher_sections,
|
|
568
|
+
max_total_iterations=max_total_iterations,
|
|
569
|
+
guard=guard_text,
|
|
570
|
+
noise_runs=noise_runs,
|
|
571
|
+
min_delta=min_delta,
|
|
572
|
+
gate_success_definition=gate_success_definition,
|
|
573
|
+
critic_setting=critic_setting,
|
|
574
|
+
)
|
|
575
|
+
write_new_leaf(fd, output, "conference.md", conf_text)
|
|
576
|
+
|
|
577
|
+
for rid in rids:
|
|
578
|
+
log = LOG_TEMPLATE.format(rid=rid, date=date, goal=args.goal)
|
|
579
|
+
write_new_leaf(fd, output, f"researcher_{rid}_log.md", log)
|
|
580
|
+
tsv = RESEARCHER_TSV_HEADER + RESEARCHER_TSV_BASELINE.format(date=date)
|
|
581
|
+
write_new_leaf(fd, output, f"researcher_{rid}_results.tsv", tsv)
|
|
582
|
+
|
|
583
|
+
write_new_leaf(fd, output, "conference_results.tsv", CONFERENCE_TSV_HEADER)
|
|
584
|
+
write_new_leaf(fd, output, "conference_events.jsonl", "")
|
|
585
|
+
verify_directory_identity(output, fd)
|
|
586
|
+
finally:
|
|
587
|
+
os.close(fd)
|
|
588
|
+
|
|
589
|
+
# Print success
|
|
590
|
+
print(f"\nConference project scaffolded at: {output.resolve()}")
|
|
591
|
+
print(f"\nFiles created:")
|
|
592
|
+
print(f" conference.md")
|
|
593
|
+
for rid in rids:
|
|
594
|
+
print(f" researcher_{rid}_log.md")
|
|
595
|
+
print(f" researcher_{rid}_results.tsv")
|
|
596
|
+
print(f" conference_results.tsv")
|
|
597
|
+
print(f" conference_events.jsonl")
|
|
598
|
+
print(f" workspace/")
|
|
599
|
+
print(f"\nPre-flight gate:")
|
|
600
|
+
print(f" Researcher count: {args.researchers}")
|
|
601
|
+
print(f" Max total iterations: {max_total_iterations}")
|
|
602
|
+
print(f" Success definition: {gate_success_definition}")
|
|
603
|
+
print(f" Critic / Devil's Advocate: {critic_setting}")
|
|
604
|
+
print(" Final confirmation: pending before Phase 1")
|
|
605
|
+
print(f"\nNext steps:")
|
|
606
|
+
print(f" 1. Open conference.md and fill in 'Current Approach' and 'Search Space'.")
|
|
607
|
+
print(f" 2. Edit researcher focus areas if using 'assigned' strategy.")
|
|
608
|
+
print(" 3. Select the explicit autoconference skill request and provide the generated conference.md path.")
|
|
609
|
+
print(" 4. Approve the plan, then select the native start-work skill for the root-owned conference.")
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
def main() -> None:
|
|
613
|
+
args = parse_args()
|
|
614
|
+
validate_args(args)
|
|
615
|
+
preflight_capabilities()
|
|
616
|
+
scaffold(args)
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
if __name__ == "__main__":
|
|
620
|
+
main()
|