openmates 0.29.0-alpha.3 → 0.29.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -740,7 +740,8 @@ var DEFAULT_STANDALONE_PREFIX = "TASK";
740
740
  var PRIORITY_LEVELS = ["none", "low", "medium", "high", "urgent"];
741
741
  var LABEL_INDEX_INFO = "openmates-task-label-index-v1";
742
742
  var EXTERNAL_CHAT_INDEX_INFO = "openmates-task-external-chat-index-v1";
743
- var EXTERNAL_CHAT_PROVIDERS = ["codex"];
743
+ var EXTERNAL_CHAT_PROVIDERS = ["codex", "claude"];
744
+ var CLAUDE_SESSION_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
744
745
  var BLOCKED_REASON_CODES = [
745
746
  "needs_user_input",
746
747
  "waiting_for_approval",
@@ -773,10 +774,15 @@ function parseExternalChatRef(value) {
773
774
  const provider = value.slice(0, separator).trim().toLowerCase();
774
775
  const id = value.slice(separator + 1).trim();
775
776
  if (separator <= 0 || !id) throw new Error("--external-chat requires provider:id.");
776
- if (!EXTERNAL_CHAT_PROVIDERS.includes(provider)) throw new Error(`Unsupported external chat provider '${provider}'. Use codex.`);
777
- return { provider, id };
777
+ return assertExternalChatRef({ provider, id });
778
+ }
779
+ function assertExternalChatRef(ref) {
780
+ if (!EXTERNAL_CHAT_PROVIDERS.includes(ref.provider)) throw new Error(`Unsupported external chat provider '${ref.provider}'. Use codex or claude.`);
781
+ if (ref.provider === "claude" && !CLAUDE_SESSION_ID.test(ref.id)) throw new Error("Claude Code external chat ids must be session UUIDs (CLAUDE_CODE_SESSION_ID).");
782
+ return ref;
778
783
  }
779
784
  function externalChatLookupHash(masterKey, context) {
785
+ assertExternalChatRef(context);
780
786
  const indexKey = Buffer.from(hkdfSync2("sha256", Buffer.from(masterKey), Buffer.alloc(0), EXTERNAL_CHAT_INDEX_INFO, 32));
781
787
  return createHmac3("sha256", indexKey).update(`${context.provider}\0${context.id}`).digest("hex");
782
788
  }
@@ -1345,6 +1351,7 @@ export {
1345
1351
  taskEditLookupScope,
1346
1352
  workflowProjectionDeleteGuidance,
1347
1353
  parseExternalChatRef,
1354
+ assertExternalChatRef,
1348
1355
  externalChatLookupHash,
1349
1356
  normalizeBlockedReasonCode,
1350
1357
  normalizeTaskStatus,
@@ -65,7 +65,7 @@ import {
65
65
  unwrapApiKeyMasterKey,
66
66
  unwrapPasswordMasterKey,
67
67
  workflowProjectionDeleteGuidance
68
- } from "./chunk-5OCI636P.js";
68
+ } from "./chunk-67U3XD2B.js";
69
69
  import {
70
70
  PII_TYPE_TO_CATEGORY,
71
71
  ProjectFilePrivacy,
@@ -682,6 +682,9 @@ var CONNECTION_TIMEOUT_MS = 1e4;
682
682
  var MAX_RESPONSE_BYTES = 4 * 1024 * 1024;
683
683
  var THREAD_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
684
684
  function codexResumeArguments(context) {
685
+ if (context.provider === "claude") {
686
+ throw new Error("This Task is linked to a Claude Code session. Tasks connect, connection and resume support Codex threads only; resume it in Claude Code with: claude --resume " + context.id);
687
+ }
685
688
  if (context.provider !== "codex") throw new Error("Codex connection requires the codex provider.");
686
689
  if (!THREAD_ID.test(context.id)) throw new Error("Codex connection requires a valid thread UUID.");
687
690
  return ["resume", context.id];
@@ -769,7 +772,7 @@ async function resumeCodexTask(context) {
769
772
  }
770
773
  function taskOwnerConflict(owner2) {
771
774
  const title = JSON.stringify(owner2.title || "Untitled chat");
772
- const location = owner2.provider === "openmates" ? `OpenMates chat ID: ${owner2.id}. View: openmates chats show ${owner2.id}` : `Codex chat ID: ${owner2.id}`;
775
+ const location = owner2.provider === "openmates" ? `OpenMates chat ID: ${owner2.id}. View: openmates chats show ${owner2.id}` : owner2.provider === "claude" ? `Claude Code session ID: ${owner2.id}` : `Codex chat ID: ${owner2.id}`;
773
776
  return `Task is already linked to ${title}. ${location}. Release that link before claiming the task in another chat.`;
774
777
  }
775
778
  function assertCodexClaimCaller(threadId, currentThread = process.env.CODEX_THREAD_ID) {
@@ -778,6 +781,17 @@ function assertCodexClaimCaller(threadId, currentThread = process.env.CODEX_THRE
778
781
  throw new Error("Only the owning Codex chat can claim a Task. Run this command inside Codex chat ID: " + threadId + ". Ordinary CLI creation can omit --external-chat to leave the Task unlinked.");
779
782
  }
780
783
  }
784
+ function assertClaudeClaimCaller(sessionId, currentSession = process.env.CLAUDE_CODE_SESSION_ID) {
785
+ if (!THREAD_ID.test(sessionId)) throw new Error("Claude Code external chat ids must be session UUIDs (CLAUDE_CODE_SESSION_ID).");
786
+ if (!currentSession || currentSession !== sessionId) {
787
+ throw new Error("Only the owning Claude Code session can claim a Task. Run this command inside Claude Code session ID: " + sessionId + " (CLAUDE_CODE_SESSION_ID). Ordinary CLI creation can omit --external-chat to leave the Task unlinked.");
788
+ }
789
+ }
790
+ function currentExternalChatCaller(environment = process.env) {
791
+ if (environment.CODEX_THREAD_ID) return { provider: "codex", id: environment.CODEX_THREAD_ID };
792
+ if (environment.CLAUDE_CODE_SESSION_ID) return { provider: "claude", id: environment.CLAUDE_CODE_SESSION_ID };
793
+ return void 0;
794
+ }
781
795
 
782
796
  // src/chatMetadataRecovery.ts
783
797
  import { randomUUID as randomUUID3 } from "crypto";
@@ -20847,7 +20861,7 @@ var OpenMatesClient = class _OpenMatesClient {
20847
20861
  return documents;
20848
20862
  }
20849
20863
  async decryptTaskContextRecord(record11, options = {}) {
20850
- const { decryptUserTask: decryptUserTask2 } = await import("./tasksCli-NXIDMIL6.js");
20864
+ const { decryptUserTask: decryptUserTask2 } = await import("./tasksCli-V2INK4CH.js");
20851
20865
  const teamId = this.resolveTeamContext(options);
20852
20866
  if (!teamId || record11.source === "workflow_run") return decryptUserTask2(record11, this.getMasterKeyBytes());
20853
20867
  this.requireSession();
@@ -71082,6 +71096,19 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
71082
71096
  text: "JobTech receives selected job keywords, named location, remote preference, publication window and result count for Swedish vacancy search."
71083
71097
  }
71084
71098
  }
71099
+ },
71100
+ local_privacy: {
71101
+ desert_ant_labs: {
71102
+ heading: {
71103
+ text: "Local text protection \u2014 Redact by Desert Ant Labs (Netherlands)"
71104
+ },
71105
+ description: {
71106
+ text: "Enhanced text detection uses Redact by Desert Ant Labs and is enabled by default. Text inference runs locally in your browser. OpenMates hosts the approved model and runtime assets; web users do not need to download them from Hugging Face. Turning off enhanced detection in privacy settings stops Redact use and its licensing requests while keeping the complete basic text detector available.\n\nRedact requires SDK licensing and activation requests directly from your browser to Desert Ant Labs. These requests include a browser installation UUID used for license/device counting, model and SDK versions, platform, the application hostname and a signed license token. OpenMates controls local persistence of the installation identifier and uses it only as license metadata. The vendor also sees your IP address, browser request headers (including Origin) and request timing. Text being scanned, detection results, placeholder mappings and your OpenMates account ID are not included in these requests.\n\nDesert Ant Labs acts as an independent controller for this licensing telemetry under its license. This feature is not anonymous or wholly offline, and OpenMates does not promise a particular vendor retention period. Local detection can miss personal data. Typed-message protection does not cover voice audio, raw transcripts, uploaded files, reference images, calendar content or provider-specific inputs unless a feature explicitly says otherwise."
71107
+ }
71108
+ },
71109
+ license_link: {
71110
+ text: "Desert Ant Labs license (including licensing telemetry)"
71111
+ }
71085
71112
  }
71086
71113
  },
