@mmerterden/multi-agent-pipeline 20.34.0 → 20.35.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.
Files changed (321) hide show
  1. package/CHANGELOG.md +55 -1
  2. package/README.md +1 -0
  3. package/docs/facts.json +2 -2
  4. package/install/catalog-history.json +1 -1
  5. package/install/claude.mjs +16 -1
  6. package/install/templates/claude-hooks.json +23 -1
  7. package/manifest.json +324 -293
  8. package/package.json +1 -1
  9. package/pipeline/agents/bulk-reader.md +3 -0
  10. package/pipeline/commands/multi-agent/channels/SKILL.md +1 -1
  11. package/pipeline/commands/multi-agent/office-on/SKILL.md +7 -3
  12. package/pipeline/commands/multi-agent/office-status/SKILL.md +3 -2
  13. package/pipeline/contract/CHANGELOG.md +9 -0
  14. package/pipeline/contract/README.md +1 -0
  15. package/pipeline/contract/fixtures/error-invalid-request.json +1 -1
  16. package/pipeline/contract/fixtures/error-unauthorized.json +1 -1
  17. package/pipeline/contract/fixtures/error-unsigned.json +1 -1
  18. package/pipeline/contract/manifest.json +14 -1
  19. package/pipeline/contract/types/index.d.ts +24 -2
  20. package/pipeline/lib/json-file-lock.mjs +61 -15
  21. package/pipeline/lib/office-remote.mjs +228 -0
  22. package/pipeline/lib/qr-code.mjs +360 -0
  23. package/pipeline/lib/repo-hygiene.sh +1 -0
  24. package/pipeline/lib/run-completion.mjs +17 -0
  25. package/pipeline/multi-agent-refs/channels/issue-comment.md +1 -1
  26. package/pipeline/multi-agent-refs/features/office-remote-protocol.md +166 -0
  27. package/pipeline/multi-agent-refs/features/office-threat-model.md +1 -1
  28. package/pipeline/multi-agent-refs/features/scope-check.md +16 -1
  29. package/pipeline/multi-agent-refs/features/verify-by-test.md +10 -0
  30. package/pipeline/multi-agent-refs/keychain.md +7 -0
  31. package/pipeline/multi-agent-refs/phases/phase-0-init.md +6 -2
  32. package/pipeline/multi-agent-refs/phases/phase-1-plan.md +4 -6
  33. package/pipeline/multi-agent-refs/phases/phase-2-dev.md +9 -12
  34. package/pipeline/multi-agent-refs/phases/phase-3-review.md +9 -8
  35. package/pipeline/multi-agent-refs/phases/phase-4-commit.md +1 -4
  36. package/pipeline/multi-agent-refs/rules.md +3 -2
  37. package/pipeline/multi-agent-refs/tracker-contract.md +1 -1
  38. package/pipeline/office/NOTICE.md +4 -1
  39. package/pipeline/office/assets/char_12.png +0 -0
  40. package/pipeline/office/assets/char_13.png +0 -0
  41. package/pipeline/office/assets/char_14.png +0 -0
  42. package/pipeline/office/assets/char_15.png +0 -0
  43. package/pipeline/office/assets/char_16.png +0 -0
  44. package/pipeline/office/assets/char_17.png +0 -0
  45. package/pipeline/office/assets/char_18.png +0 -0
  46. package/pipeline/office/assets/char_19.png +0 -0
  47. package/pipeline/office/assets/char_20.png +0 -0
  48. package/pipeline/office/assets/char_21.png +0 -0
  49. package/pipeline/office/assets/char_22.png +0 -0
  50. package/pipeline/office/assets/char_23.png +0 -0
  51. package/pipeline/office/assets/char_24.png +0 -0
  52. package/pipeline/office/assets/char_25.png +0 -0
  53. package/pipeline/office/assets/char_26.png +0 -0
  54. package/pipeline/office/assets/char_27.png +0 -0
  55. package/pipeline/office/assets/char_28.png +0 -0
  56. package/pipeline/office/assets/char_29.png +0 -0
  57. package/pipeline/office/assets/char_30.png +0 -0
  58. package/pipeline/office/index.html +293 -49
  59. package/pipeline/schemas/agent-state.schema.json +18 -0
  60. package/pipeline/schemas/planning-output.schema.json +18 -0
  61. package/pipeline/schemas/pr-reach.schema.json +55 -0
  62. package/pipeline/schemas/prefs.schema.json +13 -7
  63. package/pipeline/schemas/triage-output.schema.json +12 -1
  64. package/pipeline/schemas/unattended-policy.json +2 -1
  65. package/pipeline/scripts/_guard_rules.py +449 -1
  66. package/pipeline/scripts/_test-gaming.mjs +36 -0
  67. package/pipeline/scripts/agent-guard.py +79 -19
  68. package/pipeline/scripts/anonymize-findings.mjs +99 -0
  69. package/pipeline/scripts/answer-check.mjs +113 -0
  70. package/pipeline/scripts/answer-check.sh +20 -0
  71. package/pipeline/scripts/autopilot-publish.mjs +9 -2
  72. package/pipeline/scripts/contract-server.mjs +35 -1
  73. package/pipeline/scripts/gate-ledger.mjs +144 -21
  74. package/pipeline/scripts/office-build.mjs +276 -5
  75. package/pipeline/scripts/office-control.mjs +70 -10
  76. package/pipeline/scripts/office-pair.mjs +407 -0
  77. package/pipeline/scripts/office-remote-client.mjs +463 -0
  78. package/pipeline/scripts/phase-tracker.sh +8 -0
  79. package/pipeline/scripts/phase0-exit-gate.mjs +40 -37
  80. package/pipeline/scripts/phone-devices.mjs +9 -1
  81. package/pipeline/scripts/pre-commit-check.sh +28 -2
  82. package/pipeline/scripts/pre-push-check.sh +6 -12
  83. package/pipeline/scripts/rework-base.mjs +87 -0
  84. package/pipeline/scripts/run-commit-check.mjs +104 -0
  85. package/pipeline/scripts/run-scope-guard.mjs +58 -3
  86. package/pipeline/scripts/run-scope-guard.sh +13 -1
  87. package/pipeline/scripts/scope-check-gate.mjs +70 -6
  88. package/pipeline/scripts/task-mirror.mjs +106 -15
  89. package/pipeline/scripts/task-mirror.sh +3 -2
  90. package/pipeline/scripts/test-stability-gate.mjs +112 -0
  91. package/pipeline/scripts/update-check.sh +7 -1
  92. package/pipeline/scripts/update-issue-progress.sh +73 -8
  93. package/pipeline/scripts/validate-planning.mjs +105 -1
  94. package/pipeline/scripts/validate-triage.mjs +42 -2
  95. package/pipeline/scripts/work-items.mjs +119 -1
  96. package/pipeline/scripts/worktree-prepare-all.mjs +200 -0
  97. package/pipeline/scripts/worktree-prepare.sh +40 -4
  98. package/pipeline/scripts/write-state.mjs +67 -24
  99. package/pipeline/skills/.skill-manifest.json +5 -5
  100. package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +5 -5
  101. package/pipeline/skills/shared/core/google-play-compliance/references/rules.yml +1 -1
  102. package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +1 -1
  103. package/pipeline/skills/shared/core/multi-agent-office-status/SKILL.md +2 -2
  104. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +14 -0
  105. package/pipeline/skills/shared/external/android-architecture/references/patterns.md +6 -0
  106. package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +10 -0
  107. package/pipeline/skills/shared/external/android-datastore/references/patterns.md +11 -0
  108. package/pipeline/skills/shared/external/android-design-tokens-codegen/references/patterns.md +8 -0
  109. package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +6 -0
  110. package/pipeline/skills/shared/external/android-mvi-viewmodel/references/patterns.md +10 -0
  111. package/pipeline/skills/shared/external/android-performance/references/patterns.md +13 -0
  112. package/pipeline/skills/shared/external/android-security/references/patterns.md +16 -0
  113. package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +9 -0
  114. package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +12 -0
  115. package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +13 -0
  116. package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +12 -0
  117. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +9 -0
  118. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +8 -0
  119. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +10 -0
  120. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +21 -0
  121. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +9 -0
  122. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +7 -0
  123. package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -2
  124. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +10 -0
  125. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +10 -1
  126. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +22 -0
  127. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +17 -0
  128. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +22 -0
  129. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +17 -0
  130. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +9 -0
  131. package/pipeline/skills/shared/external/authentication/references/passkeys.md +11 -0
  132. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +13 -0
  133. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +9 -0
  134. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +10 -0
  135. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +15 -0
  136. package/pipeline/skills/shared/external/compose-components/references/patterns.md +7 -0
  137. package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +7 -0
  138. package/pipeline/skills/shared/external/compose-testing/references/patterns.md +15 -0
  139. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +9 -0
  140. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +11 -0
  141. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +10 -0
  142. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +13 -0
  143. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +20 -0
  144. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +16 -0
  145. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +16 -0
  146. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +14 -0
  147. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +13 -0
  148. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +10 -0
  149. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +10 -0
  150. package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +10 -0
  151. package/pipeline/skills/shared/external/gradle-kotlin-dsl/references/patterns.md +17 -0
  152. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +12 -0
  153. package/pipeline/skills/shared/external/hig-app-icons/references/icon-workflow.md +10 -0
  154. package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +10 -0
  155. package/pipeline/skills/shared/external/hig-components-layout/references/bars-and-tabs.md +11 -0
  156. package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +13 -0
  157. package/pipeline/skills/shared/external/hig-foundations/references/type-color-spacing.md +13 -0
  158. package/pipeline/skills/shared/external/hig-patterns/references/onboarding-and-states.md +11 -0
  159. package/pipeline/skills/shared/external/hig-platforms/references/ipad-layout.md +12 -0
  160. package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +16 -0
  161. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +9 -0
  162. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +18 -0
  163. package/pipeline/skills/shared/external/ios-accessibility/references/large-content-and-appearance.md +9 -0
  164. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +9 -0
  165. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +7 -0
  166. package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +13 -0
  167. package/pipeline/skills/shared/external/ios-design-review/references/appearance-matrix.md +9 -0
  168. package/pipeline/skills/shared/external/ios-design-review/references/checklist.md +15 -0
  169. package/pipeline/skills/shared/external/ios-haptics/references/core-haptics.md +11 -0
  170. package/pipeline/skills/shared/external/ios-iphone-duo/references/api-map.md +11 -0
  171. package/pipeline/skills/shared/external/ios-iphone-duo/references/fixed-assumptions.md +15 -0
  172. package/pipeline/skills/shared/external/ios-iphone-duo/references/poses-and-panes.md +11 -0
  173. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +18 -0
  174. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +19 -0
  175. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +15 -0
  176. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +7 -0
  177. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +8 -0
  178. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +12 -0
  179. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +17 -0
  180. package/pipeline/skills/shared/external/ios-security/references/app-review-guidelines.md +8 -0
  181. package/pipeline/skills/shared/external/ios-security/references/cryptokit-advanced.md +14 -0
  182. package/pipeline/skills/shared/external/ios-security/references/file-storage-patterns.md +8 -0
  183. package/pipeline/skills/shared/external/ios-security/references/privacy-manifest.md +9 -0
  184. package/pipeline/skills/shared/external/ios-sf-symbols/references/effects-and-custom-symbols.md +9 -0
  185. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +13 -0
  186. package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +8 -0
  187. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +21 -0
  188. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +9 -0
  189. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +12 -0
  190. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +16 -0
  191. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +21 -0
  192. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +10 -0
  193. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +9 -0
  194. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +12 -0
  195. package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +11 -0
  196. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +11 -0
  197. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +18 -0
  198. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +11 -0
  199. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +11 -0
  200. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +15 -0
  201. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +14 -0
  202. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +14 -0
  203. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +14 -0
  204. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +14 -0
  205. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +10 -0
  206. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +12 -0
  207. package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +14 -0
  208. package/pipeline/skills/shared/external/room-database/references/patterns.md +16 -0
  209. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +10 -0
  210. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +10 -0
  211. package/pipeline/skills/shared/external/spm-build-analysis/references/build-optimization-sources.md +14 -0
  212. package/pipeline/skills/shared/external/spm-build-analysis/references/spm-analysis-checks.md +19 -0
  213. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +13 -0
  214. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +31 -0
  215. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +8 -0
  216. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +9 -0
  217. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +10 -0
  218. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +8 -0
  219. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +24 -0
  220. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +8 -0
  221. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +14 -0
  222. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +12 -0
  223. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +10 -0
  224. package/pipeline/skills/shared/external/swift-concurrency-expert/references/swift-6-2-concurrency.md +8 -0
  225. package/pipeline/skills/shared/external/swift-concurrency-pro/references/actors.md +10 -0
  226. package/pipeline/skills/shared/external/swift-concurrency-pro/references/cancellation.md +7 -0
  227. package/pipeline/skills/shared/external/swift-concurrency-pro/references/interop.md +10 -0
  228. package/pipeline/skills/shared/external/swift-concurrency-pro/references/new-features.md +11 -0
  229. package/pipeline/skills/shared/external/swift-concurrency-pro/references/structured.md +9 -0
  230. package/pipeline/skills/shared/external/swift-concurrency-pro/references/testing.md +13 -0
  231. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +7 -0
  232. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +14 -0
  233. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +16 -0
  234. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +17 -0
  235. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +19 -0
  236. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +16 -0
  237. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +19 -0
  238. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +18 -0
  239. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +16 -0
  240. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +17 -0
  241. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +17 -0
  242. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +17 -0
  243. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +18 -0
  244. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +21 -0
  245. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +16 -0
  246. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +16 -0
  247. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +9 -0
  248. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +24 -0
  249. package/pipeline/skills/shared/external/swift-testing-pro/references/async-tests.md +9 -0
  250. package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +11 -0
  251. package/pipeline/skills/shared/external/swift-testing-pro/references/writing-better-tests.md +13 -0
  252. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +8 -0
  253. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +17 -0
  254. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +12 -0
  255. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +11 -0
  256. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +7 -0
  257. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +13 -0
  258. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +24 -0
  259. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +12 -0
  260. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +15 -0
  261. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +15 -0
  262. package/pipeline/skills/shared/external/swiftui-animation/references/scroll-effects.md +12 -0
  263. package/pipeline/skills/shared/external/swiftui-expert-skill/references/accessibility-patterns.md +11 -0
  264. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-advanced.md +7 -0
  265. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-basics.md +13 -0
  266. package/pipeline/skills/shared/external/swiftui-expert-skill/references/animation-transitions.md +9 -0
  267. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts-accessibility.md +9 -0
  268. package/pipeline/skills/shared/external/swiftui-expert-skill/references/charts.md +17 -0
  269. package/pipeline/skills/shared/external/swiftui-expert-skill/references/image-optimization.md +9 -0
  270. package/pipeline/skills/shared/external/swiftui-expert-skill/references/latest-apis.md +10 -0
  271. package/pipeline/skills/shared/external/swiftui-expert-skill/references/layout-best-practices.md +12 -0
  272. package/pipeline/skills/shared/external/swiftui-expert-skill/references/list-patterns.md +12 -0
  273. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-scenes.md +13 -0
  274. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-views.md +12 -0
  275. package/pipeline/skills/shared/external/swiftui-expert-skill/references/macos-window-styling.md +12 -0
  276. package/pipeline/skills/shared/external/swiftui-expert-skill/references/performance-patterns.md +7 -0
  277. package/pipeline/skills/shared/external/swiftui-expert-skill/references/scroll-patterns.md +9 -0
  278. package/pipeline/skills/shared/external/swiftui-expert-skill/references/sheet-navigation-patterns.md +10 -0
  279. package/pipeline/skills/shared/external/swiftui-expert-skill/references/state-management.md +18 -0
  280. package/pipeline/skills/shared/external/swiftui-expert-skill/references/view-structure.md +16 -0
  281. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +11 -0
  282. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +8 -0
  283. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +14 -0
  284. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +9 -0
  285. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +22 -0
  286. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/uikit-glass.md +14 -0
  287. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +10 -0
  288. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +10 -0
  289. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +13 -0
  290. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +10 -0
  291. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +14 -0
  292. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +30 -0
  293. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +16 -0
  294. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +11 -0
  295. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +11 -0
  296. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +10 -0
  297. package/pipeline/skills/shared/external/swiftui-performance-audit/references/code-smells.md +8 -0
  298. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/app-wiring.md +12 -0
  299. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/menu-bar.md +10 -0
  300. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/navigationstack.md +11 -0
  301. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/scroll-reveal.md +12 -0
  302. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/sheets.md +14 -0
  303. package/pipeline/skills/shared/external/swiftui-ui-patterns/references/tabview.md +10 -0
  304. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +10 -0
  305. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +13 -0
  306. package/pipeline/skills/shared/external/swiftui-view-refactor/references/mv-patterns.md +12 -0
  307. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +8 -0
  308. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +8 -0
  309. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +14 -0
  310. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +17 -0
  311. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +11 -0
  312. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +11 -0
  313. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +27 -0
  314. package/pipeline/skills/shared/external/xcode-build-fixer/references/build-settings-best-practices.md +9 -0
  315. package/pipeline/skills/shared/external/xcode-build-fixer/references/fix-patterns.md +7 -0
  316. package/pipeline/skills/shared/external/xcode-build-orchestrator/references/build-settings-best-practices.md +9 -0
  317. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/build-optimization-sources.md +14 -0
  318. package/pipeline/skills/shared/external/xcode-compilation-analyzer/references/code-compilation-checks.md +8 -0
  319. package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-optimization-sources.md +14 -0
  320. package/pipeline/skills/shared/external/xcode-project-analyzer/references/build-settings-best-practices.md +9 -0
  321. package/pipeline/skills/shared/external/xcode-project-analyzer/references/project-audit-checks.md +13 -0
@@ -1097,6 +1097,35 @@ details summary {
1097
1097
  flex: none;
1098
1098
  image-rendering: pixelated;
1099
1099
  }
