unbrowse 9.0.3 → 9.0.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unbrowse",
3
- "version": "9.0.3",
3
+ "version": "9.0.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/unbrowse-ai/unbrowse.git"
package/runtime/cli.js CHANGED
@@ -177696,6 +177696,16 @@ function readComposite(domain, target) {
177696
177696
  return;
177697
177697
  }
177698
177698
  }
177699
+ function findCompositeInSkill(skill, target) {
177700
+ return skill?.composites?.find((c) => c.target === target && c.steps.length > 0);
177701
+ }
177702
+ function attachCompositeToSkill(skill, composite) {
177703
+ const list = skill.composites ?? (skill.composites = []);
177704
+ if (list.some((c) => c.composite_id === composite.composite_id))
177705
+ return false;
177706
+ list.push(composite);
177707
+ return true;
177708
+ }
177699
177709
  function hasSearchBindings(endpoint) {
177700
177710
  const haystack = JSON.stringify({
177701
177711
  url: endpoint.url_template,
@@ -180063,7 +180073,7 @@ async function resolveAndExecute(intent, params = {}, context, projection, optio
180063
180073
  return "";
180064
180074
  }
180065
180075
  })();
180066
- const persisted = readComposite(replayDomain, candidate.endpoint.endpoint_id);
180076
+ const persisted = findCompositeInSkill(skill, candidate.endpoint.endpoint_id) ?? readComposite(replayDomain, candidate.endpoint.endpoint_id);
180067
180077
  const decision = planPrereqOrder(prereqOrder, persisted, (id) => {
180068
180078
  const ep = skill.endpoints.find((e) => e.endpoint_id === id);
180069
180079
  return ep != null && canAutoExecuteEndpoint(ep);
@@ -180098,7 +180108,7 @@ async function resolveAndExecute(intent, params = {}, context, projection, optio
180098
180108
  decisionTrace.prerequisite_chain = chainSteps;
180099
180109
  decisionTrace.composite = composite;
180100
180110
  if (chainSteps.every((s) => s.ok) && canAutoExecuteEndpoint(candidate.endpoint)) {
180101
- const persistedPath = writeComposite({
180111
+ const descriptor = {
180102
180112
  composite_id: compositeId,
180103
180113
  intent_signature: compositeIntentSig,
180104
180114
  domain: compositeDomain,
@@ -180106,7 +180116,12 @@ async function resolveAndExecute(intent, params = {}, context, projection, optio
180106
180116
  steps: chainSteps,
180107
180117
  edges: compositeEdges,
180108
180118
  created_at: new Date().toISOString()
180109
- });
180119
+ };
180120
+ const composedNewlyAttached = attachCompositeToSkill(skill, descriptor);
180121
+ if (composedNewlyAttached && skill.skill_id) {
180122
+ queuePassiveSkillPublish(skill).catch(() => {});
180123
+ }
180124
+ const persistedPath = writeComposite(descriptor);
180110
180125
  if (persistedPath) {
180111
180126
  decisionTrace.composite_persisted = compositeId;
180112
180127
  }
package/runtime/mcp.js CHANGED
@@ -124974,6 +124974,16 @@ function readComposite(domain, target) {
124974
124974
  return;
124975
124975
  }
124976
124976
  }
124977
+ function findCompositeInSkill(skill, target) {
124978
+ return skill?.composites?.find((c) => c.target === target && c.steps.length > 0);
124979
+ }
124980
+ function attachCompositeToSkill(skill, composite) {
124981
+ const list = skill.composites ?? (skill.composites = []);
124982
+ if (list.some((c) => c.composite_id === composite.composite_id))
124983
+ return false;
124984
+ list.push(composite);
124985
+ return true;
124986
+ }
124977
124987
  function hasSearchBindings(endpoint) {
124978
124988
  const haystack = JSON.stringify({
124979
124989
  url: endpoint.url_template,
@@ -127341,7 +127351,7 @@ async function resolveAndExecute(intent, params = {}, context, projection, optio
127341
127351
  return "";
127342
127352
  }
127343
127353
  })();
127344
- const persisted = readComposite(replayDomain, candidate.endpoint.endpoint_id);
127354
+ const persisted = findCompositeInSkill(skill, candidate.endpoint.endpoint_id) ?? readComposite(replayDomain, candidate.endpoint.endpoint_id);
127345
127355
  const decision = planPrereqOrder(prereqOrder, persisted, (id) => {
127346
127356
  const ep = skill.endpoints.find((e) => e.endpoint_id === id);
127347
127357
  return ep != null && canAutoExecuteEndpoint(ep);
@@ -127376,7 +127386,7 @@ async function resolveAndExecute(intent, params = {}, context, projection, optio
127376
127386
  decisionTrace.prerequisite_chain = chainSteps;
127377
127387
  decisionTrace.composite = composite;
127378
127388
  if (chainSteps.every((s) => s.ok) && canAutoExecuteEndpoint(candidate.endpoint)) {
127379
- const persistedPath = writeComposite({
127389
+ const descriptor = {
127380
127390
  composite_id: compositeId,
127381
127391
  intent_signature: compositeIntentSig,
127382
127392
  domain: compositeDomain,
@@ -127384,7 +127394,12 @@ async function resolveAndExecute(intent, params = {}, context, projection, optio
127384
127394
  steps: chainSteps,
127385
127395
  edges: compositeEdges,
127386
127396
  created_at: new Date().toISOString()
127387
- });
127397
+ };
127398
+ const composedNewlyAttached = attachCompositeToSkill(skill, descriptor);
127399
+ if (composedNewlyAttached && skill.skill_id) {
127400
+ queuePassiveSkillPublish(skill).catch(() => {});
127401
+ }
127402
+ const persistedPath = writeComposite(descriptor);
127388
127403
  if (persistedPath) {
127389
127404
  decisionTrace.composite_persisted = compositeId;
127390
127405
  }
@@ -191771,6 +191786,7 @@ __export(exports_orchestrator, {
191771
191786
  getDomainReuseKey: () => getDomainReuseKey2,
191772
191787
  generateLocalDescription: () => generateLocalDescription2,
191773
191788
  findEndpointInSkillHistory: () => findEndpointInSkillHistory2,
191789
+ findCompositeInSkill: () => findCompositeInSkill2,
191774
191790
  extractSearchTermsFromIntent: () => extractSearchTermsFromIntent2,
191775
191791
  extractSampleValues: () => extractSampleValues2,
191776
191792
  extractLiteralSearchTermsFromIntent: () => extractLiteralSearchTermsFromIntent2,
@@ -191780,6 +191796,7 @@ __export(exports_orchestrator, {
191780
191796
  chooseBestRouteCacheCandidate: () => chooseBestRouteCacheCandidate2,
191781
191797
  buildResolveCacheKey: () => buildResolveCacheKey2,
191782
191798
  buildCompositeEdges: () => buildCompositeEdges2,
191799
+ attachCompositeToSkill: () => attachCompositeToSkill2,
191783
191800
  assessLocalExecutionResult: () => assessLocalExecutionResult2
191784
191801
  });
191785
191802
  import { existsSync as existsSync50, writeFileSync as writeFileSync26, readFileSync as readFileSync39, mkdirSync as mkdirSync30, readdirSync as readdirSync17 } from "node:fs";
@@ -191999,6 +192016,16 @@ function readComposite2(domain, target) {
191999
192016
  return;
192000
192017
  }
192001
192018
  }
192019
+ function findCompositeInSkill2(skill, target) {
192020
+ return skill?.composites?.find((c) => c.target === target && c.steps.length > 0);
192021
+ }
192022
+ function attachCompositeToSkill2(skill, composite) {
192023
+ const list = skill.composites ?? (skill.composites = []);
192024
+ if (list.some((c) => c.composite_id === composite.composite_id))
192025
+ return false;
192026
+ list.push(composite);
192027
+ return true;
192028
+ }
192002
192029
  function hasSearchBindings2(endpoint) {
192003
192030
  const haystack = JSON.stringify({
192004
192031
  url: endpoint.url_template,
@@ -194371,7 +194398,7 @@ async function resolveAndExecute2(intent, params = {}, context, projection, opti
194371
194398
  return "";
194372
194399
  }
194373
194400
  })();
194374
- const persisted = readComposite2(replayDomain, candidate.endpoint.endpoint_id);
194401
+ const persisted = findCompositeInSkill2(skill, candidate.endpoint.endpoint_id) ?? readComposite2(replayDomain, candidate.endpoint.endpoint_id);
194375
194402
  const decision = planPrereqOrder2(prereqOrder, persisted, (id) => {
194376
194403
  const ep = skill.endpoints.find((e) => e.endpoint_id === id);
194377
194404
  return ep != null && canAutoExecuteEndpoint(ep);
@@ -194406,7 +194433,7 @@ async function resolveAndExecute2(intent, params = {}, context, projection, opti
194406
194433
  decisionTrace.prerequisite_chain = chainSteps;
194407
194434
  decisionTrace.composite = composite;
194408
194435
  if (chainSteps.every((s) => s.ok) && canAutoExecuteEndpoint(candidate.endpoint)) {
194409
- const persistedPath = writeComposite2({
194436
+ const descriptor = {
194410
194437
  composite_id: compositeId,
194411
194438
  intent_signature: compositeIntentSig,
194412
194439
  domain: compositeDomain,
@@ -194414,7 +194441,12 @@ async function resolveAndExecute2(intent, params = {}, context, projection, opti
194414
194441
  steps: chainSteps,
194415
194442
  edges: compositeEdges,
194416
194443
  created_at: new Date().toISOString()
194417
- });
194444
+ };
194445
+ const composedNewlyAttached = attachCompositeToSkill2(skill, descriptor);
194446
+ if (composedNewlyAttached && skill.skill_id) {
194447
+ queuePassiveSkillPublish(skill).catch(() => {});
194448
+ }
194449
+ const persistedPath = writeComposite2(descriptor);
194418
194450
  if (persistedPath) {
194419
194451
  decisionTrace.composite_persisted = compositeId;
194420
194452
  }
Binary file
@@ -2,7 +2,7 @@
2
2
  "repo_url": "https://github.com/justrach/kuri.git",
3
3
  "branch": "adding-extensions",
4
4
  "source_sha": "8938f89f3d0c032bd19c59db0de4eadca18a1800",
5
- "built_at": "2026-06-14T04:09:29.728Z",
5
+ "built_at": "2026-06-14T04:52:03.906Z",
6
6
  "binaries": {
7
7
  "darwin-arm64": {
8
8
  "zig_target": "aarch64-macos",
@@ -21,33 +21,33 @@
21
21
  },
22
22
  "linux-x64": {
23
23
  "zig_target": "x86_64-linux",
24
- "sha256": "287c37dd7c9409214b638ba588e26d160fd5078d7b50c0e8673eec64086692c1"
24
+ "sha256": "473995d9a14513c1dfd3a86d29f0c10fb6f4b735565f9879574a325a4efbe617"
25
25
  },
26
26
  "win-x64": {
27
27
  "zig_target": "x86_64-windows-gnu",
28
- "sha256": "12374edb4547931d6efe8c187dc91c92984f0305fe7cc32276a9a7eddda17808"
28
+ "sha256": "5c98de92a1675ec1e1d823b2b0bd9c6ab90c4b32a8c34cdcf51c84e240a377c9"
29
29
  }
30
30
  },
31
31
  "ffi": {
32
32
  "darwin-arm64": {
33
33
  "zig_target": "aarch64-macos",
34
34
  "lib": "libkuri_ffi.dylib",
35
- "sha256": "e4d25d11504e9f366ff4fca192dd5bfc7d3475a483157541816ff6b75329b498"
35
+ "sha256": "ebf5ef3f77623b67799702029de32b5ade1dc8b758c379740998d20d2bc9d10c"
36
36
  },
37
37
  "darwin-x64": {
38
38
  "zig_target": "x86_64-macos",
39
39
  "lib": "libkuri_ffi.dylib",
40
- "sha256": "c3858a4d4d9f2a713c19835c3f2de15687aaadb6a8f091455920708eda84d069"
40
+ "sha256": "7dfdb81bab83b861245afefea9bab1a7342f646ced84e62ecdd4d9f1d6ac589c"
41
41
  },
42
42
  "linux-arm64": {
43
43
  "zig_target": "aarch64-linux",
44
44
  "lib": "libkuri_ffi.so",
45
- "sha256": "21418a3144796ddcec50721f6a2a6ee86c9518e4515cfdd45a644ee026bc4433"
45
+ "sha256": "435454b86a17ca8605c7129b50f7f090ead9c4928e5337b1b833fda7f4e82403"
46
46
  },
47
47
  "linux-x64": {
48
48
  "zig_target": "x86_64-linux",
49
49
  "lib": "libkuri_ffi.so",
50
- "sha256": "58c61c8bcaaa9d49e78077732d5e4493cad9d684853eb6f501da810d5d3550a4"
50
+ "sha256": "3d05e8b0203d24c6d1b051381e57e883f7fcc0bda0a86d75c2b4d243fb15212b"
51
51
  }
52
52
  }
53
53
  }
Binary file