@skillcdn/console 0.4.3 → 0.4.5

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 (268) hide show
  1. package/README.md +6 -6
  2. package/dist/api.d.ts +4 -4
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +4 -4
  5. package/dist/api.js.map +1 -1
  6. package/dist/cli/cli.d.ts.map +1 -1
  7. package/dist/cli/cli.js +255 -33
  8. package/dist/cli/cli.js.map +1 -1
  9. package/dist/cli/format.d.ts +20 -5
  10. package/dist/cli/format.d.ts.map +1 -1
  11. package/dist/cli/format.js +98 -26
  12. package/dist/cli/format.js.map +1 -1
  13. package/dist/cli/help.d.ts.map +1 -1
  14. package/dist/cli/help.js +39 -15
  15. package/dist/cli/help.js.map +1 -1
  16. package/dist/cli/plugin-check.d.ts +5 -1
  17. package/dist/cli/plugin-check.d.ts.map +1 -1
  18. package/dist/cli/plugin-check.js +23 -4
  19. package/dist/cli/plugin-check.js.map +1 -1
  20. package/dist/cli/plugin-cli.d.ts.map +1 -1
  21. package/dist/cli/plugin-cli.js +10 -1
  22. package/dist/cli/plugin-cli.js.map +1 -1
  23. package/dist/cli/plugin-init.d.ts +2 -0
  24. package/dist/cli/plugin-init.d.ts.map +1 -1
  25. package/dist/cli/plugin-init.js +6 -0
  26. package/dist/cli/plugin-init.js.map +1 -1
  27. package/dist/client.d.ts +32 -1
  28. package/dist/client.d.ts.map +1 -1
  29. package/dist/client.js +14 -2
  30. package/dist/client.js.map +1 -1
  31. package/dist/compat.js +1 -1
  32. package/dist/components/board.d.ts +8 -0
  33. package/dist/components/board.d.ts.map +1 -1
  34. package/dist/components/board.js +49 -18
  35. package/dist/components/board.js.map +1 -1
  36. package/dist/components/decision-form.d.ts +6 -3
  37. package/dist/components/decision-form.d.ts.map +1 -1
  38. package/dist/components/decision-form.js +24 -18
  39. package/dist/components/decision-form.js.map +1 -1
  40. package/dist/components/decision-list.d.ts +5 -1
  41. package/dist/components/decision-list.d.ts.map +1 -1
  42. package/dist/components/decision-list.js +25 -5
  43. package/dist/components/decision-list.js.map +1 -1
  44. package/dist/components/event-feed.d.ts.map +1 -1
  45. package/dist/components/event-feed.js +34 -8
  46. package/dist/components/event-feed.js.map +1 -1
  47. package/dist/components/goals.d.ts.map +1 -1
  48. package/dist/components/goals.js +2 -2
  49. package/dist/components/goals.js.map +1 -1
  50. package/dist/components/home.d.ts +35 -0
  51. package/dist/components/home.d.ts.map +1 -0
  52. package/dist/components/home.js +326 -0
  53. package/dist/components/home.js.map +1 -0
  54. package/dist/components/my-decisions.d.ts +20 -3
  55. package/dist/components/my-decisions.d.ts.map +1 -1
  56. package/dist/components/my-decisions.js +14 -1
  57. package/dist/components/my-decisions.js.map +1 -1
  58. package/dist/components/pack-connect.d.ts.map +1 -1
  59. package/dist/components/pack-connect.js +5 -4
  60. package/dist/components/pack-connect.js.map +1 -1
  61. package/dist/components/people.d.ts +45 -1
  62. package/dist/components/people.d.ts.map +1 -1
  63. package/dist/components/people.js +125 -4
  64. package/dist/components/people.js.map +1 -1
  65. package/dist/components/picker.d.ts +8 -0
  66. package/dist/components/picker.d.ts.map +1 -1
  67. package/dist/components/picker.js +2 -2
  68. package/dist/components/picker.js.map +1 -1
  69. package/dist/components/plugin-frame.d.ts +3 -13
  70. package/dist/components/plugin-frame.d.ts.map +1 -1
  71. package/dist/components/plugin-frame.js +75 -21
  72. package/dist/components/plugin-frame.js.map +1 -1
  73. package/dist/components/plugin-settings.d.ts +5 -1
  74. package/dist/components/plugin-settings.d.ts.map +1 -1
  75. package/dist/components/plugin-settings.js +283 -45
  76. package/dist/components/plugin-settings.js.map +1 -1
  77. package/dist/components/projects.d.ts +0 -8
  78. package/dist/components/projects.d.ts.map +1 -1
  79. package/dist/components/projects.js +4 -14
  80. package/dist/components/projects.js.map +1 -1
  81. package/dist/components/searches.d.ts +11 -0
  82. package/dist/components/searches.d.ts.map +1 -0
  83. package/dist/components/searches.js +30 -0
  84. package/dist/components/searches.js.map +1 -0
  85. package/dist/components/task-form.d.ts.map +1 -1
  86. package/dist/components/task-form.js +6 -5
  87. package/dist/components/task-form.js.map +1 -1
  88. package/dist/components/task-view.d.ts.map +1 -1
  89. package/dist/components/task-view.js +2 -1
  90. package/dist/components/task-view.js.map +1 -1
  91. package/dist/components/ui.d.ts +16 -0
  92. package/dist/components/ui.d.ts.map +1 -1
  93. package/dist/components/ui.js +15 -2
  94. package/dist/components/ui.js.map +1 -1
  95. package/dist/connect-page.d.ts.map +1 -1
  96. package/dist/connect-page.js +5 -6
  97. package/dist/connect-page.js.map +1 -1
  98. package/dist/console.css +1123 -258
  99. package/dist/console.d.ts +12 -4
  100. package/dist/console.d.ts.map +1 -1
  101. package/dist/console.js +123 -27
  102. package/dist/console.js.map +1 -1
  103. package/dist/data.d.ts +18 -3
  104. package/dist/data.d.ts.map +1 -1
  105. package/dist/data.js +41 -1
  106. package/dist/data.js.map +1 -1
  107. package/dist/docs-page.d.ts.map +1 -1
  108. package/dist/docs-page.js +6 -5
  109. package/dist/docs-page.js.map +1 -1
  110. package/dist/home-tiles.d.ts +92 -0
  111. package/dist/home-tiles.d.ts.map +1 -0
  112. package/dist/home-tiles.js +294 -0
  113. package/dist/home-tiles.js.map +1 -0
  114. package/dist/i18n/en.d.ts +264 -1
  115. package/dist/i18n/en.d.ts.map +1 -1
  116. package/dist/i18n/en.js +260 -1
  117. package/dist/i18n/en.js.map +1 -1
  118. package/dist/i18n/index.d.ts +4 -2
  119. package/dist/i18n/index.d.ts.map +1 -1
  120. package/dist/i18n/index.js +10 -11
  121. package/dist/i18n/index.js.map +1 -1
  122. package/dist/i18n/ko.d.ts.map +1 -1
  123. package/dist/i18n/ko.js +255 -4
  124. package/dist/i18n/ko.js.map +1 -1
  125. package/dist/index.d.ts +7 -5
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +7 -5
  128. package/dist/index.js.map +1 -1
  129. package/dist/limits.d.ts +12 -0
  130. package/dist/limits.d.ts.map +1 -1
  131. package/dist/limits.js +12 -0
  132. package/dist/limits.js.map +1 -1
  133. package/dist/plugin/args.d.ts +6 -1
  134. package/dist/plugin/args.d.ts.map +1 -1
  135. package/dist/plugin/args.js +16 -11
  136. package/dist/plugin/args.js.map +1 -1
  137. package/dist/plugin/bridge.d.ts +63 -3
  138. package/dist/plugin/bridge.d.ts.map +1 -1
  139. package/dist/plugin/bridge.js +54 -0
  140. package/dist/plugin/bridge.js.map +1 -1
  141. package/dist/plugin/capabilities.d.ts +7 -1
  142. package/dist/plugin/capabilities.d.ts.map +1 -1
  143. package/dist/plugin/capabilities.js +24 -1
  144. package/dist/plugin/capabilities.js.map +1 -1
  145. package/dist/plugin/context.d.ts +174 -12
  146. package/dist/plugin/context.d.ts.map +1 -1
  147. package/dist/plugin/define.d.ts +14 -1
  148. package/dist/plugin/define.d.ts.map +1 -1
  149. package/dist/plugin/define.js +18 -2
  150. package/dist/plugin/define.js.map +1 -1
  151. package/dist/plugin/limits.d.ts +9 -2
  152. package/dist/plugin/limits.d.ts.map +1 -1
  153. package/dist/plugin/limits.js +9 -2
  154. package/dist/plugin/limits.js.map +1 -1
  155. package/dist/plugin/manifest.d.ts +98 -6
  156. package/dist/plugin/manifest.d.ts.map +1 -1
  157. package/dist/plugin/manifest.js +171 -10
  158. package/dist/plugin/manifest.js.map +1 -1
  159. package/dist/plugin/rest-schemas.d.ts +120 -0
  160. package/dist/plugin/rest-schemas.d.ts.map +1 -1
  161. package/dist/plugin/rest-schemas.js +78 -5
  162. package/dist/plugin/rest-schemas.js.map +1 -1
  163. package/dist/plugin/sandbox.d.ts +4 -3
  164. package/dist/plugin/sandbox.d.ts.map +1 -1
  165. package/dist/plugin/sandbox.js +33 -6
  166. package/dist/plugin/sandbox.js.map +1 -1
  167. package/dist/plugin/semver.d.ts +26 -0
  168. package/dist/plugin/semver.d.ts.map +1 -0
  169. package/dist/plugin/semver.js +76 -0
  170. package/dist/plugin/semver.js.map +1 -0
  171. package/dist/plugin/testing.d.ts +15 -1
  172. package/dist/plugin/testing.d.ts.map +1 -1
  173. package/dist/plugin/testing.js +42 -5
  174. package/dist/plugin/testing.js.map +1 -1
  175. package/dist/plugin/web.d.ts +16 -1
  176. package/dist/plugin/web.d.ts.map +1 -1
  177. package/dist/plugin/web.js +44 -1
  178. package/dist/plugin/web.js.map +1 -1
  179. package/dist/plugin.d.ts +3 -2
  180. package/dist/plugin.d.ts.map +1 -1
  181. package/dist/plugin.js +3 -2
  182. package/dist/plugin.js.map +1 -1
  183. package/dist/router.d.ts +19 -0
  184. package/dist/router.d.ts.map +1 -1
  185. package/dist/router.js +18 -0
  186. package/dist/router.js.map +1 -1
  187. package/dist/routes.d.ts +11 -2
  188. package/dist/routes.d.ts.map +1 -1
  189. package/dist/routes.js +14 -1
  190. package/dist/routes.js.map +1 -1
  191. package/dist/rules.d.ts +2 -2
  192. package/dist/rules.js +3 -3
  193. package/dist/schemas.d.ts +864 -2
  194. package/dist/schemas.d.ts.map +1 -1
  195. package/dist/schemas.js +156 -9
  196. package/dist/schemas.js.map +1 -1
  197. package/dist/use-action.d.ts +8 -2
  198. package/dist/use-action.d.ts.map +1 -1
  199. package/dist/use-action.js +13 -6
  200. package/dist/use-action.js.map +1 -1
  201. package/dist/vocabulary.d.ts +3 -1
  202. package/dist/vocabulary.d.ts.map +1 -1
  203. package/dist/vocabulary.js +9 -0
  204. package/dist/vocabulary.js.map +1 -1
  205. package/docs/specs/cli.md +10 -6
  206. package/docs/specs/plugins.md +83 -62
  207. package/docs/specs/rest.md +34 -16
  208. package/package.json +1 -1
  209. package/skills/building-a-plugin/SKILL.md +15 -12
  210. package/skills/planning-the-board/references/setting-up.md +2 -1
  211. package/skills/working-the-board/SKILL.md +3 -3
  212. package/src/api.ts +23 -0
  213. package/src/cli/cli.ts +323 -30
  214. package/src/cli/format.ts +122 -26
  215. package/src/cli/help.ts +43 -14
  216. package/src/cli/plugin-check.ts +41 -2
  217. package/src/cli/plugin-cli.ts +10 -1
  218. package/src/cli/plugin-init.ts +8 -0
  219. package/src/client.ts +78 -0
  220. package/src/compat.ts +1 -1
  221. package/src/components/board.tsx +86 -45
  222. package/src/components/decision-form.tsx +73 -36
  223. package/src/components/decision-list.tsx +45 -13
  224. package/src/components/event-feed.tsx +40 -7
  225. package/src/components/goals.tsx +4 -1
  226. package/src/components/home.tsx +615 -0
  227. package/src/components/my-decisions.tsx +50 -5
  228. package/src/components/pack-connect.tsx +5 -4
  229. package/src/components/people.tsx +500 -61
  230. package/src/components/picker.tsx +11 -2
  231. package/src/components/plugin-frame.tsx +85 -63
  232. package/src/components/plugin-settings.tsx +735 -185
  233. package/src/components/projects.tsx +14 -69
  234. package/src/components/searches.ts +47 -0
  235. package/src/components/task-form.tsx +23 -28
  236. package/src/components/task-view.tsx +7 -0
  237. package/src/components/ui.tsx +42 -2
  238. package/src/connect-page.tsx +5 -6
  239. package/src/console.tsx +303 -64
  240. package/src/data.ts +62 -3
  241. package/src/docs-page.tsx +6 -5
  242. package/src/home-tiles.ts +438 -0
  243. package/src/i18n/en.ts +274 -0
  244. package/src/i18n/index.ts +17 -14
  245. package/src/i18n/ko.ts +267 -4
  246. package/src/index.ts +18 -5
  247. package/src/limits.ts +12 -0
  248. package/src/plugin/args.ts +16 -11
  249. package/src/plugin/bridge.ts +122 -1
  250. package/src/plugin/capabilities.ts +28 -1
  251. package/src/plugin/context.ts +186 -9
  252. package/src/plugin/define.ts +38 -1
  253. package/src/plugin/limits.ts +9 -2
  254. package/src/plugin/manifest.ts +228 -13
  255. package/src/plugin/rest-schemas.ts +89 -6
  256. package/src/plugin/sandbox.ts +36 -8
  257. package/src/plugin/semver.ts +89 -0
  258. package/src/plugin/testing.ts +63 -6
  259. package/src/plugin/web.ts +66 -0
  260. package/src/plugin.ts +19 -0
  261. package/src/router.ts +25 -0
  262. package/src/routes.ts +17 -2
  263. package/src/rules.ts +3 -3
  264. package/src/schemas.ts +197 -10
  265. package/src/styles/console.css +1123 -258
  266. package/src/use-action.ts +16 -7
  267. package/src/vocabulary.ts +10 -0
  268. package/template/plugin/console-plugin.json +3 -1
