@ever-works/contracts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # @ever-works/contracts
2
+
3
+ Shared TypeScript type definitions and runtime-free contracts used across the Ever Works platform.
4
+
5
+ ## Overview
6
+
7
+ This package contains the cross-cutting type primitives that every other package and app relies on — work items, domain models, form schemas, and API contracts. It has zero runtime dependencies and is published as both ESM and CJS so it can be consumed from Node.js, Next.js, browsers, and the plugin system alike.
8
+
9
+ `@ever-works/contracts` is a pure type package: no NestJS, no LangChain, no I/O. Anything that needs to be shared between the API, the web app, and standalone plugins lives here.
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ pnpm add @ever-works/contracts
15
+ ```
16
+
17
+ ## Subpath exports
18
+
19
+ | Import path | Contents |
20
+ | ------------------------------ | ----------------------------------------------------------------- |
21
+ | `@ever-works/contracts` | Re-exports of `item`, `domain`, and `form` (default barrel) |
22
+ | `@ever-works/contracts/item` | `ItemData`, item lifecycle states, item field shapes |
23
+ | `@ever-works/contracts/domain` | `DomainType`, domain category metadata |
24
+ | `@ever-works/contracts/form` | Form field schemas (`x-widget`, `x-secret`, etc.) consumed by UIs |
25
+ | `@ever-works/contracts/api` | REST API request/response shapes |
26
+
27
+ ## Usage
28
+
29
+ ```typescript
30
+ import type { ItemData } from '@ever-works/contracts/item';
31
+ import type { DomainType } from '@ever-works/contracts/domain';
32
+ import type { JsonSchema } from '@ever-works/contracts/form';
33
+
34
+ const item: ItemData = {
35
+ name: 'Example',
36
+ slug: 'example'
37
+ // ...
38
+ };
39
+ ```
40
+
41
+ ## Why a separate package?
42
+
43
+ - **Plugins stay lightweight.** Plugins import only types — no NestJS, no DB, no agent runtime.
44
+ - **Type drift is caught at compile time.** API, web, agent, and plugins all share the same source of truth.
45
+ - **Cross-runtime safety.** Pure TypeScript means it builds for Node, browser, Edge, and Workers without conditional exports.
46
+
47
+ ## Build
48
+
49
+ ```bash
50
+ pnpm --filter @ever-works/contracts build # tsup -> ESM + CJS + .d.ts
51
+ pnpm --filter @ever-works/contracts type-check # tsc --noEmit
52
+ ```
53
+
54
+ ## Documentation
55
+
56
+ - [Ever Works documentation](https://docs.ever.works)
57
+ - [Repository](https://github.com/ever-works/ever-works)
58
+ - [Plugin system contracts](../plugin/README.md)
59
+
60
+ ## License
61
+
62
+ AGPL-3.0
@@ -0,0 +1,395 @@
1
+ 'use strict';
2
+
3
+ // src/api/generator/generation-method.enum.ts
4
+ var GenerationMethod = /* @__PURE__ */ ((GenerationMethod2) => {
5
+ GenerationMethod2["CREATE_UPDATE"] = "create-update";
6
+ GenerationMethod2["RECREATE"] = "recreate";
7
+ GenerationMethod2["IMPORT"] = "import";
8
+ return GenerationMethod2;
9
+ })(GenerationMethod || {});
10
+ var WebsiteRepositoryCreationMethod = /* @__PURE__ */ ((WebsiteRepositoryCreationMethod2) => {
11
+ WebsiteRepositoryCreationMethod2["DUPLICATE"] = "duplicate";
12
+ WebsiteRepositoryCreationMethod2["CREATE_USING_TEMPLATE"] = "create-using-template";
13
+ return WebsiteRepositoryCreationMethod2;
14
+ })(WebsiteRepositoryCreationMethod || {});
15
+
16
+ // src/api/work/schedule.enum.ts
17
+ var WorkScheduleCadence = /* @__PURE__ */ ((WorkScheduleCadence2) => {
18
+ WorkScheduleCadence2["HOURLY"] = "hourly";
19
+ WorkScheduleCadence2["EVERY_3_HOURS"] = "every_3_hours";
20
+ WorkScheduleCadence2["EVERY_8_HOURS"] = "every_8_hours";
21
+ WorkScheduleCadence2["EVERY_12_HOURS"] = "every_12_hours";
22
+ WorkScheduleCadence2["DAILY"] = "daily";
23
+ WorkScheduleCadence2["WEEKLY"] = "weekly";
24
+ WorkScheduleCadence2["MONTHLY"] = "monthly";
25
+ return WorkScheduleCadence2;
26
+ })(WorkScheduleCadence || {});
27
+ var WorkScheduleStatus = /* @__PURE__ */ ((WorkScheduleStatus2) => {
28
+ WorkScheduleStatus2["DISABLED"] = "disabled";
29
+ WorkScheduleStatus2["ACTIVE"] = "active";
30
+ WorkScheduleStatus2["PAUSED"] = "paused";
31
+ WorkScheduleStatus2["CANCELED"] = "canceled";
32
+ return WorkScheduleStatus2;
33
+ })(WorkScheduleStatus || {});
34
+ var WorkScheduleBillingMode = /* @__PURE__ */ ((WorkScheduleBillingMode2) => {
35
+ WorkScheduleBillingMode2["SUBSCRIPTION"] = "subscription";
36
+ WorkScheduleBillingMode2["USAGE"] = "usage";
37
+ return WorkScheduleBillingMode2;
38
+ })(WorkScheduleBillingMode || {});
39
+
40
+ // src/api/work/generate-status.enum.ts
41
+ var GenerateStatusType = /* @__PURE__ */ ((GenerateStatusType2) => {
42
+ GenerateStatusType2["GENERATING"] = "generating";
43
+ GenerateStatusType2["GENERATED"] = "generated";
44
+ GenerateStatusType2["ERROR"] = "error";
45
+ GenerateStatusType2["CANCELLED"] = "cancelled";
46
+ return GenerateStatusType2;
47
+ })(GenerateStatusType || {});
48
+
49
+ // src/api/work/generation-metrics.ts
50
+ var WorkHistoryActivityType = /* @__PURE__ */ ((WorkHistoryActivityType2) => {
51
+ WorkHistoryActivityType2["GENERATION"] = "generation";
52
+ WorkHistoryActivityType2["ITEM_ADDED"] = "item_added";
53
+ WorkHistoryActivityType2["ITEM_UPDATED"] = "item_updated";
54
+ WorkHistoryActivityType2["ITEM_REMOVED"] = "item_removed";
55
+ WorkHistoryActivityType2["COMPARISON_ADDED"] = "comparison_added";
56
+ WorkHistoryActivityType2["COMPARISON_REMOVED"] = "comparison_removed";
57
+ WorkHistoryActivityType2["CATEGORY_CHANGE"] = "category_change";
58
+ WorkHistoryActivityType2["TAG_CHANGE"] = "tag_change";
59
+ WorkHistoryActivityType2["COLLECTION_CHANGE"] = "collection_change";
60
+ WorkHistoryActivityType2["COMMUNITY_PR_MERGED"] = "community_pr_merged";
61
+ return WorkHistoryActivityType2;
62
+ })(WorkHistoryActivityType || {});
63
+
64
+ // src/api/work/import-source.dto.ts
65
+ var IMPORT_SOURCE_TYPES = ["data_repo", "awesome_readme", "link_existing", "works_config"];
66
+ var AWESOME_README_IMPORT_MODES = ["clone", "reuse_source"];
67
+
68
+ // src/api/onboarding/onboarding-status.ts
69
+ var ONBOARDING_TERMINAL_STATUSES = ["deployed", "failed", "rejected"];
70
+ function isTerminalOnboardingStatus(status) {
71
+ return ONBOARDING_TERMINAL_STATUSES.includes(status);
72
+ }
73
+
74
+ // src/api/onboarding/wizard-state.ts
75
+ var ROLE_OPTIONS = [
76
+ { id: "founder-ceo", label: "Founder / CEO", description: "I run the company and wear many hats" },
77
+ { id: "engineering", label: "Engineering", description: "I build and ship software" },
78
+ { id: "product", label: "Product", description: "I define what we build and why" },
79
+ { id: "marketing", label: "Marketing", description: "I grow awareness, content, and campaigns" },
80
+ { id: "sales", label: "Sales", description: "I find, pitch, and close customers" },
81
+ { id: "consultant", label: "Consultant", description: "I deliver projects and advice for clients" },
82
+ { id: "research", label: "Research", description: "I investigate, analyze, and synthesize" },
83
+ { id: "operations", label: "Operations", description: "I keep the business running smoothly" },
84
+ { id: "support", label: "Support", description: "I help customers succeed and resolve issues" },
85
+ { id: "finance", label: "Finance", description: "I manage budgets, billing, and reporting" },
86
+ { id: "hr", label: "HR", description: "I hire, onboard, and support our people" },
87
+ { id: "legal", label: "Legal", description: "I handle contracts, compliance, and policy" },
88
+ { id: "education", label: "Education", description: "I teach, train, or create learning content" },
89
+ { id: "other", label: "Other", description: "Something else \u2014 tell us more later" }
90
+ ];
91
+ var TEAM_SIZE_OPTIONS = [
92
+ { id: "solo", label: "Solo", description: "Just me" },
93
+ { id: "small-2-10", label: "Small (2\u201310)", description: "2\u201310 people" },
94
+ { id: "mid-11-50", label: "Mid (11\u201350)", description: "11\u201350 people" },
95
+ { id: "large-51-200", label: "Large (51\u2013200)", description: "51\u2013200 people" },
96
+ { id: "enterprise-200-plus", label: "Enterprise (200+)", description: "More than 200 people" }
97
+ ];
98
+ var ONBOARDING_DEFAULT_STATE = {
99
+ version: 2,
100
+ lastStep: 0,
101
+ ai: { choice: "ever-works" },
102
+ storage: { choice: "ever-works-git" },
103
+ db: { choice: "ever-works-db" },
104
+ deploy: { choice: "ever-works" },
105
+ desktop: { choice: "cloud" },
106
+ skippedSteps: [],
107
+ pluginsReviewed: false
108
+ };
109
+ var ONBOARDING_DESKTOP_NEXT_STEPS = {
110
+ cloud: {
111
+ choice: "cloud",
112
+ title: "Start building",
113
+ description: "Everything runs on the hosted platform \u2014 create your first Work and go."
114
+ },
115
+ desktop: {
116
+ choice: "desktop",
117
+ title: "Finish your desktop setup",
118
+ description: "Ever Works Desktop supervises the API and web app on this machine. Check the services are healthy, then pick the job runtime you want them to use.",
119
+ href: "/settings/job-runtime"
120
+ },
121
+ "own-nodes": {
122
+ choice: "own-nodes",
123
+ title: "Add your first node",
124
+ description: "Enroll the machines that should execute your work. Issue an enrollment token here, then run the Desktop Node app or the headless node on each machine.",
125
+ href: "/settings/fleet"
126
+ }
127
+ };
128
+ function desktopNextStep(choice) {
129
+ return ONBOARDING_DESKTOP_NEXT_STEPS[choice ?? "cloud"] ?? ONBOARDING_DESKTOP_NEXT_STEPS.cloud;
130
+ }
131
+
132
+ // src/api/onboarding/roster.ts
133
+ var ROSTER_LANE_KEYS = [
134
+ "coordination",
135
+ "research",
136
+ "content",
137
+ "outreach",
138
+ "visibility",
139
+ "social",
140
+ "market-watch"
141
+ ];
142
+ var ROSTER_BLUEPRINT_SLUGS = ["general", "growth", "revenue", "insight", "solo-starter"];
143
+ var ROSTER_MAX_LANES = 8;
144
+ var ROSTER_NAME_MAX = 60;
145
+
146
+ // src/api/onboarding/first-hour.ts
147
+ var ONBOARDING_MILESTONES = [
148
+ "connectProvider",
149
+ "meetAgents",
150
+ "shipTask",
151
+ "resolveDecision",
152
+ "scheduleJob"
153
+ ];
154
+ var MILESTONE_STATUSES = ["pending", "done", "skipped"];
155
+ var ROSTER_PROVISION_STATES = ["idle", "queued", "creating", "binding", "ready", "partial", "failed"];
156
+ var LANE_OUTCOMES = ["pending", "created", "reused", "skippedNoSeat", "failed"];
157
+ var LANE_FAILURE_REASONS = ["nameUnavailable", "noSeat", "permissionDenied", "timedOut", "unknown"];
158
+
159
+ // src/api/organization/index.ts
160
+ var UPGRADE_NOT_AVAILABLE_AFTER_MULTIPLE_ORGS = "UPGRADE_NOT_AVAILABLE_AFTER_MULTIPLE_ORGS";
161
+
162
+ // src/api/active-scope.ts
163
+ var ACTIVE_SCOPE_PERSONAL_SENTINEL = "@personal";
164
+ var ACTIVE_SCOPE_API_HEADER = "x-scope-slug";
165
+ var ACTIVE_SCOPE_BROWSER_HEADER = "x-ever-workspace";
166
+ var ACTIVE_SCOPE_RESPONSE_PROPERTIES = {
167
+ tenantId: { type: "string", format: "uuid", nullable: true },
168
+ organizationId: { type: "string", format: "uuid", nullable: true },
169
+ organizationSlug: { type: "string", nullable: true }
170
+ };
171
+ var ACTIVE_SCOPE_RESPONSE_SCHEMA = {
172
+ type: "object",
173
+ properties: ACTIVE_SCOPE_RESPONSE_PROPERTIES,
174
+ required: Object.keys(ACTIVE_SCOPE_RESPONSE_PROPERTIES)
175
+ };
176
+
177
+ // src/api/changelog/changelog.enum.ts
178
+ var CHANGELOG_CATEGORIES = ["agents", "decisions", "knowledge", "connections", "costs", "platform"];
179
+ var CHANGELOG_KINDS = ["new", "improved", "fixed", "security"];
180
+ function isChangelogCategory(value) {
181
+ return typeof value === "string" && CHANGELOG_CATEGORIES.includes(value);
182
+ }
183
+ function isChangelogKind(value) {
184
+ return typeof value === "string" && CHANGELOG_KINDS.includes(value);
185
+ }
186
+ var UNSAFE_PATH_CHARACTER = /[\\\s\p{Cc}]/u;
187
+ function isSafeInAppPath(raw) {
188
+ if (typeof raw !== "string" || raw.length === 0) {
189
+ return false;
190
+ }
191
+ if (raw[0] !== "/" || raw[1] === "/") {
192
+ return false;
193
+ }
194
+ return !UNSAFE_PATH_CHARACTER.test(raw);
195
+ }
196
+ var CHANGELOG_SLUG_PATTERN = /^[a-z0-9-]{3,64}$/;
197
+ var CHANGELOG_LIMITS = {
198
+ titleMaxLength: 80,
199
+ bodyMaxLength: 600,
200
+ bodyMaxParagraphs: 3,
201
+ ctaLabelMaxLength: 32,
202
+ /** Most slugs one mark-read write may carry. */
203
+ markReadBatchMax: 25,
204
+ /** The unread count only ever considers this many of the newest entries. */
205
+ unreadWindow: 50,
206
+ /** Default page size for the panel and the full list. */
207
+ pageSize: 20,
208
+ /** Largest page a client may request. */
209
+ pageSizeMax: 50,
210
+ /** The deepest the list can be paged. */
211
+ listMax: 200
212
+ };
213
+
214
+ // src/api/workspace-search/index.ts
215
+ var WORKSPACE_SEARCH_KINDS = [
216
+ "mission",
217
+ "task",
218
+ "agent",
219
+ "work",
220
+ "idea",
221
+ "skill",
222
+ "team",
223
+ "knowledge",
224
+ "run",
225
+ "decision",
226
+ "memory",
227
+ "goal",
228
+ "meeting",
229
+ "node",
230
+ "connection"
231
+ ];
232
+ var WORKSPACE_SEARCH_MIN_QUERY_LENGTH = 2;
233
+ var WORKSPACE_SEARCH_MAX_QUERY_LENGTH = 128;
234
+ var WORKSPACE_SEARCH_MAX_TOTAL = 60;
235
+ var WORKSPACE_SEARCH_DEFAULT_PER_KIND = 5;
236
+ var WORKSPACE_SEARCH_MAX_PER_KIND = 25;
237
+ var WORKSPACE_SEARCH_MAX_RECENT = 12;
238
+
239
+ // src/api/help/help.enum.ts
240
+ var HELP_SECTIONS = [
241
+ "start-here",
242
+ "running-the-loop",
243
+ "your-agents",
244
+ "setup-and-connections",
245
+ "money-and-limits",
246
+ "when-something-goes-wrong"
247
+ ];
248
+ var HELP_BLOCK_KINDS = [
249
+ "paragraph",
250
+ "heading",
251
+ "orderedList",
252
+ "unorderedList",
253
+ "note",
254
+ "shortcut",
255
+ "code",
256
+ "link",
257
+ "table"
258
+ ];
259
+ var HELP_LINK_TARGET_TYPES = ["article", "screen", "external"];
260
+ var HELP_NOTE_TONES = ["note", "tip", "info", "warning", "danger"];
261
+ var HELP_LIMITS = {
262
+ maxArticles: 200,
263
+ titleChars: 70,
264
+ summaryChars: 200,
265
+ bodyChars: 6e4,
266
+ maxHeadings: 80,
267
+ headingIdMinChars: 2,
268
+ headingIdMaxChars: 96,
269
+ maxKeywords: 12,
270
+ keywordChars: 32,
271
+ maxDocuments: 8,
272
+ maxRelated: 5,
273
+ linkLabelChars: 80,
274
+ externalHrefChars: 2048
275
+ };
276
+ var HELP_ARTICLE_ID_PATTERN = /^[a-z0-9-]{3,64}$/;
277
+ function isHelpSection(value) {
278
+ return typeof value === "string" && HELP_SECTIONS.includes(value);
279
+ }
280
+ function isHelpArticleId(value) {
281
+ return typeof value === "string" && HELP_ARTICLE_ID_PATTERN.test(value);
282
+ }
283
+
284
+ // src/api/shared-view/shared-view.dto.ts
285
+ var SHARED_VIEW_STATUSES = ["active", "paused"];
286
+ function isSharedViewStatus(value) {
287
+ return value === "active" || value === "paused";
288
+ }
289
+ var SHARED_VIEW_LIMITS = {
290
+ /** 256 bits of randomness, base64url without padding. */
291
+ tokenBytes: 32,
292
+ tokenLength: 43,
293
+ /** A view session lives this long before the client exchanges the token again. */
294
+ viewSessionTtlSeconds: 15 * 60,
295
+ /** Cards per published column. */
296
+ columnCardLimit: 50,
297
+ /** Lines in the published activity strip. */
298
+ activityLineLimit: 20,
299
+ /** Labels per published card. */
300
+ cardLabelLimit: 3,
301
+ /** Exchanges and reads per token (or per view) per minute. */
302
+ requestsPerTokenPerMinute: 60,
303
+ /** Public requests per client per hour. */
304
+ requestsPerClientPerHour: 600,
305
+ /** Owner regenerations per Workspace per minute. */
306
+ regeneratePerMinute: 10,
307
+ /** A client increments the view count at most once in this window. */
308
+ viewDedupeWindowSeconds: 10 * 60,
309
+ /** The `Retry-After` a throttled public request carries. */
310
+ retryAfterSeconds: 60,
311
+ /** The live poll cadence of the published page. */
312
+ pollIntervalSeconds: 20,
313
+ /** Knowledge class names a selection may hold. */
314
+ knowledgeClassLimit: 32
315
+ };
316
+ var SHARED_VIEW_NOT_ACTIVE = "shared_view_not_active";
317
+
318
+ // src/api/shared-view/published-board.dto.ts
319
+ var PUBLISHED_COLUMN_KEYS = ["backlog", "in_flight", "needs_you", "done"];
320
+
321
+ // src/api/shared-view/publishable-activity.ts
322
+ var PUBLISHABLE_ACTIVITY_ACTIONS = Object.freeze([
323
+ "task_created",
324
+ "task_transitioned",
325
+ "task_completed",
326
+ "task_assigned",
327
+ "agent_task_assigned",
328
+ "agent_run_started",
329
+ "agent_run_completed",
330
+ "agent_paused",
331
+ "agent_resumed"
332
+ ]);
333
+ function isPublishableActivityAction(actionType) {
334
+ return typeof actionType === "string" && PUBLISHABLE_ACTIVITY_ACTIONS.includes(actionType);
335
+ }
336
+
337
+ exports.ACTIVE_SCOPE_API_HEADER = ACTIVE_SCOPE_API_HEADER;
338
+ exports.ACTIVE_SCOPE_BROWSER_HEADER = ACTIVE_SCOPE_BROWSER_HEADER;
339
+ exports.ACTIVE_SCOPE_PERSONAL_SENTINEL = ACTIVE_SCOPE_PERSONAL_SENTINEL;
340
+ exports.ACTIVE_SCOPE_RESPONSE_SCHEMA = ACTIVE_SCOPE_RESPONSE_SCHEMA;
341
+ exports.AWESOME_README_IMPORT_MODES = AWESOME_README_IMPORT_MODES;
342
+ exports.CHANGELOG_CATEGORIES = CHANGELOG_CATEGORIES;
343
+ exports.CHANGELOG_KINDS = CHANGELOG_KINDS;
344
+ exports.CHANGELOG_LIMITS = CHANGELOG_LIMITS;
345
+ exports.CHANGELOG_SLUG_PATTERN = CHANGELOG_SLUG_PATTERN;
346
+ exports.GenerateStatusType = GenerateStatusType;
347
+ exports.GenerationMethod = GenerationMethod;
348
+ exports.HELP_ARTICLE_ID_PATTERN = HELP_ARTICLE_ID_PATTERN;
349
+ exports.HELP_BLOCK_KINDS = HELP_BLOCK_KINDS;
350
+ exports.HELP_LIMITS = HELP_LIMITS;
351
+ exports.HELP_LINK_TARGET_TYPES = HELP_LINK_TARGET_TYPES;
352
+ exports.HELP_NOTE_TONES = HELP_NOTE_TONES;
353
+ exports.HELP_SECTIONS = HELP_SECTIONS;
354
+ exports.IMPORT_SOURCE_TYPES = IMPORT_SOURCE_TYPES;
355
+ exports.LANE_FAILURE_REASONS = LANE_FAILURE_REASONS;
356
+ exports.LANE_OUTCOMES = LANE_OUTCOMES;
357
+ exports.MILESTONE_STATUSES = MILESTONE_STATUSES;
358
+ exports.ONBOARDING_DEFAULT_STATE = ONBOARDING_DEFAULT_STATE;
359
+ exports.ONBOARDING_DESKTOP_NEXT_STEPS = ONBOARDING_DESKTOP_NEXT_STEPS;
360
+ exports.ONBOARDING_MILESTONES = ONBOARDING_MILESTONES;
361
+ exports.ONBOARDING_TERMINAL_STATUSES = ONBOARDING_TERMINAL_STATUSES;
362
+ exports.PUBLISHABLE_ACTIVITY_ACTIONS = PUBLISHABLE_ACTIVITY_ACTIONS;
363
+ exports.PUBLISHED_COLUMN_KEYS = PUBLISHED_COLUMN_KEYS;
364
+ exports.ROLE_OPTIONS = ROLE_OPTIONS;
365
+ exports.ROSTER_BLUEPRINT_SLUGS = ROSTER_BLUEPRINT_SLUGS;
366
+ exports.ROSTER_LANE_KEYS = ROSTER_LANE_KEYS;
367
+ exports.ROSTER_MAX_LANES = ROSTER_MAX_LANES;
368
+ exports.ROSTER_NAME_MAX = ROSTER_NAME_MAX;
369
+ exports.ROSTER_PROVISION_STATES = ROSTER_PROVISION_STATES;
370
+ exports.SHARED_VIEW_LIMITS = SHARED_VIEW_LIMITS;
371
+ exports.SHARED_VIEW_NOT_ACTIVE = SHARED_VIEW_NOT_ACTIVE;
372
+ exports.SHARED_VIEW_STATUSES = SHARED_VIEW_STATUSES;
373
+ exports.TEAM_SIZE_OPTIONS = TEAM_SIZE_OPTIONS;
374
+ exports.UPGRADE_NOT_AVAILABLE_AFTER_MULTIPLE_ORGS = UPGRADE_NOT_AVAILABLE_AFTER_MULTIPLE_ORGS;
375
+ exports.WORKSPACE_SEARCH_DEFAULT_PER_KIND = WORKSPACE_SEARCH_DEFAULT_PER_KIND;
376
+ exports.WORKSPACE_SEARCH_KINDS = WORKSPACE_SEARCH_KINDS;
377
+ exports.WORKSPACE_SEARCH_MAX_PER_KIND = WORKSPACE_SEARCH_MAX_PER_KIND;
378
+ exports.WORKSPACE_SEARCH_MAX_QUERY_LENGTH = WORKSPACE_SEARCH_MAX_QUERY_LENGTH;
379
+ exports.WORKSPACE_SEARCH_MAX_RECENT = WORKSPACE_SEARCH_MAX_RECENT;
380
+ exports.WORKSPACE_SEARCH_MAX_TOTAL = WORKSPACE_SEARCH_MAX_TOTAL;
381
+ exports.WORKSPACE_SEARCH_MIN_QUERY_LENGTH = WORKSPACE_SEARCH_MIN_QUERY_LENGTH;
382
+ exports.WebsiteRepositoryCreationMethod = WebsiteRepositoryCreationMethod;
383
+ exports.WorkHistoryActivityType = WorkHistoryActivityType;
384
+ exports.WorkScheduleBillingMode = WorkScheduleBillingMode;
385
+ exports.WorkScheduleCadence = WorkScheduleCadence;
386
+ exports.WorkScheduleStatus = WorkScheduleStatus;
387
+ exports.desktopNextStep = desktopNextStep;
388
+ exports.isChangelogCategory = isChangelogCategory;
389
+ exports.isChangelogKind = isChangelogKind;
390
+ exports.isHelpArticleId = isHelpArticleId;
391
+ exports.isHelpSection = isHelpSection;
392
+ exports.isPublishableActivityAction = isPublishableActivityAction;
393
+ exports.isSafeInAppPath = isSafeInAppPath;
394
+ exports.isSharedViewStatus = isSharedViewStatus;
395
+ exports.isTerminalOnboardingStatus = isTerminalOnboardingStatus;