@osfactory/har 1.17.0 → 1.18.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.
Files changed (2) hide show
  1. package/dist/index.js +37 -5
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -36568,6 +36568,29 @@ var init_control_config = __esm({
36568
36568
  }
36569
36569
  });
36570
36570
 
36571
+ // src/core/portal-hosts.ts
36572
+ function kernoApiUrlFor(portalUrl) {
36573
+ const override = process.env.HAR_API_URL?.trim().replace(/\/+$/, "");
36574
+ if (override) return override;
36575
+ try {
36576
+ return KERNO_API_BY_PORTAL_HOST[new URL(portalUrl).hostname];
36577
+ } catch {
36578
+ return void 0;
36579
+ }
36580
+ }
36581
+ var KERNO_API_BY_PORTAL_HOST;
36582
+ var init_portal_hosts = __esm({
36583
+ "src/core/portal-hosts.ts"() {
36584
+ "use strict";
36585
+ KERNO_API_BY_PORTAL_HOST = {
36586
+ "portal.kerno.io": "https://api.kerno.io",
36587
+ "app.harhq.com": "https://api.kerno.io",
36588
+ "portal.dev.kerno.io": "https://api.dev.kerno.io",
36589
+ "app.dev.harhq.com": "https://api.dev.kerno.io"
36590
+ };
36591
+ }
36592
+ });
36593
+
36571
36594
  // src/core/commit-bindings.ts
36572
36595
  function bindingsDir(harnessRoot) {
36573
36596
  return path11.join(harnessRoot, ".har", COMMIT_BINDINGS_DIR);
@@ -44307,7 +44330,8 @@ function rewindSince(since) {
44307
44330
  return new Date(new Date(since).getTime() - overlap).toISOString();
44308
44331
  }
44309
44332
  function watermarkKeyForTarget(target) {
44310
- return target.identityKey;
44333
+ const apiUrl = kernoApiUrlFor(target.url);
44334
+ return apiUrl ? `${apiUrl}|${target.identityKey}` : target.identityKey;
44311
44335
  }
44312
44336
  function legacyWatermarkKeysForTarget(target) {
44313
44337
  return target.url === target.identityKey ? [] : [target.url];
@@ -44397,9 +44421,14 @@ async function postJson(url, body, dryRun) {
44397
44421
  }
44398
44422
  return await response.json();
44399
44423
  }
44424
+ function portalEndpointUrl(target, endpoint) {
44425
+ const apiUrl = kernoApiUrlFor(target.url);
44426
+ if (!apiUrl) return `${target.url}${endpoint}`;
44427
+ return `${apiUrl}${KERNO_INGEST_PREFIX}${endpoint.slice(PORTAL_API_PREFIX.length)}`;
44428
+ }
44400
44429
  function postPortalOnce(target, endpoint, body) {
44401
44430
  return postForResponse(
44402
- `${target.url}${endpoint}`,
44431
+ portalEndpointUrl(target, endpoint),
44403
44432
  {
44404
44433
  "Content-Type": "application/json",
44405
44434
  Authorization: `Bearer ${target.token}`
@@ -44411,7 +44440,7 @@ async function refreshPortalToken(target) {
44411
44440
  if (!target.refreshToken) return false;
44412
44441
  let response;
44413
44442
  try {
44414
- response = await fetch(`${target.url}/api/cli/refresh`, {
44443
+ response = await fetch(portalEndpointUrl(target, "/api/cli/refresh"), {
44415
44444
  method: "POST",
44416
44445
  headers: { Authorization: `Bearer ${target.refreshToken}` }
44417
44446
  });
@@ -45167,7 +45196,7 @@ async function syncRunWithControlAsync(repoPath, run2) {
45167
45196
  if (!isRepoPortalSyncEnabled(canonical)) return;
45168
45197
  for (const portal of resolved.targets) {
45169
45198
  try {
45170
- if (!await isControlApiReachable(portal.url)) continue;
45199
+ if (!kernoApiUrlFor(portal.url) && !await isControlApiReachable(portal.url)) continue;
45171
45200
  await postPortal(portal, "/api/sync", { path: canonical, runs: [run2] });
45172
45201
  } catch (err) {
45173
45202
  const message = err instanceof Error ? err.message : String(err);
@@ -45176,7 +45205,7 @@ async function syncRunWithControlAsync(repoPath, run2) {
45176
45205
  }
45177
45206
  }
45178
45207
  }
45179
- var path48, DEFAULT_MAX_BATCH_BYTES, DEFAULT_SYNC_OVERLAP_MS, MAX_FETCH_ATTEMPTS, SYNC_TIMEOUT_MS, EXPLICIT_SYNC_TIMEOUT_MS;
45208
+ var path48, DEFAULT_MAX_BATCH_BYTES, DEFAULT_SYNC_OVERLAP_MS, MAX_FETCH_ATTEMPTS, PORTAL_API_PREFIX, KERNO_INGEST_PREFIX, SYNC_TIMEOUT_MS, EXPLICIT_SYNC_TIMEOUT_MS;
45180
45209
  var init_control_sync = __esm({
45181
45210
  "src/core/control-sync.ts"() {
45182
45211
  "use strict";
@@ -45185,6 +45214,7 @@ var init_control_sync = __esm({
45185
45214
  init_stages();
45186
45215
  init_schema2();
45187
45216
  init_control_config();
45217
+ init_portal_hosts();
45188
45218
  init_control_registry();
45189
45219
  init_portal_credentials();
45190
45220
  init_portal_targets();
@@ -45207,6 +45237,8 @@ var init_control_sync = __esm({
45207
45237
  DEFAULT_MAX_BATCH_BYTES = 4 * 1024 * 1024;
45208
45238
  DEFAULT_SYNC_OVERLAP_MS = 6e4;
45209
45239
  MAX_FETCH_ATTEMPTS = 3;
45240
+ PORTAL_API_PREFIX = "/api";
45241
+ KERNO_INGEST_PREFIX = "/api/har/ingest";
45210
45242
  SYNC_TIMEOUT_MS = 15e3;
45211
45243
  EXPLICIT_SYNC_TIMEOUT_MS = 12e4;
45212
45244
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osfactory/har",
3
- "version": "1.17.0",
3
+ "version": "1.18.0",
4
4
  "description": "HAR: open agent harness CLI and MCP server for coding agents, isolated worktrees, and software-factory workflows",
5
5
  "keywords": [
6
6
  "har",