skykoi 2026.3.346 → 2026.3.348

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2026.3.346",
3
- "commit": "6e0a9e692729e4ac0d9224e9fc2329eb1260aa66",
4
- "builtAt": "2026-06-20T20:31:37.435Z"
2
+ "version": "2026.3.348",
3
+ "commit": "ab39c28398013cb8f0dab02d53310d7520b7fcb5",
4
+ "builtAt": "2026-06-20T21:11:42.982Z"
5
5
  }
@@ -1 +1 @@
1
- cb51ce4167e1dbdd932b3bc5ad166c5aeaf1942f3ae22d64daa2b54ab05a377d
1
+ e21fb268610b6f764fed9aae217cd8a48a05d0d8db483b2fa94e4e0ef98dd52c
@@ -1,6 +1,6 @@
1
1
  import { r as __exportAll } from "./chunk-D_gEzPfs.js";
2
2
  import { g as resolveStateDir } from "./paths-VdmjGGyc.js";
3
- import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-BGxYoHQq.js";
3
+ import { n as registerSubCliByName, t as getSubCliEntries } from "./register.subclis-Dqv8ZQmj.js";
4
4
  import path from "node:path";
5
5
  import os from "node:os";
6
6
  import fs from "node:fs/promises";
@@ -27,7 +27,7 @@ import { t as resolveChannelDefaultAccountId } from "./helpers-BJ0RdAWy.js";
27
27
  import { n as logConfigUpdated, t as formatConfigPath } from "./logging-BYKu4FCl.js";
28
28
  import { t as WizardCancelledError } from "./prompts-QLr0uHK3.js";
29
29
  import { t as createClackPrompter } from "./clack-prompter-t8CaZFBV.js";
30
- import { a as buildKoiSummaries, c as loadKoiIdentity, f as parseIdentityMarkdown, i as applyKoiConfig, l as pruneKoiConfig, n as statusCommand, o as findKoiEntryIndex, s as listKoiEntries, t as runOnboardingWizard, u as identityHasValues } from "./onboarding-QjHd_2Wh.js";
30
+ import { a as buildKoiSummaries, c as loadKoiIdentity, f as parseIdentityMarkdown, i as applyKoiConfig, l as pruneKoiConfig, n as statusCommand, o as findKoiEntryIndex, s as listKoiEntries, t as runOnboardingWizard, u as identityHasValues } from "./onboarding-GhXzKToy.js";
31
31
  import { d as applyAuthChoice, f as applyOpenAIConfig, h as promptAuthChoiceGrouped, m as applyGoogleGeminiModelDefault, p as upsertSharedEnvVar, u as warnIfModelConfigLooksOff } from "./onboard-skills-DqXAoYz9.js";
32
32
  import { $ as setOpenrouterApiKey, C as applyMoonshotConfig, D as applyOpenrouterConfig, F as applyVercelAiGatewayConfig, J as setGeminiApiKey, K as setAnthropicApiKey, L as applyXaiConfig, N as applyVeniceConfig, Q as setOpencodeZenApiKey, V as applyZaiConfig, X as setMinimaxApiKey, Y as setKimiCodingApiKey, Z as setMoonshotApiKey, at as setXiaomiApiKey, et as setQianfanApiKey, f as applyOpencodeZenConfig, ft as buildTokenProfileId, g as applyMinimaxConfig, it as setXaiApiKey, j as applySyntheticConfig, k as applyQianfanConfig, m as applyMinimaxApiConfig, nt as setVeniceApiKey, ot as setZaiApiKey, pt as validateAnthropicSetupToken, q as setCloudflareAiGatewayConfig, rt as setVercelAiGatewayApiKey, tt as setSyntheticApiKey, v as applyAuthProfileConfig, w as applyMoonshotConfigCn, x as applyKimiCodeConfig, y as applyCloudflareAiGatewayConfig, z as applyXiaomiConfig } from "./github-copilot-auth-BFYQmIBy.js";
33
33
  import { n as setupChannels } from "./onboard-channels-BLdxw-az.js";
@@ -35,7 +35,7 @@ import { i as healthCommand } from "./health-format-DYu9Xelz.js";
35
35
  import { t as renderTable } from "./table-DGEf0ecX.js";
36
36
  import { t as resolveGatewayService } from "./service-BNfl9qMX.js";
37
37
  import { r as isSystemdUserServiceAvailable } from "./systemd-CRc2L6q9.js";
38
- import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-BGxYoHQq.js";
38
+ import { l as getVerboseFlag, o as getFlagValue, r as registerSubCliCommands, s as getPositiveIntFlagValue, u as hasFlag } from "./register.subclis-Dqv8ZQmj.js";
39
39
  import { n as callGatewayFromCli, t as addGatewayClientOptions } from "./gateway-rpc-CBIir0rS.js";