package/src/i18n/en.ts CHANGED
@@ -137,6 +137,141 @@ export const en = {
137
137
  },
138
138
  },
139
139
 
140
+ /**
141
+ * What a failure says, by the code the server answers with. The server's own message is English
142
+ * and for programs; the pages read the code here, and a test holds every code the server can
143
+ * answer to having its words.
144
+ */
145
+ errors: {
146
+ internal: "Something went wrong on the console. Try again later.",
147
+ invalid_response: "The console gave an answer that could not be read.",
148
+ network: "The console could not be reached.",
149
+ no_project: "This page is on no project.",
150
+ not_found: "There is nothing at this address.",
151
+ "auth.deactivated": "This account has been deactivated.",
152
+ "auth.forbidden": "You don't have permission to do this.",
153
+ "auth.forbidden_origin": "This request must come from the console's own pages.",
154
+ "auth.invalid_token": "The token is not valid. It may have expired or been removed.",
155
+ "auth.not_admitted": "This account has not been added to the console. Ask an administrator.",
156
+ "auth.required": "Sign in to continue.",
157
+ "auth.session_required": "This can only be done signed in on the console's own pages.",
158
+ "category.in_use": "Tasks or goals use this category. Move them to another one first.",
159
+ "category.key_taken": "A category with this key already exists.",
160
+ "category.not_found": "The category was not found.",
161
+ "category.too_many": "The workspace has as many categories as it can hold.",
162
+ "client.outdated": "This command is too old for the console. Update it.",
163
+ "client.too_new": "This command is too new for the console.",
164
+ "comment.empty": "Write something or attach a file.",
165
+ "comment.too_many": "The task has as many comments as it can hold.",
166
+ "comment.too_many_files": "The comment has too many files.",
167
+ "connect.approved": "This connection has already been approved.",
168
+ "connect.not_found": "No connection is waiting under this code.",
169
+ "connect.too_many": "Too many agents are asking to connect. Try again in a moment.",
170
+ "credentials.unavailable": "The console's credentials could not be read. Try again later.",
171
+ "decision.answered": "This decision has already been answered.",
172
+ "decision.invalid_decider": "The person named to decide can't work in this project.",
173
+ "decision.invalid_run": "The run is not the asker's, or it has ended.",
174
+ "decision.invalid_task": "The task is not in this project.",
175
+ "decision.no_such_option": "That option is not one of the decision's.",
176
+ "decision.not_found": "The decision was not found.",
177
+ "decision.too_many": "The project has as many decisions as it can hold.",
178
+ "decision.too_many_deciders": "Too many people were named to decide.",
179
+ "decision.too_many_files": "The decision has too many files.",
180
+ "document.archived": "This page is archived.",
181
+ "document.conflict":
182
+ "The page changed while you were writing. Load it again and redo your change.",
183
+ "document.invalid_path": "That is not a path a page can have.",
184
+ "document.not_found": "The page was not found.",
185
+ "document.too_many": "The project has as many pages as it can hold.",
186
+ "document.too_many_files": "The page has as many files as it can hold.",
187
+ "document.too_many_versions": "The page has as many versions as it can hold.",
188
+ "document.version_not_found": "The page has no such version.",
189
+ "feed.too_many": "Too many live views are open. Close a tab and try again.",
190
+ "file.not_found": "The file was not found.",
191
+ "file.not_served": "This file is not served.",
192
+ "file.not_text": "This file can't be read as text.",
193
+ "file.store_unavailable": "Files can't be reached right now. Try again later.",
194
+ "file.too_large": "The file is too large.",
195
+ "goal.invalid_category": "The category is not one of the workspace's.",
196
+ "goal.invalid_dates": "The target day is before the start.",
197
+ "goal.not_found": "The goal was not found.",
198
+ "goal.too_many": "The project has as many goals as it can hold.",
199
+ "index.failed": "The pack could not be read.",
200
+ "index.indexing": "The pack is still being read. Try again in a moment.",
201
+ "listing.exists": "This login has already been added, or is already a member.",
202
+ "listing.not_found": "This login is not on the list.",
203
+ "listing.unknown_host": "Nobody signs in through that provider here.",
204
+ "member.exists": "This person is already in the project.",
205
+ "member.invalid_person": "This person is not in the workspace.",
206
+ "member.not_found": "This person is not in the project.",
207
+ "member.open_project": "The project is open to the workspace, so everyone is already a member.",
208
+ "mount.ref_not_found": "That version of the pack was not found.",
209
+ "mount.repo_not_found": "The pack was not found.",
210
+ "person.email_taken": "That address is another person's in this workspace.",
211
+ "team.not_found": "The team was not found.",
212
+ "team.name_taken": "A team of that name is there already.",
213
+ "team.key_taken": "A team or a project of that key is there already.",
214
+ "team.invalid_name": "A team's name is one line of words.",
215
+ "team.too_many": "The workspace holds as many teams as one may.",
216
+ "team.invalid_member": "Only an active person of the workspace is put in a team.",
217
+ "team.not_a_member": "The person is not in the team.",
218
+ "person.invalid_manager":
219
+ "A manager must be another active person, and not one of this person's own team.",
220
+ "person.last_admin": "The workspace needs at least one administrator.",
221
+ "person.not_found": "The person was not found.",
222
+ "person.of_organization": "The organization decides who is in. This can't be changed here.",
223
+ "picture.refused": "This picture can't be shown.",
224
+ "picture.unavailable": "The picture could not be fetched. Try again later.",
225
+ "plugin.conflict": "This has already been done, or something changed in the meantime.",
226
+ "plugin.disabled": "The plugin is off.",
227
+ "plugin.failed": "The plugin ran into a problem.",
228
+ "plugin.forbidden": "The plugin can't do this.",
229
+ "plugin.invalid_args": "Check what you entered and try again.",
230
+ "plugin.needs_consent": "An administrator must first agree to what the plugin asks.",
231
+ "plugin.not_found": "The plugin was not found.",
232
+ "plugin.rate_limited": "The plugin is sending too many requests. Try again in a moment.",
233
+ "plugin.required_by": "Another plugin needs this one. Turn that one off first.",
234
+ "plugin.requires": "This plugin needs another plugin that is not on.",
235
+ "plugin.timeout": "The plugin took too long to answer.",
236
+ "plugin.too_many": "The plugin has reached a limit.",
237
+ "plugin.unavailable": "The plugin can't be reached right now.",
238
+ "project.invalid_address": "That is not the address of a pack.",
239
+ "project.invalid_icon": "That file can't be used as the project's image.",
240
+ "project.key_taken": "A project or a team with this key already exists.",
241
+ "project.no_icon": "The project has no image.",
242
+ "project.not_found": "The project was not found.",
243
+ "project.pack_connect_refused": "SkillCDN refused the connection.",
244
+ "project.pack_connect_unsupported": "This console can't connect a pack.",
245
+ "project.pack_token_refused": "SkillCDN doesn't serve the pack to this token.",
246
+ "project.pack_token_unsupported": "This console can't keep a pack token.",
247
+ "project.too_many": "The workspace has as many projects as it can hold.",
248
+ "project.too_many_bytes": "The project's files have used up the room it has.",
249
+ "request.invalid": "Check what you entered and try again.",
250
+ "request.too_large": "That is too large to send.",
251
+ "run.not_found": "The run was not found.",
252
+ "run.not_yours": "This run is another person's.",
253
+ "run.over": "This run has ended.",
254
+ "run.task_closed": "The task is done or dropped.",
255
+ "run.task_not_found": "The task is not in this project.",
256
+ "run.too_many": "The task has been taken as many times as it can be.",
257
+ "run.too_many_artifacts": "The run has as many results as it can hold.",
258
+ "run.too_many_reports": "The run has as many reports as it can hold.",
259
+ "skills.unavailable": "SkillCDN could not be reached. Try again later.",
260
+ "task.invalid_category": "The category is not one of the workspace's.",
261
+ "task.invalid_dates": "The due day is before the start.",
262
+ "task.invalid_goal": "The goal is not in this project.",
263
+ "task.invalid_parent": "The parent is not a task of this project, or would make a loop.",
264
+ "task.invalid_worker": "A worker must be someone who can work in the project.",
265
+ "task.not_found": "The task was not found.",
266
+ "task.too_many": "The project has as many tasks as it can hold.",
267
+ "token.expiry_at_most": "A token can't last that many days here.",
268
+ "token.not_found": "The token was not found.",
269
+ "token.too_many": "You have as many tokens as you can hold. Remove one first.",
270
+ "workspace.pack_connect_refused": "SkillCDN refused the connection.",
271
+ "workspace.pack_connect_unsupported": "This console can't connect a pack.",
272
+ "workspace.pack_token_refused": "SkillCDN doesn't serve the pack to this token.",
273
+ "workspace.pack_token_unsupported": "This console can't keep a pack token.",
274
+ },
140
275
  nav: {
141
276
  projects: "Projects",
142
277
  work: "My work",
@@ -179,6 +314,11 @@ export const en = {
179
314
  problems: "Why it cannot run",
180
315
  nothing: "None",
181
316
  capabilities: "Capabilities",
317
+ required: "Required",
318
+ requiredHint: "The plugin can't work without these, so they stay on.",
319
+ optional: "Optional",
320
+ optionalHint: "Turn on what you want it to use. You can change this later.",
321
+ newCapability: "New",
182
322
  board: "Board project",
183
323
  boardHint: "Where its decisions, tasks and pages go.",
184
324
  boardNone: "None",
@@ -192,6 +332,10 @@ export const en = {
192
332
  projectsSome: "Some projects",
193
333
  settingsForm: "Settings",
194
334
  secretSet: (when: string) => `Set ${when}`,
335
+ secretSealedFrom: (host: string, when: string) => `Received from ${host} ${when}`,
336
+ secretExpires: (when: string) => `expires ${when}`,
337
+ secretExpired: (when: string) => `expired ${when}`,
338
+ secretHosts: (hosts: string) => `Sent to ${hosts} only.`,
195
339
  secretUnset: "Not set",
196
340
  secretNew: "New value",
197
341
  enable: "Enable",
@@ -200,11 +344,24 @@ export const en = {
200
344
  rolesNone: "No roles: every member may use it.",
201
345
  roleDefault: "Default",
202
346
  everyMember: "Every member",
347
+ roleManagers: "Reporting line",
348
+ whoeverManages: "Whoever someone reports to",
203
349
  grantEveryone: "Everyone",
204
350
  grantMembersOf: (project: string) => `Members of ${project}`,
205
351
  grantPeople: "People",
206
352
  grantProjects: "Members of a project",
207
353
  grantWhom: "Grant to…",
354
+ grantPlugins: "Plugins",
355
+ grantTeams: "Teams",
356
+ grantTeam: (team: string) => `The team ${team}`,
357
+ grantPlugin: (plugin: string) => `The plugin ${plugin}`,
358
+ asks: "Roles asked of other plugins",
359
+ asksHint:
360
+ "Roles of other plugins this plugin asks to hold, to act as itself in them; each is an administrator's to grant, here or when enabling.",
361
+ askGranted: "Granted",
362
+ askUngranted: "Not granted",
363
+ askUnavailable: (plugin: string) => `${plugin} is not enabled; grant it here once it is.`,
364
+ askGrantNow: "Grant it now",
208
365
  grant: "Grant",
209
366
  revoke: "Revoke",
210
367
  events: "What happened",
@@ -221,7 +378,22 @@ export const en = {
221
378
  purged: "Purged.",
222
379
  agentNote: "For agents",
223
380
  operations: "Commands and queries",
381
+ console: "Console versions",
382
+ consoleRange: (range: string) => `console ${range}`,
383
+ timeZoneHint: "In the workspace's time zone.",
384
+ keeps: "Kept for",
385
+ keepsFor: (collection: string, days: number) =>
386
+ `${collection}: ${days} ${days === 1 ? "day" : "days"}, then removed`,
387
+ needsTimeZone:
388
+ "The workspace has no time zone, so this plugin's times of day run on UTC until one is set.",
389
+ setTimeZone: "Set the time zone",
390
+ addItem: "Add",
391
+ itemPlaceholder: "Type, then add",
392
+ choose: "Choose…",
393
+ addOne: "Add…",
224
394
  },
395
+ /** What stands in for a frame the console has nothing to show in. */
396
+ frameUnavailable: "This can't be shown right now.",
225
397
  /** The capabilities (docs/specs/plugins.md, "Capabilities"), each by a name and the sentence of what it opens, as an administrator reads them before consenting. */
226
398
  capability: {
227
399
  files: {
@@ -233,6 +405,16 @@ export const en = {
233
405
  name: "Everyone",
234
406
  opens: "Reads everyone in the workspace, from its jobs and hooks too.",
235
407
  },
408
+ "people:read:email": {
409
+ name: "Work email",
410
+ opens:
411
+ "Reads the work email of the people it may read, to match them to accounts elsewhere.",
412
+ },
413
+ "people:act": {
414
+ name: "Acting for a person",
415
+ opens:
416
+ "Runs a command and answers a decision for a person who did it elsewhere, within what they may do, recorded as theirs through the plugin.",
417
+ },
236
418
  "projects:read": {
237
419
  name: "Projects",
238
420
  opens: "Reads the projects and members the person may see.",
@@ -275,6 +457,11 @@ export const en = {
275
457
  name: "Own database schema",
276
458
  opens: "Gets a schema and a login role of its own in the console's database.",
277
459
  },
460
+ "outbound:webrtc": {
461
+ name: "WebRTC on its pages",
462
+ opens:
463
+ "Its pages connect from each person's browser to any address, past the console: what they show, and the person's network address, can go anywhere.",
464
+ },
278
465
  outbound: (host: string) => ({
279
466
  name: `Requests to ${host}`,
280
467
  opens: `Sends https requests to ${host}.`,
@@ -464,6 +651,7 @@ export const en = {
464
651
  },
465
652
  partOf: "Part of",
466
653
  owner: "Owner",
654
+ writtenThrough: "Written through",
467
655
  workers: "Workers",
468
656
  written: "Written",
469
657
  changed: "Changed",
@@ -547,11 +735,14 @@ export const en = {
547
735
  askedThrough: (agent: string) => `asked through ${agent}`,
548
736
  about: "about",
549
737
  answeredBy: "answered",
738
+ answeredThrough: (agent: string) => `answered through ${agent}`,
550
739
  context: "Context",
551
740
  files: "Files",
552
741
  picture: (name: string) => `The picture ${name}`,
553
742
  whatFollowed: "What followed",
554
743
  nothingWritten: "Nothing written yet.",
744
+ wroteWhatFollowed: "wrote what followed",
745
+ wroteWhatFollowedThrough: (agent: string) => `wrote what followed through ${agent}`,
555
746
  outcomePlaceholder: "What was done with the answer, and what came of it, in Markdown.",
556
747
  writeWhatFollowed: "Write what followed",
557
748
  changeIt: "Change it",
@@ -568,6 +759,8 @@ export const en = {
568
759
  noTask: "No task in particular",
569
760
  decider: "Who decides",
570
761
  deciderPlaceholder: "You, unless you name someone",
762
+ addDecider: "Add a person",
763
+ decidersHint: "Any of them may answer; the first answer ends it.",
571
764
  me: "(you)",
572
765
  options: "Options",
573
766
  option: (n: number) => `Option ${n}`,
@@ -658,6 +851,7 @@ export const en = {
658
851
  target: "Target",
659
852
  noTarget: "No target day",
660
853
  setBy: "Set by",
854
+ setThrough: (agent: string) => `through ${agent}`,
661
855
  state: "State",
662
856
  nothingMore: "Nothing more was written about it.",
663
857
  about: "What reaching it means",
@@ -789,8 +983,13 @@ export const en = {
789
983
  console: "The console",
790
984
  as: (agent: string) => `as ${agent}`,
791
985
  asTitle: "The agent the person acted through",
986
+ via: (plugin: string) => `through ${plugin}`,
987
+ viaTitle: "The plugin that acted for the person",
988
+ thePlugin: (plugin: string) => `the plugin ${plugin}`,
792
989
  aTask: "a task",
793
990
  aPlugin: "a plugin",
991
+ aTeam: "a team",
992
+ theTeam: (team: string) => `the team ${team}`,
794
993
  /** After the sentence of a board's event a plugin caused (ADR-0052). */
795
994
  throughPlugin: (plugin: string) => `through the plugin ${plugin}`,
796
995
  everyone: "everyone",
@@ -846,6 +1045,15 @@ export const en = {
846
1045
  personUnlisted: (login: string) => `took ${login} off the list`,
847
1046
  personDeactivated: (login: string) => `deactivated ${login}`,
848
1047
  personReactivated: (login: string) => `reactivated ${login}`,
1048
+ managerChanged: (login: string, manager: string) => `set ${login}'s manager to ${manager}`,
1049
+ managerCleared: (login: string) => `cleared ${login}'s manager`,
1050
+ emailChanged: (login: string) => `changed ${login}'s work email`,
1051
+ emailCleared: (login: string) => `cleared ${login}'s work email`,
1052
+ teamCreated: (team: string) => `made the team ${team}`,
1053
+ teamRenamed: (from: string, team: string) => `renamed the team ${from} to ${team}`,
1054
+ teamRemoved: (team: string) => `deleted the team ${team}`,
1055
+ teamMemberAdded: (login: string, team: string) => `put ${login} in the team ${team}`,
1056
+ teamMemberRemoved: (login: string, team: string) => `took ${login} out of the team ${team}`,
849
1057
  projectCreated: (project: string) => `made the project ${project}`,
850
1058
  projectUpdated: (fields: string, project: string) =>
851
1059
  `changed ${fields} of the project ${project}`,
@@ -888,8 +1096,11 @@ export const en = {
888
1096
  fileAttached: (label: string, page: string) => `attached ${label} to ${page}`,
889
1097
  pluginEnabled: (plugin: string) => `enabled the plugin ${plugin}`,
890
1098
  pluginDisabled: (plugin: string) => `disabled the plugin ${plugin}`,
1099
+ pluginConsented: (plugin: string) => `changed the capabilities of the plugin ${plugin}`,
891
1100
  pluginConfigured: (fields: string, plugin: string) =>
892
1101
  `changed ${fields} of the plugin ${plugin}`,
1102
+ pluginSealed: (fields: string, plugin: string, host: string) =>
1103
+ `stored ${fields} of the plugin ${plugin}, received from ${host}`,
893
1104
  pluginGranted: (role: string, who: string, plugin: string) =>
894
1105
  `gave ${who} the role ${role} in the plugin ${plugin}`,
895
1106
  pluginRevoked: (role: string, who: string, plugin: string) =>
@@ -1057,11 +1268,44 @@ export const en = {
1057
1268
  },
1058
1269
  },
1059
1270
 
1271
+ /** The front page as the person arranges it (ADR-0061). */
1272
+ home: {
1273
+ edit: "Edit layout",
1274
+ hint: "Drag to move. Pick a size at the top right; × takes a tile off this page.",
1275
+ done: "Done",
1276
+ add: "Add",
1277
+ remove: "Remove from this page",
1278
+ size: "Size",
1279
+ sizes: {
1280
+ icon: "Icon",
1281
+ small: "Small",
1282
+ medium: "Medium",
1283
+ large: "Large",
1284
+ wide: "Wide",
1285
+ full: "Full",
1286
+ },
1287
+ },
1288
+
1060
1289
  people: {
1061
1290
  title: "People",
1062
1291
  list: "People",
1063
1292
  narrowed: "The people you share a project with, and the administrators.",
1064
1293
  roleOf: (name: string) => `Role of ${name}`,
1294
+ role: "Role",
1295
+ manager: "Manager",
1296
+ managerOf: (name: string) => `Manager of ${name}`,
1297
+ email: "Work email",
1298
+ emailOf: (name: string) => `Work email of ${name}`,
1299
+ emailHint:
1300
+ "Google's at sign-in; written here otherwise. Read by an administrator, the person, and a plugin allowed to.",
1301
+ team: "Direct reports",
1302
+ teams: "Teams",
1303
+ joinTeam: "Add to a team…",
1304
+ joinTeamOf: (name: string) => `Add ${name} to a team`,
1305
+ leaveTeam: (name: string, team: string) => `Take ${name} out of ${team}`,
1306
+ howMany: (count: number) => (count === 1 ? "1 person" : `${count} people`),
1307
+ views: { aria: "People and teams", people: "People", teams: "Teams" },
1308
+ nobody: "None",
1065
1309
  letIn: "Add a person",
1066
1310
  letInAria: "Add a person",
1067
1311
  notSignedIn: "Added, not signed in yet",
@@ -1111,6 +1355,36 @@ export const en = {
1111
1355
  },
1112
1356
  },
1113
1357
 
1358
+ /** The teams of the workspace (ADR-0073), a view of the people page of their own. */
1359
+ teams: {
1360
+ list: "Teams",
1361
+ none: {
1362
+ title: "No teams yet",
1363
+ body: "A team puts people under one name: a plugin finds them by it, and a role of a plugin granted to the team is held by everyone in it.",
1364
+ },
1365
+ members: (count: number) => (count === 1 ? "1 member" : `${count} members`),
1366
+ nobody: "Nobody in it yet.",
1367
+ nameOf: (team: string) => `Name of the team ${team}`,
1368
+ keyTitle:
1369
+ "The team's key: what a grant, a plugin and the command call it by. It never changes.",
1370
+ addMember: "Add a person…",
1371
+ addMemberTo: (team: string) => `Add a person to ${team}`,
1372
+ removeMember: (name: string, team: string) => `Take ${name} out of ${team}`,
1373
+ remove: "Delete team",
1374
+ removeAsk: (team: string) =>
1375
+ `Delete the team ${team}? The roles of plugins granted to it go with it; its people stay.`,
1376
+ newTeam: "New team",
1377
+ newAria: "New team",
1378
+ form: {
1379
+ name: "Team name",
1380
+ key: "Key",
1381
+ keyHint:
1382
+ "Lowercase letters, digits and hyphens: what a grant, a plugin and the command call the team by. No other team and no project has it, and it never changes.",
1383
+ hint: "The name is what people read, and can change; the key stays. People are added on the team's card once it is made.",
1384
+ submit: "Make the team",
1385
+ },
1386
+ },
1387
+
1114
1388
  agents: {
1115
1389
  title: "Agents",
1116
1390
  makeByHand: "Make a token by hand",
package/src/i18n/index.ts CHANGED
@@ -52,25 +52,28 @@ export function packFor(
52
52
  );
53
53
  }
54
54
 
55
- /**
56
- * The language to speak: the person's choice when it names a pack, else the first of the
57
- * browser's languages that does, else the first pack.
58
- */
59
- export function chooseLanguage(
60
- chosen: string | null | undefined,
55
+ /** The first of the browser's languages a pack speaks, or nothing. */
56
+ export function browserPack(
61
57
  browser: readonly string[],
62
- packs: readonly LanguagePack[] = DEFAULT_LANGUAGES,
63
- ): LanguagePack {
64
- const first = packs[0] ?? ENGLISH;
65
- const own = packFor(chosen, packs);
66
- if (own !== undefined) {
67
- return own;
68
- }
58
+ packs: readonly LanguagePack[],
59
+ ): LanguagePack | undefined {
69
60
  for (const tag of browser) {
70
61
  const found = packFor(tag, packs);
71
62
  if (found !== undefined) {
72
63
  return found;
73
64
  }
74
65
  }
75
- return first;
66
+ return undefined;
67
+ }
68
+
69
+ /**
70
+ * The language to speak: the person's own when it names a pack, else the first of the browser's
71
+ * languages that does, else the first pack.
72
+ */
73
+ export function chooseLanguage(
74
+ chosen: string | null | undefined,
75
+ browser: readonly string[],
76
+ packs: readonly LanguagePack[] = DEFAULT_LANGUAGES,
77
+ ): LanguagePack {
78
+ return packFor(chosen, packs) ?? browserPack(browser, packs) ?? packs[0] ?? ENGLISH;
76
79
  }