71087
71114
  title: {
@@ -71641,7 +71668,7 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
71641
71668
  text: "Do third-party providers receive my content?"
71642
71669
  },
71643
71670
  answer: {
71644
- text: "Yes, when you choose a model or use a provider-powered feature, the content needed for that request may be sent to the provider. Eligible typed chat messages use client-side placeholder substitution for recognized personal details and secrets. Anything not detected may be sent as typed, and the protection does not cover voice recordings, raw transcripts, uploaded files, reference images, calendar content, or structured skill inputs unless a feature explicitly says otherwise."
71671
+ text: "Yes, when you choose a model or use a provider-powered feature, the content needed for that request may be sent to the provider. Eligible typed chat messages use client-side placeholder substitution for recognized personal details and secrets. Anything not detected may be sent as typed, and the protection does not cover voice recordings, raw transcripts, uploaded files, reference images, calendar content, or structured skill inputs unless a feature explicitly says otherwise. Enhanced text detection uses Redact by Desert Ant Labs locally, with limited licensing metadata sent directly to the vendor as described below."
71645
71672
  }
71646
71673
  },
71647
71674
  voice_recordings: {
@@ -78816,6 +78843,15 @@ Only output the final Markdown table. Do NOT include explanations, notes, or any
78816
78843
  text: "{count}d remaining"
78817
78844
  }