40
40
  import { t as formatHelpExamples } from "./help-format-D6QlSTzg.js";
41
41
  import { t as adminUnlockCommand } from "./admin-unlock-D9kdgQ8v.js";
@@ -45,8 +45,8 @@ import { n as parsePositiveIntOrUndefined, t as collectOption } from "./helpers-
45
45
  import { i as CONFIGURE_WIZARD_SECTIONS, n as configureCommand, r as configureCommandWithSections } from "./configure-CjuJRw9Z.js";
46
46
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, r as isGatewayDaemonRuntime, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-jG1eA54U.js";
47
47
  import { n as ensureSystemdUserLingerNonInteractive } from "./systemd-linger-Qf-ZNSXE.js";
48
- import { t as loginCommand } from "./login-6cWogXSE.js";
49
- import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-Bq9kZzFE.js";
48
+ import { t as loginCommand } from "./login-DkcfBPmA.js";
49
+ import { n as loadAndMaybeMigrateDoctorConfig, t as doctorCommand } from "./doctor-B-zT6yKu.js";
50
50
  import { fileURLToPath } from "node:url";
51
51
  import fs from "node:fs";
52
52
  import path from "node:path";
@@ -3105,7 +3105,7 @@ function registerLoginCommand(program) {
3105
3105
  console.log(theme.muted(` user=${result.userId} org=${result.orgId}`));
3106
3106
  }
