@skillcdn/console 0.1.6 → 0.1.8

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 (97) hide show
  1. package/README.md +50 -2
  2. package/SKILLCDN.md +35 -0
  3. package/dist/cli/cli.d.ts +3 -0
  4. package/dist/cli/cli.d.ts.map +1 -1
  5. package/dist/cli/cli.js +61 -0
  6. package/dist/cli/cli.js.map +1 -1
  7. package/dist/cli/help.d.ts.map +1 -1
  8. package/dist/cli/help.js +5 -0
  9. package/dist/cli/help.js.map +1 -1
  10. package/dist/cli/main.js +2 -0
  11. package/dist/cli/main.js.map +1 -1
  12. package/dist/cli/serve.d.ts +37 -0
  13. package/dist/cli/serve.d.ts.map +1 -0
  14. package/dist/cli/serve.js +218 -0
  15. package/dist/cli/serve.js.map +1 -0
  16. package/dist/console.d.ts +6 -0
  17. package/dist/console.d.ts.map +1 -1
  18. package/dist/console.js +78 -13
  19. package/dist/console.js.map +1 -1
  20. package/dist/data.d.ts.map +1 -1
  21. package/dist/data.js +5 -1
  22. package/dist/data.js.map +1 -1
  23. package/dist/i18n/en.d.ts +4 -0
  24. package/dist/i18n/en.d.ts.map +1 -1
  25. package/dist/i18n/en.js +4 -0
  26. package/dist/i18n/en.js.map +1 -1
  27. package/dist/i18n/ko.d.ts.map +1 -1
  28. package/dist/i18n/ko.js +4 -0
  29. package/dist/i18n/ko.js.map +1 -1
  30. package/dist/schemas.d.ts +1 -0
  31. package/dist/schemas.d.ts.map +1 -1
  32. package/dist/schemas.js +5 -0
  33. package/dist/schemas.js.map +1 -1
  34. package/dist/web.d.ts +16 -0
  35. package/dist/web.d.ts.map +1 -0
  36. package/dist/web.js +149 -0
  37. package/dist/web.js.map +1 -0
  38. package/docs/specs/cli.md +92 -0
  39. package/docs/specs/rest.md +221 -0
  40. package/package.json +14 -3
  41. package/skills/building-a-console/SKILL.md +102 -0
  42. package/skills/building-a-console/references/the-default-console.md +140 -0
  43. package/skills/deploying-a-console/SKILL.md +130 -0
  44. package/skills/deploying-a-console/assets/deployer-policy.json +118 -0
  45. package/skills/deploying-a-console/assets/secrets.example.json +11 -0
  46. package/skills/deploying-a-console/references/access.md +78 -0
  47. package/skills/deploying-a-console/references/resources.md +516 -0
  48. package/skills/deploying-a-console/references/sizing.md +90 -0
  49. package/skills/deploying-a-console/scripts/import-aws-key.mjs +35 -0
  50. package/skills/deploying-a-console/scripts/store-secrets.mjs +114 -0
  51. package/skills/working-the-board/SKILL.md +86 -0
  52. package/src/api.ts +235 -0
  53. package/src/cli/cli.ts +1114 -0
  54. package/src/cli/credentials.ts +68 -0
  55. package/src/cli/directory.ts +59 -0
  56. package/src/cli/format.ts +284 -0
  57. package/src/cli/help.ts +326 -0
  58. package/src/cli/main.ts +39 -0
  59. package/src/cli/serve.ts +276 -0
  60. package/src/cli/terminal.ts +28 -0
  61. package/src/client.ts +533 -0
  62. package/src/components/board.tsx +112 -0
  63. package/src/components/connect.tsx +126 -0
  64. package/src/components/decision-form.tsx +136 -0
  65. package/src/components/decision-list.tsx +278 -0
  66. package/src/components/documents.tsx +569 -0
  67. package/src/components/event-feed.tsx +129 -0
  68. package/src/components/markdown.tsx +72 -0
  69. package/src/components/people.tsx +59 -0
  70. package/src/components/projects.tsx +364 -0
  71. package/src/components/runs.tsx +175 -0
  72. package/src/components/shell.tsx +284 -0
  73. package/src/components/sign-in.tsx +61 -0
  74. package/src/components/skills.tsx +78 -0
  75. package/src/components/task-form.tsx +229 -0
  76. package/src/components/task-view.tsx +272 -0
  77. package/src/components/tokens.tsx +223 -0
  78. package/src/components/ui.tsx +219 -0
  79. package/src/connect-page.tsx +148 -0
  80. package/src/connect.ts +27 -0
  81. package/src/console.tsx +1166 -0
  82. package/src/data.ts +493 -0
  83. package/src/docs-page.tsx +334 -0
  84. package/src/documents.ts +76 -0
  85. package/src/i18n/en.ts +537 -0
  86. package/src/i18n/index.ts +76 -0
  87. package/src/i18n/ko.ts +511 -0
  88. package/src/index.ts +142 -0
  89. package/src/limits.ts +61 -0
  90. package/src/router.ts +295 -0
  91. package/src/routes.ts +106 -0
  92. package/src/schemas.ts +776 -0
  93. package/src/styles/console.css +2432 -0
  94. package/src/text.ts +33 -0
  95. package/src/use-action.ts +37 -0
  96. package/src/vocabulary.ts +109 -0
  97. package/src/web.ts +170 -0