1100
+ .employee-head {
1101
+ display: flex;
1102
+ gap: 14px;
1103
+ align-items: flex-start;
1104
+ }
1105
+ .employee-head .sprite.portrait {
1106
+ width: 64px;
1107
+ height: 96px;
1108
+ }
1109
+ .employee-name {
1110
+ font-size: 1.15em;
1111
+ }
1112
+ .employee-facts {
1113
+ margin-top: 6px;
1114
+ display: grid;
1115
+ gap: 2px;
1116
+ }
1117
+ .employee-card h4 {
1118
+ margin: 12px 0 4px;
1119
+ }
1120
+ .employee-now {
1121
+ margin: 0;
1122
+ }
1123
+ .building-room {
1124
+ margin-bottom: 10px;
1125
+ }
1126
+ .building-room .cards {
1127
+ margin-top: 8px;
1128
+ }
1100
1129
  .job-form {
1101
1130
  display: grid;
1102
1131
  gap: 6px;
@@ -1375,12 +1404,13 @@ pre.log {
1375
1404
  <div class="toast" id="toast" role="status"></div>
1376
1405
  <script nonce="{{NONCE}}">
1377
1406
  "use strict";
1378
- const BUILD = "156c1f5e44c5";
1407
+ const BUILD = "c98eeb780915";
1379
1408
  (() => {
1380
- const ATLAS = ["ARCHIVE_BOXES","BIN","BOOKSHELF","CACTUS","CLOCK","COFFEE","COFFEE_MACHINE","COFFEE_TABLE","COUNTER_SINK","CUSHIONED_BENCH","CUSHIONED_CHAIR_BACK","CUSHIONED_CHAIR_FRONT","CUSHIONED_CHAIR_SIDE","DESK_FRONT","DESK_SIDE","DEVICE_STAND","DOUBLE_BOOKSHELF","FILING_CABINET","FRIDGE","HANGING_PLANT","LARGE_PAINTING","LARGE_PLANT","MAILBOX","MOP_BUCKET","PC_BACK","PC_FRONT_OFF","PC_FRONT_ON_1","PC_FRONT_ON_2","PC_FRONT_ON_3","PC_SIDE","PLANT","PLANT_2","POT","PRINTER","RECEPTION_DESK","SERVER_RACK","SERVER_RACK_2","SMALL_PAINTING","SMALL_PAINTING_2","SMALL_TABLE_FRONT","SMALL_TABLE_SIDE","SOFA_BACK","SOFA_FRONT","SOFA_SIDE","TABLE_FRONT","TOILET_STALL","VENDING","WASHBASIN","WATER_COOLER","WHITEBOARD","WOODEN_BENCH","WOODEN_CHAIR_BACK","WOODEN_CHAIR_FRONT","WOODEN_CHAIR_SIDE","char_0","char_1","char_2","char_3","char_4","char_5","floor_0","floor_1","floor_2","floor_3","floor_4","floor_5","floor_6","floor_7","floor_8","wall_0"];
1381
- const STRINGS = {"en":{"app.title":"Office","archive.empty":"No runs recorded yet.","archive.log":"Log","archive.postmortem":"Ask for a post-mortem","ask.copy":"Copy command","ask.handOff":"Give a job to someone","ask.label":"Ask an agent","ask.note":"Starting an ask from the panel is not available yet, because launch input refuses links in free text. Copy the command and run it in a terminal.","ask.placeholder":"Ask an agent about this screen","autopilot.ceiling":"ceiling {v}","autopilot.switch":"Autopilot on or off","autopilot.onHint":"Watches the repositories below and takes up to {n} items at a time.","autopilot.offHint":"Pick the repositories to watch, then turn it on.","autopilot.noRepoHint":"Add a repository in the terminal first; then it can be turned on here.","autopilot.ofSlots":"of {n} at a time","autopilot.reposTitle":"Watched repositories","autopilot.pickOn":"Pick a new selection to change which repositories it watches.","autopilot.saveOnly":"Save the selection without starting","autopilot.saveTitle":"Save the autopilot selection","autopilot.stopNowBtn":"Stop now","autopilot.stopNowTitle":"Stop the autopilot now","autopilot.addInTerminal":"A new repository is added in the terminal, because it asks for its sources and label:","autopilot.configureOnly":"Save the selection only, schedule nothing","autopilot.credsBad":"Credentials: problems, nothing will be scheduled","autopilot.credsOk":"Credentials: readable","autopilot.drop":"Drop: {v}","autopilot.keep":"Keep: {v}","autopilot.noRepo":"No configured repository.","autopilot.off":"Autopilot off","autopilot.offDrain":"Work in flight finishes; nothing new is taken.","autopilot.offNow":"In-flight items are stopped and their runs marked abandoned.","autopilot.offTitle":"Turn the autopilot off","autopilot.on":"Autopilot on","autopilot.onTitle":"Turn the autopilot on","autopilot.pick":"Pick the repositories to watch.","autopilot.pickOne":"Select at least one repository.","autopilot.queued":"Queued","autopilot.running":"Running","autopilot.slots":"Slots","autopilot.state":"State","autopilot.stopNow":"Also stop what is in flight now","autopilot.today":"Today","autopilot.turnOff":"Turn off","autopilot.turnOn":"Turn on","autopilot.unknown":"Autopilot ?","back":"Back","bot.autopilot":"Autopilot","bot.doing":"Watching the queue","cancel":"Cancel","chat.answer":"Answer","chat.answerTitle":"Answer {id}","chat.answered":"Answered","chat.kill":"Kill","chat.killBody":"This stops the session and removes the worktree. The remote branch and logs are kept.","chat.killTitle":"Kill {id}","chat.noResult":"No result yet.","chat.noTranscript":"No transcript for this seat.","chat.nowIn":"now in phase {n}","chat.older":"Load older","chat.pickFirst":"Pick an option first.","chat.queued":"Queued","chat.queuedReplaced":"Queued (replaced the previous one)","chat.replaces":"Replaces the unread instruction:","chat.resume":"Resume","chat.resumeBody":"Returns the plan that resumes this run in the background.","chat.resumePlan":"Resume plan","chat.resumeTitle":"Resume {id}","chat.runGone":"This run is no longer on the floor; nothing can be sent to it from here.","chat.send":"Send: {v}","chat.sendBtn":"Send","chat.steer":"Steer","chat.steerLabel":"Steer instruction","chat.steerPlaceholder":"Instruction for the next phase (steer)","chat.steerTitle":"Steer {id}","chat.steerWhen":"Applied at the entry to the next phase","chat.toolResult":"Tool result","cleanup.done":"Removed {n} items, {kb} KB freed.","cleanup.found":"{n} items, {kb} KB in all.","cleanup.intro":"The janitor clears what runs leave behind: temporary files, finished worktrees, stale refs and abandoned runs. You see the list before anything goes.","cleanup.kind.abandoned":"abandoned runs","cleanup.kind.refs":"stale refs","cleanup.kind.tmp":"temporary files","cleanup.kind.worktrees":"finished worktrees","cleanup.safe":"Only these items are removed. A worktree with uncommitted work is never touched.","cleanup.scan":"What can be cleaned?","cleanup.title":"Clean up","close":"Close","chat.resumeIn":"Continue it in a terminal:","commands.openWindow":"Open its window","commands.terminalOnly.device":"Terminal: it needs a device or a simulator next to you.","commands.terminalOnly.interactive":"Terminal: it asks you questions as it goes.","commands.terminalOnly.machine":"Terminal: it changes this installation or the machine.","commands.terminalOnly.self":"Terminal: it starts or stops this panel itself.","commands.destructive":"destructive","confirm":"Confirm","delete":"Delete","demo.banner":"Demo office: scripted activity, not your machine's data. Writes are off.","demo.chat.assistant":"Reading the screen before touching it.","demo.chat.done":"Done.","demo.chat.user":"{role}, what are you on?","demo.chatNote":"Demo chat: sample messages.","demo.doing.commit":"Writing the commit and the PR body","demo.doing.coordinating":"Coordinating the team","demo.doing.critic":"Looking for why the plan fails","demo.doing.dev":"Writing LoginView.swift","demo.doing.devcritic":"Running the build and tests","demo.doing.explore":"Reading the module map","demo.doing.plan":"Writing the plan","demo.doing.evidence":"Reading the Figma frames","demo.doing.reader":"Summarising a large file","demo.doing.report":"Writing the run report","demo.doing.review":"Reading the pull request","demo.doing.security":"Checking secrets and storage","demo.doing.session":"Answering in a plain session","demo.doing.waiting":"Asking you to approve the triage","demo.noWrites":"Demo office: nothing is sent.","demo.optFix":"Fix the findings","demo.optShip":"Commit as is","demo.question":"Two important findings. Fix them before the commit?","demo.runNote":"Demo run: results are not read from the machine.","demo.start":"Demo","demo.stop":"Exit demo","demo.task.init.issue":"Read the issue","demo.task.init.maturity":"Check the issue is ready","demo.task.init.worktree":"Create the worktree","demo.task.plan.explore":"Explore the affected files","demo.task.plan.write":"Write the plan","demo.task.plan.critic":"Plan critic review","demo.task.dev.test":"Write the failing test","demo.task.dev.code":"Fix LoginView dark mode","demo.task.dev.build":"Build and run the tests","demo.task.dev.critic":"Dev critic check","demo.task.review.models":"Three reviewers read the diff","demo.task.review.security":"Security audit","demo.task.review.triage":"Triage the findings","demo.task.commit.commit":"Commit","demo.task.commit.pr":"Open the pull request","demo.task.report.write":"Write the report","demo.task.report.channels":"Post the summary","demo.task.a.intake":"Read the request","demo.task.a.figma":"Figma design context","demo.task.a.swagger":"Swagger endpoints","demo.task.a.confluence":"Confluence pages","demo.task.a.repo":"Repository conventions","demo.task.a.concepts":"Platform-free concepts","demo.task.a.platform":"Per-platform pass","demo.task.a.render":"Render the document","demo.task.a.review":"Review the document","demo.task.a.publish":"Publish to Confluence","demo.task.a.report":"Report","demo.titleA":"Dark mode on the login screen","demo.titleB":"Payment retry analysis","demo.windowOffline":"Not connected: this window fills in when the page is opened with /multi-agent:office-on.","done":"Done","empty.body":"Nobody is at work. When a /multi-agent run or a Claude Code session is active, its team takes a table here.","empty.demo":"Watch the demo office","empty.title":"The office is quiet","error.generic":"Something went wrong.","event.demo":"Demo office started","event.done":"{name} is complete","event.join":"{role} joined {name}","event.phase":"{name}: phase {n}/{last} started, {phase}","event.seat-done":"{role} finished on {name}","event.table-new":"{name} opened a table in {repo}","event.waiting":"{name} is waiting for you","fx.done":"Run complete","fx.phase":"Phase {n}: {name}","hud.agents":"{n} agents working · {runs} runs · {sessions} sessions","hud.cost":"{v} today","hud.nothingWaiting":"Nothing waits for you.","hud.waiting":"{n} waiting","img.hidden":"[image not shown]","job.analysis":"Write the analysis","job.autopilot-run":"Run it on autopilot","job.check":"Review and start","job.diff-explain":"Explain a review's findings","job.estimate":"Estimate a ticket","job.give":"Give the job","job.doctor":"Health check","job.route-status":"Model routing status","job.scan":"Skill security scan","job.scenario-audit":"Scenario audit","job.review-analysis":"Analysis document review","jobHint.doctor":"Checks the installation and the services it reaches; changes nothing.","jobHint.route-status":"Reports where model routing is on and where recent calls went.","jobHint.scan":"Scans the installed skills for unsafe patterns; read-only.","jobHint.scenario-audit":"Checks a scenario file against the code: which scenarios are covered.","jobHint.review-analysis":"Reviews the analysis document of a Jira issue; nothing is posted.","job.graph":"Code graph","job.ios-coding-standard":"iOS coding standard","job.notInstalled":"not installed","job.pipeline":"Run the pipeline","job.postmortem":"Post-mortem of a run","job.preview":"{role} starts this in {repo}:","job.research":"Research a ticket","job.review":"Review a pull request","job.review-issue":"Check a GitHub issue","job.review-jira":"Check a Jira ticket","job.security-review":"Security review","job.solo":"Solo: works at a desk","job.soloNote":"A solo job: one person works at a desk in the open office.","job.startTitle":"Start this job?","job.started":"{role} took the job","job.team":"Team: meets in a room","job.teamNote":"A team job: the team meets in a room of that repository. Another run live there makes it wait.","job.test-gen":"Write the missing tests","job.unattended":"It runs in the background under the unattended permission profile, without asking for permissions; you follow it on the floor and in its chat.","jobHint.analysis":"A feature spec from the ticket and its sources; no code.","jobHint.autopilot-run":"The whole pipeline without questions, up to an open PR.","jobHint.diff-explain":"Maps a run's review findings to the diff lines.","jobHint.estimate":"Time per role from closed work, P25 to P75.","jobHint.graph":"Builds or reports the repository's code graph, no model calls.","jobHint.ios-coding-standard":"Audits a module against the 99 rules and plans the fixes.","jobHint.pipeline":"The whole team: plan, develop, review, commit and report, stopping where you have to decide.","jobHint.postmortem":"What happened in a run, from its transcripts.","jobHint.research":"Closes a run's open gaps from tracker, docs and repo.","jobHint.review":"Three reviewers read the PR; the findings come back as a report, nothing is posted.","jobHint.review-issue":"Grades the issue's readiness and lists the gaps.","jobHint.review-jira":"Grades the ticket's readiness and lists the gaps.","jobHint.security-review":"A threat-model review of the branch: OWASP and CWE categories, CVSS scores.","jobHint.test-gen":"Finds what has no test that would catch it, writes the tests and runs them.","lab.note":"Device tests (simulator or emulator) need a device at hand and stay terminal commands: /multi-agent:test.","ledger.byModel":"By model","ledger.byPhase":"By phase","ledger.byRepo":"By repository","ledger.byRun":"By run","ledger.month":"This month","ledger.name":"Name","ledger.notMeasured":"Not measured: {v}","ledger.note":"Estimated at list price from cost-table.json, not an invoice.","ledger.outside":"Outside the pipeline","ledger.source":"Source","ledger.today":"Today","ledger.total":"Total","ledger.unpriced":"{n} unpriced","ledger.verified":"verified {d}","ledger.week":"This week","list.empty":"No agent activity in the recent window.","list.limited":"Limited table: this host writes no subagent detail.","list.noBranch":"branch unknown","list.phaseHistory":"Phase history","list.room":"Room: {repo}","list.runDetail":"Run detail","list.showOnFloor":"Show on the floor","list.team":"Team of {name}","list.unmatched":"Unmatched: more than one run could own this session.","live.closed":"closed","live.demo":"demo","live.demoOnly":"demo, not connected","live.live":"live","live.notConnected":"not connected","live.offline":"offline","live.paused":"paused","live.polling":"polling","loading":"Loading","new.command":"Command: {c}","new.copyCmd":"Copy terminal command","new.devRun":"Full development run: analysis, plan, development, review, commit","new.enterTask":"Enter the task first.","new.launch":"Prepare background launch","new.launchBody":"Starts an unattended run in {repo}.","new.launchBtn":"Launch","new.launchTitle":"Launch","new.noRepo":"No repository yet. Add one below.","new.planBody":"The server wrote the request; start this command:","new.planTitle":"Launch plan","new.question":"Question {i} of {n} ({id}). Skip to let the run ask it.","new.repo":"Repository","new.request":"Launch request","new.requestNote":"The server validates and writes the request and returns the command that starts it; it never starts a session itself.","new.review":"Review","new.freeTextHint":"A Jira key, a GitHub issue link or repo#N, or one sentence describing the task.","new.workFilter":"Filter the list","new.workList":"Waiting for work: Jira and GitHub issues","new.search":"Search commands","new.skip":"Skip","new.step.command":"Command","new.step.launch":"Launch","new.step.questions":"Questions","new.step.task":"Task","new.summary":"Work item: {input}. Repository: {repo}.","new.taskPlaceholder":"Jira key, GitHub issue URL, repo#N, #N or one line of text","next":"Next","noAccess.body":"This page needs a fresh link: run /multi-agent:office-on in a terminal. A link works once, within 10 seconds, and a reload needs a new one.","noAccess.title":"No access","none":"None","notMeasured":"not measured","off":"off","on":"on","param.branch":"Branch (optional)","param.enum":"Choice","param.github-issue":"GitHub issue","param.jira-key":"Jira key","param.pickRun":"Pick a run","param.pull-request":"Pull request","param.repo-path":"Folder in the repository","param.scenario-audit.scenarios":"Scenario list (a CSV file in the repository)","placeholder.scenario-audit.scenarios":"docs/scenarios.csv","param.run-id":"Run","param.work-item":"Work item (Jira key, issue link or a sentence)","perm.count":"{n} host permission request(s)","perm.notForwarded":"Host permission prompts are not forwarded yet.","placeholder.branch":"feature/login","placeholder.github-issue":"https://github.com/org/repo/issues/7 or repo#7","placeholder.jira-key":"PROJ-123","placeholder.pull-request":"https://github.com/org/repo/pull/12 or repo#12","placeholder.repo-path":"Sources/Feature","placeholder.run-id":"PROJ-123","placeholder.work-item":"PROJ-123, repo#45 or a short task","prs.ask":"Ask about it","prs.copyReview":"Copy review command","prs.empty":"No open pull requests.","prs.notImplemented":"not implemented","prs.note":"A review run's findings and the verdict button are in that run's detail.","prs.review":"Have it reviewed","repos.absolute":"Write the full path, starting with /","repos.add":"Add","repos.addBody":"{n} becomes a repository runs can start in. Nothing else changes.","repos.addHint":"Add this checkout so runs can start in it","repos.addTitle":"Add {n}","repos.byPath":"Add by path","repos.empty":"No repository yet. Add one below: a checkout an earlier run worked in, or a path.","repos.missing":"Gone from disk","repos.none":"No repository yet","repos.path":"Repository path","repos.pathNote":"The folder must be a git checkout. The home folder and / are refused.","repos.pathPlaceholder":"/Users/you/my-app","repos.remove":"Remove from list","repos.removeBody":"Only the list entry goes. The folder is already gone; nothing on disk changes.","repos.removeTitle":"Remove {n} from the list","repos.suggested":"From earlier runs","role.assistant":"Agent","role.user":"You","room.accounting":"Accounting","room.archive":"Archive","room.kitchen":"Kitchen","room.lab":"Test lab","room.library":"Library","room.lobby":"Reception","room.lounge":"Lounge","room.mail":"Mail room","room.manager":"Manager's office","room.meeting":"Meeting floor","room.typeFree":"{type} · free","room.typeNameAnalysis":"Analysis room","room.typeNameDev":"Development room","room.typeSession":"Session · outside a pipeline","room.typeWith":"{type} · {command}","room.office":"Open office","room.restroom":"Restroom","room.server":"Server room","routines.deleteBody":"Deletes the routine command and its registry entry.","routines.deleteTitle":"Delete /multi-agent:{n}","routines.empty":"No saved routines.","routines.saveNote":"Saving a new routine needs the conversation, so it stays in the terminal.","run.analysis":"Analysis documents","run.confluence":"Confluence pages: {n}","run.decision":"Decision: {d} (blocking {b}, important {i})","run.diff":"Diff","run.diffLine":"{files} files, +{added} -{removed}","run.failed":"{n} failed","run.findings":"Review findings","run.findingsCount":"{n} findings ({source})","run.fix":"Fix:","run.noDiff":"No diff recorded.","run.noFindings":"No review findings recorded.","run.noTests":"No test summary recorded.","run.passed":"{n} passed","run.risk":"risk {v}","run.screenshots":"Screenshots","run.tests":"Tests","run.unreadable":"(not readable)","run.verdict":"Post review verdict","run.verdictHead":"Review verdict","run.verdictOff":"Available once the review has recorded findings.","run.verdictOn":"Enabled because the findings are shown above.","run.verdictRisk":"Posted with your own {p} credential on this machine. High risk.","run.verdictTitle":"Review verdict for {id}","services.contracts":"{n} API contracts","services.crash":"Crashlytics issue","services.crashLine":"{o} occurrences, {u} users","services.crashPh":"Crashlytics issue URL (console.firebase.google.com)","services.figmaNote":"Analysing this frame runs /multi-agent:analysis; use the ask box below or a terminal.","services.file":"Figma file key","services.filePh":"Figma file key","services.node":"Figma node id","services.nodePh":"Node id, e.g. 12:34","services.note":"Search across Confluence, a per-version Crashlytics trend and a Figma file browser have no client yet; ask an agent instead.","services.page":"Confluence page","services.pagePh":"Confluence page id or https URL","services.read":"Read","services.render":"Render frame","stack.alwaysOn":"always on","stack.change":"Change","stack.apply":"Apply","stack.changes":"Changes: {v}","stack.copyRefresh":"Copy refresh command","stack.dropped":"Not in the marketplace: {v}","stack.none":"No stack on yet","stack.unreadable":"Could not be read","stack.noManifest":"The marketplace manifest could not be read; the plugin list is the convention.","stack.noSkills":"No skills found locally.","stack.pick":"Pick a repository","stack.pickOne":"Select at least one stack.","stack.plugins":"Plugins","stack.restart":"Restart Claude Code in that repository to load the plugins. Copilot and Codex copies:","stack.stacks":"Stacks","stack.title":"Set stacks for {repo}","staff.busy":"at work","staff.free":"free","staff.idle":"waiting for work","staff.intro":"Everyone in the office and what they are doing. Pick someone to give them a job.","staff.officeTitle":"Office staff","staff.poolTitle":"Agent pool","staff.poolIntro":"They wait at the open office's desks and take their seat at a run's table when the run starts, if one of its phases uses their role.","staff.jobs":"Jobs they take","staff.noJobs":"No jobs for this person yet.","staff.openChat":"Open their chat","staff.openRoom":"Open {v}","staff.talkTo":"Talk to {v}","staff.workingOn":"Working on: {v}","state.done":"done","state.idle":"idle","state.reading":"reading","state.spawning":"starting an agent","state.waiting":"waiting","state.writing":"writing","station.archive":"Archive","station.autopilot":"Autopilot","station.cleanup":"Cleanup","station.commands":"Commands","station.job":"Job","station.lab":"Test lab","station.ledger":"Ledger","station.list":"Team list","station.new":"Development · new run","station.newAnalysis":"Analysis · new run","station.office":"Office","station.prs":"PR mailbox","station.routines":"Routines","station.run":"Run","station.services":"Services","station.stack":"Skills","station.staff":"Team","station.tools":"Toolkit","station.work":"Quest board","stationHint.archive":"Every run, its log and post-mortem","stationHint.autopilot":"Turn the autopilot on or off and see its queue","stationHint.cleanup":"Clear what runs leave behind","stationHint.commands":"Every /multi-agent command","stationHint.job":"The jobs this person takes","stationHint.lab":"Tests written and checked","stationHint.ledger":"Tokens and estimated cost by run, repository, model and phase","stationHint.list":"The same office as text","stationHint.new":"/multi-agent: a task and a repository","stationHint.newAnalysis":"/multi-agent:analysis: a request and a repository","stationHint.office":"The floor with every team at work","stationHint.prs":"Pull requests on every GitHub account and Bitbucket","stationHint.routines":"Your saved /multi-agent routines","stationHint.run":"Results, findings, tests and the review verdict","stationHint.services":"Confluence, Crashlytics and Figma reads","stationHint.stack":"Stacks and plugins per repository","stationHint.staff":"Everyone in the office; give someone a job","stationHint.tools":"multi-agent-toolkit tools, called from here","stationHint.work":"Jira and GitHub issues by priority, with the maturity check","table.annexHint":"Go to the run's main room","table.corridor":"{name} works here too · main room: {repo}","table.limited":"{host}: limited","table.noPhase":"No phase","phaseState.done":"done","phaseState.now":"in progress","phaseState.todo":"waiting","taskState.completed":"done","taskState.in_progress":"in progress","taskState.pending":"waiting","mcp.error":"failed","mcp.ok":"done","mcp.running":"running","seat.mcp":"Recent MCP calls","seat.tasks":"Its task list","table.finished":"Finished: the team is wrapping up","table.now":"Now: {task}","table.ownerDoing":"{phase}: the orchestrator runs this step","table.phase":"Phase {n}/{last} {name}","table.session":"Session","table.unmatched":"unmatched","table.waiting":"Waiting for you","tools.badJson":"A JSON field is not valid JSON.","tools.call":"Call","tools.confirmTitle":"Call {name}?","tools.error":"The tool reported an error.","tools.notAllowlisted":"not on the allowlist","tools.notCallable":"Not callable from the panel: {v}","tools.notSet":"(not set)","tools.onePerLine":"One per line","tools.risk":"risk {v}","tools.running":"Running","tools.search":"Search tools","tools.terminalOnly":"terminal only","tools.version":"multi-agent-toolkit {v}, {n} tools. Updates with each pipeline update.","unit.hour":"h","unit.min":"m","update.gone":"Office is closed. Run /multi-agent:office-on to open it again.","update.page":"A newer Office is installed.","update.reload":"Reload","update.server":"Office was updated. Run /multi-agent:office-on to reopen it.","work.blockers":"Blockers","work.description":"Description","work.empty":"Nothing assigned.","work.noPriority":"no priority","work.score":"score {v}","work.start":"Start a run with this","work.unreadable":"could not be read","work.warnings":"Warnings","writes.branch":"writes a branch","writes.branch-pr":"opens a branch and PR","writes.issue-comment":"comments on the issue","writes.none":"reads only","writes.pr-comments":"comments on the PR","writesLong.branch":"It commits to a new branch in this repository.","writesLong.branch-pr":"It commits to a new branch and opens a pull request under your identity.","writesLong.issue-comment":"It posts a comment on the issue under your identity.","writesLong.pr-comments":"It posts review comments on the pull request under your identity.","zoom.in":"Zoom in","zoom.out":"Zoom out","role.orchestrator":"Orchestrator","role.reviewer":"Reviewer","role.security-auditor":"Security Auditor","role.ios-architect":"iOS Architect","role.android-architect":"Android Architect","role.backend-architect":"Backend Architect","role.explorer":"Explorer","role.planner":"Planner","role.clarifier":"Clarifier","role.test-gap-analyst":"Test Gap Analyst","role.reader":"Reader","role.librarian":"Librarian","role.sysadmin":"Sysadmin","role.mail-clerk":"Mail Clerk","role.janitor":"Janitor","new.terminalOnly":"A command with no one to hand it to runs from the terminal.","update.signedOut":"This page is signed out. Run /multi-agent:office-on to open it again.","cleanup.failed":"{n} item(s) could not be removed:","hud.costOffline":"Cost: not connected","hud.autopilotOffline":"Autopilot: not connected","cleanup.promptsNote":"Trimming instruction files stays a terminal command: /multi-agent:prune-prompts.","prune.title":"Old run logs","prune.intro":"Task log folders older than the age you pick. The audit trail, metrics and counters always stay; a run that can still be resumed and a folder written in the last minutes are spared.","prune.age":"Older than","prune.days":"{n} days","prune.scan":"See what would go","prune.found":"{n} task log folders, about {mb} MB","prune.more":"and {n} more","prune.safe":"Nothing is removed until you confirm.","prune.done":"Removed {n} task log folders, about {mb} MB freed.","station.keys":"Key cabinet","stationHint.keys":"Which credentials are held and whether they work; never a value","keys.intro":"Each service the pipeline can reach, by name. Values never leave the credential store.","keys.probe":"Check them live","keys.unavailable":"The credential inventory could not run on this machine.","keys.unmapped":"{n} services are not set up; /multi-agent:setup adds them.","keys.renew":"To renew or add one, run in a terminal:","keys.state.present":"held","keys.state.mapped-but-missing":"missing from the store","keys.state.unmapped":"not set up","keys.reach.not-probed":"not checked","keys.reach.reachable":"works","keys.reach.auth-rejected":"refused, renew it","keys.reach.unreachable":"unreachable (VPN?)","keys.reach.no-host-configured":"no host set","keys.reach.well-formed":"well formed","keys.reach.not-probeable":"cannot be checked","keys.reach.malformed":"malformed, renew it","keys.reach.no-credential":"nothing stored","keys.reach.probe-error":"the check failed","keys.reach.server-error":"the server answered with an error","keys.reach.tier-1-ready":"works","keys.reach.tier-2-ready":"works (fallback)","keys.reach.tier-1-no-grant":"works, needs a grant","keys.reach.unknown":"unknown answer","station.memory":"Memory","stationHint.memory":"What the pipeline learned per repository","memory.intro":"Per repository: the code graph, durable learnings, past review findings and session notes the learning loop holds.","memory.none":"No repository has a memory shelf yet.","memory.graphAge":"graph {n} days old","memory.noGraph":"no code graph","memory.counts":"{l} learnings · {f} past findings · {s} session notes","memory.emptyShelf":"Nothing is accumulating here: runs on this repository have not reached the report phase.","station.system":"System","stationHint.system":"CPU, memory, disk and what the pipeline uses","system.cpu":"CPU","system.load":"load {l} on {c} cores","system.memory":"Memory","system.disk":"Free disk","system.diskOf":"of {v}","system.pipeline":"Pipeline","system.sessions":"{n} sessions · {k} toolkit","system.rss":"{v} memory · logs {l} MB","system.warn.disk-low":"Under 10% of the disk is free: the janitor can clear old logs and worktrees.","system.warn.cpu-busy":"The CPU is saturated: parallel runs will be slow.","room.orientation":"Orientation","role.trainer":"Trainer","station.guide":"Guide","stationHint.guide":"How the office works: the rooms, how a job runs, what you can do here and what stays in the terminal","guide.intro":"Every room on this floor is a part of the pipeline. Click a room's window to use it, or a person to hand them work.","guide.show":"Show","guide.h.plan":"Floor plan","guide.h.flow":"How a job runs","guide.h.give":"Giving a job","guide.h.where":"Office or terminal","guide.h.security":"Security","guide.h.legend":"Signs","guide.room.lobby":"Start a development run or an analysis from a Jira or GitHub issue, or from free text.","guide.room.orientation":"This room: the guide you are reading.","guide.room.office":"Agents wait at their desks until a run calls their role. Solo jobs are done here.","guide.room.kitchen":"An agent called in for one step rests here for a moment, then goes back to their desk; the run's crew stays at the table.","guide.room.accounting":"Tokens and estimated cost per run, repository, model and phase.","guide.room.restroom":"Cleanup: temporary files, finished worktrees, stale refs, abandoned runs and old run logs. You see the list before anything goes.","guide.room.manager":"Autopilot and its switch, your saved routines, and the settings: output language, the fable rung, model routing.","guide.room.lab":"Test jobs: tests written for a repository and checked.","guide.room.library":"What the pipeline knows: stacks per repository, every command and what it has learned per repository.","guide.room.archive":"History: finished runs, their logs and postmortems.","guide.room.mail":"Pull requests waiting for you or opened by you, from every GitHub account and Bitbucket.","guide.room.server":"Outside lines: toolkit MCP tools, connected services, the key cabinet and the machine's resources.","guide.room.meeting":"One floor per repository: a Development room for /multi-agent, an Analysis room for /multi-agent:analysis.","guide.flow.1":"Agents wait at their desks in the open office.","guide.flow.2":"When a run needs a role, that person walks to the run's room on its repository's floor. A run that touches more repositories opens an annex desk on theirs.","guide.flow.3":"The table sign shows the phase, a bar that fills as its tasks finish and the task in progress: the same list as the terminal's task widget.","guide.flow.4":"An agent called in for one step rests in the kitchen when done, then returns to their desk; the crew stays seated until the run ends.","guide.flow.5":"A finished run stays on the floor for two minutes with its result, then the team leaves.","guide.pipeline.dev":"Development (/multi-agent): {v}","guide.pipeline.analysis":"Analysis (/multi-agent:analysis): {v}","guide.pipeline.mcp":"A session that uses the toolkit MCP directly gets its own desk, and its agent walks to the server racks while a tool runs.","guide.give.1":"Click a person to see the jobs they take; pick one, fill in the form and confirm.","guide.give.2":"A team job runs in a room on its repository's floor, a solo job at a desk. One team run per repository at a time.","guide.give.3":"When a run asks you something, a ! appears over its table and in the top bar.","guide.where.1":"Jobs: the model does the work and reports (reviews, analyses, test plans).","guide.where.2":"Windows: what you read here, and actions that show a preview and run only on your confirmation (autopilot, stack, routines, cleanup, settings).","guide.where.3":"Terminal only: work that is interactive or changes the installation (setup, update, sync, uninstall). The commands window says why for each one.","guide.security.1":"The server listens on 127.0.0.1 only and runs until /multi-agent:office-off stops it.","guide.security.2":"The access token is held in this page's memory, never in a URL, a cookie or browser storage.","guide.security.3":"Actions that change the machine or start work show a preview first and run only on your confirmation; every write is recorded.","guide.security.4":"No credential reaches this page: the key cabinet shows names and states, and renewal happens in the terminal with /multi-agent:setup.","guide.security.5":"Review jobs report here and post nothing; the demo plays a made-up day and changes nothing.","guide.legend.done":"Phase finished","guide.legend.now":"Phase in progress; it fills as its tasks finish","guide.legend.pending":"Phase not started","guide.legend.you":"A run is waiting for you","guide.legend.ask":"An agent asked a question","guide.legend.spawn":"An agent is starting","guide.legend.cloud":"A cloud over someone at work says what they are doing; click it for the detail.","role.developer":"Developer","role.plan-critic":"Plan Critic","role.dev-critic":"Dev Critic","role.committer":"Committer","role.reporter":"Reporter","chat.askedInTerminal":"This session is asking you a question in its terminal. Answer it there; the panel answers only questions a run leaves for it.","table.freeText":"Free text","table.prOpened":"PR #{n} opened","table.waitingFor.local-test":"Waiting for you: test it locally?","table.waitingFor.user-channels-choice":"Waiting for you: where to report","table.waitingFor.maturity":"Waiting for you: the issue is not ready","table.waitingFor.attended-reply":"Waiting for your reply","table.waitingFor.question":"Waiting for your answer here","table.waitingFor.terminal":"Asking you in the terminal","event.guide":"New here? The guide is in the orientation room, next to reception.","table.crewDone":"done with {phase}","table.headWaiting":"waiting for your answer","table.headQuiet":"no recent activity in its session","table.crewNext":"waiting for {phase}","run.report":"Report","run.channel.pr":"PR description","run.channel.jira":"Jira","run.channel.confluence":"Confluence","run.channel.wiki":"Wiki","run.channel.issue":"GitHub issue","run.channelState.posted":"posted","run.channelState.skipped":"skipped","run.channelState.failed":"failed","memory.buildGraph":"Build the code graph","memory.refreshGraph":"Refresh the code graph","station.settings":"Settings","stationHint.settings":"Output language, the fable rung and model routing","settings.intro":"Each switch runs what its terminal command runs, after a preview.","settings.language":"Output language","settings.languageHint":"The language the pipeline writes to you in: reports, PR and Jira comments, this office.","settings.model":"Fable rung","settings.modelHint":"Whether runs may use Fable at the top of the model ladder (/multi-agent:model).","settings.route":"Model routing","settings.routeHint":"Whether calls are routed by the saved rules (/multi-agent:route-on and route-off).","settings.value.language.en":"English","settings.value.language.tr":"Türkçe","settings.value.model.on":"On","settings.value.model.off":"Off","settings.value.route.on":"On","settings.value.route.off":"Off","settings.change":"{from} → {to}","settings.languageNote":"Command descriptions in the CLI picker change on the next session start; run /multi-agent:office-on again to see this page in the new language.","settings.terminalNote":"Routing rules, free providers and prompt language stay in the terminal.","settings.freeChain":"This also brings back the free provider chain you saved earlier.","settings.freeChainTraining":"This also brings back the free provider chain you saved earlier, including providers that may train on what they are sent."},"tr":{"app.title":"Ofis","archive.empty":"Henüz kayıtlı koşu yok.","archive.log":"Günlük","archive.postmortem":"Post-mortem iste","ask.copy":"Komutu kopyala","ask.handOff":"Birine iş ver","ask.label":"Ajana sor","ask.note":"Panelden soru başlatmak henüz yok, çünkü serbest metindeki linkleri başlatma girdisi kabul etmiyor. Komutu kopyala, terminalde çalıştır.","ask.placeholder":"Bu ekranla ilgili ajana sor","autopilot.ceiling":"tavan {v}","autopilot.switch":"Otopilotu aç ya da kapat","autopilot.onHint":"Aşağıdaki repoları izliyor, aynı anda en fazla {n} iş alıyor.","autopilot.offHint":"İzlenecek repoları seç, sonra aç.","autopilot.noRepoHint":"Önce terminalden bir repo ekle; sonra buradan açılabilir.","autopilot.ofSlots":"en fazla {n} aynı anda","autopilot.reposTitle":"İzlenen repolar","autopilot.pickOn":"İzlenecek repoları değiştirmek için yeni bir seçim yap.","autopilot.saveOnly":"Seçimi kaydet, başlatma","autopilot.saveTitle":"Otopilot seçimini kaydet","autopilot.stopNowBtn":"Hemen durdur","autopilot.stopNowTitle":"Otopilotu hemen durdur","autopilot.addInTerminal":"Yeni repo terminalden eklenir, çünkü kaynaklarını ve etiketini sorar:","autopilot.configureOnly":"Yalnızca seçimi kaydet, iş planlama","autopilot.credsBad":"Kimlik bilgileri sorunlu, iş planlanmayacak","autopilot.credsOk":"Kimlik bilgileri okunuyor","autopilot.drop":"Çıkar: {v}","autopilot.keep":"Kalsın: {v}","autopilot.noRepo":"Yapılandırılmış repo yok.","autopilot.off":"Otopilot kapalı","autopilot.offDrain":"Süren iş biter, yeni iş alınmaz.","autopilot.offNow":"Süren işler durdurulur, koşuları yarıda bırakıldı sayılır.","autopilot.offTitle":"Otopilotu kapat","autopilot.on":"Otopilot açık","autopilot.onTitle":"Otopilotu aç","autopilot.pick":"İzlenecek repoları seç.","autopilot.pickOne":"En az bir repo seç.","autopilot.queued":"Kuyrukta","autopilot.running":"Çalışıyor","autopilot.slots":"Slot","autopilot.state":"Durum","autopilot.stopNow":"Süren işleri de şimdi durdur","autopilot.today":"Bugün","autopilot.turnOff":"Kapat","autopilot.turnOn":"Aç","autopilot.unknown":"Otopilot ?","back":"Geri","bot.autopilot":"Otopilot","bot.doing":"Kuyruğu izliyor","cancel":"Vazgeç","chat.answer":"Cevapla","chat.answerTitle":"{id} cevabı","chat.answered":"Cevaplandı","chat.kill":"Öldür","chat.killBody":"Oturum durur, worktree silinir. Uzak branch ve loglar kalır.","chat.killTitle":"{id} koşusunu öldür","chat.noResult":"Henüz sonuç yok.","chat.noTranscript":"Bu koltuğun kaydı yok.","chat.nowIn":"şu an faz {n}","chat.older":"Eskileri yükle","chat.pickFirst":"Önce bir seçenek seç.","chat.queued":"Sıraya alındı","chat.queuedReplaced":"Sıraya alındı (öncekinin yerine)","chat.replaces":"Okunmamış talimatın yerine geçer:","chat.resume":"Devam ettir","chat.resumeBody":"Bu koşuyu arka planda sürdürecek planı döndürür.","chat.resumePlan":"Devam planı","chat.resumeTitle":"{id} koşusunu sürdür","chat.runGone":"Bu koşu artık ofiste değil; buradan ona bir şey gönderilemez.","chat.send":"Gönder: {v}","chat.sendBtn":"Gönder","chat.steer":"Yönlendir","chat.steerLabel":"Yönlendirme talimatı","chat.steerPlaceholder":"Sonraki faz için talimat (steer)","chat.steerTitle":"{id} koşusunu yönlendir","chat.steerWhen":"Sonraki fazın girişinde uygulanır","chat.toolResult":"Araç sonucu","cleanup.done":"{n} öğe silindi, {kb} KB boşaldı.","cleanup.found":"{n} öğe, toplam {kb} KB.","cleanup.intro":"Temizlikçi koşuların geride bıraktıklarını toplar: geçici dosyalar, biten worktree'ler, eski ref'ler ve terk edilmiş koşular. Bir şey silinmeden önce listeyi görürsün.","cleanup.kind.abandoned":"terk edilmiş koşular","cleanup.kind.refs":"eski ref'ler","cleanup.kind.tmp":"geçici dosyalar","cleanup.kind.worktrees":"biten worktree'ler","cleanup.safe":"Yalnızca bu öğeler silinir. Commit'lenmemiş işi olan bir worktree'ye asla dokunulmaz.","cleanup.scan":"Neler temizlenebilir?","cleanup.title":"Temizlik","close":"Kapat","chat.resumeIn":"Terminalde sürdürmek için:","commands.openWindow":"Penceresini aç","commands.terminalOnly.device":"Terminal: yanında bir cihaz ya da simülatör ister.","commands.terminalOnly.interactive":"Terminal: çalışırken sana soru sorar.","commands.terminalOnly.machine":"Terminal: bu kurulumu ya da makineyi değiştirir.","commands.terminalOnly.self":"Terminal: bu panelin kendisini açar ya da kapatır.","commands.destructive":"yıkıcı","confirm":"Onayla","delete":"Sil","demo.banner":"Demo ofis: senaryolu hareket, makinendeki veri değil. Yazma kapalı.","demo.chat.assistant":"Dokunmadan önce ekranı okuyorum.","demo.chat.done":"Bitti.","demo.chat.user":"{role}, ne üzerindesin?","demo.chatNote":"Demo sohbet: örnek mesajlar.","demo.doing.commit":"Commit ve PR metnini yazıyor","demo.doing.coordinating":"Ekibi yönetiyor","demo.doing.critic":"Planın neden çökeceğini arıyor","demo.doing.dev":"LoginView.swift yazıyor","demo.doing.devcritic":"Build ve testleri koşuyor","demo.doing.explore":"Modül haritasını okuyor","demo.doing.plan":"Planı yazıyor","demo.doing.evidence":"Figma çerçevelerini okuyor","demo.doing.reader":"Büyük bir dosyayı özetliyor","demo.doing.report":"Koşu raporunu yazıyor","demo.doing.review":"Pull request'ı okuyor","demo.doing.security":"Sırları ve saklamayı kontrol ediyor","demo.doing.session":"Düz bir oturumda cevap veriyor","demo.doing.waiting":"Triyaj onayını soruyor","demo.noWrites":"Demo ofis: hiçbir şey gönderilmez.","demo.optFix":"Bulguları düzelt","demo.optShip":"Olduğu gibi commit et","demo.question":"İki önemli bulgu var. Commit'ten önce düzeltilsin mi?","demo.runNote":"Demo koşu: sonuçlar makineden okunmaz.","demo.start":"Demo","demo.stop":"Demodan çık","demo.task.init.issue":"Issue'yu oku","demo.task.init.maturity":"Issue'nun hazır olduğunu kontrol et","demo.task.init.worktree":"Worktree aç","demo.task.plan.explore":"Etkilenen dosyaları tara","demo.task.plan.write":"Planı yaz","demo.task.plan.critic":"Plan eleştirmeni incelemesi","demo.task.dev.test":"Önce başarısız olan testi yaz","demo.task.dev.code":"LoginView'un karanlık modunu düzelt","demo.task.dev.build":"Derle ve testleri koş","demo.task.dev.critic":"Geliştirme eleştirmeni kontrolü","demo.task.review.models":"Üç inceleyici diff'i okuyor","demo.task.review.security":"Güvenlik denetimi","demo.task.review.triage":"Bulguları ayıkla","demo.task.commit.commit":"Commit","demo.task.commit.pr":"Pull request aç","demo.task.report.write":"Raporu yaz","demo.task.report.channels":"Özeti paylaş","demo.task.a.intake":"İsteği oku","demo.task.a.figma":"Figma tasarım bağlamı","demo.task.a.swagger":"Swagger uç noktaları","demo.task.a.confluence":"Confluence sayfaları","demo.task.a.repo":"Repo konvansiyonları","demo.task.a.concepts":"Platformdan bağımsız kavramlar","demo.task.a.platform":"Platform başına geçiş","demo.task.a.render":"Dokümanı oluştur","demo.task.a.review":"Dokümanı incele","demo.task.a.publish":"Confluence'a yayınla","demo.task.a.report":"Rapor","demo.titleA":"Giriş ekranında karanlık mod","demo.titleB":"Ödeme tekrar deneme analizi","demo.windowOffline":"Bağlı değil: bu pencere sayfa /multi-agent:office-on ile açılınca dolar.","done":"Tamam","empty.body":"Şu an kimse çalışmıyor. Bir /multi-agent koşusu ya da Claude Code oturumu başlayınca ekibi burada bir masaya oturur.","empty.demo":"Demo ofisi izle","empty.title":"Ofis sessiz","error.generic":"Bir şey ters gitti.","event.demo":"Demo ofis başladı","event.done":"{name} tamamlandı","event.join":"{role}, {name} ekibine katıldı","event.phase":"{name}: {n}/{last}. faz başladı ({phase})","event.seat-done":"{role}, {name} işini bitirdi","event.table-new":"{name}, {repo} odasında masa açtı","event.waiting":"{name} seni bekliyor","fx.done":"Koşu tamamlandı","fx.phase":"Faz {n}: {name}","hud.agents":"{n} ajan çalışıyor · {runs} koşu · {sessions} oturum","hud.cost":"bugün {v}","hud.nothingWaiting":"Seni bekleyen bir şey yok.","hud.waiting":"{n} bekliyor","img.hidden":"[görsel gösterilmedi]","job.analysis":"Analiz yaz","job.autopilot-run":"Otopilotta koştur","job.check":"Gözden geçir ve başlat","job.diff-explain":"Review bulgularını açıkla","job.estimate":"Ticket için tahmin","job.give":"İşi ver","job.graph":"Kod grafı","job.ios-coding-standard":"iOS kodlama standardı","job.notInstalled":"kurulu değil","job.pipeline":"Pipeline'ı koştur","job.postmortem":"Koşunun post-mortem'i","job.preview":"{role}, {repo} reposunda şunu başlatır:","job.research":"Ticket'ı araştır","job.review":"Pull request incelet","job.review-issue":"GitHub issue'yu kontrol et","job.review-jira":"Jira ticket'ını kontrol et","job.security-review":"Güvenlik incelemesi","job.solo":"Tek kişi: masada çalışır","job.soloNote":"Tek kişilik iş: bir kişi açık ofiste bir masada çalışır.","job.startTitle":"Bu iş başlasın mı?","job.started":"{role} işi aldı","job.team":"Ekip: odada toplanır","job.teamNote":"Ekip işi: ekip o reponun bir odasında toplanır. Orada canlı başka bir koşu varsa bekler.","job.test-gen":"Eksik testleri yaz","job.unattended":"Arka planda, gözetimsiz izin profiliyle ve izin sormadan çalışır; ilerleyişi katta ve sohbetinde izlersin.","jobHint.analysis":"Ticket ve kaynaklarından özellik spesifikasyonu; kod yok.","jobHint.autopilot-run":"Bütün pipeline soru sormadan, açık bir PR'a kadar.","jobHint.diff-explain":"Bir koşunun review bulgularını diff satırlarına eşler.","jobHint.estimate":"Kapanmış işlerden rol başına süre, P25-P75.","jobHint.graph":"Reponun kod grafını kurar ya da raporlar; model çağrısı yok.","jobHint.ios-coding-standard":"Bir modülü 99 kurala göre denetler, düzeltme planı çıkarır.","jobHint.pipeline":"Bütün ekip: plan, geliştirme, review, commit ve rapor; karar gereken yerde durur.","jobHint.postmortem":"Bir koşuda ne olduğunu transcript'lerinden çıkarır.","jobHint.research":"Bir koşunun açık boşluklarını tracker, doküman ve repodan kapatır.","jobHint.review":"Üç inceleyici PR'ı okur; bulgular rapor olarak döner, hiçbir şey gönderilmez.","jobHint.review-issue":"Issue'nun hazır olup olmadığını puanlar, eksikleri listeler.","jobHint.review-jira":"Ticket'ın hazır olup olmadığını puanlar, eksikleri listeler.","jobHint.security-review":"Branch'in tehdit modeli incelemesi: OWASP ve CWE kategorileri, CVSS puanları.","jobHint.test-gen":"Yakalayacak testi olmayan yerleri bulur, testleri yazar ve koşturur.","lab.note":"Cihaz testleri (simülatör ya da emülatör) elde bir cihaz ister ve terminal komutu olarak kalır: /multi-agent:test.","ledger.byModel":"Modele göre","ledger.byPhase":"Faza göre","ledger.byRepo":"Repoya göre","ledger.byRun":"Koşuya göre","ledger.month":"Bu ay","ledger.name":"Ad","ledger.notMeasured":"Ölçülmedi: {v}","ledger.note":"cost-table.json liste fiyatıyla tahmin, fatura değil.","ledger.outside":"Pipeline dışı","ledger.source":"Kaynak","ledger.today":"Bugün","ledger.total":"Toplam","ledger.unpriced":"{n} fiyatsız","ledger.verified":"doğrulama {d}","ledger.week":"Bu hafta","list.empty":"Son dakikalarda ajan hareketi yok.","list.limited":"Kısıtlı masa: bu araç alt ajan ayrıntısı yazmıyor.","list.noBranch":"branch bilinmiyor","list.phaseHistory":"Faz geçmişi","list.room":"Oda: {repo}","list.runDetail":"Koşu ayrıntısı","list.showOnFloor":"Ofiste göster","list.team":"{name} ekibi","list.unmatched":"Eşlenemedi: bu oturum birden çok koşuya ait olabilir.","live.closed":"kapalı","live.demo":"demo","live.demoOnly":"demo, bağlı değil","live.live":"canlı","live.notConnected":"bağlı değil","live.offline":"çevrimdışı","live.paused":"duraklatıldı","live.polling":"yoklanıyor","loading":"Yükleniyor","new.command":"Komut: {c}","new.copyCmd":"Terminal komutunu kopyala","new.devRun":"Tam geliştirme koşusu: analiz, plan, geliştirme, review, commit","new.enterTask":"Önce görevi yaz.","new.launch":"Arka plan başlatmayı hazırla","new.launchBody":"{repo} içinde gözetimsiz bir koşu başlatır.","new.launchBtn":"Başlat","new.launchTitle":"Başlat","new.noRepo":"Henüz repo yok. Aşağıdan ekle.","new.planBody":"Sunucu isteği yazdı; şu komutu başlat:","new.planTitle":"Başlatma planı","new.question":"Soru {i}/{n} ({id}). Atla dersen koşu kendisi sorar.","new.repo":"Repo","new.request":"Başlatma isteği","new.requestNote":"Sunucu isteği doğrulayıp yazar ve başlatacak komutu döndürür; oturumu kendisi başlatmaz.","new.review":"Gözden geçir","new.freeTextHint":"Bir Jira anahtarı, GitHub issue linki ya da repo#N; veya işi anlatan tek bir cümle.","new.workFilter":"Listeyi süz","new.workList":"Bekleyen işler: Jira ve GitHub issue'ları","new.search":"Komut ara","new.skip":"Atla","new.step.command":"Komut","new.step.launch":"Başlat","new.step.questions":"Sorular","new.step.task":"Görev","new.summary":"İş: {input}. Repo: {repo}.","new.taskPlaceholder":"Jira anahtarı, GitHub issue linki, repo#N, #N ya da tek satır metin","next":"İleri","noAccess.body":"Bu sayfa yeni bir link ister: terminalde /multi-agent:office-on çalıştır. Link bir kez ve 10 saniye içinde çalışır; yenileme yeni link ister.","noAccess.title":"Erişim yok","none":"Yok","notMeasured":"ölçülmedi","off":"kapalı","on":"açık","param.branch":"Branch (isteğe bağlı)","param.enum":"Seçim","param.github-issue":"GitHub issue","param.jira-key":"Jira key","param.pickRun":"Bir koşu seç","param.pull-request":"Pull request","param.repo-path":"Repodaki klasör","param.scenario-audit.scenarios":"Senaryo listesi (repodaki bir CSV dosyası)","placeholder.scenario-audit.scenarios":"docs/scenarios.csv","param.run-id":"Koşu","param.work-item":"İş (Jira key, issue linki ya da bir cümle)","perm.count":"{n} izin isteği","perm.notForwarded":"Araç izin soruları henüz buraya gelmiyor.","placeholder.branch":"feature/login","placeholder.github-issue":"https://github.com/org/repo/issues/7 ya da repo#7","placeholder.jira-key":"PROJ-123","placeholder.pull-request":"https://github.com/org/repo/pull/12 ya da repo#12","placeholder.repo-path":"Sources/Feature","placeholder.run-id":"PROJ-123","placeholder.work-item":"PROJ-123, repo#45 ya da kısa bir görev","prs.ask":"Hakkında sor","prs.copyReview":"Review komutunu kopyala","prs.empty":"Açık PR yok.","prs.notImplemented":"henüz yok","prs.note":"Review koşusunun bulguları ve karar butonu o koşunun ayrıntısında.","prs.review":"İncelet","repos.absolute":"Tam yolu yaz, / ile başlasın","repos.add":"Ekle","repos.addBody":"{n} koşu başlatılabilen repolara eklenir. Başka hiçbir şey değişmez.","repos.addHint":"Bu repoyu ekle, koşular burada başlayabilsin","repos.addTitle":"{n} eklensin","repos.byPath":"Yol ile ekle","repos.empty":"Henüz repo yok. Aşağıdan ekle: önceki bir koşunun çalıştığı repo ya da bir yol.","repos.missing":"Diskte artık yok","repos.none":"Henüz repo yok","repos.path":"Repo yolu","repos.pathNote":"Klasör bir git reposu olmalı. Ana klasör ve / kabul edilmez.","repos.pathPlaceholder":"/Users/sen/uygulama","repos.remove":"Listeden çıkar","repos.removeBody":"Yalnızca liste kaydı silinir. Klasör zaten yok; diskte hiçbir şey değişmez.","repos.removeTitle":"{n} listeden çıkarılsın","repos.suggested":"Önceki koşulardan","role.assistant":"Ajan","role.user":"Sen","room.accounting":"Muhasebe","room.archive":"Arşiv","room.kitchen":"Mutfak","room.lab":"Test laboratuvarı","room.library":"Kütüphane","room.lobby":"Resepsiyon","room.lounge":"Dinlenme","room.mail":"Posta odası","room.manager":"Yönetici odası","room.meeting":"Toplantı katı","room.typeFree":"{type} · boş","room.typeNameAnalysis":"Analiz Odası","room.typeNameDev":"Geliştirme Odası","room.typeSession":"Oturum · pipeline dışı","room.typeWith":"{type} · {command}","room.office":"Açık ofis","room.restroom":"Tuvalet","room.server":"Sunucu odası","routines.deleteBody":"Rutin komutunu ve kaydını siler.","routines.deleteTitle":"/multi-agent:{n} silinsin","routines.empty":"Kayıtlı rutin yok.","routines.saveNote":"Yeni rutin kaydı konuşmaya ihtiyaç duyar, bu yüzden terminalde kalır.","run.analysis":"Analiz dokümanları","run.confluence":"Confluence sayfası: {n}","run.decision":"Karar: {d} (engelleyen {b}, önemli {i})","run.diff":"Diff","run.diffLine":"{files} dosya, +{added} -{removed}","run.failed":"{n} başarısız","run.findings":"Review bulguları","run.findingsCount":"{n} bulgu ({source})","run.fix":"Düzeltme:","run.noDiff":"Diff kaydı yok.","run.noFindings":"Review bulgusu kaydı yok.","run.noTests":"Test özeti kaydı yok.","run.passed":"{n} geçti","run.risk":"risk {v}","run.screenshots":"Ekran görüntüleri","run.tests":"Testler","run.unreadable":"(okunamadı)","run.verdict":"Review kararını gönder","run.verdictHead":"Review kararı","run.verdictOff":"Review bulgu kaydedince açılır.","run.verdictOn":"Bulgular yukarıda göründüğü için açık.","run.verdictRisk":"Bu makinedeki kendi {p} kimliğinle gönderilir. Yüksek risk.","run.verdictTitle":"{id} review kararı","services.contracts":"{n} API sözleşmesi","services.crash":"Crashlytics sorunu","services.crashLine":"{o} tekrar, {u} kullanıcı","services.crashPh":"Crashlytics sorun linki (console.firebase.google.com)","services.figmaNote":"Bu frame'i analiz etmek /multi-agent:analysis koşturur; aşağıdaki soru kutusunu ya da terminali kullan.","services.file":"Figma dosya anahtarı","services.filePh":"Figma dosya anahtarı","services.node":"Figma düğüm kimliği","services.nodePh":"Node id, örn. 12:34","services.note":"Confluence araması, sürüm bazlı Crashlytics eğilimi ve Figma dosya gezgini için istemci henüz yok; bir ajana sor.","services.page":"Confluence sayfası","services.pagePh":"Confluence sayfa id'si ya da https linki","services.read":"Oku","services.render":"Frame'i çiz","stack.alwaysOn":"hep açık","stack.change":"Değiştir","stack.apply":"Uygula","stack.changes":"Değişiklik: {v}","stack.copyRefresh":"Yenileme komutunu kopyala","stack.dropped":"Marketplace'te yok: {v}","stack.none":"Henüz stack açık değil","stack.unreadable":"Okunamadı","stack.noManifest":"Marketplace manifest'i okunamadı; eklenti listesi varsayılandır.","stack.noSkills":"Yerelde skill bulunamadı.","stack.pick":"Repo seç","stack.pickOne":"En az bir stack seç.","stack.plugins":"Eklentiler","stack.restart":"Eklentilerin yüklenmesi için o repoda Claude Code'u yeniden başlat. Copilot ve Codex kopyaları:","stack.stacks":"Stack'ler","stack.title":"{repo} için stack'ler","staff.busy":"çalışıyor","staff.free":"boşta","staff.idle":"iş bekliyor","staff.intro":"Ofisteki herkes ve ne yaptıkları. Birine tıkla, iş ver.","staff.officeTitle":"Ofis çalışanları","staff.poolTitle":"Ajan havuzu","staff.poolIntro":"Açık ofisteki masalarda beklerler; koşu başlayınca, fazlarından biri rollerini kullanıyorsa o koşunun masasına geçerler.","staff.jobs":"Aldığı işler","staff.noJobs":"Bu kişinin henüz işi yok.","staff.openChat":"Sohbetini aç","staff.openRoom":"{v} aç","staff.talkTo":"{v} ile konuş","staff.workingOn":"Şu an: {v}","state.done":"bitti","state.idle":"boşta","state.reading":"okuyor","state.spawning":"ajan başlatıyor","state.waiting":"bekliyor","state.writing":"yazıyor","station.archive":"Arşiv","station.autopilot":"Otopilot","station.cleanup":"Temizlik","station.commands":"Komutlar","station.job":"İş","station.lab":"Test lab","station.ledger":"Muhasebe","station.list":"Ekip listesi","station.new":"Geliştirme · yeni koşu","station.newAnalysis":"Analiz · yeni koşu","station.office":"Ofis","station.prs":"PR kutusu","station.routines":"Rutinler","station.run":"Koşu","station.services":"Servisler","station.stack":"Skill'ler","station.staff":"Ekip","station.tools":"Araçlar","station.work":"Görev panosu","stationHint.archive":"Her koşu, günlüğü ve post-mortem'i","stationHint.autopilot":"Otopilotu aç, kapat, kuyruğunu gör","stationHint.cleanup":"Koşuların geride bıraktıklarını temizle","stationHint.commands":"Bütün /multi-agent komutları","stationHint.job":"Bu kişinin aldığı işler","stationHint.lab":"Testler yazılır ve doğrulanır","stationHint.ledger":"Koşu, repo, model ve faza göre token ve tahmini maliyet","stationHint.list":"Aynı ofis, metin olarak","stationHint.new":"/multi-agent: görev ve repo seç","stationHint.newAnalysis":"/multi-agent:analysis: istek ve repo seç","stationHint.office":"Çalışan bütün ekipler","stationHint.prs":"Tüm GitHub hesapları ve Bitbucket'taki PR'lar","stationHint.routines":"Kaydettiğin /multi-agent rutinleri","stationHint.run":"Sonuçlar, bulgular, testler ve review kararı","stationHint.services":"Confluence, Crashlytics ve Figma okuma","stationHint.stack":"Repo başına stack ve eklentiler","stationHint.staff":"Ofisteki herkes; birine iş ver","stationHint.tools":"multi-agent-toolkit araçları, buradan çağrılır","stationHint.work":"Öncelik sırasıyla Jira ve GitHub işleri, olgunluk kontrolüyle","table.annexHint":"Koşunun ana odasına git","table.corridor":"{name} burada da çalışıyor · ana oda: {repo}","table.limited":"{host}: kısıtlı","table.noPhase":"Faz yok","phaseState.done":"bitti","phaseState.now":"sürüyor","phaseState.todo":"bekliyor","taskState.completed":"bitti","taskState.in_progress":"sürüyor","taskState.pending":"bekliyor","mcp.error":"hata","mcp.ok":"tamam","mcp.running":"sürüyor","seat.mcp":"Son MCP çağrıları","seat.tasks":"Görev listesi","table.finished":"Bitti: ekip toparlanıyor","table.now":"Şu an: {task}","table.ownerDoing":"{phase}: bu adımı orkestratör yürütüyor","table.phase":"Faz {n}/{last} {name}","table.session":"Oturum","table.unmatched":"eşlenemedi","table.waiting":"Seni bekliyor","tools.badJson":"Bir JSON alanı geçersiz.","tools.call":"Çağır","tools.confirmTitle":"{name} çağrılsın mı?","tools.error":"Araç hata bildirdi.","tools.notAllowlisted":"izin listesinde değil","tools.notCallable":"Panelden çağrılamaz: {v}","tools.notSet":"(boş)","tools.onePerLine":"Satır başına bir","tools.risk":"risk {v}","tools.running":"Çalışıyor","tools.search":"Araç ara","tools.terminalOnly":"yalnızca terminal","tools.version":"multi-agent-toolkit {v}, {n} araç. Her pipeline güncellemesiyle kendiliğinden ilerler.","unit.hour":"sa","unit.min":"dk","update.gone":"Ofis kapandı. Yeniden açmak için /multi-agent:office-on yaz.","update.page":"Ofisin yeni sürümü kuruldu.","update.reload":"Yenile","update.server":"Ofis güncellendi. Yeniden açmak için /multi-agent:office-on yaz.","work.blockers":"Engeller","work.description":"Açıklama","work.empty":"Atanmış iş yok.","work.noPriority":"öncelik yok","work.score":"puan {v}","work.start":"Bununla koşu başlat","work.unreadable":"okunamadı","work.warnings":"Uyarılar","writes.branch":"branch yazar","writes.branch-pr":"branch ve PR açar","writes.issue-comment":"issue'ya yorum yazar","writes.none":"yalnızca okur","writes.pr-comments":"PR'a yorum yazar","writesLong.branch":"Bu repoda yeni bir branch'e commit atar.","writesLong.branch-pr":"Yeni bir branch'e commit atar ve senin kimliğinle pull request açar.","writesLong.issue-comment":"Senin kimliğinle issue'ya yorum yazar.","writesLong.pr-comments":"Senin kimliğinle pull request'e inceleme yorumları yazar.","zoom.in":"Yakınlaştır","zoom.out":"Uzaklaştır","role.orchestrator":"Orkestratör","role.reviewer":"İnceleyici","role.security-auditor":"Güvenlik Denetçisi","role.ios-architect":"iOS Mimarı","role.android-architect":"Android Mimarı","role.backend-architect":"Backend Mimarı","role.explorer":"Kaşif","role.planner":"Planlamacı","role.clarifier":"Netleştirici","role.test-gap-analyst":"Test Açığı Analisti","role.reader":"Okuyucu","role.librarian":"Kütüphaneci","role.sysadmin":"Sistem Yöneticisi","role.mail-clerk":"Posta Memuru","role.janitor":"Temizlikçi","new.terminalOnly":"Verilecek kimsesi olmayan komutlar terminalden çalışır.","update.signedOut":"Bu sayfanın oturumu kapandı. Yeniden açmak için /multi-agent:office-on çalıştır.","cleanup.failed":"{n} öğe silinemedi:","job.doctor":"Sağlık kontrolü","job.route-status":"Model yönlendirme durumu","job.scan":"Skill güvenlik taraması","job.scenario-audit":"Senaryo denetimi","job.review-analysis":"Analiz dokümanı incelemesi","jobHint.doctor":"Kurulumu ve eriştiği servisleri kontrol eder; hiçbir şeyi değiştirmez.","jobHint.route-status":"Model yönlendirmesinin nerede açık olduğunu ve son çağrıların nereye gittiğini raporlar.","jobHint.scan":"Kurulu skill'leri güvensiz kalıplar için tarar; salt okuma.","jobHint.scenario-audit":"Bir senaryo dosyasını koda karşı denetler: hangi senaryolar karşılanıyor.","jobHint.review-analysis":"Bir Jira issue'sunun analiz dokümanını inceler; hiçbir şey gönderilmez.","hud.costOffline":"Maliyet: bağlı değil","hud.autopilotOffline":"Otopilot: bağlı değil","cleanup.promptsNote":"Talimat dosyalarını kısaltma terminal komutu olarak kalır: /multi-agent:prune-prompts.","prune.title":"Eski koşu logları","prune.intro":"Seçtiğin süreden eski görev log klasörleri. Denetim kaydı, metrikler ve sayaçlar hep kalır; devam ettirilebilecek koşulara ve son dakikalarda yazılan klasörlere dokunulmaz.","prune.age":"Şundan eski","prune.days":"{n} gün","prune.scan":"Ne silineceğini gör","prune.found":"{n} görev log klasörü, yaklaşık {mb} MB","prune.more":"ve {n} tane daha","prune.safe":"Sen onaylamadan hiçbir şey silinmez.","prune.done":"{n} görev log klasörü silindi, yaklaşık {mb} MB açıldı.","station.keys":"Anahtar dolabı","stationHint.keys":"Hangi kimlik bilgileri var ve çalışıyor mu; değerleri asla gösterilmez","keys.intro":"Pipeline'ın erişebildiği her servis, adıyla. Değerler kimlik deposundan hiç çıkmaz.","keys.probe":"Canlı kontrol et","keys.unavailable":"Kimlik envanteri bu makinede çalışamadı.","keys.unmapped":"{n} servis kurulmamış; /multi-agent:setup ekler.","keys.renew":"Yenilemek ya da eklemek için terminalde çalıştır:","keys.state.present":"var","keys.state.mapped-but-missing":"depoda yok","keys.state.unmapped":"kurulmamış","keys.reach.not-probed":"kontrol edilmedi","keys.reach.reachable":"çalışıyor","keys.reach.auth-rejected":"reddedildi, yenile","keys.reach.unreachable":"erişilemiyor (VPN?)","keys.reach.no-host-configured":"sunucu adresi tanımlı değil","keys.reach.well-formed":"biçimi doğru","keys.reach.not-probeable":"kontrol edilemiyor","keys.reach.malformed":"bozuk, yenile","keys.reach.no-credential":"kayıtlı değer yok","keys.reach.probe-error":"kontrol başarısız oldu","keys.reach.server-error":"sunucu hata döndü","keys.reach.tier-1-ready":"çalışıyor","keys.reach.tier-2-ready":"çalışıyor (yedek yol)","keys.reach.tier-1-no-grant":"çalışıyor, yetki gerekiyor","keys.reach.unknown":"bilinmeyen cevap","station.memory":"Hafıza","stationHint.memory":"Pipeline'ın repo başına öğrendikleri","memory.intro":"Repo başına: kod grafı, kalıcı öğrenimler, geçmiş review bulguları ve öğrenme döngüsünün tuttuğu oturum notları.","memory.none":"Henüz hiçbir reponun hafıza rafı yok.","memory.graphAge":"graf {n} günlük","memory.noGraph":"kod grafı yok","memory.counts":"{l} öğrenim · {f} geçmiş bulgu · {s} oturum notu","memory.emptyShelf":"Burada bir şey birikmiyor: bu repodaki koşular rapor fazına varmamış.","station.system":"Sistem","stationHint.system":"CPU, bellek, disk ve pipeline'ın kullandıkları","system.cpu":"CPU","system.load":"{c} çekirdekte yük {l}","system.memory":"Bellek","system.disk":"Boş disk","system.diskOf":"toplam {v}","system.pipeline":"Pipeline","system.sessions":"{n} oturum · {k} toolkit","system.rss":"{v} bellek · loglar {l} MB","system.warn.disk-low":"Diskin %10'undan azı boş: temizlikçi eski log ve worktree'leri silebilir.","system.warn.cpu-busy":"CPU dolu: paralel koşular yavaşlar.","room.orientation":"Oryantasyon","role.trainer":"Eğitmen","station.guide":"Rehber","stationHint.guide":"Ofis nasıl çalışır: odalar, bir işin akışı, burada neler yapılır, neler terminalde kalır","guide.intro":"Bu kattaki her oda pipeline'ın bir parçası. Kullanmak için odanın penceresine, iş vermek için bir kişiye tıkla.","guide.show":"Göster","guide.h.plan":"Kat planı","guide.h.flow":"Bir iş nasıl yürür","guide.h.give":"İş verme","guide.h.where":"Ofis mi, terminal mi","guide.h.security":"Güvenlik","guide.h.legend":"İşaretler","guide.room.lobby":"Jira ya da GitHub issue'sundan veya serbest metinden geliştirme koşusu ya da analiz başlatılır.","guide.room.orientation":"Bu oda: okuduğun rehber.","guide.room.office":"Ajanlar, bir koşu rollerini çağırana kadar masalarında bekler. Tek kişilik işler burada yapılır.","guide.room.kitchen":"Tek bir adım için çağrılan ajan burada biraz dinlenir, sonra masasına döner; koşunun ekibi masada kalır.","guide.room.accounting":"Koşu, repo, model ve faza göre token ve tahmini maliyet.","guide.room.restroom":"Temizlik: geçici dosyalar, biten worktree'ler, eski ref'ler, yarım kalan koşular ve eski koşu logları. Hiçbir şey silinmeden önce listesi gösterilir.","guide.room.manager":"Otopilot ve açma kapama düğmesi, kaydettiğin rutinler ve ayarlar: çıktı dili, Fable basamağı, model yönlendirmesi.","guide.room.lab":"Test işleri: bir repo için yazılan ve kontrol edilen testler.","guide.room.library":"Pipeline'ın bildikleri: repo başına stack'ler, tüm komutlar ve repo başına öğrendikleri.","guide.room.archive":"Geçmiş: biten koşular, logları ve postmortem'ler.","guide.room.mail":"Seni bekleyen ya da senin açtığın PR'lar: tüm GitHub hesapları ve Bitbucket.","guide.room.server":"Dış hatlar: toolkit MCP araçları, bağlı servisler, anahtar dolabı ve makinenin kaynakları.","guide.room.meeting":"Her repo için bir kat: /multi-agent için Geliştirme odası, /multi-agent:analysis için Analiz odası.","guide.flow.1":"Ajanlar açık ofiste masalarında bekler.","guide.flow.2":"Bir koşu bir role ihtiyaç duyunca o kişi, koşunun repo katındaki odasına yürür. Birden fazla repoya dokunan koşu, diğer repoların katında şube masası açar.","guide.flow.3":"Masa tabelasında faz, görevler bittikçe dolan çubuk ve sürmekte olan görev görünür. Bu liste terminaldeki görev widget'ıyla aynıdır.","guide.flow.4":"Tek bir adım için çağrılan ajan işi bitince mutfakta dinlenir, sonra masasına döner; ekip koşu bitene kadar masada oturur.","guide.flow.5":"Biten koşu sonucuyla birlikte iki dakika katta kalır, sonra ekip dağılır.","guide.pipeline.dev":"Geliştirme (/multi-agent): {v}","guide.pipeline.analysis":"Analiz (/multi-agent:analysis): {v}","guide.pipeline.mcp":"Toolkit MCP'yi doğrudan kullanan oturumun kendi masası olur. Bir araç çalışırken ajanı sunucu raflarına yürür.","guide.give.1":"Bir kişiye tıkla, aldığı işleri gör. Birini seç, formu doldur, onayla.","guide.give.2":"Ekip işi repo katındaki bir odada, tek kişilik iş bir masada yürür. Bir repoda aynı anda tek ekip koşusu olur.","guide.give.3":"Bir koşu sana soru sorunca masasının üstünde ve üst çubukta ! işareti çıkar.","guide.where.1":"İşler: model işi yapar ve rapor verir (review, analiz, test planı).","guide.where.2":"Pencereler: burada okuduğun bilgiler ve önce önizleme gösterip yalnızca onayınla çalışan işlemler (otopilot, stack, rutinler, temizlik, ayarlar).","guide.where.3":"Yalnızca terminal: etkileşimli ya da kurulumu değiştiren işler (setup, update, sync, uninstall). Komutlar penceresi her birinin sebebini yazar.","guide.security.1":"Sunucu yalnızca 127.0.0.1'de dinler ve /multi-agent:office-off ile durdurulana kadar çalışır.","guide.security.2":"Erişim token'ı bu sayfanın belleğinde durur. URL'ye, çereze ya da tarayıcı deposuna yazılmaz.","guide.security.3":"Makineyi değiştiren ya da iş başlatan işlemler önce önizleme gösterir, yalnızca onayınla çalışır. Her yazma kayda geçer.","guide.security.4":"Hiçbir kimlik bilgisi bu sayfaya gelmez. Anahtar dolabı yalnızca ad ve durum gösterir, yenileme terminalde /multi-agent:setup ile yapılır.","guide.security.5":"Review işleri sonucu burada raporlar, hiçbir yere yorum göndermez. Demo uydurma bir günü oynatır, hiçbir şeyi değiştirmez.","guide.legend.done":"Faz bitti","guide.legend.now":"Faz sürüyor; görevleri bittikçe dolar","guide.legend.pending":"Faz başlamadı","guide.legend.you":"Bir koşu seni bekliyor","guide.legend.ask":"Bir ajan soru sordu","guide.legend.spawn":"Bir ajan başlıyor","guide.legend.cloud":"Çalışan birinin üstündeki bulut ne yaptığını söyler; detay için tıkla.","role.developer":"Geliştirici","role.plan-critic":"Plan Eleştirmeni","role.dev-critic":"Geliştirme Eleştirmeni","role.committer":"Commit Sorumlusu","role.reporter":"Raportör","chat.askedInTerminal":"Bu oturum terminalinde sana soru soruyor. Cevabı orada ver; panel yalnızca koşunun panele bıraktığı soruları cevaplar.","table.freeText":"Serbest metin","table.prOpened":"PR #{n} açıldı","table.waitingFor.local-test":"Seni bekliyor: lokalde test edilsin mi?","table.waitingFor.user-channels-choice":"Seni bekliyor: rapor nereye gitsin","table.waitingFor.maturity":"Seni bekliyor: madde hazır değil","table.waitingFor.attended-reply":"Cevabını bekliyor","table.waitingFor.question":"Cevabını burada bekliyor","table.waitingFor.terminal":"Terminalde sana soruyor","event.guide":"Yeni misin? Rehber resepsiyonun yanındaki oryantasyon odasında.","table.crewDone":"{phase} işini bitirdi","table.headWaiting":"cevabını bekliyor","table.headQuiet":"oturumunda son zamanlarda hareket yok","table.crewNext":"{phase} sırasını bekliyor","run.report":"Rapor","run.channel.pr":"PR açıklaması","run.channel.jira":"Jira","run.channel.confluence":"Confluence","run.channel.wiki":"Wiki","run.channel.issue":"GitHub issue","run.channelState.posted":"gönderildi","run.channelState.skipped":"atlandı","run.channelState.failed":"başarısız","memory.buildGraph":"Kod grafını oluştur","memory.refreshGraph":"Kod grafını yenile","station.settings":"Ayarlar","stationHint.settings":"Çıktı dili, Fable basamağı ve model yönlendirmesi","settings.intro":"Her düğme, önizlemeden sonra ilgili terminal komutunun yaptığını yapar.","settings.language":"Çıktı dili","settings.languageHint":"Pipeline'ın sana yazdığı dil: raporlar, PR ve Jira yorumları, bu ofis.","settings.model":"Fable basamağı","settings.modelHint":"Koşular model merdiveninin tepesinde Fable kullanabilir mi (/multi-agent:model).","settings.route":"Model yönlendirmesi","settings.routeHint":"Çağrılar kayıtlı kurallara göre yönlendirilsin mi (/multi-agent:route-on ve route-off).","settings.value.language.en":"English","settings.value.language.tr":"Türkçe","settings.value.model.on":"Açık","settings.value.model.off":"Kapalı","settings.value.route.on":"Açık","settings.value.route.off":"Kapalı","settings.change":"{from} → {to}","settings.languageNote":"CLI seçicisindeki komut açıklamaları bir sonraki oturumda değişir; bu sayfayı yeni dilde görmek için /multi-agent:office-on komutunu yeniden çalıştır.","settings.terminalNote":"Yönlendirme kuralları, ücretsiz sağlayıcılar ve prompt dili terminalde kalır.","settings.freeChain":"Bu, daha önce kaydettiğin ücretsiz sağlayıcı zincirini de geri açar.","settings.freeChainTraining":"Bu, daha önce kaydettiğin ücretsiz sağlayıcı zincirini de geri açar; bu zincirde gönderilenle model eğitebilen sağlayıcılar da var."}};
1409
+ const ATLAS = ["ARCHIVE_BOXES","BIN","BOOKSHELF","CACTUS","CLOCK","COFFEE","COFFEE_MACHINE","COFFEE_TABLE","COUNTER_SINK","CUSHIONED_BENCH","CUSHIONED_CHAIR_BACK","CUSHIONED_CHAIR_FRONT","CUSHIONED_CHAIR_SIDE","DESK_FRONT","DESK_SIDE","DEVICE_STAND","DOUBLE_BOOKSHELF","FILING_CABINET","FRIDGE","HANGING_PLANT","LARGE_PAINTING","LARGE_PLANT","MAILBOX","MOP_BUCKET","PC_BACK","PC_FRONT_OFF","PC_FRONT_ON_1","PC_FRONT_ON_2","PC_FRONT_ON_3","PC_SIDE","PLANT","PLANT_2","POT","PRINTER","RECEPTION_DESK","SERVER_RACK","SERVER_RACK_2","SMALL_PAINTING","SMALL_PAINTING_2","SMALL_TABLE_FRONT","SMALL_TABLE_SIDE","SOFA_BACK","SOFA_FRONT","SOFA_SIDE","TABLE_FRONT","TOILET_STALL","VENDING","WASHBASIN","WATER_COOLER","WHITEBOARD","WOODEN_BENCH","WOODEN_CHAIR_BACK","WOODEN_CHAIR_FRONT","WOODEN_CHAIR_SIDE","char_0","char_1","char_12","char_13","char_14","char_15","char_16","char_17","char_18","char_19","char_2","char_20","char_21","char_22","char_23","char_24","char_25","char_26","char_27","char_28","char_29","char_3","char_30","char_4","char_5","floor_0","floor_1","floor_2","floor_3","floor_4","floor_5","floor_6","floor_7","floor_8","wall_0"];
1410
+ const STRINGS = {"en":{"app.title":"Office","archive.empty":"No runs recorded yet.","archive.log":"Log","archive.postmortem":"Ask for a post-mortem","ask.copy":"Copy command","ask.handOff":"Give a job to someone","ask.label":"Ask an agent","ask.note":"Starting an ask from the panel is not available yet, because launch input refuses links in free text. Copy the command and run it in a terminal.","ask.placeholder":"Ask an agent about this screen","autopilot.ceiling":"ceiling {v}","autopilot.switch":"Autopilot on or off","autopilot.onHint":"Watches the repositories below and takes up to {n} items at a time.","autopilot.offHint":"Pick the repositories to watch, then turn it on.","autopilot.noRepoHint":"Add a repository in the terminal first; then it can be turned on here.","autopilot.ofSlots":"of {n} at a time","autopilot.reposTitle":"Watched repositories","autopilot.pickOn":"Pick a new selection to change which repositories it watches.","autopilot.saveOnly":"Save the selection without starting","autopilot.saveTitle":"Save the autopilot selection","autopilot.stopNowBtn":"Stop now","autopilot.stopNowTitle":"Stop the autopilot now","autopilot.addInTerminal":"A new repository is added in the terminal, because it asks for its sources and label:","autopilot.configureOnly":"Save the selection only, schedule nothing","autopilot.credsBad":"Credentials: problems, nothing will be scheduled","autopilot.credsOk":"Credentials: readable","autopilot.drop":"Drop: {v}","autopilot.keep":"Keep: {v}","autopilot.noRepo":"No configured repository.","autopilot.off":"Autopilot off","autopilot.offDrain":"Work in flight finishes; nothing new is taken.","autopilot.offNow":"In-flight items are stopped and their runs marked abandoned.","autopilot.offTitle":"Turn the autopilot off","autopilot.on":"Autopilot on","autopilot.onTitle":"Turn the autopilot on","autopilot.pick":"Pick the repositories to watch.","autopilot.pickOne":"Select at least one repository.","autopilot.queued":"Queued","autopilot.running":"Running","autopilot.slots":"Slots","autopilot.state":"State","autopilot.stopNow":"Also stop what is in flight now","autopilot.today":"Today","autopilot.turnOff":"Turn off","autopilot.turnOn":"Turn on","autopilot.unknown":"Autopilot ?","back":"Back","bot.autopilot":"Autopilot","bot.doing":"Watching the queue","cancel":"Cancel","chat.answer":"Answer","chat.answerTitle":"Answer {id}","chat.answered":"Answered","chat.kill":"Kill","chat.killBody":"This stops the session and removes the worktree. The remote branch and logs are kept.","chat.killTitle":"Kill {id}","chat.noResult":"No result yet.","chat.noTranscript":"No transcript for this seat.","chat.nowIn":"now in phase {n}","chat.older":"Load older","chat.pickFirst":"Pick an option first.","chat.queued":"Queued","chat.queuedReplaced":"Queued (replaced the previous one)","chat.replaces":"Replaces the unread instruction:","chat.resume":"Resume","chat.resumeBody":"Returns the plan that resumes this run in the background.","chat.resumePlan":"Resume plan","chat.resumeTitle":"Resume {id}","chat.runGone":"This run is no longer on the floor; nothing can be sent to it from here.","chat.send":"Send: {v}","chat.sendBtn":"Send","chat.steer":"Steer","chat.steerLabel":"Steer instruction","chat.steerPlaceholder":"Instruction for the next phase (steer)","chat.steerTitle":"Steer {id}","chat.steerWhen":"Applied at the entry to the next phase","chat.toolResult":"Tool result","cleanup.done":"Removed {n} items, {kb} KB freed.","cleanup.found":"{n} items, {kb} KB in all.","cleanup.intro":"The janitor clears what runs leave behind: temporary files, finished worktrees, stale refs and abandoned runs. You see the list before anything goes.","cleanup.kind.abandoned":"abandoned runs","cleanup.kind.refs":"stale refs","cleanup.kind.tmp":"temporary files","cleanup.kind.worktrees":"finished worktrees","cleanup.safe":"Only these items are removed. A worktree with uncommitted work is never touched.","cleanup.scan":"What can be cleaned?","cleanup.title":"Clean up","close":"Close","chat.resumeIn":"Continue it in a terminal:","commands.openWindow":"Open its window","commands.terminalOnly.device":"Terminal: it needs a device or a simulator next to you.","commands.terminalOnly.interactive":"Terminal: it asks you questions as it goes.","commands.terminalOnly.machine":"Terminal: it changes this installation or the machine.","commands.terminalOnly.self":"Terminal: it starts or stops this panel itself.","commands.destructive":"destructive","confirm":"Confirm","delete":"Delete","demo.banner":"Demo office: scripted activity, not your machine's data. Writes are off.","demo.chat.assistant":"Reading the screen before touching it.","demo.chat.done":"Done.","demo.chat.user":"{role}, what are you on?","demo.chatNote":"Demo chat: sample messages.","demo.doing.commit":"Writing the commit and the PR body","demo.doing.coordinating":"Coordinating the team","demo.doing.critic":"Looking for why the plan fails","demo.doing.dev":"Writing LoginView.swift","demo.doing.devcritic":"Running the build and tests","demo.doing.explore":"Reading the module map","demo.doing.plan":"Writing the plan","demo.doing.evidence":"Reading the Figma frames","demo.doing.reader":"Summarising a large file","demo.doing.report":"Writing the run report","demo.doing.review":"Reading the pull request","demo.doing.security":"Checking secrets and storage","demo.doing.session":"Answering in a plain session","demo.doing.waiting":"Asking you to approve the triage","demo.noWrites":"Demo office: nothing is sent.","demo.optFix":"Fix the findings","demo.optShip":"Commit as is","demo.question":"Two important findings. Fix them before the commit?","demo.runNote":"Demo run: results are not read from the machine.","demo.start":"Demo","demo.stop":"Exit demo","demo.task.init.issue":"Read the issue","demo.task.init.maturity":"Check the issue is ready","demo.task.init.worktree":"Create the worktree","demo.task.plan.explore":"Explore the affected files","demo.task.plan.write":"Write the plan","demo.task.plan.critic":"Plan critic review","demo.task.dev.test":"Write the failing test","demo.task.dev.code":"Fix LoginView dark mode","demo.task.dev.build":"Build and run the tests","demo.task.dev.critic":"Dev critic check","demo.task.review.models":"Three reviewers read the diff","demo.task.review.security":"Security audit","demo.task.review.triage":"Triage the findings","demo.task.commit.commit":"Commit","demo.task.commit.pr":"Open the pull request","demo.task.report.write":"Write the report","demo.task.report.channels":"Post the summary","demo.task.a.intake":"Read the request","demo.task.a.figma":"Figma design context","demo.task.a.swagger":"Swagger endpoints","demo.task.a.confluence":"Confluence pages","demo.task.a.repo":"Repository conventions","demo.task.a.concepts":"Platform-free concepts","demo.task.a.platform":"Per-platform pass","demo.task.a.render":"Render the document","demo.task.a.review":"Review the document","demo.task.a.publish":"Publish to Confluence","demo.task.a.report":"Report","demo.titleA":"Dark mode on the login screen","demo.titleB":"Payment retry analysis","demo.windowOffline":"Not connected: this window fills in when the page is opened with /multi-agent:office-on.","done":"Done","empty.body":"Nobody is at work. When a /multi-agent run or a Claude Code session is active, its team takes a table here.","empty.demo":"Watch the demo office","empty.title":"The office is quiet","error.generic":"Something went wrong.","event.demo":"Demo office started","event.done":"{name} is complete","event.join":"{role} joined {name}","event.phase":"{name}: phase {n}/{last} started, {phase}","event.seat-done":"{role} finished on {name}","event.table-new":"{name} opened a table in {repo}","event.waiting":"{name} is waiting for you","fx.done":"Run complete","fx.phase":"Phase {n}: {name}","hud.agents":"{n} agents working · {runs} runs · {sessions} sessions","hud.cost":"{v} today","hud.nothingWaiting":"Nothing waits for you.","hud.waiting":"{n} waiting","img.hidden":"[image not shown]","job.analysis":"Write the analysis","job.autopilot-run":"Run it on autopilot","job.check":"Review and start","job.diff-explain":"Explain a review's findings","job.estimate":"Estimate a ticket","job.give":"Give the job","job.doctor":"Health check","job.route-status":"Model routing status","job.scan":"Skill security scan","job.scenario-audit":"Scenario audit","job.review-analysis":"Analysis document review","jobHint.doctor":"Checks the installation and the services it reaches; changes nothing.","jobHint.route-status":"Reports where model routing is on and where recent calls went.","jobHint.scan":"Scans the installed skills for unsafe patterns; read-only.","jobHint.scenario-audit":"Checks a scenario file against the code: which scenarios are covered.","jobHint.review-analysis":"Reviews the analysis document of a Jira issue; nothing is posted.","job.graph":"Code graph","job.ios-coding-standard":"iOS coding standard","job.notInstalled":"not installed","job.pipeline":"Run the pipeline","job.postmortem":"Post-mortem of a run","job.preview":"{role} starts this in {repo}:","job.research":"Research a ticket","job.review":"Review a pull request","job.review-issue":"Check a GitHub issue","job.review-jira":"Check a Jira ticket","job.security-review":"Security review","job.solo":"Solo: works at a desk","job.soloNote":"A solo job: one person works at a desk in the open office.","job.startTitle":"Start this job?","job.started":"{role} took the job","job.team":"Team: meets in a room","job.teamNote":"A team job: the team meets in a room of that repository. Another run live there makes it wait.","job.test-gen":"Write the missing tests","job.unattended":"It runs in the background under the unattended permission profile, without asking for permissions; you follow it on the floor and in its chat.","jobHint.analysis":"A feature spec from the ticket and its sources; no code.","jobHint.autopilot-run":"The whole pipeline without questions, up to an open PR.","jobHint.diff-explain":"Maps a run's review findings to the diff lines.","jobHint.estimate":"Time per role from closed work, P25 to P75.","jobHint.graph":"Builds or reports the repository's code graph, no model calls.","jobHint.ios-coding-standard":"Audits a module against the 99 rules and plans the fixes.","jobHint.pipeline":"The whole team: plan, develop, review, commit and report, stopping where you have to decide.","jobHint.postmortem":"What happened in a run, from its transcripts.","jobHint.research":"Closes a run's open gaps from tracker, docs and repo.","jobHint.review":"Three reviewers read the PR; the findings come back as a report, nothing is posted.","jobHint.review-issue":"Grades the issue's readiness and lists the gaps.","jobHint.review-jira":"Grades the ticket's readiness and lists the gaps.","jobHint.security-review":"A threat-model review of the branch: OWASP and CWE categories, CVSS scores.","jobHint.test-gen":"Finds what has no test that would catch it, writes the tests and runs them.","lab.note":"Device tests (simulator or emulator) need a device at hand and stay terminal commands: /multi-agent:test.","ledger.byModel":"By model","ledger.byPhase":"By phase","ledger.byRepo":"By repository","ledger.byRun":"By run","ledger.month":"This month","ledger.name":"Name","ledger.notMeasured":"Not measured: {v}","ledger.note":"Estimated at list price from cost-table.json, not an invoice.","ledger.outside":"Outside the pipeline","ledger.source":"Source","ledger.today":"Today","ledger.total":"Total","ledger.unpriced":"{n} unpriced","ledger.verified":"verified {d}","ledger.week":"This week","list.empty":"No agent activity in the recent window.","list.limited":"Limited table: this host writes no subagent detail.","list.noBranch":"branch unknown","list.phaseHistory":"Phase history","list.room":"Room: {repo}","list.runDetail":"Run detail","list.showOnFloor":"Show on the floor","list.team":"Team of {name}","list.unmatched":"Unmatched: more than one run could own this session.","live.closed":"closed","live.demo":"demo","live.demoOnly":"demo, not connected","live.live":"live","live.notConnected":"not connected","live.offline":"offline","live.paused":"paused","live.polling":"polling","loading":"Loading","new.command":"Command: {c}","new.copyCmd":"Copy terminal command","new.devRun":"Full development run: analysis, plan, development, review, commit","new.enterTask":"Enter the task first.","new.launch":"Prepare background launch","new.launchBody":"Starts an unattended run in {repo}.","new.launchBtn":"Launch","new.launchTitle":"Launch","new.noRepo":"No repository yet. Add one below.","new.planBody":"The server wrote the request; start this command:","new.planTitle":"Launch plan","new.question":"Question {i} of {n} ({id}). Skip to let the run ask it.","new.repo":"Repository","new.request":"Launch request","new.requestNote":"The server validates and writes the request and returns the command that starts it; it never starts a session itself.","new.review":"Review","new.freeTextHint":"A Jira key, a GitHub issue link or repo#N, or one sentence describing the task.","new.workFilter":"Filter the list","new.workList":"Waiting for work: Jira and GitHub issues","new.search":"Search commands","new.skip":"Skip","new.step.command":"Command","new.step.launch":"Launch","new.step.questions":"Questions","new.step.task":"Task","new.summary":"Work item: {input}. Repository: {repo}.","new.taskPlaceholder":"Jira key, GitHub issue URL, repo#N, #N or one line of text","next":"Next","noAccess.body":"This page needs a fresh link: run /multi-agent:office-on in a terminal. A link works once, within 10 seconds, and a reload needs a new one.","noAccess.title":"No access","none":"None","notMeasured":"not measured","off":"off","on":"on","param.branch":"Branch (optional)","param.enum":"Choice","param.github-issue":"GitHub issue","param.jira-key":"Jira key","param.pickRun":"Pick a run","param.pull-request":"Pull request","param.repo-path":"Folder in the repository","param.scenario-audit.scenarios":"Scenario list (a CSV file in the repository)","placeholder.scenario-audit.scenarios":"docs/scenarios.csv","param.run-id":"Run","param.work-item":"Work item (Jira key, issue link or a sentence)","perm.count":"{n} host permission request(s)","perm.notForwarded":"Host permission prompts are not forwarded yet.","placeholder.branch":"feature/login","placeholder.github-issue":"https://github.com/org/repo/issues/7 or repo#7","placeholder.jira-key":"PROJ-123","placeholder.pull-request":"https://github.com/org/repo/pull/12 or repo#12","placeholder.repo-path":"Sources/Feature","placeholder.run-id":"PROJ-123","placeholder.work-item":"PROJ-123, repo#45 or a short task","prs.ask":"Ask about it","prs.copyReview":"Copy review command","prs.empty":"No open pull requests.","prs.notImplemented":"not implemented","prs.note":"A review run's findings and the verdict button are in that run's detail.","prs.reach":"{n} files depend on the {changed} it changes","prs.reachUnmeasured":"Reach not measured: {reason}","prs.review":"Have it reviewed","repos.absolute":"Write the full path, starting with /","repos.add":"Add","repos.addBody":"{n} becomes a repository runs can start in. Nothing else changes.","repos.addHint":"Add this checkout so runs can start in it","repos.addTitle":"Add {n}","repos.byPath":"Add by path","repos.empty":"No repository yet. Add one below: a checkout an earlier run worked in, or a path.","repos.missing":"Gone from disk","repos.none":"No repository yet","repos.path":"Repository path","repos.pathNote":"The folder must be a git checkout. The home folder and / are refused.","repos.pathPlaceholder":"/Users/you/my-app","repos.remove":"Remove from list","repos.removeBody":"Only the list entry goes. The folder is already gone; nothing on disk changes.","repos.removeTitle":"Remove {n} from the list","repos.suggested":"From earlier runs","role.assistant":"Agent","role.user":"You","room.accounting":"Accounting","room.archive":"Archive","room.kitchen":"Kitchen","room.lab":"Test lab","room.library":"Library","room.lobby":"Reception","room.lounge":"Lounge","room.mail":"Mail room","room.manager":"Manager's office","room.meeting":"Meeting floor","room.typeFree":"{type} · free","room.typeNameAnalysis":"Analysis room","room.typeNameDev":"Development room","room.typeSession":"Session · outside a pipeline","room.typeWith":"{type} · {command}","room.office":"Open office","room.restroom":"Restroom","room.server":"Server room","routines.deleteBody":"Deletes the routine command and its registry entry.","routines.deleteTitle":"Delete /multi-agent:{n}","routines.empty":"No saved routines.","routines.saveNote":"Saving a new routine needs the conversation, so it stays in the terminal.","run.analysis":"Analysis documents","run.confluence":"Confluence pages: {n}","run.decision":"Decision: {d} (blocking {b}, important {i})","run.diff":"Diff","run.diffLine":"{files} files, +{added} -{removed}","run.failed":"{n} failed","run.findings":"Review findings","run.findingsCount":"{n} findings ({source})","run.fix":"Fix:","run.noDiff":"No diff recorded.","run.noFindings":"No review findings recorded.","run.noTests":"No test summary recorded.","run.passed":"{n} passed","run.risk":"risk {v}","run.screenshots":"Screenshots","run.tests":"Tests","run.unreadable":"(not readable)","run.verdict":"Post review verdict","run.verdictHead":"Review verdict","run.verdictOff":"Available once the review has recorded findings.","run.verdictOn":"Enabled because the findings are shown above.","run.verdictRisk":"Posted with your own {p} credential on this machine. High risk.","run.verdictTitle":"Review verdict for {id}","services.contracts":"{n} API contracts","services.crash":"Crashlytics issue","services.crashLine":"{o} occurrences, {u} users","services.crashPh":"Crashlytics issue URL (console.firebase.google.com)","services.figmaNote":"Analysing this frame runs /multi-agent:analysis; use the ask box below or a terminal.","services.file":"Figma file key","services.filePh":"Figma file key","services.node":"Figma node id","services.nodePh":"Node id, e.g. 12:34","services.note":"Search across Confluence, a per-version Crashlytics trend and a Figma file browser have no client yet; ask an agent instead.","services.page":"Confluence page","services.pagePh":"Confluence page id or https URL","services.read":"Read","services.render":"Render frame","stack.alwaysOn":"always on","stack.change":"Change","stack.apply":"Apply","stack.changes":"Changes: {v}","stack.copyRefresh":"Copy refresh command","stack.dropped":"Not in the marketplace: {v}","stack.none":"No stack on yet","stack.unreadable":"Could not be read","stack.noManifest":"The marketplace manifest could not be read; the plugin list is the convention.","stack.noSkills":"No skills found locally.","stack.pick":"Pick a repository","stack.pickOne":"Select at least one stack.","stack.plugins":"Plugins","stack.restart":"Restart Claude Code in that repository to load the plugins. Copilot and Codex copies:","stack.stacks":"Stacks","stack.title":"Set stacks for {repo}","staff.busy":"at work","staff.free":"free","staff.idle":"waiting for work","staff.intro":"Everyone in the office and what they are doing. Pick someone to give them a job.","staff.officeTitle":"Office staff","staff.poolTitle":"Agent pool","staff.poolIntro":"They wait at the open office's desks and take their seat at a run's table when the run starts, if one of its phases uses their role.","staff.jobs":"Jobs they take","staff.noJobs":"No jobs for this person yet.","staff.openChat":"Open their chat","staff.openRoom":"Open {v}","staff.talkTo":"Talk to {v}","staff.workingOn":"Working on: {v}","card.room":"Room: {v}","card.agent":"Agent: {v}","card.tier.model":"Model: {v}","card.tier.fableOff":"Model: Opus (Fable is off)","card.tier.session":"Model: the main session's model","card.tier.script":"No model: runs a script","card.tier.none":"No model: shows the guide","card.now":"Now","card.free":"Free, at their desk","card.recent":"Recent work","card.noRecent":"No work on the floor yet.","card.state.now":"working","card.state.next":"waiting for their turn","card.state.done":"done","building.intro":"Every room of the building, who works there and what is going on. Pick a person to open their card.","building.nobody":"No one is stationed here.","building.tables":"{v} tables at work","building.people":"People","state.done":"done","state.idle":"idle","state.reading":"reading","state.spawning":"starting an agent","state.waiting":"waiting","state.writing":"writing","station.archive":"Archive","station.autopilot":"Autopilot","station.cleanup":"Cleanup","station.commands":"Commands","station.job":"Job","station.lab":"Test lab","station.ledger":"Ledger","station.list":"Team list","station.new":"Development · new run","station.newAnalysis":"Analysis · new run","station.office":"Office","station.prs":"PR mailbox","station.routines":"Routines","station.run":"Run","station.services":"Services","station.stack":"Skills","station.staff":"Team","station.tools":"Toolkit","station.work":"Quest board","stationHint.archive":"Every run, its log and post-mortem","stationHint.autopilot":"Turn the autopilot on or off and see its queue","stationHint.cleanup":"Clear what runs leave behind","stationHint.commands":"Every /multi-agent command","stationHint.job":"The jobs this person takes","stationHint.lab":"Tests written and checked","stationHint.ledger":"Tokens and estimated cost by run, repository, model and phase","stationHint.list":"The same office as text","stationHint.new":"/multi-agent: a task and a repository","stationHint.newAnalysis":"/multi-agent:analysis: a request and a repository","stationHint.office":"The floor with every team at work","stationHint.prs":"Pull requests on every GitHub account and Bitbucket","stationHint.routines":"Your saved /multi-agent routines","stationHint.run":"Results, findings, tests and the review verdict","stationHint.services":"Confluence, Crashlytics and Figma reads","stationHint.stack":"Stacks and plugins per repository","stationHint.staff":"Everyone in the office; give someone a job","stationHint.tools":"multi-agent-toolkit tools, called from here","stationHint.work":"Jira and GitHub issues by priority, with the maturity check","table.annexHint":"Go to the run's main room","table.corridor":"{name} works here too · main room: {repo}","table.limited":"{host}: limited","table.noPhase":"No phase","phaseState.done":"done","phaseState.now":"in progress","phaseState.todo":"waiting","taskState.completed":"done","taskState.in_progress":"in progress","taskState.pending":"waiting","mcp.error":"failed","mcp.ok":"done","mcp.running":"running","seat.mcp":"Recent MCP calls","seat.tasks":"Its task list","table.finished":"Finished: the team is wrapping up","table.now":"Now: {task}","table.ownerDoing":"{phase}: the orchestrator runs this step","table.phase":"Phase {n}/{last} {name}","table.session":"Session","table.unmatched":"unmatched","table.waiting":"Waiting for you","tools.badJson":"A JSON field is not valid JSON.","tools.call":"Call","tools.confirmTitle":"Call {name}?","tools.error":"The tool reported an error.","tools.notAllowlisted":"not on the allowlist","tools.notCallable":"Not callable from the panel: {v}","tools.notSet":"(not set)","tools.onePerLine":"One per line","tools.risk":"risk {v}","tools.running":"Running","tools.search":"Search tools","tools.terminalOnly":"terminal only","tools.version":"multi-agent-toolkit {v}, {n} tools. Updates with each pipeline update.","unit.hour":"h","unit.min":"m","update.gone":"Office is closed. Run /multi-agent:office-on to open it again.","update.page":"A newer Office is installed.","update.reload":"Reload","update.server":"Office was updated. Run /multi-agent:office-on to reopen it.","work.blockers":"Blockers","work.description":"Description","work.empty":"Nothing assigned.","work.noPriority":"no priority","work.score":"score {v}","work.start":"Start a run with this","work.unreadable":"could not be read","work.warnings":"Warnings","writes.branch":"writes a branch","writes.branch-pr":"opens a branch and PR","writes.issue-comment":"comments on the issue","writes.none":"reads only","writes.pr-comments":"comments on the PR","writesLong.branch":"It commits to a new branch in this repository.","writesLong.branch-pr":"It commits to a new branch and opens a pull request under your identity.","writesLong.issue-comment":"It posts a comment on the issue under your identity.","writesLong.pr-comments":"It posts review comments on the pull request under your identity.","zoom.in":"Zoom in","zoom.out":"Zoom out","role.orchestrator":"Orchestrator","role.reviewer":"Reviewer","role.security-auditor":"Security Auditor","role.ios-architect":"iOS Architect","role.android-architect":"Android Architect","role.backend-architect":"Backend Architect","role.explorer":"Explorer","role.planner":"Planner","role.clarifier":"Clarifier","role.test-gap-analyst":"Test Gap Analyst","role.reader":"Reader","role.librarian":"Librarian","role.sysadmin":"Sysadmin","role.mail-clerk":"Mail Clerk","role.janitor":"Janitor","new.terminalOnly":"A command with no one to hand it to runs from the terminal.","update.signedOut":"This page is signed out. Run /multi-agent:office-on to open it again.","cleanup.failed":"{n} item(s) could not be removed:","hud.costOffline":"Cost: not connected","hud.autopilotOffline":"Autopilot: not connected","cleanup.promptsNote":"Trimming instruction files stays a terminal command: /multi-agent:prune-prompts.","prune.title":"Old run logs","prune.intro":"Task log folders older than the age you pick. The audit trail, metrics and counters always stay; a run that can still be resumed and a folder written in the last minutes are spared.","prune.age":"Older than","prune.days":"{n} days","prune.scan":"See what would go","prune.found":"{n} task log folders, about {mb} MB","prune.more":"and {n} more","prune.safe":"Nothing is removed until you confirm.","prune.done":"Removed {n} task log folders, about {mb} MB freed.","station.keys":"Key cabinet","stationHint.keys":"Which credentials are held and whether they work; never a value","keys.intro":"Each service the pipeline can reach, by name. Values never leave the credential store.","keys.probe":"Check them live","keys.unavailable":"The credential inventory could not run on this machine.","keys.unmapped":"{n} services are not set up; /multi-agent:setup adds them.","keys.renew":"To renew or add one, run in a terminal:","keys.state.present":"held","keys.state.mapped-but-missing":"missing from the store","keys.state.unmapped":"not set up","keys.reach.not-probed":"not checked","keys.reach.reachable":"works","keys.reach.auth-rejected":"refused, renew it","keys.reach.unreachable":"unreachable (VPN?)","keys.reach.no-host-configured":"no host set","keys.reach.well-formed":"well formed","keys.reach.not-probeable":"cannot be checked","keys.reach.malformed":"malformed, renew it","keys.reach.no-credential":"nothing stored","keys.reach.probe-error":"the check failed","keys.reach.server-error":"the server answered with an error","keys.reach.tier-1-ready":"works","keys.reach.tier-2-ready":"works (fallback)","keys.reach.tier-1-no-grant":"works, needs a grant","keys.reach.unknown":"unknown answer","station.memory":"Memory","stationHint.memory":"What the pipeline learned per repository","memory.intro":"Per repository: the code graph, durable learnings, past review findings and session notes the learning loop holds.","memory.none":"No repository has a memory shelf yet.","memory.graphAge":"graph {n} days old","memory.noGraph":"no code graph","memory.counts":"{l} learnings · {f} past findings · {s} session notes","memory.emptyShelf":"Nothing is accumulating here: runs on this repository have not reached the report phase.","station.system":"System","stationHint.system":"CPU, memory, disk and what the pipeline uses","system.cpu":"CPU","system.load":"load {l} on {c} cores","system.memory":"Memory","system.disk":"Free disk","system.diskOf":"of {v}","system.pipeline":"Pipeline","system.sessions":"{n} sessions · {k} toolkit","system.rss":"{v} memory · logs {l} MB","system.warn.disk-low":"Under 10% of the disk is free: the janitor can clear old logs and worktrees.","system.warn.cpu-busy":"The CPU is saturated: parallel runs will be slow.","room.orientation":"Orientation","role.trainer":"Trainer","station.guide":"Guide","stationHint.guide":"How the office works: the rooms, how a job runs, what you can do here and what stays in the terminal","station.building":"Building","stationHint.building":"The building directory: every room, the people in it and what they are doing now","guide.intro":"Every room on this floor is a part of the pipeline. Click a room's window to use it, or a person to hand them work.","guide.show":"Show","guide.h.plan":"Floor plan","guide.h.flow":"How a job runs","guide.h.give":"Giving a job","guide.h.where":"Office or terminal","guide.h.security":"Security","guide.h.legend":"Signs","guide.room.lobby":"Start a development run or an analysis from a Jira or GitHub issue, or from free text.","guide.room.orientation":"This room: the guide you are reading.","guide.room.office":"Agents wait at their desks until a run calls their role. Solo jobs are done here.","guide.room.kitchen":"An agent called in for one step rests here for a moment, then goes back to their desk; the run's crew stays at the table.","guide.room.accounting":"Tokens and estimated cost per run, repository, model and phase.","guide.room.restroom":"Cleanup: temporary files, finished worktrees, stale refs, abandoned runs and old run logs. You see the list before anything goes.","guide.room.manager":"Autopilot and its switch, your saved routines, and the settings: output language, the fable rung, model routing.","guide.room.lab":"Test jobs: tests written for a repository and checked.","guide.room.library":"What the pipeline knows: stacks per repository, every command and what it has learned per repository.","guide.room.archive":"History: finished runs, their logs and postmortems.","guide.room.mail":"Pull requests waiting for you or opened by you, from every GitHub account and Bitbucket.","guide.room.server":"Outside lines: toolkit MCP tools, connected services, the key cabinet and the machine's resources.","guide.room.meeting":"One floor per repository: a Development room for /multi-agent, an Analysis room for /multi-agent:analysis.","guide.flow.1":"Agents wait at their desks in the open office.","guide.flow.2":"When a run needs a role, that person walks to the run's room on its repository's floor. A run that touches more repositories opens an annex desk on theirs.","guide.flow.3":"The table sign shows the phase, a bar that fills as its tasks finish and the task in progress: the same list as the terminal's task widget.","guide.flow.4":"An agent called in for one step rests in the kitchen when done, then returns to their desk; the crew stays seated until the run ends.","guide.flow.5":"A finished run stays on the floor for two minutes with its result, then the team leaves.","guide.pipeline.dev":"Development (/multi-agent): {v}","guide.pipeline.analysis":"Analysis (/multi-agent:analysis): {v}","guide.pipeline.mcp":"A session that uses the toolkit MCP directly gets its own desk, and its agent walks to the server racks while a tool runs.","guide.give.1":"Click a person to see the jobs they take; pick one, fill in the form and confirm.","guide.give.2":"A team job runs in a room on its repository's floor, a solo job at a desk. One team run per repository at a time.","guide.give.3":"When a run asks you something, a ! appears over its table and in the top bar.","guide.where.1":"Jobs: the model does the work and reports (reviews, analyses, test plans).","guide.where.2":"Windows: what you read here, and actions that show a preview and run only on your confirmation (autopilot, stack, routines, cleanup, settings).","guide.where.3":"Terminal only: work that is interactive or changes the installation (setup, update, sync, uninstall). The commands window says why for each one.","guide.security.1":"The server listens on 127.0.0.1 only and runs until /multi-agent:office-off stops it.","guide.security.2":"The access token is held in this page's memory, never in a URL, a cookie or browser storage.","guide.security.3":"Actions that change the machine or start work show a preview first and run only on your confirmation; every write is recorded.","guide.security.4":"No credential reaches this page: the key cabinet shows names and states, and renewal happens in the terminal with /multi-agent:setup.","guide.security.5":"Review jobs report here and post nothing; the demo plays a made-up day and changes nothing.","guide.legend.done":"Phase finished","guide.legend.now":"Phase in progress; it fills as its tasks finish","guide.legend.pending":"Phase not started","guide.legend.you":"A run is waiting for you","guide.legend.ask":"An agent asked a question","guide.legend.spawn":"An agent is starting","guide.legend.cloud":"A cloud over someone at work says what they are doing; click it for the detail.","role.developer":"Developer","role.plan-critic":"Plan Critic","role.dev-critic":"Dev Critic","role.committer":"Committer","role.reporter":"Reporter","chat.askedInTerminal":"This session is asking you a question in its terminal. Answer it there; the panel answers only questions a run leaves for it.","table.freeText":"Free text","table.prOpened":"PR #{n} opened","table.waitingFor.local-test":"Waiting for you: test it locally?","table.waitingFor.user-channels-choice":"Waiting for you: where to report","table.waitingFor.maturity":"Waiting for you: the issue is not ready","table.waitingFor.attended-reply":"Waiting for your reply","table.waitingFor.question":"Waiting for your answer here","table.waitingFor.terminal":"Asking you in the terminal","event.guide":"New here? The guide is in the orientation room, next to reception.","table.crewDone":"done with {phase}","table.headWaiting":"waiting for your answer","table.headQuiet":"no recent activity in its session","table.crewNext":"waiting for {phase}","run.report":"Report","run.channel.pr":"PR description","run.channel.jira":"Jira","run.channel.confluence":"Confluence","run.channel.wiki":"Wiki","run.channel.issue":"GitHub issue","run.channelState.posted":"posted","run.channelState.skipped":"skipped","run.channelState.failed":"failed","memory.buildGraph":"Build the code graph","memory.refreshGraph":"Refresh the code graph","station.settings":"Settings","stationHint.settings":"Output language, the fable rung and model routing","settings.intro":"Each switch runs what its terminal command runs, after a preview.","settings.language":"Output language","settings.languageHint":"The language the pipeline writes to you in: reports, PR and Jira comments, this office.","settings.model":"Fable rung","settings.modelHint":"Whether runs may use Fable at the top of the model ladder (/multi-agent:model).","settings.route":"Model routing","settings.routeHint":"Whether calls are routed by the saved rules (/multi-agent:route-on and route-off).","settings.value.language.en":"English","settings.value.language.tr":"Türkçe","settings.value.model.on":"On","settings.value.model.off":"Off","settings.value.route.on":"On","settings.value.route.off":"Off","settings.change":"{from} → {to}","settings.languageNote":"Command descriptions in the CLI picker change on the next session start; run /multi-agent:office-on again to see this page in the new language.","settings.terminalNote":"Routing rules, free providers and prompt language stay in the terminal.","settings.freeChain":"This also brings back the free provider chain you saved earlier.","settings.freeChainTraining":"This also brings back the free provider chain you saved earlier, including providers that may train on what they are sent."},"tr":{"app.title":"Ofis","archive.empty":"Henüz kayıtlı koşu yok.","archive.log":"Günlük","archive.postmortem":"Post-mortem iste","ask.copy":"Komutu kopyala","ask.handOff":"Birine iş ver","ask.label":"Ajana sor","ask.note":"Panelden soru başlatmak henüz yok, çünkü serbest metindeki linkleri başlatma girdisi kabul etmiyor. Komutu kopyala, terminalde çalıştır.","ask.placeholder":"Bu ekranla ilgili ajana sor","autopilot.ceiling":"tavan {v}","autopilot.switch":"Otopilotu aç ya da kapat","autopilot.onHint":"Aşağıdaki repoları izliyor, aynı anda en fazla {n} iş alıyor.","autopilot.offHint":"İzlenecek repoları seç, sonra aç.","autopilot.noRepoHint":"Önce terminalden bir repo ekle; sonra buradan açılabilir.","autopilot.ofSlots":"en fazla {n} aynı anda","autopilot.reposTitle":"İzlenen repolar","autopilot.pickOn":"İzlenecek repoları değiştirmek için yeni bir seçim yap.","autopilot.saveOnly":"Seçimi kaydet, başlatma","autopilot.saveTitle":"Otopilot seçimini kaydet","autopilot.stopNowBtn":"Hemen durdur","autopilot.stopNowTitle":"Otopilotu hemen durdur","autopilot.addInTerminal":"Yeni repo terminalden eklenir, çünkü kaynaklarını ve etiketini sorar:","autopilot.configureOnly":"Yalnızca seçimi kaydet, iş planlama","autopilot.credsBad":"Kimlik bilgileri sorunlu, iş planlanmayacak","autopilot.credsOk":"Kimlik bilgileri okunuyor","autopilot.drop":"Çıkar: {v}","autopilot.keep":"Kalsın: {v}","autopilot.noRepo":"Yapılandırılmış repo yok.","autopilot.off":"Otopilot kapalı","autopilot.offDrain":"Süren iş biter, yeni iş alınmaz.","autopilot.offNow":"Süren işler durdurulur, koşuları yarıda bırakıldı sayılır.","autopilot.offTitle":"Otopilotu kapat","autopilot.on":"Otopilot açık","autopilot.onTitle":"Otopilotu aç","autopilot.pick":"İzlenecek repoları seç.","autopilot.pickOne":"En az bir repo seç.","autopilot.queued":"Kuyrukta","autopilot.running":"Çalışıyor","autopilot.slots":"Slot","autopilot.state":"Durum","autopilot.stopNow":"Süren işleri de şimdi durdur","autopilot.today":"Bugün","autopilot.turnOff":"Kapat","autopilot.turnOn":"Aç","autopilot.unknown":"Otopilot ?","back":"Geri","bot.autopilot":"Otopilot","bot.doing":"Kuyruğu izliyor","cancel":"Vazgeç","chat.answer":"Cevapla","chat.answerTitle":"{id} cevabı","chat.answered":"Cevaplandı","chat.kill":"Öldür","chat.killBody":"Oturum durur, worktree silinir. Uzak branch ve loglar kalır.","chat.killTitle":"{id} koşusunu öldür","chat.noResult":"Henüz sonuç yok.","chat.noTranscript":"Bu koltuğun kaydı yok.","chat.nowIn":"şu an faz {n}","chat.older":"Eskileri yükle","chat.pickFirst":"Önce bir seçenek seç.","chat.queued":"Sıraya alındı","chat.queuedReplaced":"Sıraya alındı (öncekinin yerine)","chat.replaces":"Okunmamış talimatın yerine geçer:","chat.resume":"Devam ettir","chat.resumeBody":"Bu koşuyu arka planda sürdürecek planı döndürür.","chat.resumePlan":"Devam planı","chat.resumeTitle":"{id} koşusunu sürdür","chat.runGone":"Bu koşu artık ofiste değil; buradan ona bir şey gönderilemez.","chat.send":"Gönder: {v}","chat.sendBtn":"Gönder","chat.steer":"Yönlendir","chat.steerLabel":"Yönlendirme talimatı","chat.steerPlaceholder":"Sonraki faz için talimat (steer)","chat.steerTitle":"{id} koşusunu yönlendir","chat.steerWhen":"Sonraki fazın girişinde uygulanır","chat.toolResult":"Araç sonucu","cleanup.done":"{n} öğe silindi, {kb} KB boşaldı.","cleanup.found":"{n} öğe, toplam {kb} KB.","cleanup.intro":"Temizlikçi koşuların geride bıraktıklarını toplar: geçici dosyalar, biten worktree'ler, eski ref'ler ve terk edilmiş koşular. Bir şey silinmeden önce listeyi görürsün.","cleanup.kind.abandoned":"terk edilmiş koşular","cleanup.kind.refs":"eski ref'ler","cleanup.kind.tmp":"geçici dosyalar","cleanup.kind.worktrees":"biten worktree'ler","cleanup.safe":"Yalnızca bu öğeler silinir. Commit'lenmemiş işi olan bir worktree'ye asla dokunulmaz.","cleanup.scan":"Neler temizlenebilir?","cleanup.title":"Temizlik","close":"Kapat","chat.resumeIn":"Terminalde sürdürmek için:","commands.openWindow":"Penceresini aç","commands.terminalOnly.device":"Terminal: yanında bir cihaz ya da simülatör ister.","commands.terminalOnly.interactive":"Terminal: çalışırken sana soru sorar.","commands.terminalOnly.machine":"Terminal: bu kurulumu ya da makineyi değiştirir.","commands.terminalOnly.self":"Terminal: bu panelin kendisini açar ya da kapatır.","commands.destructive":"yıkıcı","confirm":"Onayla","delete":"Sil","demo.banner":"Demo ofis: senaryolu hareket, makinendeki veri değil. Yazma kapalı.","demo.chat.assistant":"Dokunmadan önce ekranı okuyorum.","demo.chat.done":"Bitti.","demo.chat.user":"{role}, ne üzerindesin?","demo.chatNote":"Demo sohbet: örnek mesajlar.","demo.doing.commit":"Commit ve PR metnini yazıyor","demo.doing.coordinating":"Ekibi yönetiyor","demo.doing.critic":"Planın neden çökeceğini arıyor","demo.doing.dev":"LoginView.swift yazıyor","demo.doing.devcritic":"Build ve testleri koşuyor","demo.doing.explore":"Modül haritasını okuyor","demo.doing.plan":"Planı yazıyor","demo.doing.evidence":"Figma çerçevelerini okuyor","demo.doing.reader":"Büyük bir dosyayı özetliyor","demo.doing.report":"Koşu raporunu yazıyor","demo.doing.review":"Pull request'ı okuyor","demo.doing.security":"Sırları ve saklamayı kontrol ediyor","demo.doing.session":"Düz bir oturumda cevap veriyor","demo.doing.waiting":"Triyaj onayını soruyor","demo.noWrites":"Demo ofis: hiçbir şey gönderilmez.","demo.optFix":"Bulguları düzelt","demo.optShip":"Olduğu gibi commit et","demo.question":"İki önemli bulgu var. Commit'ten önce düzeltilsin mi?","demo.runNote":"Demo koşu: sonuçlar makineden okunmaz.","demo.start":"Demo","demo.stop":"Demodan çık","demo.task.init.issue":"Issue'yu oku","demo.task.init.maturity":"Issue'nun hazır olduğunu kontrol et","demo.task.init.worktree":"Worktree aç","demo.task.plan.explore":"Etkilenen dosyaları tara","demo.task.plan.write":"Planı yaz","demo.task.plan.critic":"Plan eleştirmeni incelemesi","demo.task.dev.test":"Önce başarısız olan testi yaz","demo.task.dev.code":"LoginView'un karanlık modunu düzelt","demo.task.dev.build":"Derle ve testleri koş","demo.task.dev.critic":"Geliştirme eleştirmeni kontrolü","demo.task.review.models":"Üç inceleyici diff'i okuyor","demo.task.review.security":"Güvenlik denetimi","demo.task.review.triage":"Bulguları ayıkla","demo.task.commit.commit":"Commit","demo.task.commit.pr":"Pull request aç","demo.task.report.write":"Raporu yaz","demo.task.report.channels":"Özeti paylaş","demo.task.a.intake":"İsteği oku","demo.task.a.figma":"Figma tasarım bağlamı","demo.task.a.swagger":"Swagger uç noktaları","demo.task.a.confluence":"Confluence sayfaları","demo.task.a.repo":"Repo konvansiyonları","demo.task.a.concepts":"Platformdan bağımsız kavramlar","demo.task.a.platform":"Platform başına geçiş","demo.task.a.render":"Dokümanı oluştur","demo.task.a.review":"Dokümanı incele","demo.task.a.publish":"Confluence'a yayınla","demo.task.a.report":"Rapor","demo.titleA":"Giriş ekranında karanlık mod","demo.titleB":"Ödeme tekrar deneme analizi","demo.windowOffline":"Bağlı değil: bu pencere sayfa /multi-agent:office-on ile açılınca dolar.","done":"Tamam","empty.body":"Şu an kimse çalışmıyor. Bir /multi-agent koşusu ya da Claude Code oturumu başlayınca ekibi burada bir masaya oturur.","empty.demo":"Demo ofisi izle","empty.title":"Ofis sessiz","error.generic":"Bir şey ters gitti.","event.demo":"Demo ofis başladı","event.done":"{name} tamamlandı","event.join":"{role}, {name} ekibine katıldı","event.phase":"{name}: {n}/{last}. faz başladı ({phase})","event.seat-done":"{role}, {name} işini bitirdi","event.table-new":"{name}, {repo} odasında masa açtı","event.waiting":"{name} seni bekliyor","fx.done":"Koşu tamamlandı","fx.phase":"Faz {n}: {name}","hud.agents":"{n} ajan çalışıyor · {runs} koşu · {sessions} oturum","hud.cost":"bugün {v}","hud.nothingWaiting":"Seni bekleyen bir şey yok.","hud.waiting":"{n} bekliyor","img.hidden":"[görsel gösterilmedi]","job.analysis":"Analiz yaz","job.autopilot-run":"Otopilotta koştur","job.check":"Gözden geçir ve başlat","job.diff-explain":"Review bulgularını açıkla","job.estimate":"Ticket için tahmin","job.give":"İşi ver","job.graph":"Kod grafı","job.ios-coding-standard":"iOS kodlama standardı","job.notInstalled":"kurulu değil","job.pipeline":"Pipeline'ı koştur","job.postmortem":"Koşunun post-mortem'i","job.preview":"{role}, {repo} reposunda şunu başlatır:","job.research":"Ticket'ı araştır","job.review":"Pull request incelet","job.review-issue":"GitHub issue'yu kontrol et","job.review-jira":"Jira ticket'ını kontrol et","job.security-review":"Güvenlik incelemesi","job.solo":"Tek kişi: masada çalışır","job.soloNote":"Tek kişilik iş: bir kişi açık ofiste bir masada çalışır.","job.startTitle":"Bu iş başlasın mı?","job.started":"{role} işi aldı","job.team":"Ekip: odada toplanır","job.teamNote":"Ekip işi: ekip o reponun bir odasında toplanır. Orada canlı başka bir koşu varsa bekler.","job.test-gen":"Eksik testleri yaz","job.unattended":"Arka planda, gözetimsiz izin profiliyle ve izin sormadan çalışır; ilerleyişi katta ve sohbetinde izlersin.","jobHint.analysis":"Ticket ve kaynaklarından özellik spesifikasyonu; kod yok.","jobHint.autopilot-run":"Bütün pipeline soru sormadan, açık bir PR'a kadar.","jobHint.diff-explain":"Bir koşunun review bulgularını diff satırlarına eşler.","jobHint.estimate":"Kapanmış işlerden rol başına süre, P25-P75.","jobHint.graph":"Reponun kod grafını kurar ya da raporlar; model çağrısı yok.","jobHint.ios-coding-standard":"Bir modülü 99 kurala göre denetler, düzeltme planı çıkarır.","jobHint.pipeline":"Bütün ekip: plan, geliştirme, review, commit ve rapor; karar gereken yerde durur.","jobHint.postmortem":"Bir koşuda ne olduğunu transcript'lerinden çıkarır.","jobHint.research":"Bir koşunun açık boşluklarını tracker, doküman ve repodan kapatır.","jobHint.review":"Üç inceleyici PR'ı okur; bulgular rapor olarak döner, hiçbir şey gönderilmez.","jobHint.review-issue":"Issue'nun hazır olup olmadığını puanlar, eksikleri listeler.","jobHint.review-jira":"Ticket'ın hazır olup olmadığını puanlar, eksikleri listeler.","jobHint.security-review":"Branch'in tehdit modeli incelemesi: OWASP ve CWE kategorileri, CVSS puanları.","jobHint.test-gen":"Yakalayacak testi olmayan yerleri bulur, testleri yazar ve koşturur.","lab.note":"Cihaz testleri (simülatör ya da emülatör) elde bir cihaz ister ve terminal komutu olarak kalır: /multi-agent:test.","ledger.byModel":"Modele göre","ledger.byPhase":"Faza göre","ledger.byRepo":"Repoya göre","ledger.byRun":"Koşuya göre","ledger.month":"Bu ay","ledger.name":"Ad","ledger.notMeasured":"Ölçülmedi: {v}","ledger.note":"cost-table.json liste fiyatıyla tahmin, fatura değil.","ledger.outside":"Pipeline dışı","ledger.source":"Kaynak","ledger.today":"Bugün","ledger.total":"Toplam","ledger.unpriced":"{n} fiyatsız","ledger.verified":"doğrulama {d}","ledger.week":"Bu hafta","list.empty":"Son dakikalarda ajan hareketi yok.","list.limited":"Kısıtlı masa: bu araç alt ajan ayrıntısı yazmıyor.","list.noBranch":"branch bilinmiyor","list.phaseHistory":"Faz geçmişi","list.room":"Oda: {repo}","list.runDetail":"Koşu ayrıntısı","list.showOnFloor":"Ofiste göster","list.team":"{name} ekibi","list.unmatched":"Eşlenemedi: bu oturum birden çok koşuya ait olabilir.","live.closed":"kapalı","live.demo":"demo","live.demoOnly":"demo, bağlı değil","live.live":"canlı","live.notConnected":"bağlı değil","live.offline":"çevrimdışı","live.paused":"duraklatıldı","live.polling":"yoklanıyor","loading":"Yükleniyor","new.command":"Komut: {c}","new.copyCmd":"Terminal komutunu kopyala","new.devRun":"Tam geliştirme koşusu: analiz, plan, geliştirme, review, commit","new.enterTask":"Önce görevi yaz.","new.launch":"Arka plan başlatmayı hazırla","new.launchBody":"{repo} içinde gözetimsiz bir koşu başlatır.","new.launchBtn":"Başlat","new.launchTitle":"Başlat","new.noRepo":"Henüz repo yok. Aşağıdan ekle.","new.planBody":"Sunucu isteği yazdı; şu komutu başlat:","new.planTitle":"Başlatma planı","new.question":"Soru {i}/{n} ({id}). Atla dersen koşu kendisi sorar.","new.repo":"Repo","new.request":"Başlatma isteği","new.requestNote":"Sunucu isteği doğrulayıp yazar ve başlatacak komutu döndürür; oturumu kendisi başlatmaz.","new.review":"Gözden geçir","new.freeTextHint":"Bir Jira anahtarı, GitHub issue linki ya da repo#N; veya işi anlatan tek bir cümle.","new.workFilter":"Listeyi süz","new.workList":"Bekleyen işler: Jira ve GitHub issue'ları","new.search":"Komut ara","new.skip":"Atla","new.step.command":"Komut","new.step.launch":"Başlat","new.step.questions":"Sorular","new.step.task":"Görev","new.summary":"İş: {input}. Repo: {repo}.","new.taskPlaceholder":"Jira anahtarı, GitHub issue linki, repo#N, #N ya da tek satır metin","next":"İleri","noAccess.body":"Bu sayfa yeni bir link ister: terminalde /multi-agent:office-on çalıştır. Link bir kez ve 10 saniye içinde çalışır; yenileme yeni link ister.","noAccess.title":"Erişim yok","none":"Yok","notMeasured":"ölçülmedi","off":"kapalı","on":"açık","param.branch":"Branch (isteğe bağlı)","param.enum":"Seçim","param.github-issue":"GitHub issue","param.jira-key":"Jira key","param.pickRun":"Bir koşu seç","param.pull-request":"Pull request","param.repo-path":"Repodaki klasör","param.scenario-audit.scenarios":"Senaryo listesi (repodaki bir CSV dosyası)","placeholder.scenario-audit.scenarios":"docs/scenarios.csv","param.run-id":"Koşu","param.work-item":"İş (Jira key, issue linki ya da bir cümle)","perm.count":"{n} izin isteği","perm.notForwarded":"Araç izin soruları henüz buraya gelmiyor.","placeholder.branch":"feature/login","placeholder.github-issue":"https://github.com/org/repo/issues/7 ya da repo#7","placeholder.jira-key":"PROJ-123","placeholder.pull-request":"https://github.com/org/repo/pull/12 ya da repo#12","placeholder.repo-path":"Sources/Feature","placeholder.run-id":"PROJ-123","placeholder.work-item":"PROJ-123, repo#45 ya da kısa bir görev","prs.ask":"Hakkında sor","prs.copyReview":"Review komutunu kopyala","prs.empty":"Açık PR yok.","prs.notImplemented":"henüz yok","prs.note":"Review koşusunun bulguları ve karar butonu o koşunun ayrıntısında.","prs.reach":"Değiştirdiği {changed} dosyaya {n} dosya bağlı","prs.reachUnmeasured":"Etki ölçülmedi: {reason}","prs.review":"İncelet","repos.absolute":"Tam yolu yaz, / ile başlasın","repos.add":"Ekle","repos.addBody":"{n} koşu başlatılabilen repolara eklenir. Başka hiçbir şey değişmez.","repos.addHint":"Bu repoyu ekle, koşular burada başlayabilsin","repos.addTitle":"{n} eklensin","repos.byPath":"Yol ile ekle","repos.empty":"Henüz repo yok. Aşağıdan ekle: önceki bir koşunun çalıştığı repo ya da bir yol.","repos.missing":"Diskte artık yok","repos.none":"Henüz repo yok","repos.path":"Repo yolu","repos.pathNote":"Klasör bir git reposu olmalı. Ana klasör ve / kabul edilmez.","repos.pathPlaceholder":"/Users/sen/uygulama","repos.remove":"Listeden çıkar","repos.removeBody":"Yalnızca liste kaydı silinir. Klasör zaten yok; diskte hiçbir şey değişmez.","repos.removeTitle":"{n} listeden çıkarılsın","repos.suggested":"Önceki koşulardan","role.assistant":"Ajan","role.user":"Sen","room.accounting":"Muhasebe","room.archive":"Arşiv","room.kitchen":"Mutfak","room.lab":"Test laboratuvarı","room.library":"Kütüphane","room.lobby":"Resepsiyon","room.lounge":"Dinlenme","room.mail":"Posta odası","room.manager":"Yönetici odası","room.meeting":"Toplantı katı","room.typeFree":"{type} · boş","room.typeNameAnalysis":"Analiz Odası","room.typeNameDev":"Geliştirme Odası","room.typeSession":"Oturum · pipeline dışı","room.typeWith":"{type} · {command}","room.office":"Açık ofis","room.restroom":"Tuvalet","room.server":"Sunucu odası","routines.deleteBody":"Rutin komutunu ve kaydını siler.","routines.deleteTitle":"/multi-agent:{n} silinsin","routines.empty":"Kayıtlı rutin yok.","routines.saveNote":"Yeni rutin kaydı konuşmaya ihtiyaç duyar, bu yüzden terminalde kalır.","run.analysis":"Analiz dokümanları","run.confluence":"Confluence sayfası: {n}","run.decision":"Karar: {d} (engelleyen {b}, önemli {i})","run.diff":"Diff","run.diffLine":"{files} dosya, +{added} -{removed}","run.failed":"{n} başarısız","run.findings":"Review bulguları","run.findingsCount":"{n} bulgu ({source})","run.fix":"Düzeltme:","run.noDiff":"Diff kaydı yok.","run.noFindings":"Review bulgusu kaydı yok.","run.noTests":"Test özeti kaydı yok.","run.passed":"{n} geçti","run.risk":"risk {v}","run.screenshots":"Ekran görüntüleri","run.tests":"Testler","run.unreadable":"(okunamadı)","run.verdict":"Review kararını gönder","run.verdictHead":"Review kararı","run.verdictOff":"Review bulgu kaydedince açılır.","run.verdictOn":"Bulgular yukarıda göründüğü için açık.","run.verdictRisk":"Bu makinedeki kendi {p} kimliğinle gönderilir. Yüksek risk.","run.verdictTitle":"{id} review kararı","services.contracts":"{n} API sözleşmesi","services.crash":"Crashlytics sorunu","services.crashLine":"{o} tekrar, {u} kullanıcı","services.crashPh":"Crashlytics sorun linki (console.firebase.google.com)","services.figmaNote":"Bu frame'i analiz etmek /multi-agent:analysis koşturur; aşağıdaki soru kutusunu ya da terminali kullan.","services.file":"Figma dosya anahtarı","services.filePh":"Figma dosya anahtarı","services.node":"Figma düğüm kimliği","services.nodePh":"Node id, örn. 12:34","services.note":"Confluence araması, sürüm bazlı Crashlytics eğilimi ve Figma dosya gezgini için istemci henüz yok; bir ajana sor.","services.page":"Confluence sayfası","services.pagePh":"Confluence sayfa id'si ya da https linki","services.read":"Oku","services.render":"Frame'i çiz","stack.alwaysOn":"hep açık","stack.change":"Değiştir","stack.apply":"Uygula","stack.changes":"Değişiklik: {v}","stack.copyRefresh":"Yenileme komutunu kopyala","stack.dropped":"Marketplace'te yok: {v}","stack.none":"Henüz stack açık değil","stack.unreadable":"Okunamadı","stack.noManifest":"Marketplace manifest'i okunamadı; eklenti listesi varsayılandır.","stack.noSkills":"Yerelde skill bulunamadı.","stack.pick":"Repo seç","stack.pickOne":"En az bir stack seç.","stack.plugins":"Eklentiler","stack.restart":"Eklentilerin yüklenmesi için o repoda Claude Code'u yeniden başlat. Copilot ve Codex kopyaları:","stack.stacks":"Stack'ler","stack.title":"{repo} için stack'ler","staff.busy":"çalışıyor","staff.free":"boşta","staff.idle":"iş bekliyor","staff.intro":"Ofisteki herkes ve ne yaptıkları. Birine tıkla, iş ver.","staff.officeTitle":"Ofis çalışanları","staff.poolTitle":"Ajan havuzu","staff.poolIntro":"Açık ofisteki masalarda beklerler; koşu başlayınca, fazlarından biri rollerini kullanıyorsa o koşunun masasına geçerler.","staff.jobs":"Aldığı işler","staff.noJobs":"Bu kişinin henüz işi yok.","staff.openChat":"Sohbetini aç","staff.openRoom":"{v} aç","staff.talkTo":"{v} ile konuş","staff.workingOn":"Şu an: {v}","card.room":"Oda: {v}","card.agent":"Ajan: {v}","card.tier.model":"Model: {v}","card.tier.fableOff":"Model: Opus (Fable kapalı)","card.tier.session":"Model: ana oturumun modeli","card.tier.script":"Model yok: bir betik çalıştırır","card.tier.none":"Model yok: rehberi gösterir","card.now":"Şu an","card.free":"Boşta, masasında","card.recent":"Son işler","card.noRecent":"Katta henüz işi yok.","card.state.now":"çalışıyor","card.state.next":"sırasını bekliyor","card.state.done":"bitti","building.intro":"Binanın her odası, orada kimin çalıştığı ve neler olduğu. Kartını açmak için birine tıkla.","building.nobody":"Burada sürekli çalışan kimse yok.","building.tables":"{v} masa çalışıyor","building.people":"Kişiler","state.done":"bitti","state.idle":"boşta","state.reading":"okuyor","state.spawning":"ajan başlatıyor","state.waiting":"bekliyor","state.writing":"yazıyor","station.archive":"Arşiv","station.autopilot":"Otopilot","station.cleanup":"Temizlik","station.commands":"Komutlar","station.job":"İş","station.lab":"Test lab","station.ledger":"Muhasebe","station.list":"Ekip listesi","station.new":"Geliştirme · yeni koşu","station.newAnalysis":"Analiz · yeni koşu","station.office":"Ofis","station.prs":"PR kutusu","station.routines":"Rutinler","station.run":"Koşu","station.services":"Servisler","station.stack":"Skill'ler","station.staff":"Ekip","station.tools":"Araçlar","station.work":"Görev panosu","stationHint.archive":"Her koşu, günlüğü ve post-mortem'i","stationHint.autopilot":"Otopilotu aç, kapat, kuyruğunu gör","stationHint.cleanup":"Koşuların geride bıraktıklarını temizle","stationHint.commands":"Bütün /multi-agent komutları","stationHint.job":"Bu kişinin aldığı işler","stationHint.lab":"Testler yazılır ve doğrulanır","stationHint.ledger":"Koşu, repo, model ve faza göre token ve tahmini maliyet","stationHint.list":"Aynı ofis, metin olarak","stationHint.new":"/multi-agent: görev ve repo seç","stationHint.newAnalysis":"/multi-agent:analysis: istek ve repo seç","stationHint.office":"Çalışan bütün ekipler","stationHint.prs":"Tüm GitHub hesapları ve Bitbucket'taki PR'lar","stationHint.routines":"Kaydettiğin /multi-agent rutinleri","stationHint.run":"Sonuçlar, bulgular, testler ve review kararı","stationHint.services":"Confluence, Crashlytics ve Figma okuma","stationHint.stack":"Repo başına stack ve eklentiler","stationHint.staff":"Ofisteki herkes; birine iş ver","stationHint.tools":"multi-agent-toolkit araçları, buradan çağrılır","stationHint.work":"Öncelik sırasıyla Jira ve GitHub işleri, olgunluk kontrolüyle","table.annexHint":"Koşunun ana odasına git","table.corridor":"{name} burada da çalışıyor · ana oda: {repo}","table.limited":"{host}: kısıtlı","table.noPhase":"Faz yok","phaseState.done":"bitti","phaseState.now":"sürüyor","phaseState.todo":"bekliyor","taskState.completed":"bitti","taskState.in_progress":"sürüyor","taskState.pending":"bekliyor","mcp.error":"hata","mcp.ok":"tamam","mcp.running":"sürüyor","seat.mcp":"Son MCP çağrıları","seat.tasks":"Görev listesi","table.finished":"Bitti: ekip toparlanıyor","table.now":"Şu an: {task}","table.ownerDoing":"{phase}: bu adımı orkestratör yürütüyor","table.phase":"Faz {n}/{last} {name}","table.session":"Oturum","table.unmatched":"eşlenemedi","table.waiting":"Seni bekliyor","tools.badJson":"Bir JSON alanı geçersiz.","tools.call":"Çağır","tools.confirmTitle":"{name} çağrılsın mı?","tools.error":"Araç hata bildirdi.","tools.notAllowlisted":"izin listesinde değil","tools.notCallable":"Panelden çağrılamaz: {v}","tools.notSet":"(boş)","tools.onePerLine":"Satır başına bir","tools.risk":"risk {v}","tools.running":"Çalışıyor","tools.search":"Araç ara","tools.terminalOnly":"yalnızca terminal","tools.version":"multi-agent-toolkit {v}, {n} araç. Her pipeline güncellemesiyle kendiliğinden ilerler.","unit.hour":"sa","unit.min":"dk","update.gone":"Ofis kapandı. Yeniden açmak için /multi-agent:office-on yaz.","update.page":"Ofisin yeni sürümü kuruldu.","update.reload":"Yenile","update.server":"Ofis güncellendi. Yeniden açmak için /multi-agent:office-on yaz.","work.blockers":"Engeller","work.description":"Açıklama","work.empty":"Atanmış iş yok.","work.noPriority":"öncelik yok","work.score":"puan {v}","work.start":"Bununla koşu başlat","work.unreadable":"okunamadı","work.warnings":"Uyarılar","writes.branch":"branch yazar","writes.branch-pr":"branch ve PR açar","writes.issue-comment":"issue'ya yorum yazar","writes.none":"yalnızca okur","writes.pr-comments":"PR'a yorum yazar","writesLong.branch":"Bu repoda yeni bir branch'e commit atar.","writesLong.branch-pr":"Yeni bir branch'e commit atar ve senin kimliğinle pull request açar.","writesLong.issue-comment":"Senin kimliğinle issue'ya yorum yazar.","writesLong.pr-comments":"Senin kimliğinle pull request'e inceleme yorumları yazar.","zoom.in":"Yakınlaştır","zoom.out":"Uzaklaştır","role.orchestrator":"Orkestratör","role.reviewer":"İnceleyici","role.security-auditor":"Güvenlik Denetçisi","role.ios-architect":"iOS Mimarı","role.android-architect":"Android Mimarı","role.backend-architect":"Backend Mimarı","role.explorer":"Kaşif","role.planner":"Planlamacı","role.clarifier":"Netleştirici","role.test-gap-analyst":"Test Açığı Analisti","role.reader":"Okuyucu","role.librarian":"Kütüphaneci","role.sysadmin":"Sistem Yöneticisi","role.mail-clerk":"Posta Memuru","role.janitor":"Temizlikçi","new.terminalOnly":"Verilecek kimsesi olmayan komutlar terminalden çalışır.","update.signedOut":"Bu sayfanın oturumu kapandı. Yeniden açmak için /multi-agent:office-on çalıştır.","cleanup.failed":"{n} öğe silinemedi:","job.doctor":"Sağlık kontrolü","job.route-status":"Model yönlendirme durumu","job.scan":"Skill güvenlik taraması","job.scenario-audit":"Senaryo denetimi","job.review-analysis":"Analiz dokümanı incelemesi","jobHint.doctor":"Kurulumu ve eriştiği servisleri kontrol eder; hiçbir şeyi değiştirmez.","jobHint.route-status":"Model yönlendirmesinin nerede açık olduğunu ve son çağrıların nereye gittiğini raporlar.","jobHint.scan":"Kurulu skill'leri güvensiz kalıplar için tarar; salt okuma.","jobHint.scenario-audit":"Bir senaryo dosyasını koda karşı denetler: hangi senaryolar karşılanıyor.","jobHint.review-analysis":"Bir Jira issue'sunun analiz dokümanını inceler; hiçbir şey gönderilmez.","hud.costOffline":"Maliyet: bağlı değil","hud.autopilotOffline":"Otopilot: bağlı değil","cleanup.promptsNote":"Talimat dosyalarını kısaltma terminal komutu olarak kalır: /multi-agent:prune-prompts.","prune.title":"Eski koşu logları","prune.intro":"Seçtiğin süreden eski görev log klasörleri. Denetim kaydı, metrikler ve sayaçlar hep kalır; devam ettirilebilecek koşulara ve son dakikalarda yazılan klasörlere dokunulmaz.","prune.age":"Şundan eski","prune.days":"{n} gün","prune.scan":"Ne silineceğini gör","prune.found":"{n} görev log klasörü, yaklaşık {mb} MB","prune.more":"ve {n} tane daha","prune.safe":"Sen onaylamadan hiçbir şey silinmez.","prune.done":"{n} görev log klasörü silindi, yaklaşık {mb} MB açıldı.","station.keys":"Anahtar dolabı","stationHint.keys":"Hangi kimlik bilgileri var ve çalışıyor mu; değerleri asla gösterilmez","keys.intro":"Pipeline'ın erişebildiği her servis, adıyla. Değerler kimlik deposundan hiç çıkmaz.","keys.probe":"Canlı kontrol et","keys.unavailable":"Kimlik envanteri bu makinede çalışamadı.","keys.unmapped":"{n} servis kurulmamış; /multi-agent:setup ekler.","keys.renew":"Yenilemek ya da eklemek için terminalde çalıştır:","keys.state.present":"var","keys.state.mapped-but-missing":"depoda yok","keys.state.unmapped":"kurulmamış","keys.reach.not-probed":"kontrol edilmedi","keys.reach.reachable":"çalışıyor","keys.reach.auth-rejected":"reddedildi, yenile","keys.reach.unreachable":"erişilemiyor (VPN?)","keys.reach.no-host-configured":"sunucu adresi tanımlı değil","keys.reach.well-formed":"biçimi doğru","keys.reach.not-probeable":"kontrol edilemiyor","keys.reach.malformed":"bozuk, yenile","keys.reach.no-credential":"kayıtlı değer yok","keys.reach.probe-error":"kontrol başarısız oldu","keys.reach.server-error":"sunucu hata döndü","keys.reach.tier-1-ready":"çalışıyor","keys.reach.tier-2-ready":"çalışıyor (yedek yol)","keys.reach.tier-1-no-grant":"çalışıyor, yetki gerekiyor","keys.reach.unknown":"bilinmeyen cevap","station.memory":"Hafıza","stationHint.memory":"Pipeline'ın repo başına öğrendikleri","memory.intro":"Repo başına: kod grafı, kalıcı öğrenimler, geçmiş review bulguları ve öğrenme döngüsünün tuttuğu oturum notları.","memory.none":"Henüz hiçbir reponun hafıza rafı yok.","memory.graphAge":"graf {n} günlük","memory.noGraph":"kod grafı yok","memory.counts":"{l} öğrenim · {f} geçmiş bulgu · {s} oturum notu","memory.emptyShelf":"Burada bir şey birikmiyor: bu repodaki koşular rapor fazına varmamış.","station.system":"Sistem","stationHint.system":"CPU, bellek, disk ve pipeline'ın kullandıkları","system.cpu":"CPU","system.load":"{c} çekirdekte yük {l}","system.memory":"Bellek","system.disk":"Boş disk","system.diskOf":"toplam {v}","system.pipeline":"Pipeline","system.sessions":"{n} oturum · {k} toolkit","system.rss":"{v} bellek · loglar {l} MB","system.warn.disk-low":"Diskin %10'undan azı boş: temizlikçi eski log ve worktree'leri silebilir.","system.warn.cpu-busy":"CPU dolu: paralel koşular yavaşlar.","room.orientation":"Oryantasyon","role.trainer":"Eğitmen","station.guide":"Rehber","stationHint.guide":"Ofis nasıl çalışır: odalar, bir işin akışı, burada neler yapılır, neler terminalde kalır","station.building":"Bina","stationHint.building":"Bina rehberi: her oda, içindeki kişiler ve şu an ne yaptıkları","guide.intro":"Bu kattaki her oda pipeline'ın bir parçası. Kullanmak için odanın penceresine, iş vermek için bir kişiye tıkla.","guide.show":"Göster","guide.h.plan":"Kat planı","guide.h.flow":"Bir iş nasıl yürür","guide.h.give":"İş verme","guide.h.where":"Ofis mi, terminal mi","guide.h.security":"Güvenlik","guide.h.legend":"İşaretler","guide.room.lobby":"Jira ya da GitHub issue'sundan veya serbest metinden geliştirme koşusu ya da analiz başlatılır.","guide.room.orientation":"Bu oda: okuduğun rehber.","guide.room.office":"Ajanlar, bir koşu rollerini çağırana kadar masalarında bekler. Tek kişilik işler burada yapılır.","guide.room.kitchen":"Tek bir adım için çağrılan ajan burada biraz dinlenir, sonra masasına döner; koşunun ekibi masada kalır.","guide.room.accounting":"Koşu, repo, model ve faza göre token ve tahmini maliyet.","guide.room.restroom":"Temizlik: geçici dosyalar, biten worktree'ler, eski ref'ler, yarım kalan koşular ve eski koşu logları. Hiçbir şey silinmeden önce listesi gösterilir.","guide.room.manager":"Otopilot ve açma kapama düğmesi, kaydettiğin rutinler ve ayarlar: çıktı dili, Fable basamağı, model yönlendirmesi.","guide.room.lab":"Test işleri: bir repo için yazılan ve kontrol edilen testler.","guide.room.library":"Pipeline'ın bildikleri: repo başına stack'ler, tüm komutlar ve repo başına öğrendikleri.","guide.room.archive":"Geçmiş: biten koşular, logları ve postmortem'ler.","guide.room.mail":"Seni bekleyen ya da senin açtığın PR'lar: tüm GitHub hesapları ve Bitbucket.","guide.room.server":"Dış hatlar: toolkit MCP araçları, bağlı servisler, anahtar dolabı ve makinenin kaynakları.","guide.room.meeting":"Her repo için bir kat: /multi-agent için Geliştirme odası, /multi-agent:analysis için Analiz odası.","guide.flow.1":"Ajanlar açık ofiste masalarında bekler.","guide.flow.2":"Bir koşu bir role ihtiyaç duyunca o kişi, koşunun repo katındaki odasına yürür. Birden fazla repoya dokunan koşu, diğer repoların katında şube masası açar.","guide.flow.3":"Masa tabelasında faz, görevler bittikçe dolan çubuk ve sürmekte olan görev görünür. Bu liste terminaldeki görev widget'ıyla aynıdır.","guide.flow.4":"Tek bir adım için çağrılan ajan işi bitince mutfakta dinlenir, sonra masasına döner; ekip koşu bitene kadar masada oturur.","guide.flow.5":"Biten koşu sonucuyla birlikte iki dakika katta kalır, sonra ekip dağılır.","guide.pipeline.dev":"Geliştirme (/multi-agent): {v}","guide.pipeline.analysis":"Analiz (/multi-agent:analysis): {v}","guide.pipeline.mcp":"Toolkit MCP'yi doğrudan kullanan oturumun kendi masası olur. Bir araç çalışırken ajanı sunucu raflarına yürür.","guide.give.1":"Bir kişiye tıkla, aldığı işleri gör. Birini seç, formu doldur, onayla.","guide.give.2":"Ekip işi repo katındaki bir odada, tek kişilik iş bir masada yürür. Bir repoda aynı anda tek ekip koşusu olur.","guide.give.3":"Bir koşu sana soru sorunca masasının üstünde ve üst çubukta ! işareti çıkar.","guide.where.1":"İşler: model işi yapar ve rapor verir (review, analiz, test planı).","guide.where.2":"Pencereler: burada okuduğun bilgiler ve önce önizleme gösterip yalnızca onayınla çalışan işlemler (otopilot, stack, rutinler, temizlik, ayarlar).","guide.where.3":"Yalnızca terminal: etkileşimli ya da kurulumu değiştiren işler (setup, update, sync, uninstall). Komutlar penceresi her birinin sebebini yazar.","guide.security.1":"Sunucu yalnızca 127.0.0.1'de dinler ve /multi-agent:office-off ile durdurulana kadar çalışır.","guide.security.2":"Erişim token'ı bu sayfanın belleğinde durur. URL'ye, çereze ya da tarayıcı deposuna yazılmaz.","guide.security.3":"Makineyi değiştiren ya da iş başlatan işlemler önce önizleme gösterir, yalnızca onayınla çalışır. Her yazma kayda geçer.","guide.security.4":"Hiçbir kimlik bilgisi bu sayfaya gelmez. Anahtar dolabı yalnızca ad ve durum gösterir, yenileme terminalde /multi-agent:setup ile yapılır.","guide.security.5":"Review işleri sonucu burada raporlar, hiçbir yere yorum göndermez. Demo uydurma bir günü oynatır, hiçbir şeyi değiştirmez.","guide.legend.done":"Faz bitti","guide.legend.now":"Faz sürüyor; görevleri bittikçe dolar","guide.legend.pending":"Faz başlamadı","guide.legend.you":"Bir koşu seni bekliyor","guide.legend.ask":"Bir ajan soru sordu","guide.legend.spawn":"Bir ajan başlıyor","guide.legend.cloud":"Çalışan birinin üstündeki bulut ne yaptığını söyler; detay için tıkla.","role.developer":"Geliştirici","role.plan-critic":"Plan Eleştirmeni","role.dev-critic":"Geliştirme Eleştirmeni","role.committer":"Commit Sorumlusu","role.reporter":"Raportör","chat.askedInTerminal":"Bu oturum terminalinde sana soru soruyor. Cevabı orada ver; panel yalnızca koşunun panele bıraktığı soruları cevaplar.","table.freeText":"Serbest metin","table.prOpened":"PR #{n} açıldı","table.waitingFor.local-test":"Seni bekliyor: lokalde test edilsin mi?","table.waitingFor.user-channels-choice":"Seni bekliyor: rapor nereye gitsin","table.waitingFor.maturity":"Seni bekliyor: madde hazır değil","table.waitingFor.attended-reply":"Cevabını bekliyor","table.waitingFor.question":"Cevabını burada bekliyor","table.waitingFor.terminal":"Terminalde sana soruyor","event.guide":"Yeni misin? Rehber resepsiyonun yanındaki oryantasyon odasında.","table.crewDone":"{phase} işini bitirdi","table.headWaiting":"cevabını bekliyor","table.headQuiet":"oturumunda son zamanlarda hareket yok","table.crewNext":"{phase} sırasını bekliyor","run.report":"Rapor","run.channel.pr":"PR açıklaması","run.channel.jira":"Jira","run.channel.confluence":"Confluence","run.channel.wiki":"Wiki","run.channel.issue":"GitHub issue","run.channelState.posted":"gönderildi","run.channelState.skipped":"atlandı","run.channelState.failed":"başarısız","memory.buildGraph":"Kod grafını oluştur","memory.refreshGraph":"Kod grafını yenile","station.settings":"Ayarlar","stationHint.settings":"Çıktı dili, Fable basamağı ve model yönlendirmesi","settings.intro":"Her düğme, önizlemeden sonra ilgili terminal komutunun yaptığını yapar.","settings.language":"Çıktı dili","settings.languageHint":"Pipeline'ın sana yazdığı dil: raporlar, PR ve Jira yorumları, bu ofis.","settings.model":"Fable basamağı","settings.modelHint":"Koşular model merdiveninin tepesinde Fable kullanabilir mi (/multi-agent:model).","settings.route":"Model yönlendirmesi","settings.routeHint":"Çağrılar kayıtlı kurallara göre yönlendirilsin mi (/multi-agent:route-on ve route-off).","settings.value.language.en":"English","settings.value.language.tr":"Türkçe","settings.value.model.on":"Açık","settings.value.model.off":"Kapalı","settings.value.route.on":"Açık","settings.value.route.off":"Kapalı","settings.change":"{from} → {to}","settings.languageNote":"CLI seçicisindeki komut açıklamaları bir sonraki oturumda değişir; bu sayfayı yeni dilde görmek için /multi-agent:office-on komutunu yeniden çalıştır.","settings.terminalNote":"Yönlendirme kuralları, ücretsiz sağlayıcılar ve prompt dili terminalde kalır.","settings.freeChain":"Bu, daha önce kaydettiğin ücretsiz sağlayıcı zincirini de geri açar.","settings.freeChainTraining":"Bu, daha önce kaydettiğin ücretsiz sağlayıcı zincirini de geri açar; bu zincirde gönderilenle model eğitebilen sağlayıcılar da var."}};
1411
+ const EMPLOYEES = [{"role":"Orchestrator","name":"Ada","agent":null,"tier":"session","slot":12},{"role":"Trainer","name":"Deniz","agent":null,"tier":"none","slot":13},{"role":"Reviewer","name":"Selin","agent":"code-reviewer","tier":"fable","slot":14},{"role":"Security Auditor","name":"Kaan","agent":"security-auditor","tier":"opus","slot":15},{"role":"iOS Architect","name":"Ece","agent":"ios-architect","tier":"fable","slot":16},{"role":"Explorer","name":"Arda","agent":"explorer","tier":"sonnet","slot":17},{"role":"Planner","name":"Defne","agent":null,"tier":"session","slot":18},{"role":"Clarifier","name":"Umut","agent":"task-clarifier","tier":"haiku","slot":19},{"role":"Test Gap Analyst","name":"Lale","agent":"test-gen-analyst","tier":"sonnet","slot":20},{"role":"Reader","name":"Emre","agent":"bulk-reader","tier":"haiku","slot":21},{"role":"Librarian","name":"Nil","agent":null,"tier":"script","slot":22},{"role":"Sysadmin","name":"Bora","agent":null,"tier":"script","slot":23},{"role":"Mail Clerk","name":"Duru","agent":null,"tier":"script","slot":24},{"role":"Janitor","name":"Cem","agent":null,"tier":"script","slot":25},{"role":"Developer","name":"Can","agent":null,"tier":"sonnet","slot":26},{"role":"Plan Critic","name":"Ela","agent":"plan-critic","tier":"fable","slot":27},{"role":"Dev Critic","name":"Ozan","agent":"dev-critic","tier":"sonnet","slot":28},{"role":"Committer","name":"Ipek","agent":null,"tier":"session","slot":29},{"role":"Reporter","name":"Tuna","agent":null,"tier":"session","slot":30}];
1382
1412
  const spriteUrl = (name) => "/office/assets/" + name + ".png";
1383
- /* global ATLAS, spriteUrl */
1413
+ /* global ATLAS, EMPLOYEES, spriteUrl */
1384
1414
  /* exported createWorld */
1385
1415
  // The office floor: a tile map built from the activity snapshot, furniture and
1386
1416
  // characters drawn from the sprite atlas at whole-pixel zoom, depth-sorted by
@@ -1449,6 +1479,14 @@ function createWorld(opts) {
1449
1479
  { role: "Committer", sprite: 10, color: "#5c6bc0" },
1450
1480
  { role: "Reporter", sprite: 11, color: "#00897b" },
1451
1481
  ];
1482
+ // Each person wears their own sheet (office-art/employees.json, recoloured at
1483
+ // build time) when it shipped with the page, and keeps a name for the card.
1484
+ for (const p of [...STAFF, ...POOL]) {
1485
+ const e = EMPLOYEES.find((x) => x.role === p.role);
1486
+ if (!e) continue;
1487
+ p.name = e.name;
1488
+ if (ATLAS.includes("char_" + e.slot)) p.sprite = e.slot;
1489
+ }
1452
1490
  // A run's crew: one seat per role each phase uses, so a table holds as many
1453
1491
  // people as the pipeline has steps. The orchestrator at the head runs Init
1454
1492
  // (Intake for an analysis); the development review has three reviewers.
@@ -4009,7 +4047,10 @@ function createWorld(opts) {
4009
4047
  const c = chars.get("pool:" + pl.role);
4010
4048
  return {
4011
4049
  role: pl.role,
4050
+ name: pl.name || null,
4051
+ room: "office",
4012
4052
  sprite: pl.sprite,
4053
+ color: pl.color,
4013
4054
  busy: Boolean(c && c.table && c.seat && c.seat.status !== "done"),
4014
4055
  doing: c && c.table && c.seat ? c.seat.doing : null,
4015
4056
  };
@@ -4021,6 +4062,7 @@ function createWorld(opts) {
4021
4062
  const c = chars.get("staff:" + sf.role);
4022
4063
  return {
4023
4064
  role: sf.role,
4065
+ name: sf.name || null,
4024
4066
  room: sf.room,
4025
4067
  sprite: sf.sprite,
4026
4068
  color: sf.color,
@@ -4067,7 +4109,7 @@ function createWorld(opts) {
4067
4109
  },
4068
4110
  };
4069
4111
  }
4070
- /* global ATLAS, BUILD, STRINGS, createWorld, spriteUrl */
4112
+ /* global ATLAS, BUILD, EMPLOYEES, STRINGS, createWorld, spriteUrl */
4071
4113
  // The panel around the floor: the bearer token handshake, the HUD, the
4072
4114
  // station windows (every screen the contract routes offer), the chat drawer,
4073
4115
  // confirmations for every write, and the demo office. Server data reaches the
@@ -4433,6 +4475,7 @@ const ROOMS = [
4433
4475
  ["restroom", "cleanup", "TOILET_STALL"],
4434
4476
  ["accounting", "ledger", "DESK_FRONT"],
4435
4477
  ["orientation", "guide", "LARGE_PAINTING"],
4478
+ ["lobby", "building", "SMALL_PAINTING"],
4436
4479
  ];
4437
4480
  // Stations the floor has but the hotbar leaves out; the guide lists them too.
4438
4481
  const GUIDE_ONLY = [
@@ -4520,8 +4563,13 @@ function openWindow(id) {
4520
4563
  $("window-back").classList.add("open");
4521
4564
  for (const b of $("hotbar").children)
4522
4565
  b.setAttribute("aria-current", b.dataset.station === id ? "true" : "false");
4523
- if (!token && id !== "list" && id !== "guide") {
4566
+ if (!token && id !== "list" && id !== "guide" && id !== "building") {
4524
4567
  windowHost.append(el("p", { class: "banner", text: t("demo.windowOffline") }));
4568
+ // Who a person is needs no server: the card shows even offline.
4569
+ if (id === "job" && pendingRole) {
4570
+ $("window-title").textContent = roleName(pendingRole);
4571
+ windowHost.append(employeeCard(pendingRole));
4572
+ }
4525
4573
  } else loaders[id]();
4526
4574
  renderAsk();
4527
4575
  $("window-close").focus();
@@ -6032,6 +6080,31 @@ async function openIssue(it) {
6032
6080
  }
6033
6081
 
6034
6082
  // --- pull requests -------------------------------------------------------------------------
6083
+ // Widest reach first, from the repository's own code graph; the list is
6084
+ // already on screen, so a slow or failed measurement only leaves it as it is.
6085
+ async function rankByReach(box, cards, note) {
6086
+ let reach;
6087
+ try {
6088
+ reach = await api("GET", "/v1/prs/reach");
6089
+ } catch {
6090
+ return;
6091
+ }
6092
+ if (currentWindow !== "prs" || !box.isConnected) return;
6093
+ for (const r of reach.items) {
6094
+ const entry = cards.get(r.repo + "#" + r.number);
6095
+ if (!entry) continue;
6096
+ entry.reachLine.textContent =
6097
+ r.reach === null
6098
+ ? t("prs.reachUnmeasured", { reason: r.reason || "-" })
6099
+ : t("prs.reach", { n: r.reach, changed: r.changed ?? 0 });
6100
+ box.insertBefore(entry.card, note);
6101
+ }
6102
+ for (const [ref, entry] of cards) {
6103
+ if (!reach.items.some((r) => r.repo + "#" + r.number === ref))
6104
+ box.insertBefore(entry.card, note);
6105
+ }
6106
+ }
6107
+
6035
6108
  loaders.prs = async () => {
6036
6109
  const box = clear(body());
6037
6110
  box.append(loadingNode());
@@ -6052,35 +6125,38 @@ loaders.prs = async () => {
6052
6125
  }),
6053
6126
  );
6054
6127
  if (!doc.items.length) box.append(el("p", { class: "muted", text: t("prs.empty") }));
6128
+ const cards = new Map();
6055
6129
  for (const p of doc.items) {
6056
6130
  const ref = p.repo + "#" + p.number;
6057
- box.append(
6131
+ const reachLine = el("div", { class: "small muted" });
6132
+ const card = el(
6133
+ "div",
6134
+ { class: "card" },
6135
+ el("strong", { text: ref + " " + p.title }),
6136
+ el("div", {
6137
+ class: "small muted",
6138
+ text:
6139
+ p.role + (p.author ? " | " + p.author : "") + (p.updatedAt ? " | " + p.updatedAt : ""),
6140
+ }),
6141
+ reachLine,
6058
6142
  el(
6059
6143
  "div",
6060
- { class: "card" },
6061
- el("strong", { text: ref + " " + p.title }),
6062
- el("div", {
6063
- class: "small muted",
6064
- text:
6065
- p.role +
6066
- (p.author ? " | " + p.author : "") +
6067
- (p.updatedAt ? " | " + p.updatedAt : ""),
6144
+ { class: "row" },
6145
+ el("button", {
6146
+ type: "button",
6147
+ class: "primary",
6148
+ text: t("prs.review"),
6149
+ // The review takes name#N; the repository is matched by owner/name.
6150
+ onclick: () => giveJob("review", { target: repoOfRef(ref) + "#" + p.number }, p.repo),
6068
6151
  }),
6069
- el(
6070
- "div",
6071
- { class: "row" },
6072
- el("button", {
6073
- type: "button",
6074
- class: "primary",
6075
- text: t("prs.review"),
6076
- // The review takes name#N; the repository is matched by owner/name.
6077
- onclick: () => giveJob("review", { target: repoOfRef(ref) + "#" + p.number }, p.repo),
6078
- }),
6079
- ),
6080
6152
  ),
6081
6153
  );
6154
+ cards.set(ref, { card, reachLine });
6155
+ box.append(card);
6082
6156
  }
6083
- box.append(el("p", { class: "small muted", text: t("prs.note") }));
6157
+ const note = el("p", { class: "small muted", text: t("prs.note") });
6158
+ box.append(note);
6159
+ if (doc.items.length) rankByReach(box, cards, note);
6084
6160
  } catch (e) {
6085
6161
  clear(box);
6086
6162
  showError(box, e);
@@ -7034,37 +7110,204 @@ function portraitImg(url) {
7034
7110
  return img;
7035
7111
  }
7036
7112
 
7037
- loaders.staff = () => {
7038
- const box = clear(body());
7039
- box.append(el("p", { class: "small muted", text: t("staff.intro") }));
7040
- const card = (p, where) =>
7113
+ // A person as a button: portrait, name and role, where they work, whether they are busy.
7114
+ function personButton(p, where) {
7115
+ return el(
7116
+ "button",
7117
+ { type: "button", class: "card staff-card", onclick: () => openStaff(p.role) },
7118
+ portraitImg(world.portrait(p.sprite)),
7041
7119
  el(
7042
- "button",
7043
- { type: "button", class: "card staff-card", onclick: () => openStaff(p.role) },
7044
- portraitImg(world.portrait(p.sprite)),
7120
+ "span",
7121
+ { class: "staff-text" },
7045
7122
  el(
7046
7123
  "span",
7047
- { class: "staff-text" },
7048
- el(
7049
- "span",
7050
- { class: "card-head" },
7051
- el("strong", { text: roleName(p.role) }),
7052
- el("span", {
7053
- class: "chip " + (p.busy ? "warn" : "ok"),
7054
- text: p.busy ? t("staff.busy") : t("staff.free"),
7055
- }),
7056
- ),
7057
- el("span", { class: "small muted block", text: where }),
7058
- p.doing ? el("span", { class: "small block", text: p.doing }) : null,
7124
+ { class: "card-head" },
7125
+ el("strong", { text: p.name ? p.name + " · " + roleName(p.role) : roleName(p.role) }),
7126
+ el("span", {
7127
+ class: "chip " + (p.busy ? "warn" : "ok"),
7128
+ text: p.busy ? t("staff.busy") : t("staff.free"),
7129
+ }),
7059
7130
  ),
7060
- );
7131
+ el("span", { class: "small muted block", text: where }),
7132
+ p.doing ? el("span", { class: "small block", text: p.doing }) : null,
7133
+ ),
7134
+ );
7135
+ }
7136
+
7137
+ loaders.staff = () => {
7138
+ const box = clear(body());
7139
+ box.append(el("p", { class: "small muted", text: t("staff.intro") }));
7061
7140
  box.append(el("h3", { text: t("staff.officeTitle") }));
7062
7141
  box.append(
7063
- el("div", { class: "cards" }, ...world.staff().map((p) => card(p, t("room." + p.room)))),
7142
+ el(
7143
+ "div",
7144
+ { class: "cards" },
7145
+ ...world.staff().map((p) => personButton(p, t("room." + p.room))),
7146
+ ),
7064
7147
  );
7065
7148
  box.append(el("h3", { text: t("staff.poolTitle") }));
7066
7149
  box.append(el("p", { class: "small muted", text: t("staff.poolIntro") }));
7067
- box.append(el("div", { class: "cards" }, ...world.pool().map((p) => card(p, t("room.office")))));
7150
+ box.append(
7151
+ el("div", { class: "cards" }, ...world.pool().map((p) => personButton(p, t("room.office")))),
7152
+ );
7153
+ };
7154
+
7155
+ // --- the employee card ---------------------------------------------------------------------------
7156
+ // Who a person is (name, role, room, the agent behind them and its model) and
7157
+ // what they do on the floor now and did lately, all read from what the page
7158
+ // already has: the employee list shipped with it, the floor's tables and the
7159
+ // settings' fable rung.
7160
+ const EMPLOYEE_OF = new Map(EMPLOYEES.map((e) => [e.role, e]));
7161
+ const MODEL_NAMES = { fable: "Fable", opus: "Opus", sonnet: "Sonnet", haiku: "Haiku" };
7162
+ let fableRung = null;
7163
+
7164
+ /** The card's model line for a tier and the fable rung ("on", "off" or unknown). */
7165
+ function tierText(tier, rung) {
7166
+ if (tier === "fable" && rung === "off") return t("card.tier.fableOff");
7167
+ if (MODEL_NAMES[tier]) return t("card.tier.model", { v: MODEL_NAMES[tier] });
7168
+ if (tier === "session" || tier === "script" || tier === "none") return t("card.tier." + tier);
7169
+ return null;
7170
+ }
7171
+
7172
+ /**
7173
+ * The tables a role sits at, one row per table and phase (a review's three
7174
+ * reviewers are one piece of work): working first, then waiting, then done.
7175
+ */
7176
+ function workOf(role) {
7177
+ const order = { now: 0, next: 1, done: 2 };
7178
+ const out = [];
7179
+ for (const tb of allTables()) {
7180
+ for (const seat of tb.seats || []) {
7181
+ if (seat.role !== role && seat.label !== role) continue;
7182
+ const ph = (tb.phaseHistory || []).find((p) => p.id === seat.phase);
7183
+ const state =
7184
+ seat.status === "done"
7185
+ ? "done"
7186
+ : seat.status === "working" || ["reading", "writing", "spawning"].includes(seat.state)
7187
+ ? "now"
7188
+ : "next";
7189
+ out.push({ table: tb, seat, phase: ph ? ph.name : null, state });
7190
+ }
7191
+ }
7192
+ const seen = new Set();
7193
+ return out
7194
+ .sort((a, b) => order[a.state] - order[b.state])
7195
+ .filter((w) => {
7196
+ const key = w.table.id + "|" + (w.phase || "");
7197
+ if (seen.has(key)) return false;
7198
+ seen.add(key);
7199
+ return true;
7200
+ });
7201
+ }
7202
+
7203
+ function employeeCard(role) {
7204
+ const p = [...world.staff(), ...world.pool()].find((x) => x.role === role) || null;
7205
+ const e = EMPLOYEE_OF.get(role) || null;
7206
+ const work = workOf(role);
7207
+ const facts = el("div", { class: "employee-facts" });
7208
+ if (p)
7209
+ facts.append(el("div", { class: "small", text: t("card.room", { v: t("room." + p.room) }) }));
7210
+ if (e && e.agent)
7211
+ facts.append(el("div", { class: "small", text: t("card.agent", { v: e.agent }) }));
7212
+ const tierLine = el("div", { class: "small", "data-tier": e ? e.tier : "" });
7213
+ const tier = e ? tierText(e.tier, fableRung) : null;
7214
+ if (tier) tierLine.textContent = tier;
7215
+ facts.append(tierLine);
7216
+ if (e && e.tier === "fable" && fableRung === null && token) {
7217
+ api("GET", "/v1/settings")
7218
+ .then((s) => {
7219
+ fableRung = s && (s.model === "on" || s.model === "off") ? s.model : null;
7220
+ tierLine.textContent = tierText(e.tier, fableRung) || "";
7221
+ })
7222
+ .catch(() => {});
7223
+ }
7224
+ const now = work.find((w) => w.state === "now");
7225
+ const nowLine = now
7226
+ ? (now.table.taskId || t("table.session")) + (now.phase ? " · " + now.phase : "")
7227
+ : t("card.free");
7228
+ const recent = work.slice(0, 5);
7229
+ return el(
7230
+ "div",
7231
+ { class: "card employee-card", "data-role": role },
7232
+ el(
7233
+ "div",
7234
+ { class: "employee-head" },
7235
+ portraitImg(p ? world.portrait(p.sprite) : null),
7236
+ el(
7237
+ "div",
7238
+ {},
7239
+ el("strong", { class: "employee-name", text: e ? e.name : roleName(role) }),
7240
+ el("div", { class: "muted", text: roleName(role) }),
7241
+ facts,
7242
+ ),
7243
+ ),
7244
+ el("h4", { text: t("card.now") }),
7245
+ el("p", { class: "employee-now", text: nowLine }),
7246
+ el("h4", { text: t("card.recent") }),
7247
+ recent.length
7248
+ ? el(
7249
+ "ul",
7250
+ { class: "list employee-recent" },
7251
+ ...recent.map((w) =>
7252
+ el(
7253
+ "li",
7254
+ { class: "item small" },
7255
+ el("span", {
7256
+ text: (w.table.taskId || t("table.session")) + (w.phase ? " · " + w.phase : ""),
7257
+ }),
7258
+ " ",
7259
+ el("span", {
7260
+ class: "chip " + (w.state === "now" ? "warn" : w.state === "done" ? "ok" : ""),
7261
+ text: t("card.state." + w.state),
7262
+ }),
7263
+ ),
7264
+ ),
7265
+ )
7266
+ : el("p", { class: "small muted", text: t("card.noRecent") }),
7267
+ );
7268
+ }
7269
+
7270
+ // --- the building directory ---------------------------------------------------------------------
7271
+ // Each room of the floor that is drawn, what it is for, the people stationed
7272
+ // there and, for the meeting floor, how many run tables are at work.
7273
+ loaders.building = () => {
7274
+ const box = clear(body());
7275
+ box.append(el("p", { class: "small muted", text: t("building.intro") }));
7276
+ const people = [...world.staff(), ...world.pool()];
7277
+ const live = allTables().filter((tb) => !["complete", "completed", "done"].includes(tb.status));
7278
+ for (const kind of world.roomKinds()) {
7279
+ const here = people.filter((p) => p.room === kind);
7280
+ const section = el(
7281
+ "section",
7282
+ { class: "card building-room" },
7283
+ el(
7284
+ "div",
7285
+ { class: "card-head" },
7286
+ el("strong", { text: t("room." + kind) }),
7287
+ el("button", {
7288
+ type: "button",
7289
+ class: "ghost small",
7290
+ text: t("guide.show"),
7291
+ "aria-label": t("guide.show") + ": " + t("room." + kind),
7292
+ onclick: () => {
7293
+ closeWindow();
7294
+ world.focusRoom(kind);
7295
+ },
7296
+ }),
7297
+ ),
7298
+ el("div", { class: "small muted", text: t("guide.room." + kind) }),
7299
+ );
7300
+ if (kind === "meeting") {
7301
+ section.append(el("div", { class: "small", text: t("building.tables", { v: live.length }) }));
7302
+ }
7303
+ section.append(
7304
+ here.length
7305
+ ? el("div", { class: "cards" }, ...here.map((p) => personButton(p, t("room." + p.room))))
7306
+ : el("div", { class: "small muted", text: t("building.nobody") }),
7307
+ );
7308
+ section.dataset.room = kind;
7309
+ box.append(section);
7310
+ }
7068
7311
  };
7069
7312
 
7070
7313
  loaders.job = async () => {
@@ -7077,6 +7320,7 @@ loaders.job = async () => {
7077
7320
  $("window-title").textContent = roleName(role);
7078
7321
  const p = world.staff().find((x) => x.role === role);
7079
7322
  if (p) $("window-sub").textContent = t("room." + p.room);
7323
+ box.append(employeeCard(role));
7080
7324
  const busy = soloTableOf(role);
7081
7325
  if (busy) {
7082
7326
  box.append(