@desplega.ai/agent-swarm 2.7.0 → 2.7.1
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/{acp-adapter-ma1js5n7.js → acp-adapter-8dn5tq56.js} +6 -6
- package/dist/{actions-1vhmtvg9.js → actions-3r6gw7dy.js} +18 -18
- package/dist/{amp-adapter-sxqqvmdk.js → amp-adapter-wjtq413p.js} +3 -3
- package/dist/{anthropic-messages-txs190dd.js → anthropic-messages-n4cby1rz.js} +4 -4
- package/dist/{app-mwx1d5a9.js → app-d53yhykk.js} +3 -3
- package/dist/{assistant-yx1p6g82.js → assistant-ksrawj3k.js} +20 -20
- package/dist/{boot-reembed-7h78vmvv.js → boot-reembed-fxfw17m2.js} +10 -3
- package/dist/{boot-reembed-5h37a2c2.js → boot-reembed-k5y5xbj0.js} +15 -8
- package/dist/{boot-scrub-sweep-8mawd4gw.js → boot-scrub-sweep-se41j9fd.js} +3 -3
- package/dist/{boot-seeds-ca84dhnn.js → boot-seeds-r3kwwv8b.js} +4 -4
- package/dist/{claude-adapter-wqt4hfkq.js → claude-adapter-ahmyf231.js} +7 -7
- package/dist/{claude-managed-adapter-6fjqtr2z.js → claude-managed-adapter-5knamegc.js} +3 -3
- package/dist/{claude-managed-setup-rqv98sea.js → claude-managed-setup-mdc7dy6b.js} +2 -2
- package/dist/{claude-sdk-session-f29f3b2x.js → claude-sdk-session-n5wen9zk.js} +8728 -8599
- package/dist/{cli-m5e802r7.js → cli-0dqtv2jg.js} +2 -2
- package/dist/{cli-e1595bgx.js → cli-0tww7dnz.js} +2 -2
- package/dist/{cli-2y7v133v.js → cli-0w4e4v58.js} +7 -7
- package/dist/{cli-d20qvpr2.js → cli-2sjm3t4r.js} +1 -1
- package/dist/{cli-gf2850q7.js → cli-3cywb44q.js} +18 -1
- package/dist/{cli-8wkb09q5.js → cli-3k9jej0c.js} +2 -2
- package/dist/{cli-twctnkng.js → cli-3v2cyqb8.js} +3 -3
- package/dist/{cli-he9gbdx0.js → cli-5qt9vzmq.js} +39 -20
- package/dist/{cli-a6ds2epe.js → cli-5rp1w4cr.js} +1 -1
- package/dist/{cli-6srv653c.js → cli-6vwjsetx.js} +4 -4
- package/dist/{cli-1hhbzkbb.js → cli-6w2yrrc0.js} +8 -8
- package/dist/{cli-f12mr20z.js → cli-75tdydgv.js} +1 -1
- package/dist/{cli-j3y0x2n4.js → cli-8feswf2v.js} +43 -33
- package/dist/{cli-07q03xm2.js → cli-8wd3mbyj.js} +1 -1
- package/dist/{cli-ymjpkxgn.js → cli-9csfthbw.js} +8 -6
- package/dist/{cli-f1e0ptjj.js → cli-b41p764a.js} +21 -2
- package/dist/{cli-kv7sbc2c.js → cli-c1t533hh.js} +3 -3
- package/dist/{cli-54sj64fc.js → cli-c28jxpcv.js} +1 -1
- package/dist/{cli-8mbc9za9.js → cli-cb50g9cd.js} +1 -1
- package/dist/{cli-c668vvcf.js → cli-d8gaphtr.js} +1 -1
- package/dist/{cli-86ehn4s5.js → cli-dgtfysne.js} +2 -2
- package/dist/{cli-sjctjr48.js → cli-dscnhn18.js} +1 -1
- package/dist/{cli-j0ppywdr.js → cli-dv11pgpv.js} +12 -12
- package/dist/{cli-1m9x8dr5.js → cli-ekptgk2m.js} +5 -5
- package/dist/{cli-9gsm2rzp.js → cli-f3mzy662.js} +17 -17
- package/dist/{cli-s0mgx214.js → cli-fk7k8s9x.js} +2 -2
- package/dist/{cli-vbhgkw9h.js → cli-h3e7bhvn.js} +3 -3
- package/dist/{cli-yd2nreqw.js → cli-hkxqdmnb.js} +2 -2
- package/dist/{cli-8wmj18cz.js → cli-hpkvgdad.js} +7 -4
- package/dist/{cli-wqr7cea4.js → cli-hq2v4rr5.js} +37 -9
- package/dist/{cli-sgqm2582.js → cli-k1zb7raw.js} +5 -5
- package/dist/{cli-4rvr7zfx.js → cli-k4awgvzm.js} +5 -0
- package/dist/{cli-ay40dnj3.js → cli-k7d3hvya.js} +2 -2
- package/dist/{cli-j9bpmykh.js → cli-kbtdftbw.js} +5 -5
- package/dist/{cli-x37r7qwf.js → cli-kj69b9tw.js} +25 -5
- package/dist/{cli-gsfk58nw.js → cli-kk9jy4nm.js} +1 -1
- package/dist/{cli-39aet655.js → cli-m52t4cta.js} +1 -1
- package/dist/{cli-h5jeg46p.js → cli-mdadewqp.js} +5 -5
- package/dist/{cli-a89zdqz9.js → cli-nf6k60sn.js} +1 -1
- package/dist/{cli-v6shg7na.js → cli-nzdf09js.js} +1 -1
- package/dist/{cli-rr7zx19j.js → cli-prcyzecg.js} +12 -12
- package/dist/{cli-6a9qfa8b.js → cli-pzafyqtk.js} +118 -48
- package/dist/{cli-48gxjmcz.js → cli-qvaa1gjp.js} +87 -24
- package/dist/{cli-qj442fws.js → cli-rg4b2g6j.js} +1 -1
- package/dist/{cli-aypd09nf.js → cli-rm66vqdz.js} +1 -1
- package/dist/{cli-9pshx6rd.js → cli-s504c3w7.js} +1 -1
- package/dist/{cli-ptfq202x.js → cli-swkx9jm2.js} +3 -3
- package/dist/{cli-m30k9777.js → cli-thsaq4pd.js} +16 -16
- package/dist/{cli-60sty27p.js → cli-twjnyvs8.js} +2 -2
- package/dist/{cli-rd5m70gj.js → cli-typdpe8g.js} +4 -4
- package/dist/{cli-yxbsmx56.js → cli-vg8pwmsd.js} +6 -6
- package/dist/{cli-s09j9vp5.js → cli-vhpckzvp.js} +1 -1
- package/dist/{cli-dv97kdzv.js → cli-wdxgsdz5.js} +2 -2
- package/dist/{cli-7a6p4e65.js → cli-wtjg6je3.js} +1 -1
- package/dist/{cli-b3yzyc57.js → cli-x3cngb1h.js} +44 -12
- package/dist/{cli-6mgdba42.js → cli-xbz6mcg4.js} +2 -2
- package/dist/{cli-2pvzmas1.js → cli-y4tdxsqb.js} +3 -3
- package/dist/{cli-f4dbh7a5.js → cli-yqrsp3ny.js} +7 -7
- package/dist/cli.js +27 -19
- package/dist/{codex-adapter-zk59x2zh.js → codex-adapter-7wepzq15.js} +5 -5
- package/dist/{codex-hook-xyjhvxwd.js → codex-hook-pbdh4xhx.js} +2 -2
- package/dist/{codex-session-runner-kh6s4j3n.js → codex-session-runner-02sb49e4.js} +5 -5
- package/dist/{commands-68et1qv2.js → commands-3rcspxct.js} +2 -2
- package/dist/{controller-fyrbnzg4.js → controller-8ar4avd6.js} +3 -3
- package/dist/{controllers-connect-nep9h2xv.js → controllers-connect-ajvh9h0v.js} +19 -19
- package/dist/{cursor-adapter-yss3pg7t.js → cursor-adapter-gd0sa7bh.js} +1 -1
- package/dist/{db-28gjyvxj.js → db-dv9j7ts5.js} +2 -2
- package/dist/{db-8ftwvzba.js → db-z26vgdvj.js} +3 -3
- package/dist/{dispatcher-hayexmkr.js → dispatcher-8m0htjq8.js} +17 -17
- package/dist/{dsh-adapter-46wawff9.js → dsh-adapter-y8gyk130.js} +1 -1
- package/dist/{e2b-fn3zacvt.js → e2b-74vg9b7e.js} +1 -1
- package/dist/{e2b-222hsajc.js → e2b-jyay8wzn.js} +1 -1
- package/dist/{easter-egg-3d-8d1e0h4m.js → easter-egg-3d-28f880xx.js} +1 -1
- package/dist/{execute-cjrfxfnm.js → execute-9seb79vh.js} +1 -1
- package/dist/{external-channel-xbmxcg09.js → external-channel-smz7jyth.js} +2 -2
- package/dist/{getMachineId-bsd-brn0xym3.js → getMachineId-bsd-whfre6gr.js} +3 -3
- package/dist/{getMachineId-darwin-t339sfxm.js → getMachineId-darwin-5zjynb19.js} +3 -3
- package/dist/{getMachineId-linux-5eq95d8b.js → getMachineId-linux-8mksrrsq.js} +3 -3
- package/dist/{getMachineId-unsupported-qavrtc7j.js → getMachineId-unsupported-fxtqsdt2.js} +3 -3
- package/dist/{getMachineId-win-q7fe1wx7.js → getMachineId-win-nzfmz857.js} +3 -3
- package/dist/{grok-adapter-ag4wks2a.js → grok-adapter-z0nnvtbn.js} +7 -7
- package/dist/handlers-pspryh6g.js +41 -0
- package/dist/{heartbeat-psfvcgwp.js → heartbeat-f928aqyp.js} +20 -20
- package/dist/{hook-cyq4mryn.js → hook-d7c605r4.js} +7 -7
- package/dist/{hook-8pz04697.js → hook-q9hv5xf9.js} +5 -5
- package/dist/{http-haj1nd6k.js → http-q6j4k989.js} +934 -180
- package/dist/{index-z5h22pes.js → index-5nb266jr.js} +17 -17
- package/dist/{index-ysd45kgc.js → index-8fxt5eah.js} +10 -10
- package/dist/{index-zgvqzjsw.js → index-cekzwhez.js} +5 -5
- package/dist/{index-zyq8ct52.js → index-ch0c1xff.js} +17 -17
- package/dist/{index-syvhnvtw.js → index-ebnjhxh1.js} +1 -1
- package/dist/{index-y1ajx04a.js → index-ed8dy8rn.js} +20 -20
- package/dist/{index-jwt2bj6f.js → index-ejqdkkqx.js} +11 -10
- package/dist/{index-dr94zbnh.js → index-farm1zsn.js} +32661 -29443
- package/dist/{index-q52f47pe.js → index-yn1yxg85.js} +1 -1
- package/dist/{keepalive-xdvsamvj.js → keepalive-zzc3hks1.js} +3 -3
- package/dist/{lead-hqg57kdp.js → lead-c0pjcaw4.js} +36 -36
- package/dist/{maintenance-4y2xzh3a.js → maintenance-kqsxzpzx.js} +1 -1
- package/dist/{oauth-refresh-sweep-jd4r7zbs.js → oauth-refresh-sweep-7qt0g55z.js} +2 -2
- package/dist/{onboard-18447q9q.js → onboard-k7x13fqg.js} +118 -5
- package/dist/{opencode-adapter-26b2frdf.js → opencode-adapter-tqvrtter.js} +5 -5
- package/dist/{otel-impl-f9tgr8yw.js → otel-impl-sqkf6k3b.js} +97 -97
- package/dist/{pi-mono-adapter-qn6qbga1.js → pi-mono-adapter-m2qnafxm.js} +63 -9
- package/dist/{pricing-refresh-dw2tgb53.js → pricing-refresh-wkpwhgvs.js} +3 -3
- package/dist/{rbac-roles-s4nwj2m3.js → rbac-roles-dpn0c0wj.js} +7 -4
- package/dist/{rbac-roles-aygm2760.js → rbac-roles-wk7xd6a6.js} +2 -2
- package/dist/{render-v2-yfvdfr0x.js → render-v2-ex2m4g2k.js} +3 -3
- package/dist/{resume-1bmvjbf3.js → resume-725g9b0b.js} +7 -7
- package/dist/{runtime-f7tpzedy.js → runtime-kajas15g.js} +1 -1
- package/dist/{session-access-r5garej6.js → session-access-0j2ezjje.js} +8 -4
- package/dist/{session-source-backfill-424wzv0r.js → session-source-backfill-62202awe.js} +2 -2
- package/dist/{setup-8tygvxkq.js → setup-9sj11ax6.js} +1 -1
- package/dist/{virtual-modules-xsw323b3.js → virtual-modules-c6fcq6zr.js} +2 -2
- package/dist/{work-objects-ggnghpgf.js → work-objects-0y07495y.js} +20 -20
- package/dist/{worker-sqjd1nqf.js → worker-d4q9sqbc.js} +36 -36
- package/openapi.json +1070 -9
- package/package.json +3 -3
- package/src/be/connector-codes.ts +65 -22
- package/src/be/memory/boot-reembed.ts +4 -1
- package/src/be/memory/constants.ts +6 -0
- package/src/be/memory/embedding-recovery.ts +48 -0
- package/src/be/memory/index-content.ts +5 -2
- package/src/be/memory/providers/openai-embedding.ts +65 -14
- package/src/be/memory/task-learning.ts +110 -8
- package/src/be/memory/types.ts +13 -2
- package/src/be/migrations/246_connector_code_kind.sql +11 -0
- package/src/be/onboarding.ts +125 -15
- package/src/be/rbac-roles.ts +4 -1
- package/src/be/scripts/embeddings.ts +2 -2
- package/src/be/seed/agent-fs-provision.ts +75 -14
- package/src/be/swarm-config-guard.ts +3 -0
- package/src/cli.tsx +9 -0
- package/src/comb/config.ts +6 -1
- package/src/commands/onboard/agent-fs-version.ts +5 -0
- package/src/commands/onboard/compose-generator.ts +112 -1
- package/src/commands/onboard/env-generator.ts +9 -0
- package/src/commands/onboard/tei-image.ts +12 -0
- package/src/commands/onboard/types.ts +7 -0
- package/src/commands/onboard.tsx +11 -1
- package/src/commands/runner.ts +14 -1
- package/src/http/agentfs-proxy.ts +369 -0
- package/src/http/all-routes.ts +1 -0
- package/src/http/codex-oauth-device.ts +8 -1
- package/src/http/fs.ts +64 -10
- package/src/http/inbox-state.ts +27 -1
- package/src/http/index.ts +4 -1
- package/src/http/memory.ts +7 -4
- package/src/http/onboarding.ts +139 -11
- package/src/http/session-access.ts +24 -0
- package/src/http/sessions.ts +10 -6
- package/src/http/tasks.ts +85 -11
- package/src/http/telemetry-ui.ts +1 -1
- package/src/http/user-roles.ts +4 -1
- package/src/http/users.ts +272 -3
- package/src/http/utils.ts +22 -3
- package/src/prompts/base-prompt.ts +24 -9
- package/src/prompts/session-templates.ts +26 -2
- package/src/providers/amp-adapter.ts +1 -1
- package/src/providers/codex-adapter.ts +6 -1
- package/src/providers/cursor-adapter.ts +1 -1
- package/src/providers/pi-mono-adapter.ts +58 -3
- package/src/rbac/legacy-policy.ts +1 -0
- package/src/rbac/permissions.ts +4 -0
- package/src/tests/agent-fs-provision-seeder.test.ts +261 -92
- package/src/tests/agentfs-proxy.test.ts +1106 -0
- package/src/tests/base-prompt.test.ts +69 -2
- package/src/tests/codex-adapter.test.ts +46 -8
- package/src/tests/codex-oauth-device.test.ts +12 -1
- package/src/tests/comb-config-guard.test.ts +20 -0
- package/src/tests/comb-links.test.ts +79 -1
- package/src/tests/comb-status.test.ts +44 -0
- package/src/tests/docs-index-footprint.test.js +3 -3
- package/src/tests/fixtures/onboard/baseline-states.ts +68 -0
- package/src/tests/fixtures/onboard/content.compose.yml.txt +190 -0
- package/src/tests/fixtures/onboard/content.env.txt +29 -0
- package/src/tests/fixtures/onboard/dev.compose.yml.txt +155 -0
- package/src/tests/fixtures/onboard/dev.env.txt +28 -0
- package/src/tests/fixtures/onboard/full-all.compose.yml.txt +582 -0
- package/src/tests/fixtures/onboard/full-all.env.txt +59 -0
- package/src/tests/fixtures/onboard/full.compose.yml.txt +435 -0
- package/src/tests/fixtures/onboard/full.env.txt +36 -0
- package/src/tests/fixtures/onboard/research.compose.yml.txt +155 -0
- package/src/tests/fixtures/onboard/research.env.txt +28 -0
- package/src/tests/fixtures/onboard/solo.compose.yml.txt +85 -0
- package/src/tests/fixtures/onboard/solo.env.txt +26 -0
- package/src/tests/http-log-scrubbing.test.ts +34 -1
- package/src/tests/http-task-write-ownership.test.ts +5 -1
- package/src/tests/invites-http.test.ts +464 -0
- package/src/tests/memory-embedding-input-cap.test.ts +122 -1
- package/src/tests/memory-embedding-recovery.test.ts +137 -0
- package/src/tests/onboard-compose.test.ts +142 -0
- package/src/tests/onboard-env.test.ts +24 -0
- package/src/tests/onboard-non-interactive.test.ts +29 -0
- package/src/tests/onboard-tei-image.test.ts +36 -0
- package/src/tests/onboarding.test.ts +451 -4
- package/src/tests/openai-embedding-provider.test.ts +105 -2
- package/src/tests/pi-mono-session-cost-on-abort.test.ts +270 -0
- package/src/tests/preload-env.test.ts +4 -0
- package/src/tests/preload.ts +4 -0
- package/src/tests/prompt-template-session.test.ts +19 -3
- package/src/tests/rbac-admission-e2e.test.ts +22 -6
- package/src/tests/rbac-admission.test.ts +342 -4
- package/src/tests/rbac-engine.test.ts +1 -0
- package/src/tests/rbac-roles.test.ts +9 -1
- package/src/tests/send-task-requester-gate.test.ts +64 -3
- package/src/tests/sessions-move.test.ts +39 -1
- package/src/tests/store-progress-learning.test.ts +95 -2
- package/src/tests/whoami-route.test.ts +41 -0
- package/src/tools/inject-learning.ts +1 -1
- package/src/tools/memory-edit.ts +1 -1
- package/src/tools/memory-search.ts +1 -1
- package/src/tools/store-progress.ts +5 -1
- package/src/tools/utils.ts +12 -1
- package/src/utils/constants.ts +39 -0
- package/src/utils/task-attachment-links.ts +15 -3
- package/templates/skills/swarm-docs/content.md +1 -1
- package/dist/handlers-tzmevqb5.js +0 -41
- package/dist/{azure-openai-responses-9kfwhmn7.js → azure-openai-responses-43asa23s.js} +0 -0
- package/dist/{node-vxx896fa.js → node-t28cc56b.js} +0 -0
- package/dist/{openai-codex-responses-79s8xnbh.js → openai-codex-responses-jhr3sjtm.js} +3 -3
- package/dist/{openai-completions-tdbyts0x.js → openai-completions-gs6yn37k.js} +3 -3
- /package/dist/{openai-responses-dm3t5vqp.js → openai-responses-jqm9vwwk.js} +0 -0
|
@@ -154,6 +154,7 @@ import {
|
|
|
154
154
|
getAuthorizationById,
|
|
155
155
|
getOAuthTokens,
|
|
156
156
|
init_oauth,
|
|
157
|
+
LEARNING_DUPLICATE_MIN_SIMILARITY,
|
|
157
158
|
CANDIDATE_SET_MULTIPLIER,
|
|
158
159
|
isGraphExpansionEnabled,
|
|
159
160
|
init_constants,
|
|
@@ -348,19 +349,19 @@ import {
|
|
|
348
349
|
recordInlineScriptRun2,
|
|
349
350
|
exports_db,
|
|
350
351
|
init_db3
|
|
351
|
-
} from "./cli-
|
|
352
|
+
} from "./cli-qvaa1gjp.js";
|
|
352
353
|
import {
|
|
353
354
|
getUserGrant2,
|
|
354
355
|
init_rbac_roles
|
|
355
|
-
} from "./cli-
|
|
356
|
+
} from "./cli-hpkvgdad.js";
|
|
356
357
|
import {
|
|
357
358
|
ensurePricingSeeded2,
|
|
358
359
|
ensureRbacSeeded2,
|
|
359
360
|
ensureModelProfilesSeeded2
|
|
360
|
-
} from "./cli-
|
|
361
|
+
} from "./cli-typdpe8g.js";
|
|
361
362
|
import {
|
|
362
363
|
loadModelsDevCache
|
|
363
|
-
} from "./cli-
|
|
364
|
+
} from "./cli-2sjm3t4r.js";
|
|
364
365
|
import {
|
|
365
366
|
buildCatalogEntries,
|
|
366
367
|
listModelCatalog,
|
|
@@ -370,12 +371,12 @@ import {
|
|
|
370
371
|
loadModelsCatalog,
|
|
371
372
|
requestModelCatalogRefresh2,
|
|
372
373
|
startPricingRefreshLoop2
|
|
373
|
-
} from "./cli-
|
|
374
|
+
} from "./cli-twjnyvs8.js";
|
|
374
375
|
import {
|
|
375
376
|
ampPinProviderError,
|
|
376
377
|
ampPinCatalogError,
|
|
377
378
|
ampModelError
|
|
378
|
-
} from "./cli-
|
|
379
|
+
} from "./cli-cb50g9cd.js";
|
|
379
380
|
import {
|
|
380
381
|
workflowEventBus2,
|
|
381
382
|
init_event_bus
|
|
@@ -444,7 +445,7 @@ import {
|
|
|
444
445
|
definitionNodeIds,
|
|
445
446
|
validateDefinition,
|
|
446
447
|
applyDefinitionPatch
|
|
447
|
-
} from "./cli-
|
|
448
|
+
} from "./cli-dv11pgpv.js";
|
|
448
449
|
import {
|
|
449
450
|
require_dist2,
|
|
450
451
|
publicEndpointSsrfOptions,
|
|
@@ -504,14 +505,14 @@ import {
|
|
|
504
505
|
deleteApp,
|
|
505
506
|
typecheckScript,
|
|
506
507
|
parseSkillContent
|
|
507
|
-
} from "./cli-
|
|
508
|
+
} from "./cli-kbtdftbw.js";
|
|
508
509
|
import {
|
|
509
510
|
buildAuthorizationUrl,
|
|
510
511
|
onAuthorizationRefreshed,
|
|
511
512
|
ensureAuthorizationTokenOrThrow,
|
|
512
513
|
ensureToken,
|
|
513
514
|
ensureTokenOrThrow
|
|
514
|
-
} from "./cli-
|
|
515
|
+
} from "./cli-rm66vqdz.js";
|
|
515
516
|
import {
|
|
516
517
|
detachedProcessGroup,
|
|
517
518
|
registerProcessGroup,
|
|
@@ -545,14 +546,14 @@ import {
|
|
|
545
546
|
getSlackApp2,
|
|
546
547
|
startSlackApp2,
|
|
547
548
|
stopSlackApp2
|
|
548
|
-
} from "./cli-
|
|
549
|
+
} from "./cli-thsaq4pd.js";
|
|
549
550
|
import {
|
|
550
551
|
slackCode,
|
|
551
552
|
slackMissingScopeMessage,
|
|
552
553
|
withAutoJoin,
|
|
553
554
|
externalChannelToolError2,
|
|
554
555
|
getChannelBlockReason2
|
|
555
|
-
} from "./cli-
|
|
556
|
+
} from "./cli-vhpckzvp.js";
|
|
556
557
|
import {
|
|
557
558
|
shapeApprovalResolution,
|
|
558
559
|
SubWorkflowExecutor,
|
|
@@ -571,7 +572,7 @@ import {
|
|
|
571
572
|
recoverResolvedWaitState2,
|
|
572
573
|
resumeFromChildRun2,
|
|
573
574
|
initWaitBusSubscriptions2
|
|
574
|
-
} from "./cli-
|
|
575
|
+
} from "./cli-3v2cyqb8.js";
|
|
575
576
|
import {
|
|
576
577
|
duplicateGuardedQueryKey,
|
|
577
578
|
parseQueryParams,
|
|
@@ -598,7 +599,7 @@ import {
|
|
|
598
599
|
isPublicRoute,
|
|
599
600
|
findRoute,
|
|
600
601
|
route
|
|
601
|
-
} from "./cli-
|
|
602
|
+
} from "./cli-hq2v4rr5.js";
|
|
602
603
|
import {
|
|
603
604
|
FilesError,
|
|
604
605
|
providerPath,
|
|
@@ -609,7 +610,7 @@ import {
|
|
|
609
610
|
import {
|
|
610
611
|
getRuntimePool2,
|
|
611
612
|
init_db
|
|
612
|
-
} from "./cli-
|
|
613
|
+
} from "./cli-6vwjsetx.js";
|
|
613
614
|
import {
|
|
614
615
|
getMemoryRaterNames,
|
|
615
616
|
REFERENCES_SOURCE_MAX_LENGTH,
|
|
@@ -634,7 +635,7 @@ import {
|
|
|
634
635
|
import {
|
|
635
636
|
canProvisionKind,
|
|
636
637
|
init_runtime_providers
|
|
637
|
-
} from "./cli-
|
|
638
|
+
} from "./cli-m52t4cta.js";
|
|
638
639
|
import {
|
|
639
640
|
findUserById,
|
|
640
641
|
findUserByExternalId,
|
|
@@ -649,7 +650,7 @@ import {
|
|
|
649
650
|
resolveSessionToken,
|
|
650
651
|
fingerprintApiKey,
|
|
651
652
|
init_users
|
|
652
|
-
} from "./cli-
|
|
653
|
+
} from "./cli-nf6k60sn.js";
|
|
653
654
|
import {
|
|
654
655
|
isRbacEnabled,
|
|
655
656
|
decideAdmission,
|
|
@@ -658,7 +659,7 @@ import {
|
|
|
658
659
|
init_elevated_agents,
|
|
659
660
|
can,
|
|
660
661
|
init_rbac
|
|
661
|
-
} from "./cli-
|
|
662
|
+
} from "./cli-k4awgvzm.js";
|
|
662
663
|
import {
|
|
663
664
|
normalizeAssetKey,
|
|
664
665
|
sessionGroupKey,
|
|
@@ -719,7 +720,7 @@ import {
|
|
|
719
720
|
KvNamespaceSchema,
|
|
720
721
|
KvKeySchema,
|
|
721
722
|
init_types
|
|
722
|
-
} from "./cli-
|
|
723
|
+
} from "./cli-s504c3w7.js";
|
|
723
724
|
import {
|
|
724
725
|
generateDefaultClaudeMd2,
|
|
725
726
|
generateDefaultSoulMd2,
|
|
@@ -730,7 +731,7 @@ import {
|
|
|
730
731
|
init_task_attachment_links,
|
|
731
732
|
contentSha256,
|
|
732
733
|
init_profile_sync
|
|
733
|
-
} from "./cli-
|
|
734
|
+
} from "./cli-kj69b9tw.js";
|
|
734
735
|
import {
|
|
735
736
|
isSteeringEnabled2,
|
|
736
737
|
init_steering_enabled
|
|
@@ -752,7 +753,7 @@ import {
|
|
|
752
753
|
init_registry,
|
|
753
754
|
resolveTemplate,
|
|
754
755
|
init_resolver
|
|
755
|
-
} from "./cli-
|
|
756
|
+
} from "./cli-b41p764a.js";
|
|
756
757
|
import {
|
|
757
758
|
init_zod
|
|
758
759
|
} from "./cli-4chz1hye.js";
|
|
@@ -794,11 +795,7 @@ import {
|
|
|
794
795
|
import {
|
|
795
796
|
init_package,
|
|
796
797
|
package_default
|
|
797
|
-
} from "./cli-
|
|
798
|
-
import {
|
|
799
|
-
realtimeBus,
|
|
800
|
-
init_bus
|
|
801
|
-
} from "./cli-syfdvhkc.js";
|
|
798
|
+
} from "./cli-swkx9jm2.js";
|
|
802
799
|
import {
|
|
803
800
|
MAX_PROFILE_FILE_LENGTH,
|
|
804
801
|
getConfiguredAppUrls,
|
|
@@ -809,13 +806,18 @@ import {
|
|
|
809
806
|
getAgentFsDefaultOrgId,
|
|
810
807
|
getAgentFsDefaultDriveId,
|
|
811
808
|
isCombEnabled,
|
|
809
|
+
isAgentFsProxyEnabled,
|
|
812
810
|
init_constants2
|
|
813
|
-
} from "./cli-
|
|
811
|
+
} from "./cli-3cywb44q.js";
|
|
814
812
|
import {
|
|
815
813
|
parseEnvFlag,
|
|
816
814
|
isEnvFlagEnabled,
|
|
817
815
|
init_env_flag
|
|
818
816
|
} from "./cli-cebvbc9t.js";
|
|
817
|
+
import {
|
|
818
|
+
realtimeBus,
|
|
819
|
+
init_bus
|
|
820
|
+
} from "./cli-syfdvhkc.js";
|
|
819
821
|
import {
|
|
820
822
|
getApiKey,
|
|
821
823
|
init_api_key
|
|
@@ -20544,7 +20546,7 @@ function startRetryPoller(registry, intervalMs = 5000) {
|
|
|
20544
20546
|
if (!waiting)
|
|
20545
20547
|
continue;
|
|
20546
20548
|
if (result.waitFor === "workflow.child.finished") {
|
|
20547
|
-
const { resumeFromChildRun } = await import("./resume-
|
|
20549
|
+
const { resumeFromChildRun } = await import("./resume-725g9b0b.js");
|
|
20548
20550
|
await resumeFromChildRun(step.id, registry);
|
|
20549
20551
|
}
|
|
20550
20552
|
} else {
|
|
@@ -21227,7 +21229,7 @@ class NotifyExecutor extends BaseExecutor {
|
|
|
21227
21229
|
}
|
|
21228
21230
|
}
|
|
21229
21231
|
case "slack": {
|
|
21230
|
-
const { getSlackApp } = await import("./app-
|
|
21232
|
+
const { getSlackApp } = await import("./app-d53yhykk.js");
|
|
21231
21233
|
const app = getSlackApp();
|
|
21232
21234
|
if (!app) {
|
|
21233
21235
|
return {
|
|
@@ -24228,6 +24230,13 @@ var storeProgressBlockedWaitingNudge = (r) => {
|
|
|
24228
24230
|
return;
|
|
24229
24231
|
return `That reads as blocked-waiting, ${formatIdleDuration(ms)} since your last update — keep working if you can, and if the wait is genuinely long, defer-task is one way to resume later instead of polling.`;
|
|
24230
24232
|
};
|
|
24233
|
+
var storeProgressNudge = (r) => {
|
|
24234
|
+
const learning = r.data?.learning;
|
|
24235
|
+
if (r.ok && learning?.status === "duplicate" && typeof learning.memoryId === "string") {
|
|
24236
|
+
return `That learning repeats memory ${learning.memoryId}; if your text adds something, memory-edit that memory instead of storing a new one.`;
|
|
24237
|
+
}
|
|
24238
|
+
return storeProgressBlockedWaitingNudge(r);
|
|
24239
|
+
};
|
|
24231
24240
|
var workflowLongScriptTimeoutNudge = (r) => {
|
|
24232
24241
|
if (!r.ok)
|
|
24233
24242
|
return;
|
|
@@ -24236,7 +24245,7 @@ var workflowLongScriptTimeoutNudge = (r) => {
|
|
|
24236
24245
|
};
|
|
24237
24246
|
var NUDGES = {
|
|
24238
24247
|
"defer-task": (r) => r.ok ? "Stop working on this task now; the wake-up task will carry your note." : undefined,
|
|
24239
|
-
"store-progress":
|
|
24248
|
+
"store-progress": storeProgressNudge,
|
|
24240
24249
|
"script-run": scriptRunNudge,
|
|
24241
24250
|
"script-upsert": scriptAuthoringNudge,
|
|
24242
24251
|
"launch-script-run": scriptAuthoringNudge,
|
|
@@ -24614,7 +24623,7 @@ function setPreloadedTools(server, names) {
|
|
|
24614
24623
|
async function applyPreToolCall(name, args, requestInfo, inputSchema) {
|
|
24615
24624
|
if (requestInfo.callOrigin !== "mcp")
|
|
24616
24625
|
return { args };
|
|
24617
|
-
const dispatcher = await import("./dispatcher-
|
|
24626
|
+
const dispatcher = await import("./dispatcher-8m0htjq8.js");
|
|
24618
24627
|
const result = await dispatcher.dispatchPre("pre.tool.call", { tool: name, args, requestInfo }, inputSchema ? {
|
|
24619
24628
|
validateModify: async (data) => {
|
|
24620
24629
|
const schema = normalizeObjectSchema(inputSchema) ?? inputSchema;
|
|
@@ -31743,7 +31752,7 @@ async function loadAdapter(name, config, logger) {
|
|
|
31743
31752
|
});
|
|
31744
31753
|
}
|
|
31745
31754
|
case "slack": {
|
|
31746
|
-
const { createSlackAdapter } = await import("./index-
|
|
31755
|
+
const { createSlackAdapter } = await import("./index-cekzwhez.js");
|
|
31747
31756
|
return createSlackAdapter({
|
|
31748
31757
|
...base,
|
|
31749
31758
|
signingSecret: config.signingSecret ?? "",
|
|
@@ -31762,7 +31771,7 @@ async function loadAdapter(name, config, logger) {
|
|
|
31762
31771
|
});
|
|
31763
31772
|
}
|
|
31764
31773
|
case "teams": {
|
|
31765
|
-
const { createTeamsAdapter } = await import("./index-
|
|
31774
|
+
const { createTeamsAdapter } = await import("./index-8fxt5eah.js");
|
|
31766
31775
|
const { teamsWebhookVerifier, teamsToken } = getChatSdkTestHooks();
|
|
31767
31776
|
return createTeamsAdapter({
|
|
31768
31777
|
...base,
|
|
@@ -35098,7 +35107,7 @@ async function notifySlack(text) {
|
|
|
35098
35107
|
return;
|
|
35099
35108
|
}
|
|
35100
35109
|
try {
|
|
35101
|
-
const { getSlackApp } = await import("./app-
|
|
35110
|
+
const { getSlackApp } = await import("./app-d53yhykk.js");
|
|
35102
35111
|
const app = getSlackApp();
|
|
35103
35112
|
if (!app) {
|
|
35104
35113
|
console.warn("[Jira webhook keepalive] Slack not available, cannot send notification");
|
|
@@ -35169,7 +35178,7 @@ async function deleteJiraWebhook(webhookId) {
|
|
|
35169
35178
|
console.log(`[Jira webhook keepalive] Deleted webhook id=${webhookId}`);
|
|
35170
35179
|
}
|
|
35171
35180
|
async function overwriteWebhookIds(next) {
|
|
35172
|
-
const { getDbClient } = await import("./db-
|
|
35181
|
+
const { getDbClient } = await import("./db-dv9j7ts5.js");
|
|
35173
35182
|
await getDbClient().transaction(async (tx) => {
|
|
35174
35183
|
const row = await tx.get("SELECT metadata FROM oauth_apps WHERE provider = 'jira'");
|
|
35175
35184
|
if (!row) {
|
|
@@ -108568,7 +108577,7 @@ async function reloadGlobalConfigsAndIntegrations() {
|
|
|
108568
108577
|
return runWithoutRequestAuth(() => reloadGlobalConfigsAndIntegrationsInner());
|
|
108569
108578
|
}
|
|
108570
108579
|
async function reloadGlobalConfigsAndIntegrationsInner() {
|
|
108571
|
-
const { getEmbeddingProvider, resetEmbeddingProvider } = await import("./index-
|
|
108580
|
+
const { getEmbeddingProvider, resetEmbeddingProvider } = await import("./index-yn1yxg85.js");
|
|
108572
108581
|
const wasEmbeddingsConfigured = getEmbeddingProvider().isConfigured();
|
|
108573
108582
|
const updated = await loadGlobalConfigsIntoEnv(true);
|
|
108574
108583
|
await syncTelemetryEnabled("settings").catch((err) => {
|
|
@@ -108584,10 +108593,10 @@ async function reloadGlobalConfigsAndIntegrationsInner() {
|
|
|
108584
108593
|
integrations.push("embeddings");
|
|
108585
108594
|
}
|
|
108586
108595
|
if (!wasEmbeddingsConfigured && isEmbeddingsConfigured) {
|
|
108587
|
-
import("./boot-reembed-
|
|
108596
|
+
import("./boot-reembed-k5y5xbj0.js").then(({ runBootReembed }) => runBootReembed()).catch((err) => {
|
|
108588
108597
|
console.error("[config-reload] memory backfill failed (non-fatal):", err);
|
|
108589
108598
|
});
|
|
108590
|
-
import("./boot-reembed-
|
|
108599
|
+
import("./boot-reembed-fxfw17m2.js").then(({ runBootReembedScripts }) => runBootReembedScripts()).catch((err) => {
|
|
108591
108600
|
console.error("[config-reload] script backfill failed (non-fatal):", err);
|
|
108592
108601
|
});
|
|
108593
108602
|
}
|
|
@@ -116263,7 +116272,7 @@ async function indexMemoryContent(params) {
|
|
|
116263
116272
|
intent: "re-index memory source path",
|
|
116264
116273
|
changedByAgentId: agentId
|
|
116265
116274
|
});
|
|
116266
|
-
const embedding = await provider.embed(result.memory.content);
|
|
116275
|
+
const embedding = await provider.embed(result.memory.content, { kind: "document" });
|
|
116267
116276
|
if (embedding)
|
|
116268
116277
|
await store.updateEmbedding(result.memory.id, embedding, provider.name);
|
|
116269
116278
|
try {
|
|
@@ -116304,7 +116313,7 @@ async function indexMemoryContent(params) {
|
|
|
116304
116313
|
}
|
|
116305
116314
|
(async () => {
|
|
116306
116315
|
try {
|
|
116307
|
-
const embeddings = await provider.embedBatch(memories.map((m) => m.content));
|
|
116316
|
+
const embeddings = await provider.embedBatch(memories.map((m) => m.content), { kind: "document" });
|
|
116308
116317
|
for (let i = 0;i < embeddings.length; i++) {
|
|
116309
116318
|
if (embeddings[i]) {
|
|
116310
116319
|
await store.updateEmbedding(memories[i].id, embeddings[i], provider.name);
|
|
@@ -118453,7 +118462,7 @@ ${learning}`;
|
|
|
118453
118462
|
});
|
|
118454
118463
|
try {
|
|
118455
118464
|
const provider = getEmbeddingProvider2();
|
|
118456
|
-
const embedding = await provider.embed(memory.content);
|
|
118465
|
+
const embedding = await provider.embed(memory.content, { kind: "document" });
|
|
118457
118466
|
if (embedding) {
|
|
118458
118467
|
await store.updateEmbedding(memory.id, embedding, provider.name);
|
|
118459
118468
|
}
|
|
@@ -119952,7 +119961,7 @@ var registerMemoryEditTool = (server) => {
|
|
|
119952
119961
|
const contentEdited = content !== undefined || oldString !== undefined || newString !== undefined;
|
|
119953
119962
|
if (result.changed && (newKey === undefined || contentEdited)) {
|
|
119954
119963
|
const provider = getEmbeddingProvider2();
|
|
119955
|
-
const embedding = await provider.embed(result.memory.content);
|
|
119964
|
+
const embedding = await provider.embed(result.memory.content, { kind: "document" });
|
|
119956
119965
|
if (embedding)
|
|
119957
119966
|
await store.updateEmbedding(result.memory.id, embedding, provider.name);
|
|
119958
119967
|
try {
|
|
@@ -120446,7 +120455,7 @@ var registerMemorySearchTool = (server) => {
|
|
|
120446
120455
|
const isLead = agent?.isLead ?? false;
|
|
120447
120456
|
const provider = getEmbeddingProvider2();
|
|
120448
120457
|
const store = getMemoryStore2();
|
|
120449
|
-
const queryEmbedding = await provider.embed(query);
|
|
120458
|
+
const queryEmbedding = await provider.embed(query, { kind: "query" });
|
|
120450
120459
|
const candidateLimit = limit * CANDIDATE_SET_MULTIPLIER;
|
|
120451
120460
|
const candidates = await searchMemoryCandidates(store, queryEmbedding ?? new Float32Array(0), requestInfo.agentId, {
|
|
120452
120461
|
scope,
|
|
@@ -122529,9 +122538,10 @@ function trimUrl(value) {
|
|
|
122529
122538
|
}
|
|
122530
122539
|
function getCombConfig() {
|
|
122531
122540
|
const internalUrl = trimUrl(process.env.AGENT_FS_API_URL);
|
|
122541
|
+
const browserDefault = isAgentFsProxyEnabled() && internalUrl ? `${getPublicMcpBaseUrl()}/agentfs` : internalUrl;
|
|
122532
122542
|
return {
|
|
122533
122543
|
enabled: isCombEnabled(),
|
|
122534
|
-
apiUrl: trimUrl(process.env.AGENT_FS_PUBLIC_URL) ??
|
|
122544
|
+
apiUrl: trimUrl(process.env.AGENT_FS_PUBLIC_URL) ?? browserDefault,
|
|
122535
122545
|
liveUrl: getAgentFsLiveUrl(),
|
|
122536
122546
|
orgId: getAgentFsDefaultOrgId() ?? null,
|
|
122537
122547
|
driveId: getAgentFsDefaultDriveId() ?? null
|
|
@@ -134572,6 +134582,8 @@ init_db3();
|
|
|
134572
134582
|
|
|
134573
134583
|
// src/be/memory/task-learning.ts
|
|
134574
134584
|
init_db3();
|
|
134585
|
+
init_memory();
|
|
134586
|
+
init_constants();
|
|
134575
134587
|
init_profile_sync();
|
|
134576
134588
|
init_secret_scrubber();
|
|
134577
134589
|
var LEARNING_MAX_CHARS = 2000;
|
|
@@ -134579,6 +134591,8 @@ var LEARNING_MAX_TAGS = 5;
|
|
|
134579
134591
|
var LEARNINGS_ROOT = "/learnings";
|
|
134580
134592
|
var SEGMENT_MAX_CHARS = 60;
|
|
134581
134593
|
var KEY_ATTEMPTS = 4;
|
|
134594
|
+
var DUPLICATE_SEARCH_PREFIXES = [`${LEARNINGS_ROOT}/`, "/longterm/workstreams/"];
|
|
134595
|
+
var LEARNING_DUPLICATE_RATING_SOURCE = "learning-duplicate";
|
|
134582
134596
|
function toKebab(value, maxChars = SEGMENT_MAX_CHARS) {
|
|
134583
134597
|
return value.normalize("NFKD").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+/, "").slice(0, maxChars).replace(/-+$/, "");
|
|
134584
134598
|
}
|
|
@@ -134610,6 +134624,14 @@ async function storeTaskLearning(params) {
|
|
|
134610
134624
|
}
|
|
134611
134625
|
const workstream = resolveLearningWorkstream(input.workstream === undefined ? undefined : scrubSecrets(input.workstream), task.vcsRepo === undefined ? undefined : scrubSecrets(task.vcsRepo));
|
|
134612
134626
|
try {
|
|
134627
|
+
const replay = await findReplay(task.id, contentSha256(text));
|
|
134628
|
+
if (replay)
|
|
134629
|
+
return replay;
|
|
134630
|
+
const duplicate = await findNearDuplicate({ agentId, isLead, text });
|
|
134631
|
+
if (duplicate) {
|
|
134632
|
+
await rateDuplicate(duplicate, task.id);
|
|
134633
|
+
return duplicate;
|
|
134634
|
+
}
|
|
134613
134635
|
return await getDbClient2().transaction(() => insertLearning({ agentId, isLead, taskId: task.id, text, tags, workstream }));
|
|
134614
134636
|
} catch (err) {
|
|
134615
134637
|
return {
|
|
@@ -134618,14 +134640,58 @@ async function storeTaskLearning(params) {
|
|
|
134618
134640
|
};
|
|
134619
134641
|
}
|
|
134620
134642
|
}
|
|
134621
|
-
async function
|
|
134622
|
-
const { agentId, isLead, taskId, text, tags, workstream } = params;
|
|
134623
|
-
const contentHash = contentSha256(text);
|
|
134643
|
+
async function findReplay(taskId, contentHash) {
|
|
134624
134644
|
const replay = await getDbClient2().get(`SELECT id, key FROM agent_memory
|
|
134625
134645
|
WHERE sourceTaskId = ? AND contentHash = ? AND key LIKE '${LEARNINGS_ROOT}/%'
|
|
134626
134646
|
LIMIT 1`, [taskId, contentHash]);
|
|
134647
|
+
return replay ? { status: "replayed", memoryId: replay.id, key: replay.key } : null;
|
|
134648
|
+
}
|
|
134649
|
+
async function findNearDuplicate(params) {
|
|
134650
|
+
try {
|
|
134651
|
+
const embedding = await getEmbeddingProvider2().embed(params.text);
|
|
134652
|
+
if (!embedding)
|
|
134653
|
+
return null;
|
|
134654
|
+
const store = getMemoryStore2();
|
|
134655
|
+
const results = await Promise.all(DUPLICATE_SEARCH_PREFIXES.map((keyPrefix) => store.search(embedding, params.agentId, {
|
|
134656
|
+
scope: "swarm",
|
|
134657
|
+
isLead: params.isLead,
|
|
134658
|
+
keyPrefix,
|
|
134659
|
+
limit: 1
|
|
134660
|
+
})));
|
|
134661
|
+
const best = results.flat().filter((candidate) => candidate.key).sort((a, b) => b.similarity - a.similarity)[0];
|
|
134662
|
+
if (!best || best.similarity < LEARNING_DUPLICATE_MIN_SIMILARITY)
|
|
134663
|
+
return null;
|
|
134664
|
+
return {
|
|
134665
|
+
status: "duplicate",
|
|
134666
|
+
memoryId: best.id,
|
|
134667
|
+
key: best.key,
|
|
134668
|
+
similarity: Math.round(best.similarity * 1000) / 1000
|
|
134669
|
+
};
|
|
134670
|
+
} catch (err) {
|
|
134671
|
+
console.warn("[task-learning] near-duplicate check failed; storing the learning:", scrubSecrets(err instanceof Error ? err.message : String(err)));
|
|
134672
|
+
return null;
|
|
134673
|
+
}
|
|
134674
|
+
}
|
|
134675
|
+
async function rateDuplicate(duplicate, taskId) {
|
|
134676
|
+
try {
|
|
134677
|
+
await applyRating([
|
|
134678
|
+
{
|
|
134679
|
+
memoryId: duplicate.memoryId,
|
|
134680
|
+
signal: 1,
|
|
134681
|
+
weight: 1,
|
|
134682
|
+
source: LEARNING_DUPLICATE_RATING_SOURCE,
|
|
134683
|
+
reasoning: `store-progress learning matched at cosine ${duplicate.similarity}`
|
|
134684
|
+
}
|
|
134685
|
+
], { taskId });
|
|
134686
|
+
} catch (err) {
|
|
134687
|
+
console.warn("[task-learning] duplicate rating failed:", scrubSecrets(err instanceof Error ? err.message : String(err)));
|
|
134688
|
+
}
|
|
134689
|
+
}
|
|
134690
|
+
async function insertLearning(params) {
|
|
134691
|
+
const { agentId, isLead, taskId, text, tags, workstream } = params;
|
|
134692
|
+
const replay = await findReplay(taskId, contentSha256(text));
|
|
134627
134693
|
if (replay)
|
|
134628
|
-
return
|
|
134694
|
+
return replay;
|
|
134629
134695
|
const title = text.split(/\r?\n/, 1)[0].trim().slice(0, 200);
|
|
134630
134696
|
const baseKey = `${LEARNINGS_ROOT}/${workstream}/${toKebab(title) || "learning"}`;
|
|
134631
134697
|
for (let attempt = 0;attempt < KEY_ATTEMPTS; attempt++) {
|
|
@@ -134691,14 +134757,18 @@ var storeProgressOutputSchema = swarmToolOutputSchema({
|
|
|
134691
134757
|
key: string2().optional(),
|
|
134692
134758
|
memoryId: string2().optional(),
|
|
134693
134759
|
workstream: string2().optional(),
|
|
134760
|
+
similarity: number2().optional(),
|
|
134694
134761
|
error: string2().optional()
|
|
134695
|
-
}).optional().describe("Present when the call carried a learning: stored, replayed (same text already stored for this task), or failed with error.")
|
|
134762
|
+
}).optional().describe("Present when the call carried a learning: stored, replayed (same text already stored for this task), duplicate (an existing swarm memory at key/memoryId says the same; similarity is the raw cosine), or failed with error.")
|
|
134696
134763
|
});
|
|
134697
134764
|
function learningSentence(result) {
|
|
134698
134765
|
if (result.status === "stored")
|
|
134699
134766
|
return `Learning stored at ${result.key}.`;
|
|
134700
134767
|
if (result.status === "replayed")
|
|
134701
134768
|
return `Learning already stored at ${result.key}; skipped.`;
|
|
134769
|
+
if (result.status === "duplicate") {
|
|
134770
|
+
return `Learning not stored: it matches ${result.key} (similarity ${result.similarity}).`;
|
|
134771
|
+
}
|
|
134702
134772
|
return `Learning not stored: ${result.error}.`;
|
|
134703
134773
|
}
|
|
134704
134774
|
var registerStoreProgressTool = (server) => {
|