3107
3107
  if (opts.chat !== false && result.gatewayUrl && process.stdin.isTTY && process.stdout.isTTY) {
3108
- const { runTui } = await import("./tui-CDRHgQ-e.js").then((n) => n.n);
3108
+ const { runTui } = await import("./tui-DUxfsLsX.js").then((n) => n.n);
3109
3109
  console.log(theme.muted("\n Opening your koi chat…\n"));
3110
3110
  await runTui({
3111
3111
  url: result.gatewayUrl,
@@ -3130,7 +3130,7 @@ function registerLoginCommand(program) {
3130
3130
  }
3131
3131
  });
3132
3132
  program.command("whoami").description("Show the currently-logged-in SkyKoi account").action(async () => {
3133
- const { readAuthFile } = await import("./login-6cWogXSE.js").then((n) => n.n);
3133
+ const { readAuthFile } = await import("./login-DkcfBPmA.js").then((n) => n.n);
3134
3134
  const auth = await readAuthFile();
3135
3135
  if (!auth) {
3136
3136
  console.log(theme.muted("Not logged in. Run `skykoi login`."));
@@ -34,7 +34,7 @@ import { a as repairLaunchAgentBootstrap, i as launchAgentPlistExists, n as isLa
34
34
  import { r as isSystemdUserServiceAvailable } from "./systemd-CRc2L6q9.js";
35
35
  import { t as readLastGatewayErrorLine } from "./diagnostics-BPo5b-50.js";
36
36
  import { t as collectChannelStatusIssues } from "./channels-status-issues-RnlrwtQu.js";
37
- import { n as doctorShellCompletion } from "./doctor-completion-BASELw9V.js";
37
+ import { n as doctorShellCompletion } from "./doctor-completion-RSNXbj7B.js";
38
38
  import { n as resolveControlUiDistIndexHealth, r as resolveControlUiDistIndexPathForRoot } from "./control-ui-assets-CUfeis07.js";
39
39
  import { a as gatewayInstallErrorHint, d as renderSystemNodeWarning, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, p as resolveSystemNodeInfo, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-jG1eA54U.js";
40
40
  import { t as ensureSystemdUserLingerInteractive } from "./systemd-linger-Qf-ZNSXE.js";
@@ -3,7 +3,7 @@ import { r as resolveCliName, t as formatCliCommand } from "./command-format-DOY
3
3
  import { t as VERSION } from "./version-BKRSzdyx.js";
4
4
  import { t as note } from "./note-JXsKJ6Xp.js";
5
5
  import { c as compareSemverStrings, s as checkUpdateStatus } from "./update-runner--zLQ4p6m.js";
6
- import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-CqanAWeP.js";
6
+ import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-BKnzEhKD.js";
7
7
  import path from "node:path";
8
8
  import { spawnSync } from "node:child_process";
9
9
 
package/dist/entry.js CHANGED
@@ -247,7 +247,7 @@ if (!ensureExperimentalWarningSuppressed()) {
247
247
  applyCliProfileEnv({ profile: parsed.profile });
248
248
  process$1.argv = parsed.argv;
249
249
  }
250
- import("./run-main-CoQyR6Uk.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
250
+ import("./run-main-CBQBut8S.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
251
251
  console.error("[SKYKOI] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
252
252
  process$1.exitCode = 1;
253
253
  });
@@ -86,7 +86,7 @@ import { t as resolveChannelDefaultAccountId } from "./helpers-BJ0RdAWy.js";
86
86
  import "./logging-BYKu4FCl.js";
87
87
  import "./note-JXsKJ6Xp.js";
88
88
  import { t as WizardCancelledError } from "./prompts-QLr0uHK3.js";
89
- import { c as loadKoiIdentity, d as loadKoiIdentityFromWorkspace, i as applyKoiConfig, l as pruneKoiConfig, o as findKoiEntryIndex, r as getStatusSummary, s as listKoiEntries, t as runOnboardingWizard } from "./onboarding-QjHd_2Wh.js";
89
+ import { c as loadKoiIdentity, d as loadKoiIdentityFromWorkspace, i as applyKoiConfig, l as pruneKoiConfig, o as findKoiEntryIndex, r as getStatusSummary, s as listKoiEntries, t as runOnboardingWizard } from "./onboarding-GhXzKToy.js";
90
90
  import { n as installSkill } from "./onboard-skills-DqXAoYz9.js";
91
91
  import "./github-copilot-auth-BFYQmIBy.js";
92
92
  import "./onboard-channels-BLdxw-az.js";
@@ -105,18 +105,18 @@ import { p as resolveGatewayStateDir } from "./systemd-CRc2L6q9.js";
105
105
  import "./diagnostics-BPo5b-50.js";
106
106
  import "./node-service-WjDdCaA0.js";
107
107
  import "./channels-status-issues-RnlrwtQu.js";
108
- import "./doctor-completion-BASELw9V.js";
109
- import "./register.subclis-BGxYoHQq.js";
108
+ import "./doctor-completion-RSNXbj7B.js";
109
+ import "./register.subclis-Dqv8ZQmj.js";
110
110
  import { a as createOutboundSendDeps$1, i as resolveKoiOutboundTarget, r as resolveKoiDeliveryPlan, t as koiCommand } from "./koi-Dn4CqamU.js";
111
111
  import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-CUfeis07.js";
112
112
  import "./daemon-runtime-jG1eA54U.js";
113
113
  import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } from "./widearea-dns-D764X7td.js";
114
114
  import { n as discoverGatewayBeacons } from "./bonjour-discovery-Ci5LSWeP.js";
115
115
  import "./ensure-local-gateway-iBqdIUtF.js";
116
- import "./completion-cli-CqanAWeP.js";
116
+ import "./completion-cli-BKnzEhKD.js";
117
117
  import "./service-audit-C5l53T2M.js";
118
118
  import { i as shouldIncludeHook, n as loadWorkspaceHookEntries, r as resolveHookConfig } from "./hooks-status-7PLz1_ei.js";
119
- import "./tui-CDRHgQ-e.js";
119
+ import "./tui-DUxfsLsX.js";
120
120
  import { t as buildChannelAccountSnapshot } from "./status-nK1ROKw-.js";
121
121
  import "./shared-DhCLX1Xs.js";
122
122
  import { a as runDaemonStop, i as runDaemonStart, n as runDaemonStatus, o as runDaemonUninstall, r as runDaemonRestart, s as runDaemonInstall } from "./daemon-cli-C-PUA0DR.js";
package/dist/index.js CHANGED
@@ -73,11 +73,11 @@ import { t as isMainModule } from "./is-main-DZvllFzQ.js";
73
73
  import { t as ensureSKYKOICliOnPath } from "./path-env-C7V3KfE6.js";
74
74
  import { t as assertSupportedRuntime } from "./runtime-guard-DHvhwccg.js";
75
75
  import "./ports-aBOzofHh.js";
76
- import "./config-guard-DIuwbEuN.js";
76
+ import "./config-guard-Bf-ThISf.js";
77
77
  import "./logging-BYKu4FCl.js";
78
78
  import "./note-JXsKJ6Xp.js";
79
79
  import "./clack-prompter-t8CaZFBV.js";
80
- import "./onboarding-QjHd_2Wh.js";
80
+ import "./onboarding-GhXzKToy.js";
81
81
  import "./onboard-skills-DqXAoYz9.js";
82
82
  import "./github-copilot-auth-BFYQmIBy.js";
83
83
  import "./onboard-channels-BLdxw-az.js";
@@ -96,8 +96,8 @@ import "./systemd-CRc2L6q9.js";
96
96
  import "./diagnostics-BPo5b-50.js";
97
97
  import "./node-service-WjDdCaA0.js";
98
98
  import "./channels-status-issues-RnlrwtQu.js";
99
- import "./doctor-completion-BASELw9V.js";
100
- import "./register.subclis-BGxYoHQq.js";
99
+ import "./doctor-completion-RSNXbj7B.js";
100
+ import "./register.subclis-Dqv8ZQmj.js";
101
101
  import "./gateway-rpc-CBIir0rS.js";
102
102
  import "./help-format-D6QlSTzg.js";
103
103
  import "./admin-unlock-D9kdgQ8v.js";
@@ -110,15 +110,15 @@ import "./systemd-linger-Qf-ZNSXE.js";
110
110
  import "./widearea-dns-D764X7td.js";
111
111
  import "./bonjour-discovery-Ci5LSWeP.js";
112
112
  import "./ensure-local-gateway-iBqdIUtF.js";
113
- import "./login-6cWogXSE.js";
113
+ import "./login-DkcfBPmA.js";
114
114
  import "./auth-health-DmoN4lSG.js";
115
- import "./doctor-Bq9kZzFE.js";
116
- import "./completion-cli-CqanAWeP.js";
115
+ import "./doctor-B-zT6yKu.js";
116
+ import "./completion-cli-BKnzEhKD.js";
117
117
  import "./service-audit-C5l53T2M.js";
118
118
  import "./hooks-status-7PLz1_ei.js";
119
- import "./tui-CDRHgQ-e.js";
119
+ import "./tui-DUxfsLsX.js";
120
120
  import "./channel-options-dvFve-yx.js";
121
- import { n as buildProgram } from "./program-BLD936kC.js";
121
+ import { n as buildProgram } from "./program-CSD2VsPa.js";
122
122
  import process from "node:process";
123
123
  import { fileURLToPath } from "node:url";
124
124
 
@@ -264,16 +264,17 @@ async function writeOnboardingDebug(outcome) {
264
264
  await writeFile(join(dir, "onboarding-debug.json"), JSON.stringify(snap, null, 2));
265
265
  } catch {}
266
266
  }
267
- const ONBOARDING_KICKOFF_BODY = "[setup] Run your full onboarding NOW, silently in the background, per your Onboarding & user dossier instructions. Investigate this computer and build the complete USER.md AND a valid structured profile.json (REQUIRED — use the EXACT schema in your dossier instructions: identity, people[], business.ventures[]+team, projects[], voice, gaps; the website renders profile.json as my knowledge graph, so always set identity.name, fill every array you can, and never skip it or leave it empty): identity; the people who matter (rank by real two-way message volume, then READ each top person's recent thread); the user's voice/writing style (global + per-person); their business/ventures and team; and their current headspace from recent browser/search activity. Do NOT message me about it — just build the dossier so you already know me when I first message you. This is the initial setup pass; keep refining it each session.";
267
+ const ONBOARDING_KICKOFF_BODY = "[setup] Run your full onboarding NOW, silently in the background, per your Onboarding & user dossier instructions. Investigate this computer and build the complete USER.md AND a valid structured profile.json (REQUIRED — use the EXACT schema in your dossier instructions: identity, people[], business.ventures[]+team, projects[], voice, gaps; the website renders profile.json as my knowledge graph, so always set identity.name, fill every array you can, and never skip it or leave it empty): identity; the people who matter (rank by real two-way message volume, then READ each top person's recent thread); the user's voice/writing style (global + per-person); their business/ventures and team; and their current headspace from recent browser/search activity. If your email/calendar tool is available (Google is connected), SWEEP IT TOO — read Gmail for the user's identity + signature and their most frequent correspondents, read the Calendar for their schedule and recurring meeting attendees, and read Contacts for names + profile photos — and fold all of it into people[]/identity/voice. This is how you learn the user on a device with NO local message history (e.g. a fresh laptop or cloud box). Do NOT message me about it — just build the dossier so you already know me when I first message you. This is the initial setup pass; keep refining it each session.";
268
268
  /** Prepend what the account already knows about the human (P1 identity seed) so
269
269
  * the koi never starts nameless or asks the user their own name — even on a fresh
270
270
  * device with no local data to mine. It then verifies + deepens from there. */
271
- function buildOnboardingKickoff(human, inheritedDossierMd) {
271
+ function buildOnboardingKickoff(human, inheritedDossierMd, orgContextMd) {
272
272
  let head = "";
273
273
  if (human && (human.name || human.email)) {
274
274
  const facts = [human.name ? `name "${human.name}"` : "", human.email ? `email ${human.email}` : ""].filter(Boolean).join(", ");
275
275
  head += `[setup] From your human's SkyKoi account you ALREADY know: ${facts}. Seed identity (name + email) from this immediately, treat it as verified, and NEVER ask the user their own name.\n\n`;
276
276
  }
277
+ if (orgContextMd && orgContextMd.trim()) head += `[setup] Shared knowledge about your human's COMPANY and teammates (from the account — contributed by colleagues' kois). Treat it as known, then verify + deepen the company picture (ventures, org chart, clients, shared projects):\n\n--- BEGIN ORG KNOWLEDGE ---\n${orgContextMd}\n--- END ORG KNOWLEDGE ---\n\n`;
277
278
  if (inheritedDossierMd && inheritedDossierMd.trim()) head += `[setup] Your other devices have already built this dossier for your human (from the account). START FROM IT as known truth, then VERIFY + DEEPEN it with what THIS device and connected accounts can see — re-verify anything time-sensitive before stating it. Inherited dossier (USER.md):\n\n--- BEGIN INHERITED DOSSIER ---\n${inheritedDossierMd}\n--- END INHERITED DOSSIER ---\n\n`;
278
279
  return head + ONBOARDING_KICKOFF_BODY;
279
280
  }
@@ -286,7 +287,12 @@ async function uploadDossier(p) {
286
287
  const prof = await p.client.request("profile.get", {});
287
288
  const dossierMd = typeof prof?.userMd === "string" && prof.userMd.trim() ? prof.userMd : void 0;
288
289
  const dossier = prof?.profile ?? void 0;
289
- if (dossier === void 0 && dossierMd === void 0) return;
290
+ const prof2 = dossier;
291
+ const orgKnowledge = prof2 && (prof2.business !== void 0 || prof2.projects !== void 0) ? {
292
+ business: prof2.business,
293
+ projects: prof2.projects
294
+ } : void 0;
295
+ if (dossier === void 0 && dossierMd === void 0 && orgKnowledge === void 0) return;
290
296
  await fetch(`${p.platformUrl}/api/koi/${encodeURIComponent(p.koiId)}/dossier`, {
291
297
  method: "PUT",
292
298
  headers: {
@@ -295,7 +301,8 @@ async function uploadDossier(p) {
295
301
  },
296
302
  body: JSON.stringify({
297
303
  dossier,
298
- dossierMd
304
+ dossierMd,
305
+ orgKnowledge
299
306
  })
300
307
  });
301
308
  } catch {}
@@ -319,7 +326,7 @@ function onboardingActivity(tool) {
319
326
  * it for the model. We show a clear, live indicator the whole time.
320
327
  */
321
328
  async function runOnboardingBeforeChat(opts) {
322
- const { wsUrl, token, human, inheritedDossierMd, platformUrl, cliToken, koiId } = opts;
329
+ const { wsUrl, token, human, inheritedDossierMd, orgContextMd, platformUrl, cliToken, koiId } = opts;
323
330
  const onb = step("Getting to know you");
324
331
  let client = null;
325
332
  let runId = "";
@@ -352,7 +359,7 @@ async function runOnboardingBeforeChat(opts) {
352
359
  try {
353
360
  runId = (await client.request("chat.send", {
354
361
  sessionKey: "koi:setup:onboarding",
355
- message: buildOnboardingKickoff(human, inheritedDossierMd),
362
+ message: buildOnboardingKickoff(human, inheritedDossierMd, orgContextMd),
356
363
  deliver: false,
357
364
  idempotencyKey: randomBytes(12).toString("hex")
358
365
  }))?.runId ?? "";
@@ -470,6 +477,13 @@ async function claimDeviceToKoi(platformUrl, token) {
470
477
  const koiPlatformUrl = resolvePlatformUrl(String(info.data?.platformUrl || platformUrl));
471
478
  const recallApiKey = info.data?.recallApiKey?.trim();
472
479
  if (recallApiKey) await persistSkykoiEnvVar("RECALL_AI_API_KEY", recallApiKey).catch(() => {});
480
+ const nylas = info.data?.nylas;
481
+ if (nylas?.grantId) {
482
+ if (nylas.apiKey) await persistSkykoiEnvVar("NYLAS_API_KEY", nylas.apiKey).catch(() => {});
483
+ await persistSkykoiEnvVar("NYLAS_GRANT_ID", nylas.grantId).catch(() => {});
484
+ if (nylas.email) await persistSkykoiEnvVar("NYLAS_EMAIL", nylas.email).catch(() => {});
485
+ if (nylas.apiUri) await persistSkykoiEnvVar("NYLAS_API_URI", nylas.apiUri).catch(() => {});
486
+ }
473
487
  const cfg = loadConfig();
474
488
  await writeConfigFile({
475
489
  ...cfg,
@@ -709,11 +723,19 @@ async function claimAndFinish(platformUrl, token, base, doClaim) {
709
723
  const runDeviceOnboarding = async (wsUrl, gwToken) => {
710
724
  await requestDevicePermissions();
711
725
  let inheritedDossierMd;
726
+ let orgContextMd;
712
727
  try {
713
728
  const dRes = await fetch(`${platformUrl}/api/koi/${encodeURIComponent(claim.koiId)}/dossier`, { headers: { Authorization: `Bearer ${token}` } });
714
729
  if (dRes.ok) {
715
730
  const d = (await dRes.json().catch(() => ({})))?.data;
716
731
  if (typeof d?.dossierMd === "string" && d.dossierMd.trim()) inheritedDossierMd = d.dossierMd;
732
+ const parts = [];
733
+ if (d?.orgKnowledge && Object.keys(d.orgKnowledge).length) parts.push(`Company knowledge: ${JSON.stringify(d.orgKnowledge)}`);
734
+ if (Array.isArray(d?.teamDirectory) && d.teamDirectory.length) {
735
+ const team = d.teamDirectory.map((m) => `${m.name || m.email} (${m.role})`).join(", ");
736
+ parts.push(`Team / account members: ${team}`);
737
+ }
738
+ if (parts.length) orgContextMd = parts.join("\n\n");
717
739
  }
718
740
  } catch {}
719
741
  await runOnboardingBeforeChat({
@@ -721,6 +743,7 @@ async function claimAndFinish(platformUrl, token, base, doClaim) {
721
743
  token: gwToken,
722
744
  human: claim.human,
723
745
  inheritedDossierMd,
746
+ orgContextMd,
724
747
  platformUrl,
725
748
  cliToken: token,
726
749
  koiId: claim.koiId
@@ -37,12 +37,12 @@ import { t as readLastGatewayErrorLine } from "./diagnostics-BPo5b-50.js";
37
37
  import { t as resolveNodeService } from "./node-service-WjDdCaA0.js";
38
38
  import { t as collectChannelStatusIssues } from "./channels-status-issues-RnlrwtQu.js";
39
39
  import { i as redactSecrets, n as formatDuration$1, r as formatGatewayAuthUsed, t as formatAge$1 } from "./format-BPATbSa4.js";
40
- import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, o as getUpdateCheckResult, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-BASELw9V.js";
40
+ import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, o as getUpdateCheckResult, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-RSNXbj7B.js";
41
41
  import { t as ensureControlUiAssetsBuilt } from "./control-ui-assets-CUfeis07.js";
42
42
  import { a as gatewayInstallErrorHint, i as buildGatewayInstallPlan, n as GATEWAY_DAEMON_RUNTIME_OPTIONS, t as DEFAULT_GATEWAY_DAEMON_RUNTIME } from "./daemon-runtime-jG1eA54U.js";
43
- import { r as installCompletion } from "./completion-cli-CqanAWeP.js";
43
+ import { r as installCompletion } from "./completion-cli-BKnzEhKD.js";
44
44
  import { t as buildWorkspaceHookStatus } from "./hooks-status-7PLz1_ei.js";
45
- import { t as runTui } from "./tui-CDRHgQ-e.js";
45
+ import { t as runTui } from "./tui-DUxfsLsX.js";
46
46
  import fs from "node:fs";
47
47
  import path from "node:path";
48
48
  import os from "node:os";
@@ -5,10 +5,10 @@ import { n as replaceCliName, r as resolveCliName } from "./command-format-DOYW_
5
5
  import { t as isTruthyEnvValue } from "./env-ChCKTuXK.js";
6
6
  import { t as VERSION } from "./version-BKRSzdyx.js";
7
7
  import { t as formatDocsLink } from "./links-DLPVdfTL.js";
8
- import { i as registerProgramCommands, n as PLUGIN_CLI_COMMANDS, t as ensureConfigReady } from "./config-guard-DIuwbEuN.js";
9
- import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-BGxYoHQq.js";
8
+ import { i as registerProgramCommands, n as PLUGIN_CLI_COMMANDS, t as ensureConfigReady } from "./config-guard-Bf-ThISf.js";
9
+ import { a as getCommandPath, d as hasHelpOrVersion, l as getVerboseFlag } from "./register.subclis-Dqv8ZQmj.js";
10
10
  import { t as ensurePluginRegistryLoaded } from "./plugin-registry-BuRdLnis.js";
11
- import { a as hasEmittedCliBanner, i as formatCliBannerLine, r as emitCliBanner } from "./tui-CDRHgQ-e.js";
11
+ import { a as hasEmittedCliBanner, i as formatCliBannerLine, r as emitCliBanner } from "./tui-DUxfsLsX.js";
12
12
  import { n as resolveCliChannelOptions } from "./channel-options-dvFve-yx.js";
13
13
  import { Command } from "commander";
14
14
 
@@ -124,7 +124,7 @@ const entries = [
124
124
  name: "gateway",
125
125
  description: "Gateway control",
126
126
  register: async (program) => {
127
- (await import("./gateway-cli-CVnKeAnk.js")).registerGatewayCli(program);
127
+ (await import("./gateway-cli-ClM5ZaDB.js")).registerGatewayCli(program);
128
128
  }
129
129
  },
130
130
  {
@@ -194,7 +194,7 @@ const entries = [
194
194
  name: "tui",
195
195
  description: "Terminal UI",
196
196
  register: async (program) => {
197
- (await import("./tui-cli-kQJ9NNIZ.js")).registerTuiCli(program);
197
+ (await import("./tui-cli-DLJbtGCa.js")).registerTuiCli(program);
198
198
  }
199
199
  },
200
200
  {
@@ -282,14 +282,14 @@ const entries = [
282
282
  name: "update",
283
283
  description: "CLI update helpers",
284
284
  register: async (program) => {
285
- (await import("./update-cli-COObgrSw.js")).registerUpdateCli(program);
285
+ (await import("./update-cli-1waIwrQu.js")).registerUpdateCli(program);
286
286
  }
287
287
  },
288
288
  {
289
289
  name: "completion",
290
290
  description: "Generate shell completion script",
291
291
  register: async (program) => {
292
- (await import("./completion-cli-CqanAWeP.js").then((n) => n.n)).registerCompletionCli(program);
292
+ (await import("./completion-cli-BKnzEhKD.js").then((n) => n.n)).registerCompletionCli(program);
293
293
  }
294
294
  }
295
295
  ];
@@ -70,11 +70,11 @@ import "./deps-DMHxLgMp.js";
70
70
  import "./tailscale-CBmv5qCh.js";
71
71
  import { t as ensureSKYKOICliOnPath } from "./path-env-C7V3KfE6.js";
72
72
  import { t as assertSupportedRuntime } from "./runtime-guard-DHvhwccg.js";
73
- import { n as PLUGIN_CLI_COMMANDS, r as findRoutedCommand, t as ensureConfigReady } from "./config-guard-DIuwbEuN.js";
73
+ import { n as PLUGIN_CLI_COMMANDS, r as findRoutedCommand, t as ensureConfigReady } from "./config-guard-Bf-ThISf.js";
74
74
  import "./logging-BYKu4FCl.js";
75
75
  import "./note-JXsKJ6Xp.js";
76
76
  import "./clack-prompter-t8CaZFBV.js";
77
- import "./onboarding-QjHd_2Wh.js";
77
+ import "./onboarding-GhXzKToy.js";
78
78
  import "./onboard-skills-DqXAoYz9.js";
79
79
  import "./github-copilot-auth-BFYQmIBy.js";
80
80
  import "./onboard-channels-BLdxw-az.js";
@@ -93,8 +93,8 @@ import "./systemd-CRc2L6q9.js";
93
93
  import "./diagnostics-BPo5b-50.js";
94
94
  import "./node-service-WjDdCaA0.js";
95
95
  import "./channels-status-issues-RnlrwtQu.js";
96
- import "./doctor-completion-BASELw9V.js";
97
- import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-BGxYoHQq.js";
96
+ import "./doctor-completion-RSNXbj7B.js";
97
+ import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-Dqv8ZQmj.js";
98
98
  import "./gateway-rpc-CBIir0rS.js";
99
99
  import "./help-format-D6QlSTzg.js";
100
100
  import "./admin-unlock-D9kdgQ8v.js";
@@ -107,13 +107,13 @@ import "./systemd-linger-Qf-ZNSXE.js";
107
107
  import "./widearea-dns-D764X7td.js";
108
108
  import "./bonjour-discovery-Ci5LSWeP.js";
109
109
  import "./ensure-local-gateway-iBqdIUtF.js";
110
- import "./login-6cWogXSE.js";
110
+ import "./login-DkcfBPmA.js";
111
111
  import "./auth-health-DmoN4lSG.js";
112
- import "./doctor-Bq9kZzFE.js";
113
- import "./completion-cli-CqanAWeP.js";
112
+ import "./doctor-B-zT6yKu.js";
113
+ import "./completion-cli-BKnzEhKD.js";
114
114
  import "./service-audit-C5l53T2M.js";
115
115
  import "./hooks-status-7PLz1_ei.js";
116
- import { r as emitCliBanner } from "./tui-CDRHgQ-e.js";
116
+ import { r as emitCliBanner } from "./tui-DUxfsLsX.js";
117
117
  import process$1 from "node:process";
118
118
  import { fileURLToPath } from "node:url";
119
119
  import fs from "node:fs";
@@ -167,7 +167,7 @@ async function runCli(argv = process$1.argv) {
167
167
  assertSupportedRuntime();
168
168
  if (await tryRouteCli(normalizedArgv)) return;
169
169
  enableConsoleCapture();
170
- const { buildProgram } = await import("./program-BLD936kC.js").then((n) => n.t);
170
+ const { buildProgram } = await import("./program-CSD2VsPa.js").then((n) => n.t);
171
171
  const program = buildProgram();
172
172
  installUnhandledRejectionHandler();
173
173
  process$1.on("uncaughtException", (error) => {
@@ -180,7 +180,7 @@ async function runCli(argv = process$1.argv) {
180
180
  if (!hasAnyArg && !wantsHelpOrVersion) {
181
181
  let isLoggedIn = false;
182
182
  try {
183
- const { readAuthFile } = await import("./login-6cWogXSE.js").then((n) => n.n);
183
+ const { readAuthFile } = await import("./login-DkcfBPmA.js").then((n) => n.n);
184
184
  isLoggedIn = !!(await readAuthFile())?.token;
185
185
  } catch {}
186
186
  let defaultCommand = "tui";
@@ -200,7 +200,7 @@ async function runCli(argv = process$1.argv) {
200
200
  }
201
201
  const primary = getPrimaryCommand(parseArgv);
202
202
  if (primary) {
203
- const { registerSubCliByName } = await import("./register.subclis-BGxYoHQq.js").then((n) => n.i);
203
+ const { registerSubCliByName } = await import("./register.subclis-Dqv8ZQmj.js").then((n) => n.i);
204
204
  await registerSubCliByName(program, primary);
205
205
  }
206
206
  if (!!primary && PLUGIN_CLI_COMMANDS.has(primary)) {
@@ -3455,7 +3455,7 @@ async function runTui(opts) {
3455
3455
  } catch {}
3456
3456
  process.stdout.write("\n Your koi lost its connection and couldn't get it back on its own.\n Signing you back in to bring it online…\n\n");
3457
3457
  try {
3458
- const { loginCommand } = await import("./login-6cWogXSE.js").then((n) => n.n);
3458
+ const { loginCommand } = await import("./login-DkcfBPmA.js").then((n) => n.n);
3459
3459
  const result = await loginCommand({});
3460
3460
  if (result?.ok) {
3461
3461
  process.stdout.write("\n All set — reopening your koi…\n\n");
@@ -48,7 +48,7 @@ import "./systemd-CRc2L6q9.js";
48
48
  import "./diagnostics-BPo5b-50.js";
49
49
  import "./daemon-runtime-jG1eA54U.js";
50
50
  import "./ensure-local-gateway-iBqdIUtF.js";
51
- import { t as runTui } from "./tui-CDRHgQ-e.js";
51
+ import { t as runTui } from "./tui-DUxfsLsX.js";
52
52
 
53
53
  //#region src/cli/tui-cli.ts
54
54
  function registerTuiCli(program) {
@@ -86,15 +86,15 @@ import "./service-BNfl9qMX.js";
86
86
  import "./systemd-CRc2L6q9.js";
87
87
  import "./diagnostics-BPo5b-50.js";
88
88
  import "./channels-status-issues-RnlrwtQu.js";
89
- import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-BASELw9V.js";
90
- import "./register.subclis-BGxYoHQq.js";
89
+ import { a as formatUpdateOneLiner, i as formatUpdateAvailableHint, r as ensureCompletionCacheExists, s as resolveUpdateAvailability, t as checkShellCompletionStatus } from "./doctor-completion-RSNXbj7B.js";
90
+ import "./register.subclis-Dqv8ZQmj.js";
91
91
  import { t as formatHelpExamples } from "./help-format-D6QlSTzg.js";
92
92
  import "./control-ui-assets-CUfeis07.js";
93
93
  import "./daemon-runtime-jG1eA54U.js";
94
94
  import "./systemd-linger-Qf-ZNSXE.js";
95
95
  import "./auth-health-DmoN4lSG.js";
96
- import { t as doctorCommand } from "./doctor-Bq9kZzFE.js";
97
- import { r as installCompletion } from "./completion-cli-CqanAWeP.js";
96
+ import { t as doctorCommand } from "./doctor-B-zT6yKu.js";
97
+ import { r as installCompletion } from "./completion-cli-BKnzEhKD.js";
98
98
  import "./service-audit-C5l53T2M.js";
99
99
  import "./shared-DhCLX1Xs.js";
100
100
  import { r as runDaemonRestart } from "./daemon-cli-C-PUA0DR.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skykoi",
3
- "version": "2026.3.346",
3
+ "version": "2026.3.348",
4
4
  "description": "SkyKoi — Koi runtime. Multi-channel gateway CLI with RPC Koi.",
5
5
  "keywords": [
6
6
  "cli",