@skillcdn/console 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +79 -2
  3. package/dist/api.d.ts +7 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +11 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli/cli.d.ts +32 -0
  8. package/dist/cli/cli.d.ts.map +1 -0
  9. package/dist/cli/cli.js +553 -0
  10. package/dist/cli/cli.js.map +1 -0
  11. package/dist/cli/credentials.d.ts +16 -0
  12. package/dist/cli/credentials.d.ts.map +1 -0
  13. package/dist/cli/credentials.js +46 -0
  14. package/dist/cli/credentials.js.map +1 -0
  15. package/dist/cli/format.d.ts +16 -0
  16. package/dist/cli/format.d.ts.map +1 -0
  17. package/dist/cli/format.js +151 -0
  18. package/dist/cli/format.js.map +1 -0
  19. package/dist/cli/help.d.ts +16 -0
  20. package/dist/cli/help.d.ts.map +1 -0
  21. package/dist/cli/help.js +180 -0
  22. package/dist/cli/help.js.map +1 -0
  23. package/dist/cli/main.d.ts +3 -0
  24. package/dist/cli/main.d.ts.map +1 -0
  25. package/dist/cli/main.js +25 -0
  26. package/dist/cli/main.js.map +1 -0
  27. package/dist/cli/terminal.d.ts +12 -0
  28. package/dist/cli/terminal.d.ts.map +1 -0
  29. package/dist/cli/terminal.js +68 -0
  30. package/dist/cli/terminal.js.map +1 -0
  31. package/dist/client.d.ts +92 -0
  32. package/dist/client.d.ts.map +1 -0
  33. package/dist/client.js +117 -0
  34. package/dist/client.js.map +1 -0
  35. package/dist/components/board.d.ts +20 -0
  36. package/dist/components/board.d.ts.map +1 -0
  37. package/dist/components/board.js +19 -0
  38. package/dist/components/board.js.map +1 -0
  39. package/dist/components/decision-form.d.ts +13 -0
  40. package/dist/components/decision-form.d.ts.map +1 -0
  41. package/dist/components/decision-form.js +23 -0
  42. package/dist/components/decision-form.js.map +1 -0
  43. package/dist/components/decision-list.d.ts +22 -0
  44. package/dist/components/decision-list.d.ts.map +1 -0
  45. package/dist/components/decision-list.js +28 -0
  46. package/dist/components/decision-list.js.map +1 -0
  47. package/dist/components/event-feed.d.ts +13 -0
  48. package/dist/components/event-feed.d.ts.map +1 -0
  49. package/dist/components/event-feed.js +59 -0
  50. package/dist/components/event-feed.js.map +1 -0
  51. package/dist/components/markdown.d.ts +4 -0
  52. package/dist/components/markdown.d.ts.map +1 -0
  53. package/dist/components/markdown.js +34 -0
  54. package/dist/components/markdown.js.map +1 -0
  55. package/dist/components/people.d.ts +11 -0
  56. package/dist/components/people.d.ts.map +1 -0
  57. package/dist/components/people.js +7 -0
  58. package/dist/components/people.js.map +1 -0
  59. package/dist/components/runs.d.ts +27 -0
  60. package/dist/components/runs.d.ts.map +1 -0
  61. package/dist/components/runs.js +45 -0
  62. package/dist/components/runs.js.map +1 -0
  63. package/dist/components/shell.d.ts +22 -0
  64. package/dist/components/shell.d.ts.map +1 -0
  65. package/dist/components/shell.js +16 -0
  66. package/dist/components/shell.js.map +1 -0
  67. package/dist/components/sign-in.d.ts +11 -0
  68. package/dist/components/sign-in.d.ts.map +1 -0
  69. package/dist/components/sign-in.js +15 -0
  70. package/dist/components/sign-in.js.map +1 -0
  71. package/dist/components/skills.d.ts +7 -0
  72. package/dist/components/skills.d.ts.map +1 -0
  73. package/dist/components/skills.js +26 -0
  74. package/dist/components/skills.js.map +1 -0
  75. package/dist/components/task-form.d.ts +14 -0
  76. package/dist/components/task-form.d.ts.map +1 -0
  77. package/dist/components/task-form.js +34 -0
  78. package/dist/components/task-form.js.map +1 -0
  79. package/dist/components/task-view.d.ts +22 -0
  80. package/dist/components/task-view.d.ts.map +1 -0
  81. package/dist/components/task-view.js +32 -0
  82. package/dist/components/task-view.js.map +1 -0
  83. package/dist/components/tokens.d.ts +26 -0
  84. package/dist/components/tokens.d.ts.map +1 -0
  85. package/dist/components/tokens.js +42 -0
  86. package/dist/components/tokens.js.map +1 -0
  87. package/dist/components/ui.d.ts +61 -0
  88. package/dist/components/ui.d.ts.map +1 -0
  89. package/dist/components/ui.js +109 -0
  90. package/dist/components/ui.js.map +1 -0
  91. package/dist/console.css +1382 -0
  92. package/dist/console.d.ts +44 -0
  93. package/dist/console.d.ts.map +1 -0
  94. package/dist/console.js +181 -0
  95. package/dist/console.js.map +1 -0
  96. package/dist/data.d.ts +41 -0
  97. package/dist/data.d.ts.map +1 -0
  98. package/dist/data.js +208 -0
  99. package/dist/data.js.map +1 -0
  100. package/dist/index.d.ts +19 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +23 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/limits.d.ts +37 -0
  105. package/dist/limits.d.ts.map +1 -0
  106. package/dist/limits.js +40 -0
  107. package/dist/limits.js.map +1 -0
  108. package/dist/router.d.ts +37 -0
  109. package/dist/router.d.ts.map +1 -0
  110. package/dist/router.js +55 -0
  111. package/dist/router.js.map +1 -0
  112. package/dist/routes.d.ts +47 -0
  113. package/dist/routes.d.ts.map +1 -0
  114. package/dist/routes.js +53 -0
  115. package/dist/routes.js.map +1 -0
  116. package/dist/schemas.d.ts +789 -0
  117. package/dist/schemas.d.ts.map +1 -0
  118. package/dist/schemas.js +341 -0
  119. package/dist/schemas.js.map +1 -0
  120. package/dist/text.d.ts +6 -0
  121. package/dist/text.d.ts.map +1 -0
  122. package/dist/text.js +31 -0
  123. package/dist/text.js.map +1 -0
  124. package/dist/vocabulary.d.ts +35 -0
  125. package/dist/vocabulary.d.ts.map +1 -0
  126. package/dist/vocabulary.js +57 -0
  127. package/dist/vocabulary.js.map +1 -0
  128. package/package.json +70 -3