78818
78845
  }
78846
+ },
78847
+ enhanced_protection: {
78848
+ text: "Enhanced personal data protection",
78849
+ description: {
78850
+ text: "Redact from Desert Ant Labs detects personal data locally in messages and recording text. Mandatory licensing traffic includes an installation identifier and model, SDK, platform and application metadata; the provider also sees IP address, headers and timing. Your scanned text stays on your device. Existing audio and file provider flows remain unchanged. Turning this off keeps full pattern detection, your configured entries and exclusions active when Hide personal data is on."
78851
+ },
78852
+ provider_privacy: {
78853
+ text: "Desert Ant Labs privacy policy"
78854
+ }
78819
78855
  }
78820
78856
  },
78821
78857
  terms_and_conditions: {
@@ -108358,7 +108394,8 @@ async function handleTasks(client2, subcommand, rest, flags, redactor) {
108358
108394
  printTaskOutput(task, flags);
108359
108395
  return;
108360
108396
  }
108361
- if (process.env.CODEX_THREAD_ID && (task.externalChat?.provider !== "codex" || task.externalChat.id !== process.env.CODEX_THREAD_ID)) {
108397
+ const caller = currentExternalChatCaller();
108398
+ if (caller && (task.externalChat?.provider !== caller.provider || task.externalChat.id !== caller.id)) {
108362
108399
  if (task.primaryChatId) {
108363
108400
  const owner2 = await client2.getChatMetadata(task.primaryChatId, scope2);
108364
108401
  throw new Error(taskOwnerConflict({ provider: "openmates", id: owner2.id, title: owner2.title }));
@@ -108772,11 +108809,17 @@ async function resolveTaskScope(client2, masterKey, flags, scope2) {
108772
108809
  if (planId) planId = (await requiredResolvedPlan(client2, masterKey, planId, { teamId: scope2.teamId, personal: scope2.personal }, "scope")).planId;
108773
108810
  return { ...scope2, chatId, projectId, planId };
108774
108811
  }
108812
+ function claimClaudeExternalChat(context) {
108813
+ assertClaudeClaimCaller(context.id);
108814
+ return { provider: "claude", id: context.id, title: context.title?.trim() || "Claude Code session" };
108815
+ }
108775
108816
  async function resolveTaskCreateOptions(client2, masterKey, flags, input) {
108776
108817
  if (input.externalChat?.provider === "codex") {
108777
108818
  assertCodexClaimCaller(input.externalChat.id);
108778
108819
  const connection = await readCodexThread(input.externalChat.id);
108779
108820
  input = { ...input, assign: input.assign ?? "codex", externalChat: { provider: "codex", id: connection.id, title: connection.title } };
108821
+ } else if (input.externalChat?.provider === "claude") {
108822
+ input = { ...input, externalChat: claimClaudeExternalChat(input.externalChat) };
108780
108823
  }
108781
108824
  const chatId = input.chatId ? (await client2.resolveChatKeyForContext(input.chatId, teamContextFromFlags(flags))).chatId : input.chatId;
108782
108825
  const projectIds = [];
@@ -108791,6 +108834,8 @@ async function resolveTaskUpdateOptions(client2, masterKey, flags, input) {
108791
108834
  assertCodexClaimCaller(input.externalChat.id);
108792
108835
  const connection = await readCodexThread(input.externalChat.id);
108793
108836
  input = { ...input, externalChat: { provider: "codex", id: connection.id, title: connection.title } };
108837
+ } else if (input.externalChat?.provider === "claude") {
108838
+ input = { ...input, externalChat: claimClaudeExternalChat(input.externalChat) };
108794
108839
  }
108795
108840
  const chatId = input.chatId ? (await client2.resolveChatKeyForContext(input.chatId, teamContextFromFlags(flags))).chatId : input.chatId;
108796
108841
  const projectIds = input.projectIds ? await Promise.all(input.projectIds.map(async (projectId) => (await requiredResolvedProject(client2, masterKey, projectId, flags)).projectId)) : input.projectIds;
@@ -120140,15 +120185,15 @@ Examples:
120140
120185
  }
120141
120186
  function printTasksHelp() {
120142
120187
  console.log(`Tasks commands:
120143
- openmates tasks list [--status <status>] [--chat <id>|--external-chat codex:<thread-uuid>] [--project <id>] [--label <label>] [--priority <level>] [--json]
120144
- openmates tasks board [--chat <id>|--external-chat codex:<thread-uuid>] [--project <id>] [--label <label>] [--priority <level>] [--json]
120188
+ openmates tasks list [--status <status>] [--chat <id>|--external-chat codex:<thread-uuid>|claude:<session-uuid>] [--project <id>] [--label <label>] [--priority <level>] [--json]
120189
+ openmates tasks board [--chat <id>|--external-chat codex:<thread-uuid>|claude:<session-uuid>] [--project <id>] [--label <label>] [--priority <level>] [--json]
120145
120190
  openmates tasks show <task-id|short-id> [--json]
120146
120191
  openmates tasks <task-id|short-id> add-to-project <project-id> [--json]
120147
120192
  openmates tasks <task-id|short-id> remove-from-project <project-id> [--json]
120148
120193
  openmates tasks history <task-id|short-id> [--limit <n>] [--json]
120149
120194
  openmates tasks restore <task-id|short-id> --entry <history-entry-id> [--state before|after] [--json]
120150
- openmates tasks create --title <title> [--description <text>] [--assign user|openmates|external-ai|unassigned] [--chat <id>|--external-chat codex:<thread-uuid> [--external-chat-title <title>]] [--project <id>] [--label <label>] [--priority <level>] [--status <status>] [--due <date>] [--json]
120151
- openmates tasks edit <task-id|short-id> [--title <title>] [--description <text>] [--chat <id>|--external-chat codex:<thread-uuid> [--external-chat-title <title>]] [--label <label>] [--add-label <label>] [--remove-label <label>] [--priority <level>] [--assign user|openmates|external-ai|unassigned] [--status <status>] [--json]
120195
+ openmates tasks create --title <title> [--description <text>] [--assign user|openmates|external-ai|unassigned] [--chat <id>|--external-chat codex:<thread-uuid>|claude:<session-uuid> [--external-chat-title <title>]] [--project <id>] [--label <label>] [--priority <level>] [--status <status>] [--due <date>] [--json]
120196
+ openmates tasks edit <task-id|short-id> [--title <title>] [--description <text>] [--chat <id>|--external-chat codex:<thread-uuid>|claude:<session-uuid> [--external-chat-title <title>]] [--label <label>] [--add-label <label>] [--remove-label <label>] [--priority <level>] [--assign user|openmates|external-ai|unassigned] [--status <status>] [--json]
120152
120197
  openmates tasks delete <task-id|short-id> --confirm [--json]
120153
120198
  openmates tasks start <task-id|short-id> [--json]
120154
120199
  openmates tasks status [<task-id|short-id>] [--json]
@@ -120170,6 +120215,10 @@ function printTasksHelp() {
120170
120215
 
120171
120216
  Context: use --personal or --team <team-id> for Task create, list, show, and delete.
120172
120217
 
120218
+ External chats: codex:<thread-uuid> links a Codex thread (CODEX_THREAD_ID); claude:<session-uuid>
120219
+ links a Claude Code session and must run inside that session (CLAUDE_CODE_SESSION_ID).
120220
+ Claude links do not change assignment; connect, connection and resume support Codex only.
120221
+
120173
120222
  Chat-scoped aliases:
120174
120223
  openmates chats <chat-id> tasks list
120175
120224
  openmates chats <chat-id> tasks board
@@ -974,6 +974,8 @@ interface ProtonLocalConnectorRegistration {
974
974
  }
975
975
 
976
976
  declare const PRIORITY_LEVELS: readonly ["none", "low", "medium", "high", "urgent"];
977
+ declare const EXTERNAL_CHAT_PROVIDERS: readonly ["codex", "claude"];
978
+ type ExternalChatProvider = typeof EXTERNAL_CHAT_PROVIDERS[number];
977
979
  type TaskPriorityLevel = typeof PRIORITY_LEVELS[number];
978
980
  interface DecryptedUserTask {
979
981
  taskId: string;
@@ -1077,7 +1079,7 @@ interface TaskUpdateOptions {
1077
1079
  slug?: string;
1078
1080
  }
1079
1081
  interface ExternalChatRef {
1080
- provider: "codex";
1082
+ provider: ExternalChatProvider;
1081
1083
  id: string;
1082
1084
  }
1083
1085
  interface ExternalChatContext extends ExternalChatRef {
@@ -1633,7 +1635,7 @@ interface UserTaskRecord {
1633
1635
  assignee_identity?: UserTaskAssigneeIdentity | null;
1634
1636
  assignee_hash?: string | null;
1635
1637
  primary_chat_id?: string | null;
1636
- external_chat_provider?: "codex" | null;
1638
+ external_chat_provider?: "codex" | "claude" | null;
1637
1639
  external_chat_lookup_hash?: string | null;
1638
1640
  encrypted_external_chat_id?: string | null;
1639
1641
  encrypted_external_chat_title?: string | null;
@@ -3615,7 +3617,7 @@ declare class OpenMatesClient {
3615
3617
  chatId?: string;
3616
3618
  projectId?: string;
3617
3619
  labelHashes?: string[];
3618
- externalChatProvider?: "codex";
3620
+ externalChatProvider?: "codex" | "claude";
3619
3621
  externalChatLookupHash?: string;
3620
3622
  priority?: number;
3621
3623
  limit?: number;
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export { al as ImagesAiDetectionClassification, am as ImagesAiDetectionSummary, aL as assertTrustedAccountCommandAllowed, aM as assertTrustedAccountGuardEnvironment, aD as buildImagesAiDetectionSummary, aN as buildProjectDefaultFocus, aO as buildTravelConnectionsRequest, aE as classifyImagesAiDetection, aP as extractExplicitProjectMentions, aG as formatImagesAiDetectionLabel, aH as getExtForLang, aQ as handleWiki, aR as printWhoAmI, aS as readRootProjectInstructions, aT as renderProjectReadApprovalRequest, aU as renderProjectWriteApprovalRequest, aV as renderRemoteCommandEvent, aW as requireExactConfirmation, aX as resolveProjectContext, aK as serializeToYaml, aY as shouldRequireTrustedAccountGuard, aZ as waitForSafeE2ETotpWindow, a_ as waitForWorkflowRun } from './cli-fJnu1wIs.js';
2
+ export { al as ImagesAiDetectionClassification, am as ImagesAiDetectionSummary, aL as assertTrustedAccountCommandAllowed, aM as assertTrustedAccountGuardEnvironment, aD as buildImagesAiDetectionSummary, aN as buildProjectDefaultFocus, aO as buildTravelConnectionsRequest, aE as classifyImagesAiDetection, aP as extractExplicitProjectMentions, aG as formatImagesAiDetectionLabel, aH as getExtForLang, aQ as handleWiki, aR as printWhoAmI, aS as readRootProjectInstructions, aT as renderProjectReadApprovalRequest, aU as renderProjectWriteApprovalRequest, aV as renderRemoteCommandEvent, aW as requireExactConfirmation, aX as resolveProjectContext, aK as serializeToYaml, aY as shouldRequireTrustedAccountGuard, aZ as waitForSafeE2ETotpWindow, a_ as waitForWorkflowRun } from './cli-CcjnGBnI.js';
3
3
  import '@repo/pairing-crypto/direct-chat';
package/dist/cli.js CHANGED
@@ -21,9 +21,9 @@ import {
21
21
  shouldRequireTrustedAccountGuard,
22
22
  waitForSafeE2ETotpWindow,
23
23
  waitForWorkflowRun
24
- } from "./chunk-LVJJR7BR.js";
24
+ } from "./chunk-XS5ZINO3.js";
25
25
  import "./chunk-IWKP55ZB.js";
26
- import "./chunk-5OCI636P.js";
26
+ import "./chunk-67U3XD2B.js";
27
27
  import "./chunk-QRCAXXAL.js";
28
28
  import "./chunk-7EFG6NPD.js";
29
29
  import "./chunk-TMYEFC7M.js";
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as OpenMatesSession, U as UserPlanStatus, a as UserPlanRecord, b as UserPlanVerificationStatus, c as UserPlanLearningType, d as UserPlanLearningTargetKind, e as UserPlanLearningStatus, f as UserPlanLearningLevel, g as UserPlanLearningRecord, h as UserPlanCriterionRecord, i as UserPlanVerificationRecord, j as UserPlanCreateInput, k as UserPlanUpdateInput, B as BuyerAddress, P as ProjectItemRecord, T as TaskCreateOptions, l as TaskUpdateOptions, m as UserPlanLearningCreateTasksInput, n as UserPlanLearningCreateTasksResult, o as UserTaskStatus, E as ExternalChatContext, p as TaskPriorityLevel, D as DecryptedUserTask, q as DecryptedTaskActivityEntry, r as TaskActivityCreateOptions, s as UserTaskReorderInput, W as WorkflowSummary, t as WorkflowCapability, u as WorkflowDetail, v as WorkflowAuthoringWarning, w as WorkflowInputStartParams, x as WorkflowInputSessionResult, y as WorkflowInputSessionDetail, z as WorkflowInputEvent, A as WorkflowGraph, C as WorkflowRunContentRetention, F as WorkflowRunOnceOptions, G as WorkflowRunDetail, H as WorkflowRunOptions, I as WorkflowNode, J as WorkflowRunCancellationResult, K as WorkflowTemplateProjectionUpsertParams, L as WorkflowTemplateProjectionResult, M as PublicWorkflowTemplateProjection, N as WorkflowTemplateProjectionRevocationResult, Q as WorkflowTemplateBindingCompletionParams, R as WorkflowTemplateBindingCompletionResult, S as WorkflowTemplateShortUrlParams, V as WorkflowTemplateShortUrlResult, X as ShortUrlRevokeResult, Y as WorkflowTemplateImportPayload, Z as ImportedWorkflowTemplate, _ as WikipediaLearningBundle } from './cli-fJnu1wIs.js';
2
- export { $ as AuthMethodsStatus, a0 as AuthoritativeChatReconciliation, a1 as BackupCodesResult, a2 as BankTransferOrderDetails, a3 as BankTransferStatus, a4 as CachedChat, a5 as CachedNewChatSuggestion, a6 as ChatListPage, a7 as CliSignupResult, a8 as CliTurnMetadata, a9 as DecryptedDraft, aa as DecryptedEmbed, ab as DecryptedMemoryEntry, ac as DecryptedMessage, ad as DecryptedNewChatSuggestion, ae as DocsFile, af as DocsFolder, ag as DocsSearchResult, ah as DocsTree, ai as EncryptedDraft, aj as GiftCardBankTransferStatus, ak as INTEREST_TAG_IDS, al as ImagesAiDetectionClassification, am as ImagesAiDetectionSummary, an as InterestTagId, ao as MATE_NAMES, ap as MEMORY_TYPE_REGISTRY, aq as MemoryFieldDef, ar as MemoryTypeDef, as as OpenMatesClient, at as OpenMatesClientOptions, au as SyncCache, av as TopicPreferencesPayload, aw as TotpSetupStartResult, ax as WorkflowEdge, ay as WorkflowNodeRun, az as WorkflowNodeType, aA as WorkflowReturnedOutputReference, aB as WorkflowRunContentStorage, aC as WorkflowRunRouting, aD as buildImagesAiDetectionSummary, aE as classifyImagesAiDetection, aF as deriveAppUrl, aG as formatImagesAiDetectionLabel, aH as getExtForLang, aI as normalizeInterestTagIds, aJ as reconcileAuthoritativeChats, aK as serializeToYaml } from './cli-fJnu1wIs.js';
1
+ import { O as OpenMatesSession, U as UserPlanStatus, a as UserPlanRecord, b as UserPlanVerificationStatus, c as UserPlanLearningType, d as UserPlanLearningTargetKind, e as UserPlanLearningStatus, f as UserPlanLearningLevel, g as UserPlanLearningRecord, h as UserPlanCriterionRecord, i as UserPlanVerificationRecord, j as UserPlanCreateInput, k as UserPlanUpdateInput, B as BuyerAddress, P as ProjectItemRecord, T as TaskCreateOptions, l as TaskUpdateOptions, m as UserPlanLearningCreateTasksInput, n as UserPlanLearningCreateTasksResult, o as UserTaskStatus, E as ExternalChatContext, p as TaskPriorityLevel, D as DecryptedUserTask, q as DecryptedTaskActivityEntry, r as TaskActivityCreateOptions, s as UserTaskReorderInput, W as WorkflowSummary, t as WorkflowCapability, u as WorkflowDetail, v as WorkflowAuthoringWarning, w as WorkflowInputStartParams, x as WorkflowInputSessionResult, y as WorkflowInputSessionDetail, z as WorkflowInputEvent, A as WorkflowGraph, C as WorkflowRunContentRetention, F as WorkflowRunOnceOptions, G as WorkflowRunDetail, H as WorkflowRunOptions, I as WorkflowNode, J as WorkflowRunCancellationResult, K as WorkflowTemplateProjectionUpsertParams, L as WorkflowTemplateProjectionResult, M as PublicWorkflowTemplateProjection, N as WorkflowTemplateProjectionRevocationResult, Q as WorkflowTemplateBindingCompletionParams, R as WorkflowTemplateBindingCompletionResult, S as WorkflowTemplateShortUrlParams, V as WorkflowTemplateShortUrlResult, X as ShortUrlRevokeResult, Y as WorkflowTemplateImportPayload, Z as ImportedWorkflowTemplate, _ as WikipediaLearningBundle } from './cli-CcjnGBnI.js';
2
+ export { $ as AuthMethodsStatus, a0 as AuthoritativeChatReconciliation, a1 as BackupCodesResult, a2 as BankTransferOrderDetails, a3 as BankTransferStatus, a4 as CachedChat, a5 as CachedNewChatSuggestion, a6 as ChatListPage, a7 as CliSignupResult, a8 as CliTurnMetadata, a9 as DecryptedDraft, aa as DecryptedEmbed, ab as DecryptedMemoryEntry, ac as DecryptedMessage, ad as DecryptedNewChatSuggestion, ae as DocsFile, af as DocsFolder, ag as DocsSearchResult, ah as DocsTree, ai as EncryptedDraft, aj as GiftCardBankTransferStatus, ak as INTEREST_TAG_IDS, al as ImagesAiDetectionClassification, am as ImagesAiDetectionSummary, an as InterestTagId, ao as MATE_NAMES, ap as MEMORY_TYPE_REGISTRY, aq as MemoryFieldDef, ar as MemoryTypeDef, as as OpenMatesClient, at as OpenMatesClientOptions, au as SyncCache, av as TopicPreferencesPayload, aw as TotpSetupStartResult, ax as WorkflowEdge, ay as WorkflowNodeRun, az as WorkflowNodeType, aA as WorkflowReturnedOutputReference, aB as WorkflowRunContentStorage, aC as WorkflowRunRouting, aD as buildImagesAiDetectionSummary, aE as classifyImagesAiDetection, aF as deriveAppUrl, aG as formatImagesAiDetectionLabel, aH as getExtForLang, aI as normalizeInterestTagIds, aJ as reconcileAuthoritativeChats, aK as serializeToYaml } from './cli-CcjnGBnI.js';
3
3
  import { DirectChatKeyPair } from '@repo/pairing-crypto/direct-chat';
4
4
 
5
5
  type ChatModelSelection = "auto" | (string & {});
package/dist/index.js CHANGED
@@ -46,9 +46,9 @@ import {
46
46
  selectAssistantMessagesForSpeech,
47
47
  serializeToYaml,
48
48
  summarizeAssistantSpeech
49
- } from "./chunk-LVJJR7BR.js";
49
+ } from "./chunk-XS5ZINO3.js";
50
50
  import "./chunk-IWKP55ZB.js";
51
- import "./chunk-5OCI636P.js";
51
+ import "./chunk-67U3XD2B.js";
52
52
  import "./chunk-QRCAXXAL.js";
53
53
  import "./chunk-7EFG6NPD.js";
54
54
  import "./chunk-TMYEFC7M.js";
@@ -1,5 +1,6 @@
1
1
  import {
2
2
  TASK_STATUSES,
3
+ assertExternalChatRef,
3
4
  buildBlockUserTaskInput,
4
5
  buildCreateTaskActivityInput,
5
6
  buildCreateUserTaskInput,
@@ -30,9 +31,10 @@ import {
30
31
  taskLookupScopes,
31
32
  taskPriorityLevel,
32
33
  workflowProjectionDeleteGuidance
33
- } from "./chunk-5OCI636P.js";
34
+ } from "./chunk-67U3XD2B.js";
34
35
  export {
35
36
  TASK_STATUSES,
37
+ assertExternalChatRef,
36
38
  buildBlockUserTaskInput,
37
39
  buildCreateTaskActivityInput,
38
40
  buildCreateUserTaskInput,
@@ -17,47 +17,47 @@
17
17
  {
18
18
  "name": "libggml-base.so",
19
19
  "bytes": 1110088,
20
- "sha256": "b98445aa7b766805d1c227f7cc43ed12220fbad2019522f6207dcc16b168aa55"
20
+ "sha256": "842ddb2c926c1670227964d4bafa0618383d8dfb56ff9b92ea849d1a4778d8e1"
21
21
  },
22
22
  {
23
23
  "name": "libggml-base.so.0",
24
24
  "bytes": 1110088,
25
- "sha256": "b98445aa7b766805d1c227f7cc43ed12220fbad2019522f6207dcc16b168aa55"
25
+ "sha256": "842ddb2c926c1670227964d4bafa0618383d8dfb56ff9b92ea849d1a4778d8e1"
26
26
  },
27
27
  {
28
28
  "name": "libggml-base.so.0.15.1",
29
29
  "bytes": 1110088,
30
- "sha256": "b98445aa7b766805d1c227f7cc43ed12220fbad2019522f6207dcc16b168aa55"
30
+ "sha256": "842ddb2c926c1670227964d4bafa0618383d8dfb56ff9b92ea849d1a4778d8e1"
31
31
  },
32
32
  {
33
33
  "name": "libggml-cpu.so",
34
34
  "bytes": 869800,
35
- "sha256": "89ce13d4b7213e7fcb91a5636f96235f2b726c98c43a73ad0a81de5ff443991f"
35
+ "sha256": "006e079accf4e7379f60215184451c2aadfa941b878078e734fbd6aa6ddd6344"
36
36
  },
37
37
  {
38
38
  "name": "libggml-cpu.so.0",
39
39
  "bytes": 869800,
40
- "sha256": "89ce13d4b7213e7fcb91a5636f96235f2b726c98c43a73ad0a81de5ff443991f"
40
+ "sha256": "006e079accf4e7379f60215184451c2aadfa941b878078e734fbd6aa6ddd6344"
41
41
  },
42
42
  {
43
43
  "name": "libggml-cpu.so.0.15.1",
44
44
  "bytes": 869800,
45
- "sha256": "89ce13d4b7213e7fcb91a5636f96235f2b726c98c43a73ad0a81de5ff443991f"
45
+ "sha256": "006e079accf4e7379f60215184451c2aadfa941b878078e734fbd6aa6ddd6344"
46
46
  },
47
47
  {
48
48
  "name": "libggml.so",
49
49
  "bytes": 1899104,
50
- "sha256": "4b8b78665e6b06c525df57528d1bd60ae5950ae7cf8090d0b4197beb4a5edffb"
50
+ "sha256": "ce9b1164ac60ed2d5188bc57b1f71c53f940ed024f2f27cbd39242a0fcb2e2e5"
51
51
  },
52
52
  {
53
53
  "name": "libggml.so.0",
54
54
  "bytes": 1899104,
55
- "sha256": "4b8b78665e6b06c525df57528d1bd60ae5950ae7cf8090d0b4197beb4a5edffb"
55
+ "sha256": "ce9b1164ac60ed2d5188bc57b1f71c53f940ed024f2f27cbd39242a0fcb2e2e5"
56
56
  },
57
57
  {
58
58
  "name": "libggml.so.0.15.1",
59
59
  "bytes": 1899104,
60
- "sha256": "4b8b78665e6b06c525df57528d1bd60ae5950ae7cf8090d0b4197beb4a5edffb"
60
+ "sha256": "ce9b1164ac60ed2d5188bc57b1f71c53f940ed024f2f27cbd39242a0fcb2e2e5"
61
61
  },
62
62
  {
63
63
  "name": "openmates-pii-worker",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmates",
3
- "version": "0.29.0-alpha.3",
3
+ "version": "0.29.0-alpha.5",
4
4
  "description": "OpenMates CLI and SDK",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -56,7 +56,7 @@
56
56
  "test:unit:benchmark": "node --test --experimental-strip-types --loader ./tests/loader.mjs src/__tests__/benchmark.test.ts",
57
57
  "test": "node --test --experimental-strip-types --loader ./tests/loader.mjs tests/wiki.test.ts tests/privacy.test.ts tests/crypto.test.ts tests/cryptoBatch.test.ts tests/clientStartup.test.ts tests/storage.test.ts tests/keychain.test.ts tests/mentions.test.ts tests/outputRedactor.test.ts tests/fileEmbed.test.ts tests/embedCreator.test.ts tests/shareEncryption.test.ts tests/server.test.ts tests/serverCaddyUpdate.test.ts tests/serverCaddyUpgrade.test.ts tests/serverQuickTest.test.ts tests/ws.test.ts tests/urlEmbed.test.ts tests/tui.test.ts tests/tuiTeamsSettings.test.ts tests/tuiTeamChat.test.ts tests/tuiExampleContinuation.test.ts tests/tuiWorkflowInteraction.test.ts tests/tuiWorkspaceInteraction.test.ts tests/tuiLayout.test.ts tests/tuiTerminal.test.ts tests/tuiRenderCache.test.ts tests/tuiStreamingRender.test.ts tests/tuiStreamingSend.test.ts tests/tuiTerminalFrame.test.ts tests/tuiPrototypeBridge.test.ts tests/tuiStartup.test.ts tests/tuiTasksWorkspace.test.ts tests/tuiProjectsWorkspace.test.ts tests/tuiWorkflowWorkspace.test.ts tests/tuiAttachments.test.ts tests/tuiCancellation.test.ts tests/tuiWorkflowVersion.test.ts tests/tuiAppsWorkspace.test.ts tests/tuiAppsRequests.test.ts tests/tuiHome.test.ts tests/tuiMentionCatalog.test.ts tests/tuiMentions.test.ts tests/tuiEmbeds.test.ts tests/tuiEmbedPreviews.test.ts tests/tuiMarkdown.test.ts tests/tuiResultsViews.test.ts tests/tuiRichChatInteraction.test.ts tests/tuiInteractiveQuestions.test.ts tests/tuiCachedWorkspaces.test.ts tests/tuiTaskList.test.ts tests/tuiWorkspaceCache.test.ts tests/tuiProjectCacheInteraction.test.ts tests/tuiChatSidebar.test.ts tests/sdk-chat-sidebar.test.ts tests/workflows.test.ts tests/workflow-file.test.ts tests/sdk-workflows.test.ts tests/draft-sync.test.ts tests/sdk-draft-sync.test.ts tests/ideabucket.test.ts tests/teams-permissions.test.ts tests/sdk-teams.test.ts tests/team-ai-trigger.test.ts src/__tests__/benchmark.test.ts && node --test --experimental-strip-types --loader ./tests/loader.mjs tests/embedRenderers.test.ts tests/connectedAccountImport.test.ts && node --test --experimental-strip-types --loader ./tests/loader.mjs tests/cli.test.ts tests/loginTerminal.test.ts tests/imagesDetectAi.test.ts tests/uploadService.test.ts tests/billing.test.ts tests/account-delete.test.ts tests/signup.test.ts tests/security-setup.test.ts tests/e2e-provisioning.test.ts && npm run test:unit:session && npm run test:unit:task-sync && npm run test:unit:task-pagination && npm run test:unit:chat-preparation && npm run test:unit:direct-chats",
58
58
  "test:unit:session": "node --test --experimental-strip-types --loader ./tests/loader.mjs --test-name-pattern \"serializes refreshes|session refresh|rotated|gateway\" tests/client.test.ts",
59
- "test:unit:task-sync": "node --test --experimental-strip-types --loader ./tests/loader.mjs tests/projectTaskSync.test.ts tests/taskActivityDelivery.test.ts tests/taskCommandDelivery.test.ts tests/taskDelivery.test.ts tests/taskMutationDelivery.test.ts tests/claimConflict.test.ts tests/cliTaskQueue.test.ts tests/codexConnection.test.ts tests/remoteSources.test.ts tests/remoteAccess.test.ts tests/remoteAccessCrypto.test.ts",
59
+ "test:unit:task-sync": "node --test --experimental-strip-types --loader ./tests/loader.mjs tests/projectTaskSync.test.ts tests/taskActivityDelivery.test.ts tests/taskCommandDelivery.test.ts tests/taskDelivery.test.ts tests/taskMutationDelivery.test.ts tests/claimConflict.test.ts tests/cliTaskQueue.test.ts tests/cliTaskClaudeLink.test.ts tests/codexConnection.test.ts tests/remoteSources.test.ts tests/remoteAccess.test.ts tests/remoteAccessCrypto.test.ts",
60
60
  "test:unit:sdk-sidebar": "node --test --experimental-strip-types --loader ./tests/loader.mjs tests/sdk-chat-sidebar.test.ts",
61
61
  "test:unit:task-pagination": "node --test --experimental-strip-types --loader ./tests/loader.mjs tests/task-pagination.test.ts tests/taskDiscovery.test.ts",
62
62
  "benchmark:tui": "node --experimental-strip-types scripts/tui-render-benchmark.mjs",