@@ -0,0 +1,35 @@
1
+ // Writes the access key of a downloaded IAM key file into a profile of the AWS CLI's own
2
+ // credentials file, and deletes the key file. Neither value touches a command line, a message
3
+ // or the standard output. Usage: node import-aws-key.mjs <key file> <profile>
4
+ import { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
5
+ import { homedir } from "node:os";
6
+ import { join } from "node:path";
7
+ import process from "node:process";
8
+
9
+ const [file, profile = "console"] = process.argv.slice(2);
10
+ if (file === undefined) {
11
+ process.stderr.write("usage: node import-aws-key.mjs <key file> <profile>\n");
12
+ process.exit(2);
13
+ }
14
+ const [header, row] = readFileSync(file, "utf8").trim().split(/\r?\n/);
15
+ const names = (header ?? "").split(",").map((name) => name.trim().toLowerCase());
16
+ const values = (row ?? "").split(",").map((value) => value.trim());
17
+ const id = values[names.findIndex((name) => name.includes("access key id"))];
18
+ const secret = values[names.findIndex((name) => name.includes("secret access key"))];
19
+ if (id === undefined || secret === undefined || id.length === 0 || secret.length === 0) {
20
+ process.stderr.write("the file does not look like a downloaded access key (.csv)\n");
21
+ process.exit(1);
22
+ }
23
+ const directory = join(homedir(), ".aws");
24
+ mkdirSync(directory, { recursive: true });
25
+ const credentials = join(directory, "credentials");
26
+ const before = existsSync(credentials)
27
+ ? readFileSync(credentials, "utf8").replace(new RegExp(`\\[${profile}\\][^[]*`), "")
28
+ : "";
29
+ writeFileSync(
30
+ credentials,
31
+ `${before.trimEnd()}\n\n[${profile}]\naws_access_key_id = ${id}\naws_secret_access_key = ${secret}\n`.trimStart(),
32
+ { mode: 0o600 },
33
+ );
34
+ unlinkSync(file);
35
+ process.stdout.write(`profile ${profile} written; ${file} deleted\n`);
@@ -0,0 +1,114 @@
1
+ // The secrets file of a run (the shape of assets/secrets.example.json), kept outside any
2
+ // repository, and the parameter store: values go in from standard input or from a command's
3
+ // answer, and out into parameters, without ever passing through a command line or the output.
4
+ //
5
+ // node store-secrets.mjs set <file> <NAME> the value is standard input
6
+ // node store-secrets.mjs derive <file> <NAME> <template> {{OTHER}} in the template is replaced
7
+ // node store-secrets.mjs render <file> <in> <out> a JSON file with {{NAME}} placeholders filled
8
+ // node store-secrets.mjs key <file> <iam user> creates an access key for the user and stores both halves
9
+ // node store-secrets.mjs store <file> <prefix> every value as a SecureString parameter <prefix>/<NAME>
10
+ import { execFileSync } from "node:child_process";
11
+ import { existsSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
12
+ import { tmpdir } from "node:os";
13
+ import { join } from "node:path";
14
+ import process from "node:process";
15
+
16
+ const [mode, file, ...rest] = process.argv.slice(2);
17
+ const usage = () => {
18
+ process.stderr.write("usage: node store-secrets.mjs set|derive|render|key|store <file> ...\n");
19
+ process.exit(2);
20
+ };
21
+ if (mode === undefined || file === undefined) {
22
+ usage();
23
+ }
24
+
25
+ const read = () => (existsSync(file) ? JSON.parse(readFileSync(file, "utf8")) : {});
26
+ const write = (data) => writeFileSync(file, `${JSON.stringify(data, null, 2)}\n`, { mode: 0o600 });
27
+ const fill = (data, text) =>
28
+ text.replace(/\{\{([A-Z0-9_]+)\}\}/g, (_, name) => {
29
+ if (typeof data[name] !== "string") {
30
+ throw new Error(`${name} is not in the secrets file`);
31
+ }
32
+ return data[name];
33
+ });
34
+ /** Runs the AWS CLI with a request body in a temporary file, so that nothing is on the command line. */
35
+ const aws = (args, body) => {
36
+ const directory = mkdtempSync(join(tmpdir(), "console-"));
37
+ try {
38
+ const request = join(directory, "request.json");
39
+ writeFileSync(request, JSON.stringify(body), { mode: 0o600 });
40
+ return execFileSync("aws", [...args, "--cli-input-json", `file://${request}`], {
41
+ encoding: "utf8",
42
+ stdio: ["ignore", "pipe", "inherit"],
43
+ });
44
+ } finally {
45
+ rmSync(directory, { recursive: true, force: true });
46
+ }
47
+ };
48
+
49
+ switch (mode) {
50
+ case "set": {
51
+ const [name] = rest;
52
+ if (name === undefined) {
53
+ usage();
54
+ }
55
+ const value = readFileSync(0, "utf8").replace(/\r?\n$/, "");
56
+ write({ ...read(), [name]: value });
57
+ break;
58
+ }
59
+ case "derive": {
60
+ const [name, template] = rest;
61
+ if (name === undefined || template === undefined) {
62
+ usage();
63
+ }
64
+ const data = read();
65
+ write({ ...data, [name]: fill(data, template) });
66
+ break;
67
+ }
68
+ case "render": {
69
+ const [input, output] = rest;
70
+ if (input === undefined || output === undefined) {
71
+ usage();
72
+ }
73
+ writeFileSync(output, fill(read(), readFileSync(input, "utf8")), { mode: 0o600 });
74
+ break;
75
+ }
76
+ case "key": {
77
+ const [user] = rest;
78
+ if (user === undefined) {
79
+ usage();
80
+ }
81
+ const answer = JSON.parse(aws(["iam", "create-access-key"], { UserName: user }));
82
+ write({
83
+ ...read(),
84
+ S3_ACCESS_KEY_ID: answer.AccessKey.AccessKeyId,
85
+ S3_SECRET_ACCESS_KEY: answer.AccessKey.SecretAccessKey,
86
+ });
87
+ break;
88
+ }
89
+ case "store": {
90
+ const [prefix] = rest;
91
+ if (prefix === undefined) {
92
+ usage();
93
+ }
94
+ const data = read();
95
+ for (const [name, value] of Object.entries(data)) {
96
+ // The password lives inside the URL; a value the person deferred is not a parameter.
97
+ if (name === "_" || name === "DATABASE_PASSWORD" || value === "later") {
98
+ continue;
99
+ }
100
+ const tier = Buffer.byteLength(value, "utf8") > 4000 ? "Advanced" : "Standard";
101
+ aws(["ssm", "put-parameter"], {
102
+ Name: `${prefix}/${name}`,
103
+ Type: "SecureString",
104
+ Value: value,
105
+ Tier: tier,
106
+ Overwrite: true,
107
+ });
108
+ process.stdout.write(`${prefix}/${name} stored (${tier})\n`);
109
+ }
110
+ break;
111
+ }
112
+ default:
113
+ usage();
114
+ }
@@ -0,0 +1,86 @@
1
+ ---
2
+ name: working-the-board
3
+ description: "Works a task from the board of a SkillCDN Console with the console command, as the person whose token the command holds: reads the task, takes it, reports at the milestones of the work, asks on the board when a person must decide and waits for the answer, hands in what was made as a link or a file, writes down what the next agent needs on a page of the project, and finishes. Use when an agent is told to take, work or finish a task on the console, or to report, ask, hand in or write a page there; any agent with a shell where the command is signed in. To build a console or a script against the console's API, use building-a-console; to deploy a console for an organization, use deploying-a-console."
4
+ license: MIT
5
+ compatibility: Needs a shell with the console command on the PATH (npm install -g @skillcdn/console, Node.js 24 or newer), signed in by a person. Nothing else; the command needs no key of its own and the agent never sees a token.
6
+ metadata:
7
+ author: skillcdn
8
+ version: "1.1"
9
+ skillcdn:
10
+ translations:
11
+ ko:
12
+ title: 콘솔 보드에서 일하기
13
+ description: "SkillCDN 콘솔의 보드에 있는 작업을 console 명령으로 수행합니다. 명령에 로그인한 사람의 자격으로, 작업을 읽고 맡고, 진행의 이정표마다 보고하고, 사람이 정해야 할 일은 보드에 물어 답을 기다리고, 만든 것을 링크나 파일로 제출하고, 다음 에이전트에게 필요한 것을 프로젝트 페이지에 적고, 마칩니다. 에이전트에게 콘솔의 작업을 맡거나 끝내라고, 또는 보고·질문·제출·페이지 쓰기를 하라고 할 때 쓰세요. 콘솔이나 API 클라이언트를 만들 때는 building-a-console을, 조직의 콘솔을 배포할 때는 deploying-a-console을 쓰세요."
14
+ ---
15
+ # Working a task on the board
16
+
17
+ A task of the board goes in, named by its number; a run comes out: the task taken, the work reported at its milestones, a decision raised and waited for where a person had to choose, what was made handed in, what was learned written down for the next agent, and the run finished. The board is a SkillCDN Console ([architecture](/docs/architecture.md)): projects of tasks, the agents at work on them, and the decisions that wait for a person. The agent acts as the person who signed the command in, on that person's standing and no more.
18
+
19
+ ## How the person is involved
20
+
21
+ - **Questions:** only which task, when the request names none: "Which task should I take? Its number, or say that any ready one may be." Nothing else is asked in chat: what the task leaves open is asked on the board, where its people answer.
22
+ - **Checkpoints:** on the board, as decisions (phase 4), which a person answers from wherever they are; the reports say what was done at each milestone, and need no answer.
23
+ - **Go-ahead:** the task's body is the go-ahead. A task that says what the agent may decide alone is followed within that; everything else that would change scope, cost or a trade-off is a decision.
24
+ - **Changes mid-run:** a person changes the task or answers a decision on the board; the run takes it from there and says so in its next report. A report is never rewritten.
25
+ - **Language:** reports, questions, pages and summaries are in the language the task is written in, so that the people of the board read them as they wrote.
26
+
27
+ ## Requirements
28
+
29
+ | Need | How | When missing |
30
+ |---|---|---|
31
+ | The `console` command, signed in | `console whoami` says as whom, at which console, and in which project this directory works. | Stop and tell the person what to do: `npm install -g @skillcdn/console`; `console login --url <the console's address>`, which shows an address and a code the person approves on the console's own pages; `console use <key>` once in the directory, to name the project. Never look for a token. |
32
+ | The command's own words | `console help`, and `console help <command>`: what each command takes, the limits the console holds it to, and the refusals it may meet, by code. | They are the reference at run time. This skill says how the work goes, not what each flag means. |
33
+
34
+ The full contract is the [specification of the command line](/docs/specs/cli.md); the command is a thin client of the [REST API](/docs/specs/rest.md), which a script may use directly.
35
+
36
+ ## Inputs
37
+
38
+ | Input | Source |
39
+ |---|---|
40
+ | The task | Its number (`#7`) or its id, from what the person said. Told to pick one, `console tasks --state ready` lists what is ready; a task is never taken without being told which, or that any ready one may be. |
41
+ | The work | The task's body, read with `console task <number>`: what to make, where, the milestones, what to ask. The pages it links to (`console doc <path>`) and the project's skills (`console skills`, each loaded through the agent's own SkillCDN connection) say the rest. |
42
+ | The organization's way | Its own skill for its console, when it has one, adds which tasks to take, what to report and when to ask; it comes through the same kind of address as its other skills. |
43
+
44
+ ## Workflow
45
+
46
+ Each phase ends with something on the board. Only phase 4 waits for a person.
47
+
48
+ ### Phase 1: Read
49
+
50
+ `console task <number>` shows the task in full, the decisions about it and the runs on it. A run open on it by another agent means the task is taken: say so and stop. Read what the body links to, with `console doc <path>` for the project's pages and `console skills` for the organization's skills, before anything is made.
51
+
52
+ ### Phase 2: Take
53
+
54
+ `console take <number>`. A run begins: the task is in progress and the person's, and every report, hand-in, question and ending from here acts on this run. Taken by mistake, `console abandon` leaves it and the task stays as it was.
55
+
56
+ ### Phase 3: Work, and report at the milestones
57
+
58
+ The work happens where it happens: in the repository, the document, the tool. At each milestone the body names, or a natural one, `console report "<markdown>"` (or `--file <path>`, or `-` for standard input) says what was found, what was done and what is next, in words for people: a milestone at a time, not every step. A problem is reported as a problem, with what it blocks. The result itself goes in a last report before finishing, or in what is handed in. A report is never rewritten; a mistake is corrected in a new one.
59
+
60
+ ### Phase 4: Ask when a person must decide
61
+
62
+ A choice the body does not settle, a trade-off, a cost, a change of scope: `console ask "<question>" --option "<one>" --option "<another>" --body "<what they need to know>"`. The run waits for the answer; the command waits a minute and exits with `3` while it is still to come. Keep waiting with `console decision <id> --wait 100`, as often as needed, and meanwhile do only what does not depend on the answer. Act on the answer as given; what was answered is not asked again. Once acted on, `console decision <id> --outcome "<what followed>"` makes the decision read as a record.
63
+
64
+ ### Phase 5: Hand in
65
+
66
+ `console hand-in <https url | file path> --label "<words>"`: a branch, a pull request, a page, a document, or a file from this machine, which the console keeps and shows on the task. What was made is where the person can hold it, never only described.
67
+
68
+ ### Phase 6: Write down what the next agent needs
69
+
70
+ What was learned and will be needed again (how a thing is set up, why a choice was made, a how-to) goes on a page of the project's documents: `console write <path> --title "<title>" --file notes.md`, at a path where the next agent looks for it (`console docs` shows the folders), and linked from the last report. The run is the record of this work; a page is for what outlives it.
71
+
72
+ ### Phase 7: Finish
73
+
74
+ After the last report, `console finish --summary "<what was done, and what is left>"`: the task goes up for review. `console fail --summary "<why, and what is left>"` when it could not be done. A run is never left open.
75
+
76
+ ## Hard rules
77
+
78
+ - Never look for, read, print or send a token. The rules of the repository say the rest.
79
+ - One run at a time: a command on a run acts on the one open run of this token in the project; working two tasks at once, say which with `--run <id>`.
80
+ - The board's words are the vocabulary's own: states `idea`, `ready`, `in_progress`, `in_review`, `done` and `dropped`; priorities `low`, `normal`, `high` and `urgent`. Taking a task moves it, finishing moves it; it is not moved by hand around a run.
81
+ - Exit codes: `0` done; `1` refused or unreachable, the reason on standard error as a code and words, which `console help <command>` names; `2` not understood; `3` a decision still waits.
82
+ - Everything sent is held to limits the console states (`console help <command>`); a refusal `request.invalid` names the field.
83
+
84
+ ## Terms
85
+
86
+ - **Task**: what is to be done, numbered per project. **Run**: one agent at work on one task for one person, with its reports, what it handed in, and what it waits for. **Decision**: a question with options, which a person answers on the board. **Page**: a document of the project, Markdown at a path that does not change. **Project**: a board of its own, with its members and its skills address.
package/src/api.ts ADDED
@@ -0,0 +1,235 @@
1
+ // The first layer of @skillcdn/console (docs/architecture.md, "The package and custom
2
+ // consoles"): the vocabulary, the schemas and the client of the console's REST API, so that a
3
+ // custom UI talks to any console with types, and so that the contract has one source. No React
4
+ // here: the server and the command line import this entry point, and nothing of the pages.
5
+
6
+ export {
7
+ ApiError,
8
+ type ClientOptions,
9
+ type ConsoleClient,
10
+ createClient,
11
+ type DocumentFilter,
12
+ type EventFilter,
13
+ type FetchLike,
14
+ type FileUpload,
15
+ type ProjectClient,
16
+ } from "./client.js";
17
+ export {
18
+ CONNECT_CODE_ALPHABET,
19
+ CONNECT_CODE_LENGTH,
20
+ isConnectCode,
21
+ normalizeConnectCode,
22
+ } from "./connect.js";
23
+ export {
24
+ DOCUMENT_PATH,
25
+ documentPathsIn,
26
+ folderOf,
27
+ foldersAbove,
28
+ isDocumentPath,
29
+ isFolderPath,
30
+ nameOf,
31
+ } from "./documents.js";
32
+ export {
33
+ DEFAULT_TOKEN_DAYS,
34
+ EVENTS_PAGE_LIMIT,
35
+ LIST_LIMIT,
36
+ MAX_AGENT_LENGTH,
37
+ MAX_ARTIFACTS_PER_RUN,
38
+ MAX_BODY_LENGTH,
39
+ MAX_DOCUMENT_LENGTH,
40
+ MAX_DOCUMENT_PATH_LENGTH,
41
+ MAX_DOCUMENT_SEGMENT_LENGTH,
42
+ MAX_FILE_BYTES,
43
+ MAX_FILE_NAME_LENGTH,
44
+ MAX_FILES_PER_DOCUMENT,
45
+ MAX_LANGUAGE_TAG_LENGTH,
46
+ MAX_LINK_LABEL_LENGTH,
47
+ MAX_LINKS,
48
+ MAX_NOTE_LENGTH,
49
+ MAX_OPTION_LABEL_LENGTH,
50
+ MAX_OPTIONS,
51
+ MAX_PROJECT_DESCRIPTION_LENGTH,
52
+ MAX_PROJECT_KEY_LENGTH,
53
+ MAX_PROJECT_NAME_LENGTH,
54
+ MAX_QUESTION_LENGTH,
55
+ MAX_REPORTS_PER_RUN,
56
+ MAX_SEARCH_LENGTH,
57
+ MAX_SECRET_LENGTH,
58
+ MAX_SKILLS_ADDRESS_LENGTH,
59
+ MAX_SUMMARY_LENGTH,
60
+ MAX_TITLE_LENGTH,
61
+ MAX_TOKEN_DAYS,
62
+ MAX_TOKEN_NAME_LENGTH,
63
+ MAX_TOKENS_PER_PERSON,
64
+ MAX_URL_LENGTH,
65
+ MAX_VERSIONS_PER_DOCUMENT,
66
+ MIN_OPTIONS,
67
+ } from "./limits.js";
68
+ export {
69
+ AUTH_ROUTES,
70
+ CLAIM_PATH,
71
+ connectPath,
72
+ isSignInFailure,
73
+ loginPath,
74
+ PROJECT_COLLECTIONS,
75
+ type ProjectCollection,
76
+ personTokensPath,
77
+ projectPath,
78
+ REST_ROUTES,
79
+ RETURN_TO_PARAM,
80
+ restPath,
81
+ SIGN_IN_FAILURES,
82
+ SIGN_IN_PARAM,
83
+ type SignInFailure,
84
+ signInPath,
85
+ } from "./routes.js";
86
+ export {
87
+ type RestAnswerInput,
88
+ type RestArtifact,
89
+ type RestArtifactInput,
90
+ type RestBacklink,
91
+ type RestClaim,
92
+ type RestClaimInput,
93
+ type RestConnectInput,
94
+ type RestConnection,
95
+ type RestConnectRequest,
96
+ type RestDecision,
97
+ type RestDecisionInput,
98
+ type RestDecisionOption,
99
+ type RestDecisionPatch,
100
+ type RestDecisions,
101
+ type RestDocument,
102
+ type RestDocumentFile,
103
+ type RestDocumentInput,
104
+ type RestDocumentLink,
105
+ type RestDocumentSummary,
106
+ type RestDocuments,
107
+ type RestError,
108
+ type RestEvent,
109
+ type RestEventData,
110
+ type RestEvents,
111
+ type RestFile,
112
+ type RestFileInput,
113
+ type RestMe,
114
+ type RestMember,
115
+ type RestMemberInput,
116
+ type RestMemberPatch,
117
+ type RestMembers,
118
+ type RestMePatch,
119
+ type RestPeople,
120
+ type RestPerson,
121
+ type RestPersonPatch,
122
+ type RestProject,
123
+ type RestProjectInput,
124
+ type RestProjectPatch,
125
+ type RestProjects,
126
+ type RestProvider,
127
+ type RestReport,
128
+ type RestReportInput,
129
+ type RestRun,
130
+ type RestRunEndInput,
131
+ type RestRunInput,
132
+ type RestRuns,
133
+ type RestSkill,
134
+ type RestSkills,
135
+ type RestTask,
136
+ type RestTaskInput,
137
+ type RestTaskLink,
138
+ type RestTaskPatch,
139
+ type RestTasks,
140
+ type RestToken,
141
+ type RestTokenCreated,
142
+ type RestTokenInput,
143
+ type RestTokens,
144
+ type RestVersion,
145
+ type RestVersionSummary,
146
+ type RestVersions,
147
+ restAnswerInputSchema,
148
+ restArtifactInputSchema,
149
+ restArtifactSchema,
150
+ restBacklinkSchema,
151
+ restClaimInputSchema,
152
+ restClaimSchema,
153
+ restConnectInputSchema,
154
+ restConnectionSchema,
155
+ restConnectRequestSchema,
156
+ restDecisionInputSchema,
157
+ restDecisionOptionSchema,
158
+ restDecisionPatchSchema,
159
+ restDecisionSchema,
160
+ restDecisionsSchema,
161
+ restDocumentFileSchema,
162
+ restDocumentInputSchema,
163
+ restDocumentLinkSchema,
164
+ restDocumentSchema,
165
+ restDocumentSummarySchema,
166
+ restDocumentsSchema,
167
+ restErrorSchema,
168
+ restEventDataSchema,
169
+ restEventSchema,
170
+ restEventsSchema,
171
+ restFileInputSchema,
172
+ restFileSchema,
173
+ restMemberInputSchema,
174
+ restMemberPatchSchema,
175
+ restMemberSchema,
176
+ restMembersSchema,
177
+ restMePatchSchema,
178
+ restMeSchema,
179
+ restPeopleSchema,
180
+ restPersonPatchSchema,
181
+ restPersonSchema,
182
+ restProjectInputSchema,
183
+ restProjectPatchSchema,
184
+ restProjectSchema,
185
+ restProjectsSchema,
186
+ restProviderSchema,
187
+ restReportInputSchema,
188
+ restReportSchema,
189
+ restRunEndInputSchema,
190
+ restRunInputSchema,
191
+ restRunSchema,
192
+ restRunsSchema,
193
+ restSkillSchema,
194
+ restSkillsSchema,
195
+ restTaskInputSchema,
196
+ restTaskLinkSchema,
197
+ restTaskPatchSchema,
198
+ restTaskSchema,
199
+ restTasksSchema,
200
+ restTokenCreatedSchema,
201
+ restTokenInputSchema,
202
+ restTokenSchema,
203
+ restTokensSchema,
204
+ restVersionSchema,
205
+ restVersionSummarySchema,
206
+ restVersionsSchema,
207
+ } from "./schemas.js";
208
+ export { hasForbiddenCodePoint } from "./text.js";
209
+ export {
210
+ ARTIFACT_KINDS,
211
+ type ArtifactKind,
212
+ EVENT_KINDS,
213
+ type EventKind,
214
+ isProviderKey,
215
+ LINK_SOURCES,
216
+ type LinkSource,
217
+ PERSON_ROLES,
218
+ type PersonRole,
219
+ PROJECT_ROLES,
220
+ PROJECT_VISIBILITIES,
221
+ PROVIDER_KEYS,
222
+ type ProjectRole,
223
+ type ProjectVisibility,
224
+ type ProviderKey,
225
+ RUN_ENDINGS,
226
+ RUN_STATUSES,
227
+ type RunEnding,
228
+ type RunStatus,
229
+ SKILLS_STATUSES,
230
+ type SkillsStatus,
231
+ TASK_PRIORITIES,
232
+ TASK_STATES,
233
+ type TaskPriority,
234
+ type TaskState,
235
+ } from "./vocabulary.js";