@@ -0,0 +1,44 @@
1
+ import { type ComponentType } from "react";
2
+ import { type ConsoleClient } from "./api.js";
3
+ import { type BoardProps } from "./components/board.js";
4
+ import { type DecisionListProps } from "./components/decision-list.js";
5
+ import { type EventFeedProps } from "./components/event-feed.js";
6
+ import { type PeopleListProps } from "./components/people.js";
7
+ import { type ShellProps } from "./components/shell.js";
8
+ import { type SignInProps } from "./components/sign-in.js";
9
+ import { type SkillListProps } from "./components/skills.js";
10
+ import { type TaskViewProps } from "./components/task-view.js";
11
+ import { type TokenListProps } from "./components/tokens.js";
12
+ /** The components a custom console may replace, each with the props the default one takes. */
13
+ export interface ConsoleComponents {
14
+ readonly Shell: ComponentType<ShellProps>;
15
+ readonly Board: ComponentType<BoardProps>;
16
+ readonly TaskView: ComponentType<TaskViewProps>;
17
+ readonly DecisionList: ComponentType<DecisionListProps>;
18
+ readonly EventFeed: ComponentType<EventFeedProps>;
19
+ readonly SignIn: ComponentType<SignInProps>;
20
+ readonly TokenList: ComponentType<TokenListProps>;
21
+ readonly PeopleList: ComponentType<PeopleListProps>;
22
+ readonly SkillList: ComponentType<SkillListProps>;
23
+ }
24
+ export declare const DEFAULT_COMPONENTS: ConsoleComponents;
25
+ export interface ConsoleConfig {
26
+ /** The origin of the console's API. Left out, the page's own origin. */
27
+ readonly baseUrl?: string | undefined;
28
+ /** What the board is called before the server says; the server's name wins once it answers. */
29
+ readonly title?: string | undefined;
30
+ /** The components to use in place of the default ones. */
31
+ readonly components?: Partial<ConsoleComponents> | undefined;
32
+ /** The client to talk to the server with; made from `baseUrl` when left out. For tests. */
33
+ readonly client?: ConsoleClient | undefined;
34
+ }
35
+ export interface ConsoleApp {
36
+ /** The whole console as one component, for a custom page to place. */
37
+ readonly App: ComponentType<{
38
+ readonly initialPath?: string | undefined;
39
+ }>;
40
+ /** Renders the console into `container`. Returns the way to take it down again. */
41
+ mount(container: Element): () => void;
42
+ }
43
+ export declare function createConsole(config?: ConsoleConfig): ConsoleApp;
44
+ //# sourceMappingURL=console.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAyD,MAAM,OAAO,CAAC;AAElG,OAAO,EAEL,KAAK,aAAa,EASnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAU,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAkC,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAe7F,8FAA8F;AAC9F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC;IACxD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CACnD;AAED,eAAO,MAAM,kBAAkB,EAAE,iBAUhC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,+FAA+F;IAC/F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;IAC7D,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAC3E,mFAAmF;IACnF,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,IAAI,CAAC;CACvC;AAqTD,wBAAgB,aAAa,CAAC,MAAM,GAAE,aAAkB,GAAG,UAAU,CA+FpE"}
@@ -0,0 +1,181 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { StrictMode, useCallback, useEffect, useMemo, useState } from "react";
3
+ import { createRoot } from "react-dom/client";
4
+ import { ApiError, createClient, } from "./api.js";
5
+ import { Board } from "./components/board.js";
6
+ import { DecisionForm } from "./components/decision-form.js";
7
+ import { DecisionList } from "./components/decision-list.js";
8
+ import { EventFeed } from "./components/event-feed.js";
9
+ import { PeopleList } from "./components/people.js";
10
+ import { Shell } from "./components/shell.js";
11
+ import { SignIn } from "./components/sign-in.js";
12
+ import { SkillList } from "./components/skills.js";
13
+ import { TaskForm } from "./components/task-form.js";
14
+ import { TaskView } from "./components/task-view.js";
15
+ import { NewToken, TokenForm, TokenList } from "./components/tokens.js";
16
+ import { Button, Callout, EmptyState, Spinner } from "./components/ui.js";
17
+ import { useConsoleData } from "./data.js";
18
+ import { matchRoute, PATHS, signInFailureOf, taskHref, withoutSignInParam, } from "./router.js";
19
+ export const DEFAULT_COMPONENTS = {
20
+ Shell,
21
+ Board,
22
+ TaskView,
23
+ DecisionList,
24
+ EventFeed,
25
+ SignIn,
26
+ TokenList,
27
+ PeopleList,
28
+ SkillList,
29
+ };
30
+ /** The browser's location, as the app reads it; a given path while rendering elsewhere. */
31
+ function useLocation(initialPath) {
32
+ const read = useCallback(() => typeof window === "undefined"
33
+ ? { pathname: initialPath ?? "/", search: "" }
34
+ : { pathname: window.location.pathname, search: window.location.search }, [initialPath]);
35
+ const [location, setLocation] = useState(read);
36
+ useEffect(() => {
37
+ const update = () => setLocation(read());
38
+ window.addEventListener("popstate", update);
39
+ return () => window.removeEventListener("popstate", update);
40
+ }, [read]);
41
+ const navigate = useCallback((href, replace = false) => {
42
+ if (typeof window === "undefined") {
43
+ return;
44
+ }
45
+ if (replace) {
46
+ window.history.replaceState(null, "", href);
47
+ }
48
+ else {
49
+ window.history.pushState(null, "", href);
50
+ window.scrollTo({ top: 0, left: 0, behavior: "instant" });
51
+ }
52
+ setLocation(read());
53
+ }, [read]);
54
+ return { location, navigate };
55
+ }
56
+ function errorWords(error) {
57
+ if (error instanceof ApiError) {
58
+ return error.message;
59
+ }
60
+ return "Something went wrong. Try again.";
61
+ }
62
+ function Page(props) {
63
+ const { route, data, components, navigate } = props;
64
+ const [writing, setWriting] = useState(false);
65
+ const [asking, setAsking] = useState(false);
66
+ const [making, setMaking] = useState(false);
67
+ const [fresh, setFresh] = useState(undefined);
68
+ const [busy, setBusy] = useState(false);
69
+ const [error, setError] = useState(undefined);
70
+ const tasksById = useMemo(() => new Map(data.tasks.map((task) => [task.id, task])), [data.tasks]);
71
+ const href = (task) => taskHref(task.id);
72
+ /** Runs a change, shows what went wrong, and refreshes what it touched. */
73
+ const act = async (work) => {
74
+ setBusy(true);
75
+ setError(undefined);
76
+ try {
77
+ await work();
78
+ }
79
+ catch (failure) {
80
+ setError(errorWords(failure));
81
+ }
82
+ finally {
83
+ setBusy(false);
84
+ }
85
+ };
86
+ const onMove = (task, state) => void act(() => data.actions.updateTask(task.id, { state }));
87
+ const onChange = (task, patch) => void act(() => data.actions.updateTask(task.id, patch));
88
+ const onAnswer = (decision, input) => void act(() => data.actions.answerDecision(decision.id, input));
89
+ const onRaise = (input) => void act(() => data.actions.raiseDecision(input));
90
+ if (route.name === "board") {
91
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sc-page-head", children: [_jsx("h1", { className: "sc-page-title", children: "Board" }), _jsx(Button, { variant: "primary", onClick: () => setWriting(true), disabled: writing, children: "Write a task" })] }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), writing && (_jsx("section", { className: "sc-panel", "aria-label": "Write a task", children: _jsx(TaskForm, { people: data.people, parents: data.tasks, busy: busy, onSubmit: (input) => void act(async () => {
92
+ await data.actions.createTask(input);
93
+ setWriting(false);
94
+ }), onCancel: () => setWriting(false) }) })), _jsx(components.Board, { tasks: data.tasks, taskHref: href, onOpen: (task) => navigate(href(task)), onMove: onMove, empty: data.tasks.length === 0 ? (_jsx(EmptyState, { title: "Nothing on the board yet", body: "Write the first task: what is to be done, and for whom.", action: _jsx(Button, { onClick: () => setWriting(true), children: "Write a task" }) })) : undefined })] }));
95
+ }
96
+ if (route.name === "task") {
97
+ const task = tasksById.get(route.id);
98
+ if (task === undefined) {
99
+ return (_jsx(EmptyState, { title: "No such task", body: "It may have been written on another board, or the link is wrong." }));
100
+ }
101
+ return (_jsx(components.TaskView, { task: task, people: data.people, tasks: data.tasks, decisions: data.decisions, runs: data.runs, taskHref: href, decisionHref: () => PATHS.decisions, busy: busy, error: error, onChange: onChange, onMove: onMove, onRaiseDecision: onRaise, onAnswer: onAnswer, onAbandonRun: (run) => void act(() => data.actions.abandonRun(run.id)) }));
102
+ }
103
+ if (route.name === "decisions") {
104
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sc-page-head", children: [_jsx("h1", { className: "sc-page-title", children: "Decisions" }), _jsx(Button, { variant: "primary", onClick: () => setAsking(true), disabled: asking, children: "Raise a decision" })] }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), asking && (_jsx("section", { className: "sc-panel", "aria-label": "Raise a decision", children: _jsx(DecisionForm, { tasks: data.tasks, busy: busy, onSubmit: (input) => void act(async () => {
105
+ await data.actions.raiseDecision(input);
106
+ setAsking(false);
107
+ }), onCancel: () => setAsking(false) }) })), _jsx(components.DecisionList, { decisions: data.decisions, tasks: tasksById, taskHref: href, onAnswer: onAnswer, busy: busy, empty: _jsx(EmptyState, { title: "Nothing waits for a person", body: "A decision raised from a task, or from here, shows up on this page." }) })] }));
108
+ }
109
+ if (route.name === "feed") {
110
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "sc-page-head", children: _jsx("h1", { className: "sc-page-title", children: "What happened" }) }), _jsx(components.EventFeed, { events: data.events, href: (event) => (event.taskId === null ? undefined : taskHref(event.taskId)), empty: _jsx(EmptyState, { title: "Nothing happened yet" }) })] }));
111
+ }
112
+ if (route.name === "skills") {
113
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "sc-page-head", children: _jsx("h1", { className: "sc-page-title", children: "Skills" }) }), _jsx(components.SkillList, { skills: data.skills })] }));
114
+ }
115
+ if (route.name === "people") {
116
+ const me = data.me?.person ?? undefined;
117
+ const administrator = me?.role === "admin";
118
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: "sc-page-head", children: _jsx("h1", { className: "sc-page-title", children: "People" }) }), _jsx("p", { className: "sc-lead", children: "Everyone who has signed in. An administrator configures the board and says what each person is; a member works on it. What a person may do, their agents may do." }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), _jsx(components.PeopleList, { people: data.people, me: me, busy: busy, onChangeRole: administrator
119
+ ? (person, role) => void act(() => data.actions.updatePerson(person.id, { role }))
120
+ : undefined })] }));
121
+ }
122
+ if (route.name === "tokens") {
123
+ const origin = typeof window === "undefined" ? "" : window.location.origin;
124
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "sc-page-head", children: [_jsx("h1", { className: "sc-page-title", children: "Tokens" }), _jsx(Button, { variant: "primary", onClick: () => setMaking(true), disabled: making, children: "Make a token" })] }), _jsx("p", { className: "sc-lead", children: "A token lets an agent, a script or a console of your own act as you on this board: what you may do, it may do. Make one per agent, name it after where it runs, and remove it when that is over." }), error !== undefined && _jsx(Callout, { tone: "danger", children: error }), fresh !== undefined && (_jsx(NewToken, { token: fresh.token, secret: fresh.secret, onDone: () => setFresh(undefined) })), making && (_jsx("section", { className: "sc-panel", "aria-label": "Make a token", children: _jsx(TokenForm, { busy: busy, onSubmit: (input) => void act(async () => {
125
+ setFresh(await data.actions.createToken(input));
126
+ setMaking(false);
127
+ }), onCancel: () => setMaking(false) }) })), _jsx(components.TokenList, { tokens: data.tokens, busy: busy, onRevoke: (token) => void act(() => data.actions.revokeToken(token.id)), empty: _jsx(EmptyState, { title: "No tokens yet", body: "Make one for your agent, and it can work on this board as you." }) }), _jsxs("section", { className: "sc-panel sc-connect", "aria-label": "Connecting an agent", children: [_jsx("h2", { className: "sc-section-title", children: "Connecting an agent" }), _jsxs("p", { children: ["An agent works this board with the ", _jsx("code", { children: "console" }), " command, which comes with the", " ", _jsx("code", { children: "@skillcdn/console" }), " package. Install the package where the agent runs, then sign the command in with a token made here:"] }), _jsxs("pre", { className: "sc-code", children: ["npm install -g @skillcdn/console", "\n", "console login --url ", origin] }), _jsxs("p", { children: ["It asks for the token and keeps it in your home directory, and your agent is you from then on: ", _jsx("code", { children: "console take" }), " starts work on a task, ", _jsx("code", { children: "console report" }), ",", " ", _jsx("code", { children: "console hand-in" }), " and ", _jsx("code", { children: "console ask" }), " say how it goes, and", " ", _jsx("code", { children: "console finish" }), " ends the run. ", _jsx("code", { children: "console help" }), " says the rest."] })] })] }));
128
+ }
129
+ return _jsx(EmptyState, { title: "There is nothing at this address" });
130
+ }
131
+ export function createConsole(config = {}) {
132
+ const components = { ...DEFAULT_COMPONENTS, ...config.components };
133
+ const client = config.client ?? createClient({ baseUrl: config.baseUrl ?? "" });
134
+ const fallbackTitle = config.title ?? "Console";
135
+ function App(props) {
136
+ const { location, navigate } = useLocation(props.initialPath);
137
+ const data = useConsoleData(client);
138
+ const route = useMemo(() => matchRoute(location.pathname), [location.pathname]);
139
+ const failure = signInFailureOf(location.search);
140
+ const title = data.me?.workspace.name ?? fallbackTitle;
141
+ useEffect(() => {
142
+ if (typeof document !== "undefined") {
143
+ document.title = title;
144
+ }
145
+ }, [title]);
146
+ if (data.me === undefined) {
147
+ return (_jsx("div", { className: "sc-loading", children: data.error === undefined ? (_jsx(Spinner, { label: "Loading" })) : (_jsx(Callout, { tone: "danger", title: "The console could not be reached", action: _jsx(Button, { onClick: data.reload, children: "Try again" }), children: data.error })) }));
148
+ }
149
+ if (data.me.person === null) {
150
+ return (_jsx(components.SignIn, { title: title, providers: data.me.signIn, returnTo: withoutSignInParam(location.pathname, location.search), failure: failure }));
151
+ }
152
+ const waiting = data.decisions.filter((decision) => decision.answer === null).length;
153
+ const nav = [
154
+ {
155
+ href: PATHS.board,
156
+ label: "Board",
157
+ current: route.name === "board" || route.name === "task",
158
+ },
159
+ {
160
+ href: PATHS.decisions,
161
+ label: "Decisions",
162
+ current: route.name === "decisions",
163
+ count: waiting,
164
+ },
165
+ { href: PATHS.feed, label: "Feed", current: route.name === "feed" },
166
+ { href: PATHS.skills, label: "Skills", current: route.name === "skills" },
167
+ { href: PATHS.people, label: "People", current: route.name === "people" },
168
+ { href: PATHS.tokens, label: "Tokens", current: route.name === "tokens" },
169
+ ];
170
+ return (_jsx(components.Shell, { title: title, nav: nav, person: data.me.person, live: data.live, onNavigate: (href) => navigate(href), onSignOut: () => void data.actions.signOut(), children: data.loaded ? (_jsx(Page, { route: route, data: data, components: components, navigate: navigate })) : (_jsx("div", { className: "sc-loading", children: _jsx(Spinner, { label: "Loading the board" }) })) }));
171
+ }
172
+ return {
173
+ App,
174
+ mount(container) {
175
+ const root = createRoot(container);
176
+ root.render(_jsx(StrictMode, { children: _jsx(App, {}) }));
177
+ return () => root.unmount();
178
+ },
179
+ };
180
+ }
181
+ //# sourceMappingURL=console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../src/console.tsx"],"names":[],"mappings":"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"}
package/dist/data.d.ts ADDED
@@ -0,0 +1,41 @@
1
+ import { type ConsoleClient, type RestAnswerInput, type RestDecision, type RestDecisionInput, type RestEvent, type RestMe, type RestPerson, type RestPersonPatch, type RestRun, type RestSkills, type RestTask, type RestTaskInput, type RestTaskPatch, type RestToken, type RestTokenCreated, type RestTokenInput } from "./api.js";
2
+ export interface ConsoleActions {
3
+ createTask(input: RestTaskInput): Promise<RestTask>;
4
+ updateTask(id: string, patch: RestTaskPatch): Promise<RestTask>;
5
+ raiseDecision(input: RestDecisionInput): Promise<RestDecision>;
6
+ answerDecision(id: string, input: RestAnswerInput): Promise<RestDecision>;
7
+ /** Changes what a person is; for an administrator. */
8
+ updatePerson(id: string, patch: RestPersonPatch): Promise<RestPerson>;
9
+ /** Marks a run that will not come back as abandoned. */
10
+ abandonRun(id: string): Promise<RestRun>;
11
+ /** Makes a token for whoever is signed in; the answer carries the secret, this once. */
12
+ createToken(input: RestTokenInput): Promise<RestTokenCreated>;
13
+ revokeToken(id: string): Promise<void>;
14
+ signOut(): Promise<void>;
15
+ }
16
+ export interface ConsoleData {
17
+ /** Who is signed in and what the board is called; `undefined` until the server has answered. */
18
+ readonly me: RestMe | undefined;
19
+ /** What went wrong asking who is signed in, for a person. */
20
+ readonly error: string | undefined;
21
+ /** True once the board has been loaded for the first time. */
22
+ readonly loaded: boolean;
23
+ /** Whether the stream of events is connected. */
24
+ readonly live: boolean;
25
+ readonly tasks: readonly RestTask[];
26
+ readonly decisions: readonly RestDecision[];
27
+ readonly people: readonly RestPerson[];
28
+ /** The runs of the board, newest first. */
29
+ readonly runs: readonly RestRun[];
30
+ /** Oldest first. */
31
+ readonly events: readonly RestEvent[];
32
+ /** The tokens of whoever is signed in, newest first. */
33
+ readonly tokens: readonly RestToken[];
34
+ /** The organization's skills, as the console answered; `undefined` until it has. */
35
+ readonly skills: RestSkills | undefined;
36
+ readonly actions: ConsoleActions;
37
+ /** Asks everything again, from who is signed in on. */
38
+ reload(): void;
39
+ }
40
+ export declare function useConsoleData(client: ConsoleClient): ConsoleData;
41
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,aAAa,EAElB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,cAAc,EAEpB,MAAM,UAAU,CAAC;AAalB,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChE,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/D,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1E,sDAAsD;IACtD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACtE,wDAAwD;IACxD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,wFAAwF;IACxF,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,gGAAgG;IAChG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,iDAAiD;IACjD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC;IAClC,oBAAoB;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,uDAAuD;IACvD,MAAM,IAAI,IAAI,CAAC;CAChB;AAiBD,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAoMjE"}
package/dist/data.js ADDED
@@ -0,0 +1,208 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ import { ApiError, EVENT_KINDS, restEventSchema, } from "./api.js";
3
+ // What the console shows, and how it stays current: the board is loaded whole, the feed is
4
+ // read from the beginning, and from then on the server's stream says when something changed.
5
+ // On every event the lists are loaded again, which is the boring way to be right.
6
+ /** How many events the feed keeps on the page. */
7
+ const FEED_KEEP = 200;
8
+ /** How many pages of the feed are read at the start before the stream takes over. */
9
+ const FEED_MAX_PAGES = 20;
10
+ /** How long changes that arrive together are gathered before the lists are loaded once. */
11
+ const RELOAD_DELAY_MS = 150;
12
+ /** The whole feed from the beginning, page by page, bounded. */
13
+ async function readFeed(client, signal) {
14
+ const events = [];
15
+ let after = 0;
16
+ for (let page = 0; page < FEED_MAX_PAGES; page += 1) {
17
+ const result = await client.events(after, signal);
18
+ events.push(...result.items);
19
+ after = result.items.at(-1)?.id ?? after;
20
+ if (!result.more) {
21
+ break;
22
+ }
23
+ }
24
+ return events.slice(-FEED_KEEP);
25
+ }
26
+ export function useConsoleData(client) {
27
+ const [me, setMe] = useState(undefined);
28
+ const [error, setError] = useState(undefined);
29
+ const [loaded, setLoaded] = useState(false);
30
+ const [live, setLive] = useState(false);
31
+ const [tasks, setTasks] = useState([]);
32
+ const [decisions, setDecisions] = useState([]);
33
+ const [people, setPeople] = useState([]);
34
+ const [runs, setRuns] = useState([]);
35
+ const [events, setEvents] = useState([]);
36
+ const [tokens, setTokens] = useState([]);
37
+ const [skills, setSkills] = useState(undefined);
38
+ const [generation, setGeneration] = useState(0);
39
+ const lastEvent = useRef(0);
40
+ const reload = useCallback(() => setGeneration((current) => current + 1), []);
41
+ /** Loads the lists again. What fails stays as it was; the next event asks again. */
42
+ const refreshLists = useCallback(async (signal) => {
43
+ const [nextTasks, nextDecisions, nextPeople, nextRuns] = await Promise.all([
44
+ client.tasks(undefined, signal),
45
+ client.decisions(undefined, signal),
46
+ client.people(signal),
47
+ client.runs(undefined, signal),
48
+ ]);
49
+ if (signal?.aborted === true) {
50
+ return;
51
+ }
52
+ setTasks(nextTasks.items);
53
+ setDecisions(nextDecisions.items);
54
+ setPeople(nextPeople.items);
55
+ setRuns(nextRuns.items);
56
+ }, [client]);
57
+ // Who is signed in, then the board, then the feed; and the stream from where the feed ends.
58
+ // biome-ignore lint/correctness/useExhaustiveDependencies: `generation` is the trigger
59
+ useEffect(() => {
60
+ const controller = new AbortController();
61
+ const { signal } = controller;
62
+ let source;
63
+ let reloadTimer;
64
+ setError(undefined);
65
+ const run = async () => {
66
+ let answer;
67
+ try {
68
+ answer = await client.me(signal);
69
+ }
70
+ catch (failure) {
71
+ if (!signal.aborted) {
72
+ setError(failure instanceof ApiError ? failure.message : "The server could not be reached.");
73
+ }
74
+ return;
75
+ }
76
+ if (signal.aborted) {
77
+ return;
78
+ }
79
+ setMe(answer);
80
+ if (answer.person === null) {
81
+ setLoaded(false);
82
+ return;
83
+ }
84
+ try {
85
+ const [, feed, mine] = await Promise.all([
86
+ refreshLists(signal),
87
+ readFeed(client, signal),
88
+ client.tokens(signal),
89
+ ]);
90
+ if (signal.aborted) {
91
+ return;
92
+ }
93
+ setEvents(feed);
94
+ setTokens(mine.items);
95
+ lastEvent.current = feed.at(-1)?.id ?? 0;
96
+ setLoaded(true);
97
+ }
98
+ catch (failure) {
99
+ if (!signal.aborted) {
100
+ setError(failure instanceof ApiError ? failure.message : "The board could not be loaded.");
101
+ }
102
+ return;
103
+ }
104
+ // The skills are someone else's to serve: asked for on their own, so that the board
105
+ // stands without them.
106
+ client
107
+ .skills(signal)
108
+ .then((answer) => {
109
+ if (!signal.aborted) {
110
+ setSkills(answer);
111
+ }
112
+ })
113
+ .catch(() => undefined);
114
+ if (typeof EventSource === "undefined") {
115
+ return;
116
+ }
117
+ source = new EventSource(client.eventStreamUrl(lastEvent.current));
118
+ source.onopen = () => setLive(true);
119
+ source.onerror = () => setLive(false);
120
+ const arrived = (message) => {
121
+ const parsed = restEventSchema.safeParse(JSON.parse(String(message.data)));
122
+ if (!parsed.success || parsed.data.id <= lastEvent.current) {
123
+ return;
124
+ }
125
+ lastEvent.current = parsed.data.id;
126
+ const event = parsed.data;
127
+ setEvents((current) => [...current, event].slice(-FEED_KEEP));
128
+ clearTimeout(reloadTimer);
129
+ reloadTimer = setTimeout(() => {
130
+ refreshLists(signal).catch(() => undefined);
131
+ }, RELOAD_DELAY_MS);
132
+ };
133
+ for (const kind of EVENT_KINDS) {
134
+ source.addEventListener(kind, arrived);
135
+ }
136
+ };
137
+ void run();
138
+ return () => {
139
+ controller.abort();
140
+ clearTimeout(reloadTimer);
141
+ source?.close();
142
+ setLive(false);
143
+ };
144
+ }, [client, generation, refreshLists]);
145
+ const actions = useMemo(() => ({
146
+ async createTask(input) {
147
+ const task = await client.createTask(input);
148
+ await refreshLists();
149
+ return task;
150
+ },
151
+ async updateTask(id, patch) {
152
+ const task = await client.updateTask(id, patch);
153
+ setTasks((current) => current.map((candidate) => (candidate.id === id ? task : candidate)));
154
+ return task;
155
+ },
156
+ async raiseDecision(input) {
157
+ const decision = await client.raiseDecision(input);
158
+ await refreshLists();
159
+ return decision;
160
+ },
161
+ async answerDecision(id, input) {
162
+ const decision = await client.answerDecision(id, input);
163
+ await refreshLists();
164
+ return decision;
165
+ },
166
+ async updatePerson(id, patch) {
167
+ const person = await client.updatePerson(id, patch);
168
+ setMe((current) => (current?.person?.id === id ? { ...current, person } : current));
169
+ await refreshLists();
170
+ return person;
171
+ },
172
+ async abandonRun(id) {
173
+ const run = await client.endRun(id, { status: "abandoned" });
174
+ await refreshLists();
175
+ return run;
176
+ },
177
+ async createToken(input) {
178
+ const made = await client.createToken(input);
179
+ setTokens((await client.tokens()).items);
180
+ return made;
181
+ },
182
+ async revokeToken(id) {
183
+ await client.revokeToken(id);
184
+ setTokens((current) => current.filter((token) => token.id !== id));
185
+ },
186
+ async signOut() {
187
+ await client.signOut();
188
+ setMe((current) => (current === undefined ? undefined : { ...current, person: null }));
189
+ setLoaded(false);
190
+ },
191
+ }), [client, refreshLists]);
192
+ return {
193
+ me,
194
+ error,
195
+ loaded,
196
+ live,
197
+ tasks,
198
+ decisions,
199
+ people,
200
+ runs,
201
+ events,
202
+ tokens,
203
+ skills,
204
+ actions,
205
+ reload,
206
+ };
207
+ }
208
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export * from "./api.js";
2
+ export { Board, type BoardProps, TaskCard } from "./components/board.js";
3
+ export { DecisionForm, type DecisionFormProps } from "./components/decision-form.js";
4
+ export { DecisionCard, type DecisionCardProps, DecisionList, type DecisionListProps, } from "./components/decision-list.js";
5
+ export { describeEvent, EventFeed, type EventFeedProps } from "./components/event-feed.js";
6
+ export { Markdown } from "./components/markdown.js";
7
+ export { PeopleList, type PeopleListProps } from "./components/people.js";
8
+ export { RUN_STATUS_LABELS, RunCard, type RunCardProps, RunList, type RunListProps, RunStatusBadge, } from "./components/runs.js";
9
+ export { type NavItem, Shell, type ShellProps } from "./components/shell.js";
10
+ export { SignIn, type SignInProps } from "./components/sign-in.js";
11
+ export { SkillList, type SkillListProps } from "./components/skills.js";
12
+ export { TaskForm, type TaskFormProps } from "./components/task-form.js";
13
+ export { TaskView, type TaskViewProps } from "./components/task-view.js";
14
+ export { NewToken, type NewTokenProps, TokenForm, type TokenFormProps, TokenList, type TokenListProps, } from "./components/tokens.js";
15
+ export { Avatar, Badge, Button, Callout, cx, EmptyState, formatBytes, formatInstant, PersonChip, PRIORITY_LABELS, PriorityBadge, ROLE_LABELS, RoleBadge, Spinner, STATE_LABELS, StateBadge, Time, } from "./components/ui.js";
16
+ export { type ConsoleApp, type ConsoleComponents, type ConsoleConfig, createConsole, DEFAULT_COMPONENTS, } from "./console.js";
17
+ export { type ConsoleActions, type ConsoleData, useConsoleData } from "./data.js";
18
+ export { matchRoute, PATHS, type Route, signInFailureOf, taskHref, withoutSignInParam, } from "./router.js";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EACL,YAAY,EACZ,KAAK,iBAAiB,EACtB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,OAAO,EACP,KAAK,YAAY,EACjB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,QAAQ,EACR,KAAK,aAAa,EAClB,SAAS,EACT,KAAK,cAAc,EACnB,SAAS,EACT,KAAK,cAAc,GACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,aAAa,EACb,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EACL,UAAU,EACV,KAAK,EACL,KAAK,KAAK,EACV,eAAe,EACf,QAAQ,EACR,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,23 @@
1
+ // What a custom console is built from (docs/architecture.md, "The package and custom consoles"):
2
+ // the schemas and the client of the console's API, the components, and the composition of the
3
+ // default console. The first layer is also on its own at `@skillcdn/console/api`, for a server or
4
+ // a script that wants none of the pages. The styles are `@skillcdn/console/console.css`.
5
+ export * from "./api.js";
6
+ export { Board, TaskCard } from "./components/board.js";
7
+ export { DecisionForm } from "./components/decision-form.js";
8
+ export { DecisionCard, DecisionList, } from "./components/decision-list.js";
9
+ export { describeEvent, EventFeed } from "./components/event-feed.js";
10
+ export { Markdown } from "./components/markdown.js";
11
+ export { PeopleList } from "./components/people.js";
12
+ export { RUN_STATUS_LABELS, RunCard, RunList, RunStatusBadge, } from "./components/runs.js";
13
+ export { Shell } from "./components/shell.js";
14
+ export { SignIn } from "./components/sign-in.js";
15
+ export { SkillList } from "./components/skills.js";
16
+ export { TaskForm } from "./components/task-form.js";
17
+ export { TaskView } from "./components/task-view.js";
18
+ export { NewToken, TokenForm, TokenList, } from "./components/tokens.js";
19
+ export { Avatar, Badge, Button, Callout, cx, EmptyState, formatBytes, formatInstant, PersonChip, PRIORITY_LABELS, PriorityBadge, ROLE_LABELS, RoleBadge, Spinner, STATE_LABELS, StateBadge, Time, } from "./components/ui.js";
20
+ export { createConsole, DEFAULT_COMPONENTS, } from "./console.js";
21
+ export { useConsoleData } from "./data.js";
22
+ export { matchRoute, PATHS, signInFailureOf, taskHref, withoutSignInParam, } from "./router.js";
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,8FAA8F;AAC9F,kGAAkG;AAClG,yFAAyF;AAEzF,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,EAAmB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,YAAY,EAA0B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EACL,YAAY,EAEZ,YAAY,GAEb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAuB,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAwB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EACL,iBAAiB,EACjB,OAAO,EAEP,OAAO,EAEP,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgB,KAAK,EAAmB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAoB,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAuB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAsB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAsB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EACL,QAAQ,EAER,SAAS,EAET,SAAS,GAEV,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,EAAE,EACF,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,OAAO,EACP,YAAY,EACZ,UAAU,EACV,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIL,aAAa,EACb,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAyC,cAAc,EAAE,MAAM,WAAW,CAAC;AAClF,OAAO,EACL,UAAU,EACV,KAAK,EAEL,eAAe,EACf,QAAQ,EACR,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,37 @@
1
+ /** A task's title, a decision's question: one line. */
2
+ export declare const MAX_TITLE_LENGTH = 200;
3
+ export declare const MAX_QUESTION_LENGTH = 500;
4
+ /** A body in Markdown: a task's, or the context of a decision. */
5
+ export declare const MAX_BODY_LENGTH = 20000;
6
+ /** The links of a task: a repository, a pull request, a document. */
7
+ export declare const MAX_LINKS = 20;
8
+ export declare const MAX_LINK_LABEL_LENGTH = 120;
9
+ export declare const MAX_URL_LENGTH = 2048;
10
+ /** The options of a decision, and how a person words each. */
11
+ export declare const MIN_OPTIONS = 2;
12
+ export declare const MAX_OPTIONS = 10;
13
+ export declare const MAX_OPTION_LABEL_LENGTH = 120;
14
+ /** What a person adds to an answer. */
15
+ export declare const MAX_NOTE_LENGTH = 2000;
16
+ /** How many tasks or decisions one listing answers with. A board is read whole, for now. */
17
+ export declare const LIST_LIMIT = 500;
18
+ /** How many events one page of the feed carries. */
19
+ export declare const EVENTS_PAGE_LIMIT = 100;
20
+ /** What an agent calls itself when it takes a task: its kind, where it runs. One line. */
21
+ export declare const MAX_AGENT_LENGTH = 80;
22
+ /** What an agent says when it ends a run. Markdown. */
23
+ export declare const MAX_SUMMARY_LENGTH = 2000;
24
+ /** How many reports, and how many artifacts, one run may carry. */
25
+ export declare const MAX_REPORTS_PER_RUN = 500;
26
+ export declare const MAX_ARTIFACTS_PER_RUN = 50;
27
+ /** A file a run hands in: how many bytes, and its name, one line without a path. */
28
+ export declare const MAX_FILE_BYTES: number;
29
+ export declare const MAX_FILE_NAME_LENGTH = 200;
30
+ /** What a person calls a token: the agent it is for, where it runs. One line. */
31
+ export declare const MAX_TOKEN_NAME_LENGTH = 80;
32
+ /** How long a token may be good for, in days, and how long one is when nothing is said. */
33
+ export declare const MAX_TOKEN_DAYS = 365;
34
+ export declare const DEFAULT_TOKEN_DAYS = 90;
35
+ /** How many tokens one person may hold at a time. */
36
+ export declare const MAX_TOKENS_PER_PERSON = 25;
37
+ //# sourceMappingURL=limits.d.ts.map