@zixt/host 0.0.140 → 0.0.142
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/dist/index.js +217 -5
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -28,7 +28,7 @@ import { homedir as homedir4 } from "node:os";
|
|
|
28
28
|
// package.json
|
|
29
29
|
var package_default = {
|
|
30
30
|
name: "@zixt/host",
|
|
31
|
-
version: "0.0.
|
|
31
|
+
version: "0.0.142",
|
|
32
32
|
type: "module",
|
|
33
33
|
exports: {
|
|
34
34
|
".": "./src/client.ts",
|
|
@@ -14678,6 +14678,8 @@ var ID_PREFIXES = {
|
|
|
14678
14678
|
managerWebhookAction: "mwa",
|
|
14679
14679
|
/** One Manager-prepared Email Integration setup card (MG-24). */
|
|
14680
14680
|
managerEmailSetup: "mes",
|
|
14681
|
+
/** One Manager-prepared MCP connection setup card (MG-24). */
|
|
14682
|
+
managerMcpSetup: "mms",
|
|
14681
14683
|
/** One Manager-authored questionnaire waiting in a Conversation. */
|
|
14682
14684
|
managerQuestionnaire: "mqu",
|
|
14683
14685
|
/** One Manager inference call's token-metering row (MG-8). */
|
|
@@ -14711,7 +14713,11 @@ var ID_PREFIXES = {
|
|
|
14711
14713
|
/** One durable set of teammate-proposed Automations awaiting an Admin (OB-12). */
|
|
14712
14714
|
automationProposalSet: "aps",
|
|
14713
14715
|
/** One product-feedback report passed to the Zixt team (MG-23). */
|
|
14714
|
-
productFeedback: "pfb"
|
|
14716
|
+
productFeedback: "pfb",
|
|
14717
|
+
/** One shared company fact every teammate and the Manager read (CP-1). */
|
|
14718
|
+
companyProfileEntry: "cpe",
|
|
14719
|
+
/** A bounded, validated image of the organization's own logo (CP-3). */
|
|
14720
|
+
companyLogo: "clg"
|
|
14715
14721
|
};
|
|
14716
14722
|
var idPattern = (prefix) => new RegExp(`^${prefix}_[0-9a-f]{32}$`);
|
|
14717
14723
|
function newId(prefix) {
|
|
@@ -14750,6 +14756,11 @@ var TaskArtifactId = idSchema(ID_PREFIXES.artifact, "task artifact id");
|
|
|
14750
14756
|
var MemoryId = idSchema(ID_PREFIXES.memory, "memory id");
|
|
14751
14757
|
var ManagerId = idSchema(ID_PREFIXES.manager, "manager id");
|
|
14752
14758
|
var ManagerMemoryId = idSchema(ID_PREFIXES.managerMemory, "manager memory id");
|
|
14759
|
+
var CompanyProfileEntryId = idSchema(
|
|
14760
|
+
ID_PREFIXES.companyProfileEntry,
|
|
14761
|
+
"company profile entry id"
|
|
14762
|
+
);
|
|
14763
|
+
var CompanyLogoId = idSchema(ID_PREFIXES.companyLogo, "company logo id");
|
|
14753
14764
|
var ConversationId = idSchema(ID_PREFIXES.conversation, "conversation id");
|
|
14754
14765
|
var ConversationEventId = idSchema(ID_PREFIXES.conversationEvent, "conversation event id");
|
|
14755
14766
|
var ManagerIntegrationActionId = idSchema(
|
|
@@ -14769,6 +14780,7 @@ var ManagerEmailSetupId = idSchema(
|
|
|
14769
14780
|
ID_PREFIXES.managerEmailSetup,
|
|
14770
14781
|
"Manager email setup id"
|
|
14771
14782
|
);
|
|
14783
|
+
var ManagerMcpSetupId = idSchema(ID_PREFIXES.managerMcpSetup, "Manager MCP setup id");
|
|
14772
14784
|
var ManagerQuestionnaireId = idSchema(
|
|
14773
14785
|
ID_PREFIXES.managerQuestionnaire,
|
|
14774
14786
|
"Manager questionnaire id"
|
|
@@ -15796,6 +15808,87 @@ var Host = external_exports.object({
|
|
|
15796
15808
|
createdAt: IsoDate2
|
|
15797
15809
|
});
|
|
15798
15810
|
|
|
15811
|
+
// ../../packages/contracts/src/company-profile.ts
|
|
15812
|
+
var CompanyProfileSection = external_exports.enum([
|
|
15813
|
+
/** What the business is and what it sells. */
|
|
15814
|
+
"identity",
|
|
15815
|
+
/** Who it serves. */
|
|
15816
|
+
"customers",
|
|
15817
|
+
/** How the world reaches it: phone, addresses, inboxes, social accounts. */
|
|
15818
|
+
"contact",
|
|
15819
|
+
/** How it runs: hours, locations, timezone, languages, size. */
|
|
15820
|
+
"operating",
|
|
15821
|
+
/** How it sounds and looks: voice, naming, colors. */
|
|
15822
|
+
"brand",
|
|
15823
|
+
/** Who it competes with and what those competitors do (CP-4). */
|
|
15824
|
+
"market"
|
|
15825
|
+
]);
|
|
15826
|
+
var CompanyProfileSource = external_exports.enum([
|
|
15827
|
+
/** A person typed it, in settings or in the setup interview. */
|
|
15828
|
+
"person",
|
|
15829
|
+
/** The Manager kept it from a Conversation. */
|
|
15830
|
+
"manager",
|
|
15831
|
+
/** An AI teammate kept it during a Task. */
|
|
15832
|
+
"teammate",
|
|
15833
|
+
/** The company-setup interview recorded it from the answers. */
|
|
15834
|
+
"setup",
|
|
15835
|
+
/** Zixt read it on the web while researching the company's own site (CP-3). */
|
|
15836
|
+
"research"
|
|
15837
|
+
]);
|
|
15838
|
+
var CompanyProfileTrust = external_exports.enum(["internal", "external"]);
|
|
15839
|
+
var COMPANY_PROFILE_SUBJECT_MAX = 60;
|
|
15840
|
+
var COMPANY_PROFILE_TEXT_MAX = 300;
|
|
15841
|
+
var COMPANY_PROFILE_MAX_ENTRIES = 80;
|
|
15842
|
+
var COMPANY_PROFILE_SOURCE_URL_MAX = 500;
|
|
15843
|
+
var CompanyProfileEntry = external_exports.object({
|
|
15844
|
+
id: CompanyProfileEntryId,
|
|
15845
|
+
section: CompanyProfileSection,
|
|
15846
|
+
/** Short normalized topic; (section, subject) is the deduplication key. */
|
|
15847
|
+
subject: external_exports.string().trim().min(1).max(COMPANY_PROFILE_SUBJECT_MAX),
|
|
15848
|
+
text: external_exports.string().trim().min(1).max(COMPANY_PROFILE_TEXT_MAX),
|
|
15849
|
+
source: CompanyProfileSource,
|
|
15850
|
+
trust: CompanyProfileTrust,
|
|
15851
|
+
/** The AI teammate that wrote it, when a teammate did. */
|
|
15852
|
+
authorAgentId: AgentId.nullable(),
|
|
15853
|
+
/** The member whose authority the write carried, when a person's did. */
|
|
15854
|
+
authorMemberId: MemberId.nullable(),
|
|
15855
|
+
/** The page a research row came from, for the person checking it. */
|
|
15856
|
+
sourceUrl: external_exports.string().max(COMPANY_PROFILE_SOURCE_URL_MAX).nullable(),
|
|
15857
|
+
/**
|
|
15858
|
+
* A person read this row and said it is right. Confirming is what turns a
|
|
15859
|
+
* researched claim into an organization fact; it never rewrites the text,
|
|
15860
|
+
* so the trail from "found on the web" to "we agreed" stays readable.
|
|
15861
|
+
*/
|
|
15862
|
+
confirmedAt: IsoDate.nullable(),
|
|
15863
|
+
confirmedByMemberId: MemberId.nullable(),
|
|
15864
|
+
createdAt: IsoDate,
|
|
15865
|
+
updatedAt: IsoDate
|
|
15866
|
+
}).strict();
|
|
15867
|
+
var CompanyProfileHeader = external_exports.object({
|
|
15868
|
+
/** The company's own website, as the person gave it, normalized to https. */
|
|
15869
|
+
websiteUrl: external_exports.string().max(COMPANY_PROFILE_SOURCE_URL_MAX).nullable(),
|
|
15870
|
+
/** Verified image bytes Zixt stores itself; never a hotlink to their site. */
|
|
15871
|
+
logoAssetId: CompanyLogoId.nullable(),
|
|
15872
|
+
/** Where the logo was found, shown beside it so a person can check. */
|
|
15873
|
+
logoSourceUrl: external_exports.string().max(COMPANY_PROFILE_SOURCE_URL_MAX).nullable()
|
|
15874
|
+
}).strict();
|
|
15875
|
+
var CompanyProfileView = external_exports.object({
|
|
15876
|
+
header: CompanyProfileHeader,
|
|
15877
|
+
entries: external_exports.array(CompanyProfileEntry).max(COMPANY_PROFILE_MAX_ENTRIES),
|
|
15878
|
+
/** How many more rows this organization may keep before it must forget one. */
|
|
15879
|
+
remaining: external_exports.number().int().min(0),
|
|
15880
|
+
/** Members read the profile; Owners and Admins write it (ORG-2). */
|
|
15881
|
+
editable: external_exports.boolean()
|
|
15882
|
+
}).strict();
|
|
15883
|
+
var PutCompanyProfileEntryRequest = external_exports.object({
|
|
15884
|
+
section: CompanyProfileSection,
|
|
15885
|
+
subject: external_exports.string().trim().min(1).max(COMPANY_PROFILE_SUBJECT_MAX),
|
|
15886
|
+
text: external_exports.string().trim().min(1).max(COMPANY_PROFILE_TEXT_MAX)
|
|
15887
|
+
}).strict();
|
|
15888
|
+
var UpdateCompanyProfileHeaderRequest = external_exports.object({
|
|
15889
|
+
websiteUrl: external_exports.string().trim().max(COMPANY_PROFILE_SOURCE_URL_MAX).nullable()
|
|
15890
|
+
}).strict();
|
|
15891
|
+
|
|
15799
15892
|
// ../../packages/contracts/src/connections.ts
|
|
15800
15893
|
var McpTransport = external_exports.enum(["http", "sse"]);
|
|
15801
15894
|
var ConnectionAuthKind = external_exports.enum(["none", "bearer", "oauth"]);
|
|
@@ -18485,6 +18578,22 @@ var AgentOp = external_exports.union([
|
|
|
18485
18578
|
}),
|
|
18486
18579
|
/** Retract a memory that is wrong or stale; self-correction is the point. */
|
|
18487
18580
|
external_exports.object({ kind: external_exports.literal("memory.forget"), memoryId: MemoryId }),
|
|
18581
|
+
/**
|
|
18582
|
+
* Keep one fact about the organization itself in the shared Company profile
|
|
18583
|
+
* (CP-1). Unlike `memory.remember`, which is this teammate's own, every
|
|
18584
|
+
* teammate and the Manager read this one, so it takes no scope: a company
|
|
18585
|
+
* fact is not true on one Machine. The cloud fixes its trust from the run's
|
|
18586
|
+
* own origin, so a fact learned during externally-triggered work reaches the
|
|
18587
|
+
* rest of the team marked as such.
|
|
18588
|
+
*/
|
|
18589
|
+
external_exports.object({
|
|
18590
|
+
kind: external_exports.literal("company.note"),
|
|
18591
|
+
section: CompanyProfileSection,
|
|
18592
|
+
subject: external_exports.string().min(1).max(COMPANY_PROFILE_SUBJECT_MAX),
|
|
18593
|
+
text: external_exports.string().min(1).max(COMPANY_PROFILE_TEXT_MAX)
|
|
18594
|
+
}),
|
|
18595
|
+
/** Remove a company fact that is wrong or stale, by its id. */
|
|
18596
|
+
external_exports.object({ kind: external_exports.literal("company.forget"), entryId: CompanyProfileEntryId }),
|
|
18488
18597
|
/** The teammate's working-folder registry with per-Machine availability. */
|
|
18489
18598
|
external_exports.object({ kind: external_exports.literal("workspace.list") }),
|
|
18490
18599
|
/**
|
|
@@ -19902,7 +20011,9 @@ var ConversationEventProjection = external_exports.discriminatedUnion("kind", [
|
|
|
19902
20011
|
/** Present only for a Manager-authored questionnaire (MG-22). */
|
|
19903
20012
|
questionnaireId: ManagerQuestionnaireId.nullable().optional(),
|
|
19904
20013
|
/** Present only for an Email Integration setup card (MG-24). */
|
|
19905
|
-
emailSetupId: ManagerEmailSetupId.nullable().optional()
|
|
20014
|
+
emailSetupId: ManagerEmailSetupId.nullable().optional(),
|
|
20015
|
+
/** Present only for an MCP connection setup card (MG-24). */
|
|
20016
|
+
mcpSetupId: ManagerMcpSetupId.nullable().optional()
|
|
19906
20017
|
}).strict(),
|
|
19907
20018
|
/** A mirrored child-Task event: what the teammate wrote or became. */
|
|
19908
20019
|
external_exports.object({
|
|
@@ -19941,7 +20052,7 @@ var ConversationEventProjection = external_exports.discriminatedUnion("kind", [
|
|
|
19941
20052
|
severity: external_exports.enum(["error", "notice"]).optional()
|
|
19942
20053
|
}).strict()
|
|
19943
20054
|
]);
|
|
19944
|
-
var ManagerIntegrationProvider = external_exports.enum(["slack", "github"]);
|
|
20055
|
+
var ManagerIntegrationProvider = external_exports.enum(["slack", "github", "linear", "whatsapp"]);
|
|
19945
20056
|
var ManagerIntegrationOperation = external_exports.enum(["connect", "reconnect", "check", "remove"]);
|
|
19946
20057
|
var ManagerIntegrationActionStatus = external_exports.enum([
|
|
19947
20058
|
"awaiting_confirmation",
|
|
@@ -19958,6 +20069,8 @@ var ManagerIntegrationActionProjection = external_exports.object({
|
|
|
19958
20069
|
provider: ManagerIntegrationProvider,
|
|
19959
20070
|
providerName: external_exports.string().min(1).max(80),
|
|
19960
20071
|
operation: ManagerIntegrationOperation,
|
|
20072
|
+
/** The teammate a per-identity provider action is for (Linear connect). */
|
|
20073
|
+
teammate: external_exports.object({ agentId: AgentId, name: external_exports.string().min(1).max(200) }).strict().nullable().optional(),
|
|
19961
20074
|
status: ManagerIntegrationActionStatus,
|
|
19962
20075
|
title: external_exports.string().min(1).max(200),
|
|
19963
20076
|
description: external_exports.string().min(1).max(1e3),
|
|
@@ -20013,6 +20126,29 @@ var ManagerEmailSetupProjection = external_exports.object({
|
|
|
20013
20126
|
createdAt: external_exports.string()
|
|
20014
20127
|
}).strict();
|
|
20015
20128
|
var CompleteManagerEmailSetupRequest = external_exports.object({ connectionId: external_exports.string().min(1).max(100) }).strict();
|
|
20129
|
+
var ManagerMcpSetupPrefill = external_exports.object({
|
|
20130
|
+
/** Connection name as it will appear under Integrations. */
|
|
20131
|
+
name: external_exports.string().min(1).max(120).optional(),
|
|
20132
|
+
url: external_exports.url().max(2e3).optional(),
|
|
20133
|
+
transport: McpTransport.optional(),
|
|
20134
|
+
authKind: ConnectionAuthKind.optional(),
|
|
20135
|
+
/** Name of the vaulted Credential a bearer connection reads. Never a value. */
|
|
20136
|
+
secretName: external_exports.string().max(120).optional(),
|
|
20137
|
+
usageNotes: external_exports.string().max(4e3).optional()
|
|
20138
|
+
}).strict();
|
|
20139
|
+
var ManagerMcpSetupProjection = external_exports.object({
|
|
20140
|
+
id: ManagerMcpSetupId,
|
|
20141
|
+
conversationId: ConversationId,
|
|
20142
|
+
prefill: ManagerMcpSetupPrefill,
|
|
20143
|
+
status: ManagerEmailSetupStatus,
|
|
20144
|
+
/** True when the requesting member is the person this card was prepared for. */
|
|
20145
|
+
mine: external_exports.boolean(),
|
|
20146
|
+
/** The MCP connection the card produced; present once completed. */
|
|
20147
|
+
connectionId: external_exports.string().nullable(),
|
|
20148
|
+
connectionName: external_exports.string().max(120).nullable(),
|
|
20149
|
+
createdAt: external_exports.string()
|
|
20150
|
+
}).strict();
|
|
20151
|
+
var CompleteManagerMcpSetupRequest = external_exports.object({ connectionId: external_exports.string().min(1).max(100) }).strict();
|
|
20016
20152
|
var ManagerCredentialRequestStatus = external_exports.enum([
|
|
20017
20153
|
"awaiting_entry",
|
|
20018
20154
|
"storing",
|
|
@@ -22144,7 +22280,13 @@ var BrowserOAuthConfig = external_exports.object({
|
|
|
22144
22280
|
/** Exact origin a provider callback posts its result back from. */
|
|
22145
22281
|
callbackOrigin: HttpOrigin2.nullable(),
|
|
22146
22282
|
/** Slug of the GitHub App this cloud installs; null when GitHub is unconfigured. */
|
|
22147
|
-
githubAppSlug: GithubAppSlug.nullable()
|
|
22283
|
+
githubAppSlug: GithubAppSlug.nullable(),
|
|
22284
|
+
/**
|
|
22285
|
+
* Exact Linear authorize URL this cloud sends browsers to. Configurable
|
|
22286
|
+
* server-side (LINEAR_OAUTH_AUTHORIZE_URL), so a pin frozen to the public
|
|
22287
|
+
* default would refuse a self-hosted deployment's own popup.
|
|
22288
|
+
*/
|
|
22289
|
+
linearAuthorizeUrl: external_exports.url().max(2e3).nullable()
|
|
22148
22290
|
}).strict();
|
|
22149
22291
|
|
|
22150
22292
|
// ../../packages/contracts/src/secrets-env.ts
|
|
@@ -22440,6 +22582,7 @@ var InterviewTurn = InterviewQuestion.extend({
|
|
|
22440
22582
|
});
|
|
22441
22583
|
var InterviewSubject = external_exports.enum([
|
|
22442
22584
|
"business",
|
|
22585
|
+
"website",
|
|
22443
22586
|
"channels",
|
|
22444
22587
|
"tools",
|
|
22445
22588
|
"handoff",
|
|
@@ -22680,6 +22823,20 @@ var CompanySetupCheckIn = external_exports.object({
|
|
|
22680
22823
|
team: external_exports.array(CheckInTeammate).max(COMPANY_SETUP_MAX_CHECK_IN_TEAM),
|
|
22681
22824
|
connectedTools: external_exports.array(external_exports.object({ kind: CompanyToolKind, name: external_exports.string().trim().min(1).max(120) })).max(COMPANY_SETUP_MAX_CHECK_IN_TOOLS)
|
|
22682
22825
|
});
|
|
22826
|
+
var CompanySetupResearchState = external_exports.object({
|
|
22827
|
+
/** The site being read, normalized; null once cleared. */
|
|
22828
|
+
websiteUrl: external_exports.string().max(500).nullable(),
|
|
22829
|
+
startedAt: IsoDate,
|
|
22830
|
+
finishedAt: IsoDate.nullable(),
|
|
22831
|
+
/** Plain-language failure for the page; null while running or on success. */
|
|
22832
|
+
error: external_exports.string().max(300).nullable(),
|
|
22833
|
+
/** Company facts written into the profile by this pass. */
|
|
22834
|
+
factsFound: external_exports.number().int().min(0),
|
|
22835
|
+
/** Competitors written into the profile's market section (OB-15). */
|
|
22836
|
+
competitorsFound: external_exports.number().int().min(0),
|
|
22837
|
+
/** True once a logo image was verified and stored. */
|
|
22838
|
+
logoFound: external_exports.boolean()
|
|
22839
|
+
}).strict();
|
|
22683
22840
|
var CompanySetupView = external_exports.object({
|
|
22684
22841
|
id: CompanySetupId.nullable(),
|
|
22685
22842
|
orgId: OrgId,
|
|
@@ -22705,6 +22862,13 @@ var CompanySetupView = external_exports.object({
|
|
|
22705
22862
|
/** Oldest first; the planner's visible decisions so far. */
|
|
22706
22863
|
notes: external_exports.array(CompanySetupPlanningNote).max(COMPANY_SETUP_PLANNING_NOTES_MAX).default([])
|
|
22707
22864
|
}).nullable(),
|
|
22865
|
+
/**
|
|
22866
|
+
* Looking the company up from the website the person gave (OB-15). It runs
|
|
22867
|
+
* beside the interview rather than in front of it, so the person keeps
|
|
22868
|
+
* answering while Zixt reads; the page polls the same way it does for the
|
|
22869
|
+
* plan. A failure is reported and never blocks setup.
|
|
22870
|
+
*/
|
|
22871
|
+
research: CompanySetupResearchState.nullable(),
|
|
22708
22872
|
approval: CompanySetupApproval.nullable(),
|
|
22709
22873
|
steps: external_exports.array(CompanySetupStep),
|
|
22710
22874
|
progress: CompanySetupProgress,
|
|
@@ -39014,6 +39178,38 @@ var TOOLS = [
|
|
|
39014
39178
|
required: ["agent_id"]
|
|
39015
39179
|
}
|
|
39016
39180
|
},
|
|
39181
|
+
{
|
|
39182
|
+
name: "note_company_fact",
|
|
39183
|
+
description: "Keep one short fact about the organization you work for in the shared company profile, which every teammate and the manager read on every task: what the business does, who it serves, how customers reach it, how it operates, how it sounds, or who it competes with. Use it when you learn something durable about the business itself, and to correct a fact that is wrong - writing the same section and subject again replaces the earlier text. This is not your own memory: use remember for what you learned about a project or this machine, and this for what is true about the company.",
|
|
39184
|
+
inputSchema: {
|
|
39185
|
+
type: "object",
|
|
39186
|
+
properties: {
|
|
39187
|
+
section: {
|
|
39188
|
+
type: "string",
|
|
39189
|
+
enum: ["identity", "customers", "contact", "operating", "brand", "market"],
|
|
39190
|
+
description: "Which part of the company this fact is about."
|
|
39191
|
+
},
|
|
39192
|
+
subject: {
|
|
39193
|
+
type: "string",
|
|
39194
|
+
description: "A few words naming the topic; the same subject replaces the earlier fact."
|
|
39195
|
+
},
|
|
39196
|
+
text: {
|
|
39197
|
+
type: "string",
|
|
39198
|
+
description: "One short sentence a colleague could act on."
|
|
39199
|
+
}
|
|
39200
|
+
},
|
|
39201
|
+
required: ["section", "subject", "text"]
|
|
39202
|
+
}
|
|
39203
|
+
},
|
|
39204
|
+
{
|
|
39205
|
+
name: "forget_company_fact",
|
|
39206
|
+
description: "Remove one fact from the shared company profile by its id, because it stopped being true or was never true.",
|
|
39207
|
+
inputSchema: {
|
|
39208
|
+
type: "object",
|
|
39209
|
+
properties: { entry_id: { type: "string", description: "The company fact id." } },
|
|
39210
|
+
required: ["entry_id"]
|
|
39211
|
+
}
|
|
39212
|
+
},
|
|
39017
39213
|
{
|
|
39018
39214
|
name: "remember",
|
|
39019
39215
|
description: 'Keep one durable fact in your curated memory, injected into your future runs. Use when a person corrects you, states a lasting preference, or you learn a stable fact about a project or this machine (folder locations, installed tools, environment quirks). One short fact per memory. Scope "machine" marks a fact true only on the machine this run is on; "global" travels everywhere.',
|
|
@@ -39357,6 +39553,22 @@ function opFor(name, args) {
|
|
|
39357
39553
|
}
|
|
39358
39554
|
case "forget":
|
|
39359
39555
|
return { kind: "memory.forget", memoryId: str("memory_id") };
|
|
39556
|
+
case "note_company_fact": {
|
|
39557
|
+
const section = String(args["section"] ?? "");
|
|
39558
|
+
if (section !== "identity" && section !== "customers" && section !== "contact" && section !== "operating" && section !== "brand" && section !== "market") {
|
|
39559
|
+
throw new Error(
|
|
39560
|
+
"section must be identity, customers, contact, operating, brand, or market"
|
|
39561
|
+
);
|
|
39562
|
+
}
|
|
39563
|
+
return {
|
|
39564
|
+
kind: "company.note",
|
|
39565
|
+
section,
|
|
39566
|
+
subject: str("subject"),
|
|
39567
|
+
text: str("text")
|
|
39568
|
+
};
|
|
39569
|
+
}
|
|
39570
|
+
case "forget_company_fact":
|
|
39571
|
+
return { kind: "company.forget", entryId: str("entry_id") };
|
|
39360
39572
|
case "list_workspaces":
|
|
39361
39573
|
return { kind: "workspace.list" };
|
|
39362
39574
|
case "add_workspace":
|