@azure-id/orc 0.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2017 -0
- package/README-id.md +521 -0
- package/README.md +485 -0
- package/bin/build-agents.js +86 -0
- package/bin/cli.js +29050 -0
- package/bin/mockrun-catalog.js +267 -0
- package/bin/onboarding-content.js +172 -0
- package/bin/pricing.json +200 -0
- package/bin/providers.json +437 -0
- package/bin/ui.js +95 -0
- package/bin/verify-contracts.js +3277 -0
- package/bin/verify-package.js +498 -0
- package/bin/webui/api.js +1163 -0
- package/bin/webui/app.html +198 -0
- package/bin/webui/css/00-tokens.css +92 -0
- package/bin/webui/css/01-base.css +42 -0
- package/bin/webui/css/02-shell.css +103 -0
- package/bin/webui/css/03-components.css +462 -0
- package/bin/webui/css/04-motion.css +91 -0
- package/bin/webui/css/05-tour.css +100 -0
- package/bin/webui/css/06-responsive.css +108 -0
- package/bin/webui/css/panels/boundary.css +26 -0
- package/bin/webui/css/panels/challenge.css +151 -0
- package/bin/webui/css/panels/crosslink.css +194 -0
- package/bin/webui/css/panels/docs.css +254 -0
- package/bin/webui/css/panels/experiment.css +23 -0
- package/bin/webui/css/panels/extra.css +536 -0
- package/bin/webui/css/panels/flow.css +177 -0
- package/bin/webui/css/panels/handoff.css +67 -0
- package/bin/webui/css/panels/knowledge.css +86 -0
- package/bin/webui/css/panels/learn.css +154 -0
- package/bin/webui/css/panels/maintenance.css +55 -0
- package/bin/webui/css/panels/mockrun.css +268 -0
- package/bin/webui/css/panels/overview.css +100 -0
- package/bin/webui/css/panels/pact.css +43 -0
- package/bin/webui/css/panels/runs.css +105 -0
- package/bin/webui/css/panels/settings.css +227 -0
- package/bin/webui/css/panels/stats.css +87 -0
- package/bin/webui/fixtures/boundary.js +92 -0
- package/bin/webui/fixtures/challenge.js +825 -0
- package/bin/webui/fixtures/crosslink.js +31 -0
- package/bin/webui/fixtures/docs.js +982 -0
- package/bin/webui/fixtures/extra.js +1934 -0
- package/bin/webui/fixtures/flow.js +81 -0
- package/bin/webui/fixtures/handoff.js +35 -0
- package/bin/webui/fixtures/index.js +486 -0
- package/bin/webui/fixtures/knowledge.js +291 -0
- package/bin/webui/fixtures/maintenance.js +42 -0
- package/bin/webui/fixtures/mockrun.js +36 -0
- package/bin/webui/fixtures/pact.js +111 -0
- package/bin/webui/fixtures/runs.js +109 -0
- package/bin/webui/fixtures/settings.js +78 -0
- package/bin/webui/fixtures/shell.js +48 -0
- package/bin/webui/fixtures/stats.js +104 -0
- package/bin/webui/i18n/TERMS.md +134 -0
- package/bin/webui/i18n/en/banner.json +29 -0
- package/bin/webui/i18n/en/boundary.json +20 -0
- package/bin/webui/i18n/en/challenge.json +106 -0
- package/bin/webui/i18n/en/common.json +69 -0
- package/bin/webui/i18n/en/crosslink.json +69 -0
- package/bin/webui/i18n/en/docs.json +175 -0
- package/bin/webui/i18n/en/experiment.json +17 -0
- package/bin/webui/i18n/en/extra.json +313 -0
- package/bin/webui/i18n/en/flow.json +30 -0
- package/bin/webui/i18n/en/handoff.json +37 -0
- package/bin/webui/i18n/en/knowledge.json +141 -0
- package/bin/webui/i18n/en/learn.json +16 -0
- package/bin/webui/i18n/en/maintenance.json +52 -0
- package/bin/webui/i18n/en/mockrun.json +19 -0
- package/bin/webui/i18n/en/nav.json +19 -0
- package/bin/webui/i18n/en/overview.json +89 -0
- package/bin/webui/i18n/en/pact.json +36 -0
- package/bin/webui/i18n/en/runs.json +51 -0
- package/bin/webui/i18n/en/settings.json +49 -0
- package/bin/webui/i18n/en/stats.json +69 -0
- package/bin/webui/i18n/en/tour.json +33 -0
- package/bin/webui/i18n/id/banner.json +29 -0
- package/bin/webui/i18n/id/boundary.json +20 -0
- package/bin/webui/i18n/id/challenge.json +106 -0
- package/bin/webui/i18n/id/common.json +70 -0
- package/bin/webui/i18n/id/crosslink.json +69 -0
- package/bin/webui/i18n/id/docs.json +175 -0
- package/bin/webui/i18n/id/experiment.json +17 -0
- package/bin/webui/i18n/id/extra.json +313 -0
- package/bin/webui/i18n/id/flow.json +30 -0
- package/bin/webui/i18n/id/handoff.json +37 -0
- package/bin/webui/i18n/id/knowledge.json +141 -0
- package/bin/webui/i18n/id/learn.json +16 -0
- package/bin/webui/i18n/id/maintenance.json +52 -0
- package/bin/webui/i18n/id/mockrun.json +19 -0
- package/bin/webui/i18n/id/nav.json +19 -0
- package/bin/webui/i18n/id/overview.json +89 -0
- package/bin/webui/i18n/id/pact.json +36 -0
- package/bin/webui/i18n/id/runs.json +51 -0
- package/bin/webui/i18n/id/settings.json +49 -0
- package/bin/webui/i18n/id/stats.json +69 -0
- package/bin/webui/i18n/id/tour.json +33 -0
- package/bin/webui/js/00-core.js +115 -0
- package/bin/webui/js/01-i18n.js +149 -0
- package/bin/webui/js/02-ui.js +211 -0
- package/bin/webui/js/03-md.js +286 -0
- package/bin/webui/js/04-router.js +51 -0
- package/bin/webui/js/05-banners.js +172 -0
- package/bin/webui/js/06-edit.js +183 -0
- package/bin/webui/js/90-tour.js +488 -0
- package/bin/webui/js/91-shortcuts.js +126 -0
- package/bin/webui/js/99-boot.js +118 -0
- package/bin/webui/js/panels/boundary.js +104 -0
- package/bin/webui/js/panels/challenge.js +781 -0
- package/bin/webui/js/panels/crosslink.js +654 -0
- package/bin/webui/js/panels/docs.js +1338 -0
- package/bin/webui/js/panels/experiment.js +98 -0
- package/bin/webui/js/panels/extra.js +3011 -0
- package/bin/webui/js/panels/flow.js +297 -0
- package/bin/webui/js/panels/handoff.js +169 -0
- package/bin/webui/js/panels/knowledge.js +890 -0
- package/bin/webui/js/panels/learn.js +220 -0
- package/bin/webui/js/panels/maintenance.js +235 -0
- package/bin/webui/js/panels/mockrun.js +227 -0
- package/bin/webui/js/panels/overview.js +447 -0
- package/bin/webui/js/panels/pact.js +189 -0
- package/bin/webui/js/panels/runs.js +416 -0
- package/bin/webui/js/panels/settings.js +573 -0
- package/bin/webui/js/panels/stats.js +378 -0
- package/bin/webui/serve.js +557 -0
- package/mock-run/INDEX.md +106 -0
- package/mock-run/a-normal-day.md +587 -0
- package/mock-run/context-combiner.md +100 -0
- package/mock-run/extra-recovery.md +330 -0
- package/mock-run/extra-slots.md +177 -0
- package/mock-run/media/README.md +43 -0
- package/mock-run/orc-aftermath.md +392 -0
- package/mock-run/orc-boundary.md +356 -0
- package/mock-run/orc-brainstorm.md +177 -0
- package/mock-run/orc-budget.md +534 -0
- package/mock-run/orc-challenge-council.md +262 -0
- package/mock-run/orc-challenge.md +416 -0
- package/mock-run/orc-cli.md +200 -0
- package/mock-run/orc-diy.md +129 -0
- package/mock-run/orc-doc.md +448 -0
- package/mock-run/orc-explain.md +86 -0
- package/mock-run/orc-export.md +423 -0
- package/mock-run/orc-extra.md +392 -0
- package/mock-run/orc-fast.md +106 -0
- package/mock-run/orc-grill.md +151 -0
- package/mock-run/orc-handoff.md +480 -0
- package/mock-run/orc-pact.md +421 -0
- package/mock-run/orc-pattern.md +112 -0
- package/mock-run/orc-plan.md +108 -0
- package/mock-run/orc-pr-setup.md +126 -0
- package/mock-run/orc-quick.md +113 -0
- package/mock-run/orc-route.md +93 -0
- package/mock-run/orc-ui.md +125 -0
- package/mock-run/orc-ultra.md +103 -0
- package/mock-run/orc.md +157 -0
- package/mock-run/the-example-project.md +55 -0
- package/package.json +39 -0
- package/templates/agents/MODEL-MAPPING.md +168 -0
- package/templates/agents/orc-advisor-fable-5.md +50 -0
- package/templates/agents/orc-advisor-opus-5-xhigh.md +56 -0
- package/templates/agents/orc-analyst-fable-5.md +115 -0
- package/templates/agents/orc-analyze-mini-opus-5-med.md +60 -0
- package/templates/agents/orc-analyze-mini-sonnet-5-high.md +58 -0
- package/templates/agents/orc-challenge-advisor-opus-5-med.md +75 -0
- package/templates/agents/orc-challenge-contrarian-opus-5-high.md +110 -0
- package/templates/agents/orc-challenge-executor-opus-5-med.md +114 -0
- package/templates/agents/orc-challenge-expansionist-opus-5-med.md +112 -0
- package/templates/agents/orc-challenge-judge-opus-5-high.md +132 -0
- package/templates/agents/orc-challenge-outsider-opus-5-low.md +109 -0
- package/templates/agents/orc-challenge-principles-opus-5-high.md +109 -0
- package/templates/agents/orc-challenge-reader-opus-5-low.md +90 -0
- package/templates/agents/orc-claude-writer-opus-4-8-high.md +53 -0
- package/templates/agents/orc-claude-writer-opus-5-med.md +55 -0
- package/templates/agents/orc-context-combiner-opus-5-high.md +88 -0
- package/templates/agents/orc-doc-checker-opus-5-low.md +108 -0
- package/templates/agents/orc-doc-writer-opus-5-med.md +134 -0
- package/templates/agents/orc-executor-haiku-4-5.md +113 -0
- package/templates/agents/orc-executor-opus-4-7-high.md +114 -0
- package/templates/agents/orc-executor-opus-4-7-med.md +114 -0
- package/templates/agents/orc-executor-opus-4-8-high.md +114 -0
- package/templates/agents/orc-executor-opus-5-high.md +114 -0
- package/templates/agents/orc-executor-opus-5-low.md +114 -0
- package/templates/agents/orc-executor-opus-5-med.md +114 -0
- package/templates/agents/orc-executor-sonnet-4-6-high.md +114 -0
- package/templates/agents/orc-executor-sonnet-4-6-med.md +114 -0
- package/templates/agents/orc-executor-sonnet-5-high.md +114 -0
- package/templates/agents/orc-judge-fable-5.md +79 -0
- package/templates/agents/orc-judge-opus-5-xhigh.md +85 -0
- package/templates/agents/orc-learn-writer-opus-5-low.md +73 -0
- package/templates/agents/orc-pattern-codifier-opus-5-med.md +65 -0
- package/templates/agents/orc-pattern-codifier-sonnet-5-high.md +63 -0
- package/templates/agents/orc-planner-fable-5.md +152 -0
- package/templates/agents/orc-planner-mini-opus-5-med.md +69 -0
- package/templates/agents/orc-planner-mini-sonnet-5-high.md +67 -0
- package/templates/agents/orc-planner-opus-5-med.md +160 -0
- package/templates/agents/orc-retro-opus-5-med.md +73 -0
- package/templates/agents/orc-retro-sonnet-5-high.md +72 -0
- package/templates/agents/orc-reviewer-fable-5.md +57 -0
- package/templates/agents/orc-reviewer-opus-5-med.md +60 -0
- package/templates/agents/orc-scout-opus-5-low.md +40 -0
- package/templates/agents/orc-scout-sonnet-4-6-high.md +39 -0
- package/templates/agents/orc-system-analyst-opus-5-high.md +120 -0
- package/templates/agents/orc-test-author-opus-5-med.md +71 -0
- package/templates/agents/orc-trace-writer-haiku-4-5.md +107 -0
- package/templates/agents/orc-verifier-opus-5-med.md +69 -0
- package/templates/agents/orc-wiki-scanner-opus-4-8-high.md +79 -0
- package/templates/agents/orc-wiki-scanner-opus-5-med.md +81 -0
- package/templates/agents/orc-wiki-scanner-sonnet-5-high.md +106 -0
- package/templates/commands/orc-aftermath.md +49 -0
- package/templates/commands/orc-analyze.md +21 -0
- package/templates/commands/orc-boundary.md +46 -0
- package/templates/commands/orc-brainstorm.md +51 -0
- package/templates/commands/orc-budget.md +54 -0
- package/templates/commands/orc-challenge.md +58 -0
- package/templates/commands/orc-claude.md +14 -0
- package/templates/commands/orc-diy.md +13 -0
- package/templates/commands/orc-doc.md +128 -0
- package/templates/commands/orc-explain.md +20 -0
- package/templates/commands/orc-export.md +46 -0
- package/templates/commands/orc-fast.md +15 -0
- package/templates/commands/orc-grill.md +40 -0
- package/templates/commands/orc-handoff.md +52 -0
- package/templates/commands/orc-learn.md +17 -0
- package/templates/commands/orc-mini.md +12 -0
- package/templates/commands/orc-pact.md +44 -0
- package/templates/commands/orc-pattern.md +15 -0
- package/templates/commands/orc-plan.md +22 -0
- package/templates/commands/orc-poly.md +21 -0
- package/templates/commands/orc-pr-driver.md +30 -0
- package/templates/commands/orc-pr-setup.md +31 -0
- package/templates/commands/orc-quick.md +33 -0
- package/templates/commands/orc-retro.md +17 -0
- package/templates/commands/orc-route.md +41 -0
- package/templates/commands/orc-ultra.md +17 -0
- package/templates/commands/orc-verify.md +11 -0
- package/templates/commands/orc-wiki.md +42 -0
- package/templates/commands/orc.md +16 -0
- package/templates/hooks/orc-effort-guard.js +178 -0
- package/templates/hooks/orc-statusline.js +305 -0
- package/templates/hooks/orc-trace.js +471 -0
- package/templates/hooks/orc-update-lib.js +125 -0
- package/templates/skills/_shared/README.md +50 -0
- package/templates/skills/_shared/detecting-artifacts.md +90 -0
- package/templates/skills/_shared/drift-recovery.md +98 -0
- package/templates/skills/_shared/extra-dispatch.md +1051 -0
- package/templates/skills/_shared/fable5-override.md +56 -0
- package/templates/skills/_shared/fallback-handoff.md +42 -0
- package/templates/skills/_shared/gh-stack-commands.md +65 -0
- package/templates/skills/_shared/gotchas.md +177 -0
- package/templates/skills/_shared/interview.md +144 -0
- package/templates/skills/_shared/lane-suspend.md +82 -0
- package/templates/skills/_shared/opus5-only.md +131 -0
- package/templates/skills/_shared/pr-templates.md +106 -0
- package/templates/skills/_shared/read-ladder.md +54 -0
- package/templates/skills/_shared/return-validation.md +145 -0
- package/templates/skills/_shared/smoke-gate.md +28 -0
- package/templates/skills/_shared/stack-plan.md +135 -0
- package/templates/skills/_shared/untrusted-input.md +63 -0
- package/templates/skills/context-combiner/SKILL.md +187 -0
- package/templates/skills/context-combiner/schemas/combined-report.md +78 -0
- package/templates/skills/context-combiner/schemas/combined-requirement-spec.md +87 -0
- package/templates/skills/orc/README.md +150 -0
- package/templates/skills/orc/SKILL.md +526 -0
- package/templates/skills/orc/config.md +389 -0
- package/templates/skills/orc/examples/full-run-mock.md +73 -0
- package/templates/skills/orc/references/analyst-gates.md +124 -0
- package/templates/skills/orc/references/effort-and-mode.md +224 -0
- package/templates/skills/orc/references/house-rules.md +20 -0
- package/templates/skills/orc/references/intake.md +120 -0
- package/templates/skills/orc/references/log-protocol.md +39 -0
- package/templates/skills/orc/references/pattern-gate.md +89 -0
- package/templates/skills/orc/references/plan-handoff.md +84 -0
- package/templates/skills/orc/references/preflight-report.md +220 -0
- package/templates/skills/orc/references/security-checklist.md +39 -0
- package/templates/skills/orc/references/stop-and-resume.md +160 -0
- package/templates/skills/orc/references/trace-protocol.md +314 -0
- package/templates/skills/orc/references/ultra-mode.md +123 -0
- package/templates/skills/orc/references/wave-grouping.md +121 -0
- package/templates/skills/orc/references/wiki-consult.md +177 -0
- package/templates/skills/orc/schemas/checkpoint.md +122 -0
- package/templates/skills/orc/schemas/intent-spec.md +42 -0
- package/templates/skills/orc/schemas/planning-output.md +279 -0
- package/templates/skills/orc/subskills/orc-checkpoint/SKILL.md +55 -0
- package/templates/skills/orc/subskills/orc-execution/SKILL.md +72 -0
- package/templates/skills/orc/subskills/orc-execution/core.md +151 -0
- package/templates/skills/orc/subskills/orc-execution/subagent.md +13 -0
- package/templates/skills/orc/subskills/orc-planner/SKILL.md +264 -0
- package/templates/skills/orc/subskills/orc-planner-mini/SKILL.md +121 -0
- package/templates/skills/orc/subskills/orc-pr/SKILL.md +51 -0
- package/templates/skills/orc/subskills/orc-pr/pr.md +22 -0
- package/templates/skills/orc/subskills/orc-pr/stack-gate.md +108 -0
- package/templates/skills/orc/subskills/orc-review-verify/SKILL.md +76 -0
- package/templates/skills/orc/subskills/orc-review-verify/core.md +135 -0
- package/templates/skills/orc/subskills/orc-review-verify/subagent.md +7 -0
- package/templates/skills/orc/subskills/orc-testgen/SKILL.md +45 -0
- package/templates/skills/orc/subskills/orc-testgen/core.md +59 -0
- package/templates/skills/orc/subskills/orc-testgen/subagent.md +7 -0
- package/templates/skills/orc-advisor/SKILL.md +60 -0
- package/templates/skills/orc-aftermath/SKILL.md +136 -0
- package/templates/skills/orc-aftermath/references/report.md +95 -0
- package/templates/skills/orc-analyze/SKILL.md +220 -0
- package/templates/skills/orc-analyze/examples/analyze-mock.md +42 -0
- package/templates/skills/orc-analyze/references/branching.md +51 -0
- package/templates/skills/orc-analyze/references/deep-mode.md +27 -0
- package/templates/skills/orc-analyze/references/thin-input.md +77 -0
- package/templates/skills/orc-analyze/schemas/report-audit.md +83 -0
- package/templates/skills/orc-analyze/schemas/report-prose.md +63 -0
- package/templates/skills/orc-analyze/schemas/report-requirement.md +78 -0
- package/templates/skills/orc-analyze/schemas/requirement-spec.md +77 -0
- package/templates/skills/orc-analyze-mini/SKILL.md +112 -0
- package/templates/skills/orc-analyze-mini/examples/quick-analysis-mock.md +31 -0
- package/templates/skills/orc-boundary/SKILL.md +208 -0
- package/templates/skills/orc-boundary/references/card.md +78 -0
- package/templates/skills/orc-boundary/references/gate.md +113 -0
- package/templates/skills/orc-brainstorm/SKILL.md +339 -0
- package/templates/skills/orc-brainstorm/references/brainstorm-doc.md +133 -0
- package/templates/skills/orc-brainstorm/references/lenses.md +152 -0
- package/templates/skills/orc-budget/SKILL.md +225 -0
- package/templates/skills/orc-budget/references/corpus.md +87 -0
- package/templates/skills/orc-challenge/README.md +142 -0
- package/templates/skills/orc-challenge/SKILL.md +255 -0
- package/templates/skills/orc-challenge/examples/code-module.md +110 -0
- package/templates/skills/orc-challenge/examples/council-full-roster.md +273 -0
- package/templates/skills/orc-challenge/examples/tsd-two-iterations.md +213 -0
- package/templates/skills/orc-challenge/references/conservation.md +107 -0
- package/templates/skills/orc-challenge/references/council.md +315 -0
- package/templates/skills/orc-challenge/references/cycle-state.md +185 -0
- package/templates/skills/orc-challenge/references/dimensions.md +121 -0
- package/templates/skills/orc-challenge/references/fix-brief.md +130 -0
- package/templates/skills/orc-challenge/references/intake.md +171 -0
- package/templates/skills/orc-challenge/references/kinds.md +44 -0
- package/templates/skills/orc-challenge/references/plain-english.md +98 -0
- package/templates/skills/orc-challenge/references/rubric.md +109 -0
- package/templates/skills/orc-challenge/references/sealed-slice.md +97 -0
- package/templates/skills/orc-challenge/references/verdict-doc.md +154 -0
- package/templates/skills/orc-claude/SKILL.md +199 -0
- package/templates/skills/orc-claude/examples/claude-run-mock.md +65 -0
- package/templates/skills/orc-claude/references/refresh.md +76 -0
- package/templates/skills/orc-claude/references/template.md +109 -0
- package/templates/skills/orc-diy/README.md +142 -0
- package/templates/skills/orc-diy/SKILL.md +70 -0
- package/templates/skills/orc-diy/references/blocks/analyze.md +24 -0
- package/templates/skills/orc-diy/references/blocks/execution.md +42 -0
- package/templates/skills/orc-diy/references/blocks/extra.md +55 -0
- package/templates/skills/orc-diy/references/blocks/header.md +55 -0
- package/templates/skills/orc-diy/references/blocks/mock-example.md +22 -0
- package/templates/skills/orc-diy/references/blocks/pattern.md +18 -0
- package/templates/skills/orc-diy/references/blocks/planning.md +34 -0
- package/templates/skills/orc-diy/references/blocks/review.md +18 -0
- package/templates/skills/orc-diy/references/blocks/scoring.md +16 -0
- package/templates/skills/orc-diy/references/blocks/security.md +25 -0
- package/templates/skills/orc-diy/references/blocks/ship.md +25 -0
- package/templates/skills/orc-diy/references/blocks/summary.md +18 -0
- package/templates/skills/orc-diy/references/blocks/testgen.md +17 -0
- package/templates/skills/orc-diy/references/blocks/trace.md +28 -0
- package/templates/skills/orc-diy/references/blocks/verify.md +25 -0
- package/templates/skills/orc-diy/references/blocks/wiki.md +26 -0
- package/templates/skills/orc-diy/references/compile.md +59 -0
- package/templates/skills/orc-diy/references/flow-schema.md +100 -0
- package/templates/skills/orc-diy/references/locked-blocks.md +37 -0
- package/templates/skills/orc-doc/README.md +229 -0
- package/templates/skills/orc-doc/SKILL.md +444 -0
- package/templates/skills/orc-doc/examples/orc-doc-prd-run.md +325 -0
- package/templates/skills/orc-doc/references/chunking.md +527 -0
- package/templates/skills/orc-doc/references/gates.md +311 -0
- package/templates/skills/orc-doc/references/generation-rules.md +122 -0
- package/templates/skills/orc-doc/references/house-rules.md +170 -0
- package/templates/skills/orc-doc/references/import-targets.md +40 -0
- package/templates/skills/orc-doc/references/plain-language.md +66 -0
- package/templates/skills/orc-doc/references/portable-markdown.md +74 -0
- package/templates/skills/orc-doc/references/resume-protocol.md +228 -0
- package/templates/skills/orc-doc/references/templates/collaboration.md +118 -0
- package/templates/skills/orc-doc/references/templates/prd.md +133 -0
- package/templates/skills/orc-doc/references/templates/report.md +102 -0
- package/templates/skills/orc-doc/references/templates/tsd.md +122 -0
- package/templates/skills/orc-doc/references/templates/workflow.md +112 -0
- package/templates/skills/orc-explain/SKILL.md +57 -0
- package/templates/skills/orc-export/SKILL.md +154 -0
- package/templates/skills/orc-fast/SKILL.md +188 -0
- package/templates/skills/orc-grill/SKILL.md +207 -0
- package/templates/skills/orc-grill/references/grill-doc.md +105 -0
- package/templates/skills/orc-handoff/SKILL.md +204 -0
- package/templates/skills/orc-handoff/references/handoff-log.md +67 -0
- package/templates/skills/orc-handoff/references/surfaces.md +88 -0
- package/templates/skills/orc-judge/SKILL.md +82 -0
- package/templates/skills/orc-learn/SKILL.md +156 -0
- package/templates/skills/orc-learn/examples/learn-run-mock.md +61 -0
- package/templates/skills/orc-learn/references/deepen.md +70 -0
- package/templates/skills/orc-learn/references/refresh.md +65 -0
- package/templates/skills/orc-learn/references/template-knowledge.md +83 -0
- package/templates/skills/orc-learn/references/template-learning.md +67 -0
- package/templates/skills/orc-mini/SKILL.md +226 -0
- package/templates/skills/orc-mini/examples/mini-run-mock.md +50 -0
- package/templates/skills/orc-pact/SKILL.md +218 -0
- package/templates/skills/orc-pact/references/gate.md +70 -0
- package/templates/skills/orc-pact/references/ledger.md +99 -0
- package/templates/skills/orc-pattern/SKILL.md +124 -0
- package/templates/skills/orc-pattern/references/INDEX.md +73 -0
- package/templates/skills/orc-pattern/references/be-django.md +80 -0
- package/templates/skills/orc-pattern/references/be-express.md +82 -0
- package/templates/skills/orc-pattern/references/be-fastapi.md +107 -0
- package/templates/skills/orc-pattern/references/be-go.md +96 -0
- package/templates/skills/orc-pattern/references/be-nestjs.md +86 -0
- package/templates/skills/orc-pattern/references/be-postgres.md +98 -0
- package/templates/skills/orc-pattern/references/fe-a11y.md +36 -0
- package/templates/skills/orc-pattern/references/fe-angular.md +87 -0
- package/templates/skills/orc-pattern/references/fe-nextjs.md +65 -0
- package/templates/skills/orc-pattern/references/fe-perf.md +39 -0
- package/templates/skills/orc-pattern/references/fe-react.md +83 -0
- package/templates/skills/orc-pattern/references/fe-vue.md +75 -0
- package/templates/skills/orc-pattern/schemas/pattern-doc.md +62 -0
- package/templates/skills/orc-poly/SKILL.md +216 -0
- package/templates/skills/orc-poly/examples/poly-run-mock.md +51 -0
- package/templates/skills/orc-poly/references/gather.md +70 -0
- package/templates/skills/orc-poly/references/poly-spec.md +84 -0
- package/templates/skills/orc-pr-driver/README.md +349 -0
- package/templates/skills/orc-pr-driver/SKILL.md +167 -0
- package/templates/skills/orc-pr-driver/references/conflict-playbook.md +78 -0
- package/templates/skills/orc-pr-driver/references/green-gate.md +105 -0
- package/templates/skills/orc-pr-driver/references/orc-run-split.md +99 -0
- package/templates/skills/orc-pr-setup/README.md +436 -0
- package/templates/skills/orc-pr-setup/SKILL.md +184 -0
- package/templates/skills/orc-pr-setup/references/certainty-gate.md +66 -0
- package/templates/skills/orc-pr-setup/references/layer-taxonomy.md +67 -0
- package/templates/skills/orc-quick/README.md +423 -0
- package/templates/skills/orc-quick/SKILL.md +306 -0
- package/templates/skills/orc-quick/references/context-doc.md +114 -0
- package/templates/skills/orc-quick/references/dispatch-gate.md +163 -0
- package/templates/skills/orc-quick/references/gh-mode.md +127 -0
- package/templates/skills/orc-retro/SKILL.md +222 -0
- package/templates/skills/orc-retro/examples/retro-mock.md +171 -0
- package/templates/skills/orc-route/SKILL.md +165 -0
- package/templates/skills/orc-verify/SKILL.md +86 -0
- package/templates/skills/orc-verify/examples/verify-mock.md +33 -0
- package/templates/skills/orc-wiki/README.md +325 -0
- package/templates/skills/orc-wiki/SKILL.md +322 -0
- package/templates/skills/orc-wiki/examples/wiki-run-mock.md +37 -0
- package/templates/skills/orc-wiki/references/claude-md-injection.md +61 -0
- package/templates/skills/orc-wiki/references/crosslink-compile.md +39 -0
- package/templates/skills/orc-wiki/references/crosslink-kinds.md +57 -0
- package/templates/skills/orc-wiki/references/crosslink.md +284 -0
- package/templates/skills/orc-wiki/references/extra.md +79 -0
- package/templates/skills/orc-wiki/references/integrity-check.md +86 -0
- package/templates/skills/orc-wiki/references/orientation.md +51 -0
- package/templates/skills/orc-wiki/references/partial-refresh.md +203 -0
- package/templates/skills/orc-wiki/references/pattern-prewarm.md +19 -0
- package/templates/skills/orc-wiki/references/staleness.md +288 -0
- package/templates/skills/orc-wiki/schemas/crosslink-tag.md +166 -0
- package/templates/skills/orc-wiki/schemas/wiki-doc.md +120 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mockrun.title": "Contoh Penggunaan Skill",
|
|
3
|
+
"mockrun.sub": "Seperti apa tampilan setiap lane saat dijalankan — ditulis lengkap, jadi Anda tidak perlu menjalankannya dulu untuk tahu.",
|
|
4
|
+
"mockrun.intro": "Ada {n} contoh yang ikut terpasang bersama ORC. Tidak ada yang benar-benar dijalankan: setiap layar, berkas dan angka ditulis persis seperti cara lane aslinya menulisnya. Baca dulu sebelum menjalankan.",
|
|
5
|
+
"mockrun.contents": "Semua contoh",
|
|
6
|
+
"mockrun.search": "Cari contoh…",
|
|
7
|
+
"mockrun.noMatch": "Tidak ada contoh yang cocok.",
|
|
8
|
+
"mockrun.matches": "{n} contoh cocok",
|
|
9
|
+
"mockrun.matchesPlural": "{n} contoh cocok",
|
|
10
|
+
"mockrun.back": "← Semua contoh",
|
|
11
|
+
"mockrun.lines": "{n} baris",
|
|
12
|
+
"mockrun.linesPlural": "{n} baris",
|
|
13
|
+
"mockrun.kindAnnotated": "beranotasi",
|
|
14
|
+
"mockrun.copyCmd": "Salin perintah terminal",
|
|
15
|
+
"mockrun.codeBlock": "Blok kode",
|
|
16
|
+
"mockrun.missing": "Tidak ada contoh bernama {slug}.",
|
|
17
|
+
"mockrun.none": "Tidak ada contoh yang terpasang.",
|
|
18
|
+
"mockrun.noneHint": "Contoh ikut di dalam paket ORC. Pasang ulang (`orc upgrade`) untuk mengembalikannya."
|
|
19
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"nav.overview": "Ringkasan",
|
|
3
|
+
"nav.settings": "Pengaturan",
|
|
4
|
+
"nav.runs": "Run",
|
|
5
|
+
"nav.knowledge": "Pengetahuan",
|
|
6
|
+
"nav.stats": "Statistik",
|
|
7
|
+
"nav.flow": "Flow",
|
|
8
|
+
"nav.crosslink": "Crosslink",
|
|
9
|
+
"nav.learn": "Belajar",
|
|
10
|
+
"nav.mockrun": "Contoh Penggunaan Skill",
|
|
11
|
+
"nav.experiment": "Eksperimen",
|
|
12
|
+
"nav.maintenance": "Pemeliharaan",
|
|
13
|
+
"nav.pact": "Janji",
|
|
14
|
+
"nav.boundary": "Batas",
|
|
15
|
+
"nav.handoff": "Ubah Sendiri",
|
|
16
|
+
"nav.challenge": "Challenge",
|
|
17
|
+
"nav.extra": "Extra",
|
|
18
|
+
"nav.docs": "Dokumen"
|
|
19
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"overview.title": "Ringkasan",
|
|
3
|
+
"overview.sub": "Kesehatan instalasi, kondisi pengetahuan, dan apa yang masih menunggu Anda.",
|
|
4
|
+
"overview.tile.install": "Instalasi",
|
|
5
|
+
"overview.tile.installHealthy": "Sehat",
|
|
6
|
+
"overview.tile.installIssues": "{n} masalah",
|
|
7
|
+
"overview.tile.installIssuesPlural": "{n} masalah",
|
|
8
|
+
"overview.tile.installNote": "payload {payload} · cli {cli}",
|
|
9
|
+
"overview.tile.wiki": "Wiki",
|
|
10
|
+
"overview.tile.wikiNote": "{docs} dokumen · scan terakhir {scan}",
|
|
11
|
+
"overview.tile.wikiNone": "belum ada wiki terdaftar",
|
|
12
|
+
"overview.tile.wikiUnknown": "tier tidak diketahui",
|
|
13
|
+
"overview.tile.waiting": "Run menunggu",
|
|
14
|
+
"overview.tile.waitingNote": "{n} tercatat seluruhnya",
|
|
15
|
+
"overview.tile.version": "Versi ORC",
|
|
16
|
+
"overview.tile.versionChecking": "Membandingkan dengan sumber instalasi.",
|
|
17
|
+
"overview.tile.versionFailed": "Pemeriksaan versi tidak selesai.",
|
|
18
|
+
"overview.tile.patterns": "Code pattern",
|
|
19
|
+
"overview.tile.patternsNone": "belum ada yang tersimpan",
|
|
20
|
+
"overview.attention.title": "Layak dikerjakan",
|
|
21
|
+
"overview.attention.allClear": "Tidak ada yang perlu perhatian Anda.",
|
|
22
|
+
"overview.attention.allClearHint": "Instalasi sehat, pengetahuan segar, tidak ada run yang tertinggal.",
|
|
23
|
+
"overview.attention.nothingToDo": "Tidak perlu tindakan — ini bersih sendiri di run berikutnya.",
|
|
24
|
+
"overview.item.diyStale.title": "Flow DIY perlu dikompilasi ulang",
|
|
25
|
+
"overview.item.diyStale.body": "Compile yang STALE menolak dijalankan. Kompilasi ulang di panel Flow — di situlah `orc diy compile` berada, bukan di Pemeliharaan.",
|
|
26
|
+
"overview.item.diyStale.cta": "Kompilasi ulang di Flow",
|
|
27
|
+
"overview.item.wikiAging.title": "Wiki mulai USANG — sebaiknya segera di-refresh",
|
|
28
|
+
"overview.item.wikiAging.body": "Dokumen mulai menjauh dari berkas yang dicakupnya. Refresh menjaga lane cepat tetap terpakai dan perencanaan tetap berpijak pada kode. Refresh memakai model, jadi dijalankan di Claude Code, bukan di sini.",
|
|
29
|
+
"overview.item.wikiAging.cta": "Lihat apa yang berubah",
|
|
30
|
+
"overview.item.wikiStale.title": "Wiki sudah STALE",
|
|
31
|
+
"overview.item.wikiStale.body": "Setidaknya satu dokumen jauh tertinggal dari berkas yang dicakupnya. /orc-fast akan jatuh ke orc-mini sampai ini di-refresh.",
|
|
32
|
+
"overview.item.wikiStale.cta": "Lihat apa yang berubah",
|
|
33
|
+
"overview.item.wikiNone.title": "Belum ada wiki proyek",
|
|
34
|
+
"overview.item.wikiNone.body": "Wiki adalah yang membuat lane cepat dan perencanaan berpijak jadi mungkin. Bangun dengan /orc-wiki di sesi Claude.",
|
|
35
|
+
"overview.item.wikiNone.cta": "Buka Pengetahuan",
|
|
36
|
+
"overview.item.wikiUnregistered.title": "Wiki belum terdaftar",
|
|
37
|
+
"overview.item.wikiUnregistered.body": "Dokumennya ada tapi belum bisa dibaca siapa pun. Registrasi diturunkan dari dokumen, jadi `orc wiki sync` gratis dan instan — bukan scan ulang.",
|
|
38
|
+
"overview.item.wikiUnregistered.cta": "Buka Pengetahuan",
|
|
39
|
+
"overview.item.patterns.title": "Belum ada code pattern tersimpan",
|
|
40
|
+
"overview.item.patterns.body": "Tanpa itu, executor menulis kode generik, bukan kode yang cocok dengan repo ini. /orc-pattern merangkumnya sekali dan dipakai ulang oleh setiap run berikutnya.",
|
|
41
|
+
"overview.item.patterns.cta": "Buka Pengetahuan",
|
|
42
|
+
"overview.item.waiting.title": "{n} run masih menunggu",
|
|
43
|
+
"overview.item.waiting.titlePlural": "{n} run masih menunggu",
|
|
44
|
+
"overview.item.waiting.body": "Penunjuk resume ada di disk. `orc resume` mencetak prompt untuk ditempel ke sesi baru.",
|
|
45
|
+
"overview.item.waiting.cta": "Buka Run",
|
|
46
|
+
"overview.item.update.title": "orc {latest} sudah tersedia",
|
|
47
|
+
"overview.item.update.body": "Anda memakai {version}. Baca dulu changelog-nya, baru upgrade — tidak ada yang terpasang sendiri.",
|
|
48
|
+
"overview.item.update.cta": "Buka Pemeliharaan",
|
|
49
|
+
"overview.item.doctor.cta": "Buka Pemeliharaan",
|
|
50
|
+
"overview.waiting.title": "Menunggu Anda",
|
|
51
|
+
"overview.waiting.note": "Penunjuk resume ada di disk untuk yang berikut. `orc resume` mencetak prompt untuk ditempel ke sesi baru.",
|
|
52
|
+
"overview.waiting.where": "terbuka — lihat panel Run untuk posisinya",
|
|
53
|
+
"overview.waiting.since": "menunggu sejak {age}",
|
|
54
|
+
"overview.doctor.title": "orc doctor",
|
|
55
|
+
"overview.doctor.fixable": "bisa diperbaiki",
|
|
56
|
+
"overview.doctor.manual": "manual",
|
|
57
|
+
"overview.paths.title": "Letak berkas",
|
|
58
|
+
"overview.paths.project": "proyek",
|
|
59
|
+
"overview.paths.config": "config",
|
|
60
|
+
"overview.paths.skills": "skill",
|
|
61
|
+
"overview.paths.runs": "run",
|
|
62
|
+
"overview.paths.traces": "trace",
|
|
63
|
+
"overview.know.title": "Pengetahuan",
|
|
64
|
+
"overview.know.patterns": "pattern tersimpan",
|
|
65
|
+
"overview.know.tags": "tag crosslink",
|
|
66
|
+
"overview.know.diy": "flow diy",
|
|
67
|
+
"overview.tile.none": "belum ada",
|
|
68
|
+
"overview.tile.pact": "Janji",
|
|
69
|
+
"overview.tile.pactNote": "{n} tercatat - {u} tak ada cara murah untuk mengecek",
|
|
70
|
+
"overview.tile.pactNone": "Belum ada yang tercatat",
|
|
71
|
+
"overview.tile.boundary": "Batas",
|
|
72
|
+
"overview.tile.boundaryNote": "{n} area - {stale} usang",
|
|
73
|
+
"overview.tile.boundaryNone": "Belum ada area yang dipetakan",
|
|
74
|
+
"overview.tile.debt": "Pembaruan tertunda",
|
|
75
|
+
"overview.tile.debtNote": "wiki {tier} - sekitar {tok} untuk membereskan",
|
|
76
|
+
"overview.tile.debtNone": "Tidak ada yang tertunda",
|
|
77
|
+
"overview.item.exportStale.cta": "Susun ulang",
|
|
78
|
+
"overview.item.pactBroken.cta": "Buka Janji",
|
|
79
|
+
"overview.item.boundaryRefuse.cta": "Buka Batas",
|
|
80
|
+
"overview.item.docDrifted.cta": "Buka Dokumen",
|
|
81
|
+
"overview.item.wikiDebt.cta": "Buka Pengetahuan",
|
|
82
|
+
"overview.item.extraFindings.cta": "Buka Extra",
|
|
83
|
+
"overview.extraOrphan.title": "Sebuah pengiriman tidak melapor kembali",
|
|
84
|
+
"overview.extraOrphan.note": "ORC mengirim pekerjaan ke pekerja non-Claude dan tidak pernah menerima hasilnya. Perubahannya mungkin masih ada di disk.",
|
|
85
|
+
"overview.extraOrphan.chip": "{n} pengiriman",
|
|
86
|
+
"overview.extraOrphan.chipPlural": "{n} pengiriman",
|
|
87
|
+
"overview.extraOrphan.slug": "tidak pernah melapor kembali",
|
|
88
|
+
"overview.extraOrphan.where": "Extra · Pemulihan"
|
|
89
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"pact.title": "Janji",
|
|
3
|
+
"pact.sub": "Aturan yang dijanjikan proyek ini, dan mana yang sekarang diragukan.",
|
|
4
|
+
"pact.none": "Belum ada catatan",
|
|
5
|
+
"pact.noneHint": "Janji tidak pernah dikarang di sini. Semuanya berasal dari keputusan yang sudah Anda ambil - invarian sebuah run, hasil grill atau brainstorm, atau kalimat Anda sendiri.",
|
|
6
|
+
"pact.cmdHarvestWhy": "Mengumpulkan janji berarti membaca run Anda dan menanyakan satu per satu, jadi ada biaya model. Panel ini bisa mengecek ulang dan menyusun ulang tanpa biaya, tapi tidak bisa berdiskusi.",
|
|
7
|
+
"pact.cmdReconcileWhy": "Memutuskan apakah sebuah janji masih berlaku adalah percakapan, bukan perintah. Panel mengecek; lane yang berdiskusi.",
|
|
8
|
+
"pact.summary": "Catatan",
|
|
9
|
+
"pact.field.ledger": "Berkas catatan",
|
|
10
|
+
"pact.field.doc": "Salinan yang mudah dibaca",
|
|
11
|
+
"pact.docMissing": "PACT.md belum dibuat. Tekan Susun ulang PACT.md - isinya diturunkan dari catatan dan tidak berbiaya.",
|
|
12
|
+
"pact.uncheckableNote": "UNCHECKABLE adalah keadaan yang jujur, bukan kegagalan: artinya tidak ada cara murah untuk membuktikan janji ini. Ini tidak pernah dihitung sebagai masalah.",
|
|
13
|
+
"pact.field.anchors": "Ada di",
|
|
14
|
+
"pact.field.check": "Dibuktikan oleh",
|
|
15
|
+
"pact.field.checkManual": "tidak ada cara murah - harus dilihat orang",
|
|
16
|
+
"pact.field.origin": "Berasal dari",
|
|
17
|
+
"pact.field.confidence": "Keyakinan",
|
|
18
|
+
"pact.field.verified": "Terakhir terbukti di",
|
|
19
|
+
"pact.lastCheckFailed": "Pemeriksaan terakhir dijalankan {at} dan gagal.",
|
|
20
|
+
"pact.alsoFlagged": "Juga ditandai oleh",
|
|
21
|
+
"pact.alsoBoundary": "{area} bukan tempat ORC bertindak sendiri",
|
|
22
|
+
"pact.alsoAftermath": "run {slug} menunjukkan perubahan berulang di area ini",
|
|
23
|
+
"pact.recheckOne": "Cek ulang yang ini",
|
|
24
|
+
"pact.recheckAll": "Cek ulang 1 janji",
|
|
25
|
+
"pact.recheckAllPlural": "Cek ulang {n} janji",
|
|
26
|
+
"pact.syncDoc": "Susun ulang PACT.md",
|
|
27
|
+
"pact.syncOk": "PACT.md disusun ulang dari catatan",
|
|
28
|
+
"pact.history": "Pemeriksaan sebelumnya",
|
|
29
|
+
"pact.confirmTitle": "Cek ulang sekarang?",
|
|
30
|
+
"pact.confirmBody": "Ini menjalankan pemeriksaan milik janji itu sendiri. Persisnya yang akan dijalankan:",
|
|
31
|
+
"pact.confirmBodyPlural": "Ini menjalankan pemeriksaan milik masing-masing janji. Persisnya yang akan dijalankan:",
|
|
32
|
+
"pact.confirmNote": "Ini perintah yang Anda tulis sendiri, di repo Anda sendiri. Janji yang lulus akan ditambatkan ulang ke commit sekarang; tidak ada hal lain yang diubah, dan tidak ada yang dipensiunkan untuk Anda.",
|
|
33
|
+
"pact.confirmGo": "Jalankan pemeriksaan",
|
|
34
|
+
"pact.checkDone": "Selesai - semua yang lulus sudah ditambatkan ulang",
|
|
35
|
+
"pact.checkFound": "Selesai - setidaknya satu janji tidak berlaku lagi"
|
|
36
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"runs.title": "Run",
|
|
3
|
+
"runs.sub": "Semua yang pernah dicatat ORC, terbaru di atas. Klik satu run untuk membukanya di tempat.",
|
|
4
|
+
"runs.empty": "Belum ada run yang tercatat.",
|
|
5
|
+
"runs.filterAll": "Semua",
|
|
6
|
+
"runs.filterWaiting": "Menunggu",
|
|
7
|
+
"runs.filterDone": "Selesai",
|
|
8
|
+
"runs.filterOther": "Lainnya",
|
|
9
|
+
"runs.search": "Saring berdasarkan slug atau lane…",
|
|
10
|
+
"runs.count": "{shown} dari {total}",
|
|
11
|
+
"runs.noMatch": "Tidak ada run yang cocok dengan saringan itu.",
|
|
12
|
+
"runs.collapseAll": "Tutup semua",
|
|
13
|
+
"runs.openFail": "Run itu tidak bisa dibuka.",
|
|
14
|
+
"runs.tab.resume": "Resume",
|
|
15
|
+
"runs.tab.state": "Kondisi terakhir",
|
|
16
|
+
"runs.tab.checkpoint": "Checkpoint",
|
|
17
|
+
"runs.tab.trace": "Trace",
|
|
18
|
+
"runs.tab.mock": "Contoh mock",
|
|
19
|
+
"runs.tab.files": "Berkas",
|
|
20
|
+
"runs.resume.note": "Tempel ini ke sesi Claude Code yang baru untuk melanjutkan run.",
|
|
21
|
+
"runs.resume.copy": "Salin prompt",
|
|
22
|
+
"runs.resume.copied": "Prompt resume tersalin",
|
|
23
|
+
"runs.trace.note": "Ekor dari behavior trace run ini. Trace bersifat permanen dan tidak pernah dipangkas otomatis.",
|
|
24
|
+
"runs.mock.none": "Tidak dibuat untuk run ini.",
|
|
25
|
+
"runs.mock.noneHint": "Itu normal: contoh mock hanya ditulis setelah verify hijau, dan hanya kalau config `mock_example` bernilai `on` (atau Anda menerima tawaran `ask`).",
|
|
26
|
+
"runs.mock.readonly": "Hanya baca. Panel ini tidak pernah menjalankan contoh mock — isinya kode proyek sembarang.",
|
|
27
|
+
"runs.field.slug": "slug",
|
|
28
|
+
"runs.field.status": "status",
|
|
29
|
+
"runs.field.lane": "lane",
|
|
30
|
+
"runs.field.phase": "fase",
|
|
31
|
+
"runs.field.wave": "wave",
|
|
32
|
+
"runs.field.folder": "folder",
|
|
33
|
+
"runs.field.updated": "diperbarui",
|
|
34
|
+
"runs.field.files": "berkas",
|
|
35
|
+
"runs.field.written": "ditulis",
|
|
36
|
+
"runs.emptyFolder": "(folder kosong)",
|
|
37
|
+
"runs.after.signals": "Apa yang terjadi setelahnya",
|
|
38
|
+
"runs.filterClosed": "Ditutup",
|
|
39
|
+
"runs.close.button": "Tandai selesai",
|
|
40
|
+
"runs.close.reopen": "Buka lagi",
|
|
41
|
+
"runs.close.hint": "Run ini masih punya penunjuk resume, jadi semuanya menghitungnya sebagai menunggu.",
|
|
42
|
+
"runs.close.confirmTitle": "Tandai run ini selesai?",
|
|
43
|
+
"runs.close.confirmBody": "Anda menyatakan sudah selesai dengan {slug}. Run ini berhenti dihitung sebagai menunggu, dan `orc resume` berhenti menawarkannya.",
|
|
44
|
+
"runs.close.moves": "RESUME.md DIPINDAHKAN ke RESUME.closed.md dan alasannya dicatat. Tidak ada yang dihapus, dan Buka lagi mengembalikannya.",
|
|
45
|
+
"runs.close.reasonPlaceholder": "alasan Anda sudah selesai dengannya",
|
|
46
|
+
"runs.close.needReason": "Alasan wajib diisi — run yang ditutup tanpa alasan tercatat adalah keadaan yang tidak bisa diaudit siapa pun.",
|
|
47
|
+
"runs.close.done": "Ditandai selesai.",
|
|
48
|
+
"runs.close.reopened": "Dibuka lagi — sekarang menunggu.",
|
|
49
|
+
"runs.close.failed": "Itu tidak berhasil.",
|
|
50
|
+
"runs.close.was": "ditutup: {reason}"
|
|
51
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"settings.title": "Pengaturan",
|
|
3
|
+
"settings.sub": "Semua kunci yang dikenal `orc config`. Setiap perubahan menjalankan perintah CLI aslinya, jadi validator CLI yang memutuskan.",
|
|
4
|
+
"settings.profiles": "Profil",
|
|
5
|
+
"settings.recommend": "Sarankan profil",
|
|
6
|
+
"settings.filter": "Saring kunci… (tekan / )",
|
|
7
|
+
"settings.filterAria": "Saring pengaturan berdasarkan kunci atau deskripsi",
|
|
8
|
+
"settings.changedOnly": "Hanya yang diubah ({n})",
|
|
9
|
+
"settings.changedTitle": "Tampilkan hanya kunci yang nilainya beda dari default.",
|
|
10
|
+
"settings.changedNone": "Belum ada yang di-override — semua kunci masih default.",
|
|
11
|
+
"settings.collapseAll": "Tutup semua",
|
|
12
|
+
"settings.expandAll": "Buka semua",
|
|
13
|
+
"settings.matches": "{n} cocok",
|
|
14
|
+
"settings.matchesPlural": "{n} cocok",
|
|
15
|
+
"settings.keys": "{n} kunci",
|
|
16
|
+
"settings.keysPlural": "{n} kunci",
|
|
17
|
+
"settings.ofTotal": "{n} dari {total}",
|
|
18
|
+
"settings.readFail": "Config gagal dibaca.",
|
|
19
|
+
"settings.file.title": "Berkas override",
|
|
20
|
+
"settings.file.file": "berkas",
|
|
21
|
+
"settings.file.state": "kondisi",
|
|
22
|
+
"settings.file.exists": "ada — hanya kunci yang diubah yang ditulis di sini",
|
|
23
|
+
"settings.file.absent": "belum dibuat (semua kunci masih default)",
|
|
24
|
+
"settings.file.traceNote": "Pencatatan behavior-trace SELALU aktif dan tidak bisa dikonfigurasi. Setiap run menulis satu trace; hanya foldernya (log_dir) yang merupakan pengaturan.",
|
|
25
|
+
"settings.tier.common": "Umum",
|
|
26
|
+
"settings.tier.fable5": "Override peran Fable 5",
|
|
27
|
+
"settings.tier.advanced": "Lanjutan",
|
|
28
|
+
"settings.tierDesc.common": "Kunci yang paling sering disentuh. Kalau Anda hanya mengubah satu hal, kemungkinan besar ada di sini.",
|
|
29
|
+
"settings.tierDesc.fable5": "Override Fable 5 per peran. Seluruh blok ini mati selama opus5_only aktif — itu aturan presedensi, bukan bug.",
|
|
30
|
+
"settings.tierDesc.advanced": "Sisa dari semua yang dikenal ORC. Default-nya disengaja; ubah kalau Anda punya alasan.",
|
|
31
|
+
"settings.inert": "mati",
|
|
32
|
+
"settings.shadowed": "tertutup",
|
|
33
|
+
"settings.handEdited.title": "Kunci yang diedit manual",
|
|
34
|
+
"settings.handEdited.note": "Kunci ini tidak ada di registry config, jadi `orc config set` menolaknya dan panel ini tidak akan menulisnya. rubric_bands_override memang dirancang begitu: ditulis tangan dengan sengaja. Edit langsung berkas YAML-nya.",
|
|
35
|
+
"settings.handEdited.readonly": "hanya baca di sini — edit manual orc.config.yaml",
|
|
36
|
+
"settings.ladder.title": "Tangga skor → model",
|
|
37
|
+
"settings.ladder.opus5": "opus5_only AKTIF — executor memakai tangga effort 3 pita yang tetap. Ini mengalahkan tabel default, rubric_bands_override, dan seluruh blok fable5_*.",
|
|
38
|
+
"settings.ladder.override": "Ada rubric_bands_override tulisan tangan di berkas. Itu menggantikan tabel default (dan sendirinya dikalahkan oleh opus5_only).",
|
|
39
|
+
"settings.ladder.default": "Tabel default 8 pita. Tabel diselesaikan dengan yang tertinggi menang: opus5_only > rubric_bands_override > yang ini.",
|
|
40
|
+
"settings.ladder.note": "Hanya baca — ini diagram, bukan editor. Datanya dari tabel milik CLI, jadi panel tidak menyimpan salinan kedua.",
|
|
41
|
+
"profiles.title": "Profil config",
|
|
42
|
+
"profiles.note": "Profil hanya menulis kunci yang sudah ada dan tervalidasi — tidak ada yang diatur di luar yang bisa Anda atur sendiri.",
|
|
43
|
+
"profiles.apply": "Terapkan",
|
|
44
|
+
"profiles.wouldChange": "akan mengubah: {list}",
|
|
45
|
+
"profiles.noChange": "repo ini sudah memakai profil itu — tidak ada yang berubah",
|
|
46
|
+
"recommend.title": "Profil yang disarankan",
|
|
47
|
+
"recommend.note": "Hanya baca: ini melihat repo Anda dan menyarankan satu profil. Tidak ada yang diubah.",
|
|
48
|
+
"recommend.applyIt": "Terapkan {name}"
|
|
49
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"stats.title": "Statistik",
|
|
3
|
+
"stats.sub": "Dihitung dari nama berkas trace — tanpa model, instan, gratis.",
|
|
4
|
+
"stats.empty": "Belum ada trace.",
|
|
5
|
+
"stats.emptyHint": "{dir} — jalankan lane ORC mana pun dan trace-nya muncul di sini.",
|
|
6
|
+
"stats.runs": "Run",
|
|
7
|
+
"stats.dispatches": "Subagent yang didispatch",
|
|
8
|
+
"stats.downgrades": "Penurunan model",
|
|
9
|
+
"stats.downgradesNote": "dispatch yang berjalan di bawah pin-nya",
|
|
10
|
+
"stats.lanes": "Lane",
|
|
11
|
+
"stats.agents": "Subagent",
|
|
12
|
+
"stats.health": "Kesehatan",
|
|
13
|
+
"stats.unfinished": "run yang tidak pernah selesai",
|
|
14
|
+
"stats.unknownLane": "trace tanpa nama lane di berkasnya",
|
|
15
|
+
"stats.logDir": "folder log",
|
|
16
|
+
"stats.note": "Hanya menghitung yang dicatat trace. /orc-retro dan /orc-explain tidak pernah menulis trace, jadi tidak pernah muncul di sini. Tidak ada trace yang dipangkas otomatis.",
|
|
17
|
+
"stats.tab.usage": "Pemakaian",
|
|
18
|
+
"stats.tab.cost": "Biaya",
|
|
19
|
+
"cost.plan": "Rencana yang mana",
|
|
20
|
+
"cost.planPlaceholder": "lokasi berkas rencana",
|
|
21
|
+
"cost.browse": "Telusuri",
|
|
22
|
+
"cost.forecast": "Perkirakan",
|
|
23
|
+
"cost.planOnly": "Perkiraan butuh rencana, bukan kalimat. Memperkirakan dari deskripsi itu menebak, dan tebakan yang terlihat seperti hitungan lebih buruk daripada tidak menjawab.",
|
|
24
|
+
"cost.title": "Perkiraan biaya run ini",
|
|
25
|
+
"cost.sub": "{tasks} tugas, {waves} gelombang.",
|
|
26
|
+
"cost.noForecast": "Belum ada perkiraan",
|
|
27
|
+
"cost.noForecastHint": "Pilih berkas rencana di atas. Tanpa riwayat run, tidak ada yang bisa diperkirakan - dan angka tidak akan dikarang.",
|
|
28
|
+
"cost.calibrateWhy": "Ini membaca jejak dan data pemakaian yang sudah ada di disk Anda. Tanpa model, tanpa jaringan, tanpa biaya.",
|
|
29
|
+
"cost.notPossible": "tidak mungkin untuk rencana ini",
|
|
30
|
+
"cost.legend.in": "input baru",
|
|
31
|
+
"cost.legend.cw": "tulis cache",
|
|
32
|
+
"cost.legend.cr": "baca cache",
|
|
33
|
+
"cost.legend.out": "keluaran",
|
|
34
|
+
"cost.cacheNote": "Baca cache biasanya bagian terbesar dari batang ini dan harganya sekitar sepersepuluh. Karena itu ia ditampilkan terpisah, bukan dilebur jadi satu angka.",
|
|
35
|
+
"cost.lowConfidence": "1 band punya riwayat kurang dari {min} run, jadi batas atas perkiraannya masih longgar.",
|
|
36
|
+
"cost.lowConfidencePlural": "{n} band punya riwayat kurang dari {min} run, jadi batas atas perkiraannya masih longgar.",
|
|
37
|
+
"cost.priceStale": "Tabel harga bertanggal {as_of} dan sudah berumur {days} hari. Anggap semua angka uang di sini sebagai perkiraan kasar.",
|
|
38
|
+
"cost.noTranscripts": "Data pemakaian lokal tidak terbaca, jadi ini hanya diukur dari jejak ORC sendiri. Angka uang dan kuota tidak tersedia.",
|
|
39
|
+
"cost.unattributed": "1 blok pemakaian tidak bisa dicocokkan ke sebuah tugas. Tetap dihitung di sini, tidak pernah dibuang.",
|
|
40
|
+
"cost.unattributedPlural": "{n} blok pemakaian tidak bisa dicocokkan ke sebuah tugas. Tetap dihitung di sini, tidak pernah dibuang.",
|
|
41
|
+
"cost.contextTitle": "Risiko ruang konteks",
|
|
42
|
+
"cost.contextIntro": "Sebuah run bukan cuma soal biaya - ia bisa kehabisan ruang lalu dipadatkan, yang diam-diam menurunkan kualitas dan tidak terlihat di alat pemantau biaya mana pun.",
|
|
43
|
+
"cost.contextRow": "{agent} - sekitar {peak} dari ruang {window} ({pct}%)",
|
|
44
|
+
"cost.contextOpenUsage": "Lihat isi slice-nya",
|
|
45
|
+
"cost.contextHint": "Tiga jalan keluar: pecah tugasnya, buang halaman yang tak pernah dibaca dari slice, atau pindahkan ke band dengan ruang lebih besar.",
|
|
46
|
+
"cost.bands": "Per band",
|
|
47
|
+
"cost.col.band": "band",
|
|
48
|
+
"cost.col.model": "model",
|
|
49
|
+
"cost.col.n": "tugas",
|
|
50
|
+
"cost.col.in": "in",
|
|
51
|
+
"cost.col.cw": "cache-w",
|
|
52
|
+
"cost.col.cr": "cache-r",
|
|
53
|
+
"cost.col.samples": "sampel",
|
|
54
|
+
"cost.col.out": "out",
|
|
55
|
+
"cost.bandsNote": "Baris dengan sedikit sampel ditampilkan pudar. Semua angka adalah perkiraan tengah dari run sebelumnya, bukan penawaran harga.",
|
|
56
|
+
"cost.laneWhy": "Ingin rincian lengkap, perbandingan antar lane, dan pertanyaan mau diapakan? Itu bagian lane.",
|
|
57
|
+
"cost.unit.tokens": "Token",
|
|
58
|
+
"cost.unit.quota": "Kuota",
|
|
59
|
+
"cost.unit.usd": "USD",
|
|
60
|
+
"cost.quotaNa": "paket belum diisi",
|
|
61
|
+
"cost.ratesTitle": "Biaya run Anda sebelumnya",
|
|
62
|
+
"cost.rates.calibrated": "Diukur",
|
|
63
|
+
"cost.rates.joined": "Dispatch tercocokkan",
|
|
64
|
+
"cost.rates.transcripts": "Berkas pemakaian terbaca",
|
|
65
|
+
"cost.rates.unreadable": "tidak ada yang terbaca",
|
|
66
|
+
"cost.rates.unattributed": "Blok tak tercocokkan",
|
|
67
|
+
"cost.docs": "Dokumen",
|
|
68
|
+
"cost.docsNote": "Dokumen /orc-doc mencakup beberapa run, jadi `orc budget actual` tidak bisa menjawabnya. Buka satu baris untuk melihat peta jalannya dan biayanya sejauh ini."
|
|
69
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tour.finished": "Tur selesai — tekan ? kapan saja untuk daftar pintasan",
|
|
3
|
+
"tour.1.title": "Semua yang bukan AI",
|
|
4
|
+
"tour.1.text": "Panel ini mengendalikan separuh ORC yang deterministik — pengaturan, kesehatan, run, pengetahuan, statistik. Ia tidak pernah menjalankan lane dan tidak pernah memanggil model. Tekan 1–9 atau 0 untuk berpindah panel; arahkan kursor ke sini untuk melihat angkanya.",
|
|
5
|
+
"tour.2.title": "Ada yang bermasalah sekarang?",
|
|
6
|
+
"tour.2.text": "Kesehatan instalasi, kesegaran wiki, run yang masih menunggu, dan versi ORC Anda dengan pemeriksaan pembaruan langsung. Kalau salah satunya kuning, itu yang paling layak dibaca duluan.",
|
|
7
|
+
"tour.3.title": "Satu saringan untuk semua kunci",
|
|
8
|
+
"tour.3.text": "Saring berdasarkan kunci atau deskripsi di semua bagian sekaligus — Anda tidak perlu tahu kunci itu ditaruh di tier mana. 'Hanya yang diubah' menampilkan hanya yang Anda override.",
|
|
9
|
+
"tour.4.title": "Tangga skor → model",
|
|
10
|
+
"tour.4.text": "Ini diagram, bukan editor. Datanya dari tabel milik CLI, dan ia menggambar ulang dirinya saat pengaturan seperti opus5_only mengubah siapa yang menang — begitulah aturan presedensi diajarkan, bukan sekadar dijelaskan.",
|
|
11
|
+
"tour.5.title": "Semua run yang dicatat ORC",
|
|
12
|
+
"tour.5.text": "'waiting' berarti penunjuk resume masih ada di disk — run itu bisa dilanjutkan di sesi baru. Klik satu dan ia terbuka di tempat: checkpoint, kondisi terakhir, dan trace, tanpa kehilangan daftarnya.",
|
|
13
|
+
"tour.6.title": "Yang sudah diketahui ORC",
|
|
14
|
+
"tour.6.text": "Wiki, code pattern tersimpan, dan gotchas. Kesegaran dihitung terhadap berkas yang benar-benar dicakup tiap dokumen, jadi 'stale' di sini berarti sesuatu yang didokumentasikannya memang berubah.",
|
|
15
|
+
"tour.7.title": "Pilih lane",
|
|
16
|
+
"tour.7.text": "Salin perintah lane mana pun, atau buka sesi Claude di repo ini. Panel menyerahkannya ke terminal lalu melupakannya — tidak ada apa pun dari sesi itu yang kembali ke sini.",
|
|
17
|
+
"tour.8.title": "Pratinjau dulu, baru terapkan",
|
|
18
|
+
"tour.8.text": "Tidak ada di sini yang jalan sendiri. Setiap aksi menampilkan pratinjau hanya-baca milik CLI beserta perintah persisnya — dan prune menyebut setiap berkas, karena angka bukanlah persetujuan.",
|
|
19
|
+
"tour.upgrade.title": "Upgrade ada di sini",
|
|
20
|
+
"tour.upgrade.text": "Klik Pratinjau… untuk melihat persis apa yang akan dipasang dan dijalankan. Tidak ada yang terjadi sampai Anda menyetujuinya.",
|
|
21
|
+
"tour.9.title": "Janji-janji itu",
|
|
22
|
+
"tour.9.text": "Ini aturan yang dijanjikan proyek Anda. ORC memeriksanya untuk Anda dan memberi tahu mana yang kodenya sudah bergeser.",
|
|
23
|
+
"tour.10.title": "Di mana ORC berhenti",
|
|
24
|
+
"tour.10.text": "Ini pekerjaan yang belum akan dikerjakan ORC sendiri. Daftar syaratnya menyebut persis apa yang mengubah itu - dan Anda selalu bisa menyuruhnya tetap jalan.",
|
|
25
|
+
"tour.11.title": "Hal yang bisa Anda ubah sendiri",
|
|
26
|
+
"tour.11.text": "Tanpa kode, tanpa terminal. Pemeriksaan berjalan setelahnya, dan perintah pembatalan ditampilkan sebelum apa pun ditulis.",
|
|
27
|
+
"tour.12.title": "Bagian wiki yang murah",
|
|
28
|
+
"tour.12.text": "Memperbarui seluruh wiki itu mahal. Ini daftar pendek dan terurut yang benar-benar penting - dan perbaikan gratis selalu didahulukan.",
|
|
29
|
+
"tour.13.title": "Dokumen panjang, dalam satu gambar",
|
|
30
|
+
"tour.13.text": "Setiap blok adalah satu bagian, seukuran panjangnya dan diberi warna sesuai keadaannya. Tidak ada yang memuat dokumen itu sendiri di sini - ORC bekerja dari peta ini, dan itulah sebabnya dokumen panjang tidak menghabiskan sesi.",
|
|
31
|
+
"tour.14.title": "Pekerjaan yang berjalan di tempat lain",
|
|
32
|
+
"tour.14.text": "Satu garis dari nol sampai seratus: seberapa berat skor sebuah tugas. Setiap bagiannya menunjukkan di mana pekerjaan itu benar-benar berjalan — Claude berwarna biru, penyedia yang Anda hubungkan berwarna hijau. Rentang yang belum Anda hubungkan tetap punya tempatnya, jadi \"saya sengaja meninggalkan pekerjaan berat di Claude\" tidak pernah terlihat seperti \"tidak ada pekerjaan berat\". Tidak ada yang keluar dari mesin ini sampai Anda menghubungkan sesuatu, mengujinya, dan menekan Apply."
|
|
33
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* 00-core.js — orc ui client
|
|
3
|
+
TOKEN, the fetch layer (api/read/post), and the DOM helpers everything else
|
|
4
|
+
is built from ($, el, frag, esc, relAge, setBusy).
|
|
5
|
+
|
|
6
|
+
Loaded by app.html in the order its numeric prefix names. Classic
|
|
7
|
+
script, no import/export: an ES module import carries no query string,
|
|
8
|
+
and every static request here needs the per-launch session token. */
|
|
9
|
+
|
|
10
|
+
/* ===========================================================================
|
|
11
|
+
app.js — orc ui client
|
|
12
|
+
---------------------------------------------------------------------------
|
|
13
|
+
Four rules keep this hackable (the plan, §9):
|
|
14
|
+
1. No build step. Edit, refresh.
|
|
15
|
+
2. Panels are INDEPENDENT — each is its own render function against its own
|
|
16
|
+
endpoint, with no shared mutable state. Rewriting Runs must not be able
|
|
17
|
+
to break Settings.
|
|
18
|
+
3. Everything rendered comes from `bin/cli.js --json`. No knowledge about
|
|
19
|
+
ORC is encoded here that the CLI does not already own — notably the
|
|
20
|
+
config key list, the score ladder and the shadowing rules.
|
|
21
|
+
4. All motion is CSS. This file toggles classes; app.css owns the timing,
|
|
22
|
+
and `prefers-reduced-motion` turns the lot off.
|
|
23
|
+
=========================================================================== */
|
|
24
|
+
|
|
25
|
+
/* ------------------------------------------------------------ fetch layer -- */
|
|
26
|
+
|
|
27
|
+
// The per-launch token arrives in the opened URL and is required on every /api
|
|
28
|
+
// call. It is kept in memory and stripped from the visible address bar so it
|
|
29
|
+
// does not end up in a screenshot or a pasted link.
|
|
30
|
+
const TOKEN = new URLSearchParams(location.search).get("t") || "";
|
|
31
|
+
try {
|
|
32
|
+
if (TOKEN) history.replaceState(null, "", location.pathname + location.hash);
|
|
33
|
+
} catch (_) {}
|
|
34
|
+
|
|
35
|
+
// RELOADING IS NOT `location.reload()` HERE. The line above removed `?t=` from
|
|
36
|
+
// the visible URL, so a plain reload re-requests an address with no token and
|
|
37
|
+
// lands on the "missing its session token" page — which is what every
|
|
38
|
+
// post-update hand-over did. Put the token back on the way out.
|
|
39
|
+
function reloadWithToken() {
|
|
40
|
+
const q = TOKEN ? "?t=" + encodeURIComponent(TOKEN) : "";
|
|
41
|
+
location.replace(location.pathname + q + location.hash);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async function api(path, opts) {
|
|
45
|
+
const res = await fetch(path, {
|
|
46
|
+
method: (opts && opts.method) || "GET",
|
|
47
|
+
headers: Object.assign({ "x-orc-token": TOKEN }, opts && opts.body ? { "content-type": "application/json" } : {}),
|
|
48
|
+
body: opts && opts.body ? JSON.stringify(opts.body) : undefined,
|
|
49
|
+
cache: "no-store",
|
|
50
|
+
});
|
|
51
|
+
let payload = null;
|
|
52
|
+
try {
|
|
53
|
+
payload = await res.json();
|
|
54
|
+
} catch (_) {}
|
|
55
|
+
if (!res.ok) throw failure(payload, res.status);
|
|
56
|
+
return payload;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// A failure has to name what ran and why it stopped. "request failed (500)" is
|
|
60
|
+
// the message that sent people looking for a broken panel when what was broken
|
|
61
|
+
// was one file on disk (v0.49.2).
|
|
62
|
+
function failure(payload, status) {
|
|
63
|
+
const msg = (payload && payload.error) || `request failed (${status})`;
|
|
64
|
+
const err = new Error(String(msg));
|
|
65
|
+
if (payload) {
|
|
66
|
+
err.detail = [payload.command, payload.stderr, payload.stdout].filter(Boolean).join(String.fromCharCode(10));
|
|
67
|
+
err.payload = payload;
|
|
68
|
+
}
|
|
69
|
+
return err;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Reads unwrap to `.data`; a non-zero exit is DATA for several commands, never
|
|
73
|
+
// an error, so it is passed through beside the payload.
|
|
74
|
+
async function read(path) {
|
|
75
|
+
const r = await api(path);
|
|
76
|
+
return { data: r.data, exit: r.exit_code, ok: r.ok, fixture: !!r.fixture };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const post = (path, body) => api(path, { method: "POST", body });
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
/* ----------------------------------------------------------------- utils -- */
|
|
83
|
+
|
|
84
|
+
const $ = (sel, root) => (root || document).querySelector(sel);
|
|
85
|
+
const el = (tag, cls, text) => {
|
|
86
|
+
const n = document.createElement(tag);
|
|
87
|
+
if (cls) n.className = cls;
|
|
88
|
+
if (text !== undefined) n.textContent = text;
|
|
89
|
+
return n;
|
|
90
|
+
};
|
|
91
|
+
const frag = () => document.createDocumentFragment();
|
|
92
|
+
|
|
93
|
+
// Everything user-visible goes through textContent, so no value from disk is
|
|
94
|
+
// ever parsed as markup.
|
|
95
|
+
function esc(s) {
|
|
96
|
+
return String(s === null || s === undefined ? "" : s);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function relAge(ms) {
|
|
100
|
+
if (!ms) return "";
|
|
101
|
+
const s = Math.max(0, Math.round((Date.now() - ms) / 1000));
|
|
102
|
+
if (s < 90) return t("age.now");
|
|
103
|
+
const m = Math.round(s / 60);
|
|
104
|
+
if (m < 90) return t("age.min", { n: m });
|
|
105
|
+
const h = Math.round(m / 60);
|
|
106
|
+
if (h < 36) return t("age.hours", { n: h });
|
|
107
|
+
const d = Math.round(h / 24);
|
|
108
|
+
return tn(d, "age.day");
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// While a mutation runs the WHOLE ui is read-only, output streams into the
|
|
112
|
+
// panel, and every panel refetches when it finishes.
|
|
113
|
+
function setBusy(on) {
|
|
114
|
+
document.body.classList.toggle("busy", !!on);
|
|
115
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* 01-i18n.js — orc ui client
|
|
3
|
+
LANGS, loadLang, setLang, t, applyStaticText, cycleLang.
|
|
4
|
+
|
|
5
|
+
Keys are written out IN FULL, never assembled from a fragment. The v0.48.1
|
|
6
|
+
file split is by key PREFIX only; `docs.ship.confirm` is still spelled
|
|
7
|
+
`docs.ship.confirm` at every call site.
|
|
8
|
+
|
|
9
|
+
Loaded by app.html in the order its numeric prefix names. Classic
|
|
10
|
+
script, no import/export: an ES module import carries no query string,
|
|
11
|
+
and every static request here needs the per-launch session token. */
|
|
12
|
+
|
|
13
|
+
/* ------------------------------------------------------------------- i18n -- */
|
|
14
|
+
/*
|
|
15
|
+
THE SCOPE RULE, and it is deliberately narrow: only the panel's OWN prose is
|
|
16
|
+
translated. Everything that arrives from `bin/cli.js --json` stays exactly as
|
|
17
|
+
the CLI wrote it — config keys and their descriptions, values, agent names,
|
|
18
|
+
model ids, file paths, commands, `orc doctor` messages, command output. Those
|
|
19
|
+
are identifiers, not sentences: a translated config key is a key that does not
|
|
20
|
+
exist, and a translated command is a command you cannot type. So `t()` is
|
|
21
|
+
never applied to a value read out of a payload, and neither string table
|
|
22
|
+
contains a single ORC key name.
|
|
23
|
+
|
|
24
|
+
The tables are plain JSON served as static assets. Adding a language is a
|
|
25
|
+
FOLDER in i18n/ plus one row in LANGS — no build step, no library, no
|
|
26
|
+
dependency, and no server change (serve.js walks i18n/ at boot).
|
|
27
|
+
*/
|
|
28
|
+
const LANGS = [
|
|
29
|
+
{ code: "en", label: "English" },
|
|
30
|
+
{ code: "id", label: "Bahasa Indonesia" },
|
|
31
|
+
];
|
|
32
|
+
const LANG_KEY = "orc-ui-lang";
|
|
33
|
+
|
|
34
|
+
// v0.48.1 — one file per namespace instead of one 53 KB table, so changing the
|
|
35
|
+
// Docs panel's wording means opening i18n/en/docs.json rather than paging
|
|
36
|
+
// through every string in the panel.
|
|
37
|
+
//
|
|
38
|
+
// A plain array, and deliberately NOT an index file to fetch: an index would be
|
|
39
|
+
// one more round trip and one more thing to forget to update. A namespace owns
|
|
40
|
+
// one or more key PREFIXES (`stats` owns `stats.*` and `cost.*`), which the
|
|
41
|
+
// test suite asserts — a key whose prefix belongs to no namespace would load
|
|
42
|
+
// nowhere and render as a raw dotted string.
|
|
43
|
+
const NAMESPACES = [
|
|
44
|
+
"common",
|
|
45
|
+
"nav",
|
|
46
|
+
"banner",
|
|
47
|
+
"overview",
|
|
48
|
+
"settings",
|
|
49
|
+
"runs",
|
|
50
|
+
"knowledge",
|
|
51
|
+
"stats",
|
|
52
|
+
"flow",
|
|
53
|
+
"crosslink",
|
|
54
|
+
"learn",
|
|
55
|
+
"mockrun",
|
|
56
|
+
"maintenance",
|
|
57
|
+
"pact",
|
|
58
|
+
"boundary",
|
|
59
|
+
"handoff",
|
|
60
|
+
"challenge",
|
|
61
|
+
"docs",
|
|
62
|
+
"extra",
|
|
63
|
+
"experiment",
|
|
64
|
+
"tour",
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
let lang = "en";
|
|
68
|
+
// English is loaded first and kept as the FALLBACK table: a key the other
|
|
69
|
+
// language has not translated yet renders in English rather than as a raw
|
|
70
|
+
// dotted key. A half-finished translation degrades to mixed prose, never to
|
|
71
|
+
// debug output on somebody's screen.
|
|
72
|
+
let DICT = {};
|
|
73
|
+
let DICT_EN = {};
|
|
74
|
+
|
|
75
|
+
// The namespaces are fetched in parallel and merged into ONE flat table, so
|
|
76
|
+
// `t()` is unchanged and no call site knows the split happened.
|
|
77
|
+
//
|
|
78
|
+
// A namespace that fails to load falls back to ENGLISH for its keys rather than
|
|
79
|
+
// rejecting the whole language: a network hiccup on one file should cost that
|
|
80
|
+
// file's prose, not the entire panel. English itself has no fallback below it,
|
|
81
|
+
// so a failure there rejects and boot() lands on raw keys — ugly, never blank.
|
|
82
|
+
function loadLang(code) {
|
|
83
|
+
return Promise.all(
|
|
84
|
+
NAMESPACES.map((ns) =>
|
|
85
|
+
fetch(`/i18n/${code}/${ns}.json`, { headers: { "x-orc-token": TOKEN }, cache: "no-store" })
|
|
86
|
+
.then((r) => {
|
|
87
|
+
if (!r.ok) throw new Error(`i18n ${code}/${ns} ${r.status}`);
|
|
88
|
+
return r.json();
|
|
89
|
+
})
|
|
90
|
+
.catch((e) => {
|
|
91
|
+
if (code === "en") throw e;
|
|
92
|
+
return null;
|
|
93
|
+
})
|
|
94
|
+
)
|
|
95
|
+
).then((parts) => Object.assign({}, ...parts.filter(Boolean)));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// A missing or broken table must never blank the UI. Every failure path here
|
|
99
|
+
// lands on English, so the worst case is untranslated text — never empty text.
|
|
100
|
+
async function setLang(code, opts) {
|
|
101
|
+
const rerender = !opts || opts.rerender !== false;
|
|
102
|
+
const want = LANGS.some((l) => l.code === code) ? code : "en";
|
|
103
|
+
try {
|
|
104
|
+
DICT = want === "en" ? DICT_EN : await loadLang(want);
|
|
105
|
+
lang = want;
|
|
106
|
+
} catch (_) {
|
|
107
|
+
DICT = DICT_EN;
|
|
108
|
+
lang = "en";
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
localStorage.setItem(LANG_KEY, lang);
|
|
112
|
+
} catch (_) {}
|
|
113
|
+
document.documentElement.setAttribute("lang", lang);
|
|
114
|
+
applyStaticText();
|
|
115
|
+
if (rerender) route();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function t(key, vars) {
|
|
119
|
+
let s = DICT[key];
|
|
120
|
+
if (s === undefined) s = DICT_EN[key];
|
|
121
|
+
if (s === undefined) s = key;
|
|
122
|
+
if (vars) for (const k of Object.keys(vars)) s = s.split("{" + k + "}").join(String(vars[k]));
|
|
123
|
+
return s;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// English has one plural form and Indonesian has none, so count-aware lookup is
|
|
127
|
+
// a second key rather than a plural-rules engine: `n === 1` picks the singular.
|
|
128
|
+
const tn = (n, key, vars) => t(n === 1 ? key : key + "Plural", Object.assign({ n }, vars || {}));
|
|
129
|
+
|
|
130
|
+
// The parts of the shell that are markup rather than a render function. Called
|
|
131
|
+
// on every language change; panels re-render themselves through `route()`.
|
|
132
|
+
function applyStaticText() {
|
|
133
|
+
for (const node of document.querySelectorAll("[data-i18n]")) node.textContent = t(node.dataset.i18n);
|
|
134
|
+
const tt = $("#theme-toggle");
|
|
135
|
+
if (tt) tt.textContent = document.documentElement.getAttribute("data-theme") === "light" ? t("rail.dark") : t("rail.light");
|
|
136
|
+
const hint = $("#shortcut-hint");
|
|
137
|
+
if (hint) hint.title = t("rail.shortcuts");
|
|
138
|
+
const label = $("#lang-label");
|
|
139
|
+
if (label) label.textContent = (LANGS.find((l) => l.code === lang) || LANGS[0]).label;
|
|
140
|
+
const btn = $("#lang-toggle");
|
|
141
|
+
if (btn) btn.title = t("lang.title");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Two languages, so the control is a TOGGLE rather than a menu: one click, no
|
|
145
|
+
// dropdown to open. A third language would make this a <select>; two do not.
|
|
146
|
+
function cycleLang() {
|
|
147
|
+
const i = LANGS.findIndex((l) => l.code === lang);
|
|
148
|
+
setLang(LANGS[(i + 1) % LANGS.length].code);
|
|
149
|
+
}
|