@lsamien/yaovi 0.1.0 → 0.1.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/build-info.json +24 -3
- package/dist/assets/{AboutDialog-BW25cB-W.js → AboutDialog-CBKv505Y.js} +2 -2
- package/dist/assets/AboutDialog-CBKv505Y.js.map +1 -0
- package/dist/assets/{BotAutomationsView-BoK2R918.js → BotAutomationsView-S3aHciek.js} +2 -2
- package/dist/assets/{BotAutomationsView-BoK2R918.js.map → BotAutomationsView-S3aHciek.js.map} +1 -1
- package/dist/assets/{BotControlSettingsPanel-BbhD2eC0.js → BotControlSettingsPanel-DJF4oA6g.js} +2 -2
- package/dist/assets/{BotControlSettingsPanel-BbhD2eC0.js.map → BotControlSettingsPanel-DJF4oA6g.js.map} +1 -1
- package/dist/assets/{BotPluginsDialog-DjwFw-lt.js → BotPluginsDialog-BVOQ3DTp.js} +2 -2
- package/dist/assets/{BotPluginsDialog-DjwFw-lt.js.map → BotPluginsDialog-BVOQ3DTp.js.map} +1 -1
- package/dist/assets/{BotSettingsPanel-DLmnL6pH.js → BotSettingsPanel-CEH3KSAO.js} +3 -3
- package/dist/assets/{BotSettingsPanel-DLmnL6pH.js.map → BotSettingsPanel-CEH3KSAO.js.map} +1 -1
- package/dist/assets/{ComputerPanel-CRIF1YEd.js → ComputerPanel-CC-xkAxr.js} +2 -2
- package/dist/assets/{ComputerPanel-CRIF1YEd.js.map → ComputerPanel-CC-xkAxr.js.map} +1 -1
- package/dist/assets/{ComputerViewerView-CizYWH2R.js → ComputerViewerView-CEQrOmy7.js} +2 -2
- package/dist/assets/{ComputerViewerView-CizYWH2R.js.map → ComputerViewerView-CEQrOmy7.js.map} +1 -1
- package/dist/assets/{ConversationsView-h94_iPtv.css → ConversationsView-B6JNGLt_.css} +1 -1
- package/dist/assets/{ConversationsView-1igFR9VY.js → ConversationsView-CzFWn-79.js} +8 -8
- package/dist/assets/ConversationsView-CzFWn-79.js.map +1 -0
- package/dist/assets/{DevicePairingDialog-orOS4xqu.js → DevicePairingDialog-ByYk05DC.js} +2 -2
- package/dist/assets/{DevicePairingDialog-orOS4xqu.js.map → DevicePairingDialog-ByYk05DC.js.map} +1 -1
- package/dist/assets/{LocalVmSettingsPanel-DzM--Lpg.js → LocalVmSettingsPanel-DBkqouAU.js} +2 -2
- package/dist/assets/{LocalVmSettingsPanel-DzM--Lpg.js.map → LocalVmSettingsPanel-DBkqouAU.js.map} +1 -1
- package/dist/assets/{ProviderLoginDialog-Bw5KVMfi.js → ProviderLoginDialog-DdPS62uM.js} +2 -2
- package/dist/assets/{ProviderLoginDialog-Bw5KVMfi.js.map → ProviderLoginDialog-DdPS62uM.js.map} +1 -1
- package/dist/assets/{RunnerSettingsPanel-B-fwuBEs.js → RunnerSettingsPanel-gzA2xzOg.js} +2 -2
- package/dist/assets/{RunnerSettingsPanel-B-fwuBEs.js.map → RunnerSettingsPanel-gzA2xzOg.js.map} +1 -1
- package/dist/assets/{StandaloneDialog-7GkhtRlT.js → StandaloneDialog-B9HCNEFb.js} +2 -2
- package/dist/assets/{StandaloneDialog-7GkhtRlT.js.map → StandaloneDialog-B9HCNEFb.js.map} +1 -1
- package/dist/assets/{UpdateCheckDialog-DYiM4xBv.js → UpdateCheckDialog-djkXTQgD.js} +2 -2
- package/dist/assets/{UpdateCheckDialog-DYiM4xBv.js.map → UpdateCheckDialog-djkXTQgD.js.map} +1 -1
- package/dist/assets/{UsageView-D1cjS1hy.js → UsageView-DFaWBB40.js} +2 -2
- package/dist/assets/{UsageView-D1cjS1hy.js.map → UsageView-DFaWBB40.js.map} +1 -1
- package/dist/assets/{WorkspaceKnowledgePanel-DcGdLRS1.js → WorkspaceKnowledgePanel-In2a_s_z.js} +2 -2
- package/dist/assets/{WorkspaceKnowledgePanel-DcGdLRS1.js.map → WorkspaceKnowledgePanel-In2a_s_z.js.map} +1 -1
- package/dist/assets/{WorkspaceRoutinesPanel-DLntimKs.js → WorkspaceRoutinesPanel-zOxFoqML.js} +2 -2
- package/dist/assets/{WorkspaceRoutinesPanel-DLntimKs.js.map → WorkspaceRoutinesPanel-zOxFoqML.js.map} +1 -1
- package/dist/assets/{WorkstreamsView-DMoeV8Eu.js → WorkstreamsView-HvlivC3b.js} +2 -2
- package/dist/assets/{WorkstreamsView-DMoeV8Eu.js.map → WorkstreamsView-HvlivC3b.js.map} +1 -1
- package/dist/assets/{index-D0pMYnOi.js → index-BPE9bBla.js} +3 -3
- package/dist/assets/{index-D0pMYnOi.js.map → index-BPE9bBla.js.map} +1 -1
- package/dist/assets/{pdf-BCisgslg.js → pdf-Q2a37aK5.js} +2 -2
- package/dist/assets/{pdf-BCisgslg.js.map → pdf-Q2a37aK5.js.map} +1 -1
- package/dist/index.html +1 -1
- package/dist-server/server/botControl.js +12 -0
- package/dist-server/server/harness/agentRuntime.js +22 -8
- package/dist-server/server/workspaceDialoguePolicy.js +3 -1
- package/dist-server/server/workspaceKnowledge.js +25 -16
- package/dist-server/server/workspaceMemoryContext.js +75 -19
- package/dist-server/server/workspacePrompt.js +9 -2
- package/dist-server/server/workspaceRuntime.js +35 -13
- package/package.json +2 -2
- package/release.json +3 -3
- package/runtime/hermes/hermes_state_messages.py +17 -0
- package/runtime/worker.py +34 -1
- package/dist/assets/AboutDialog-BW25cB-W.js.map +0 -1
- package/dist/assets/ConversationsView-1igFR9VY.js.map +0 -1
- package/dist-server/server/harness/context.js +0 -88
package/runtime/worker.py
CHANGED
|
@@ -22,6 +22,8 @@ steer_lock = threading.Lock()
|
|
|
22
22
|
turn_closed = False
|
|
23
23
|
steer_ready = False
|
|
24
24
|
startup_steers = []
|
|
25
|
+
# Prefix of the per-turn application state Yaovi renders (src/server/workspacePrompt.ts).
|
|
26
|
+
TURN_CONTEXT_SENTINEL = "[[YAOVI_TURN_CONTEXT_V1]]"
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
def emit(kind, **payload):
|
|
@@ -106,6 +108,26 @@ def read_replies():
|
|
|
106
108
|
interrupt()
|
|
107
109
|
|
|
108
110
|
|
|
111
|
+
def strip_turn_context_sidecars(history):
|
|
112
|
+
"""Earlier turns replay their user content only, never the per-turn state sent with them."""
|
|
113
|
+
for message in history:
|
|
114
|
+
sidecar = message.get("api_content")
|
|
115
|
+
if message.get("role") == "user" and isinstance(sidecar, str) and sidecar.startswith(TURN_CONTEXT_SENTINEL):
|
|
116
|
+
message.pop("api_content", None)
|
|
117
|
+
return history
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def compose_turn(text, turn_context):
|
|
121
|
+
"""``(model-facing message, persisted message)``; state reaches this turn's calls only."""
|
|
122
|
+
if not turn_context:
|
|
123
|
+
return text, None
|
|
124
|
+
if not str(turn_context).startswith(TURN_CONTEXT_SENTINEL):
|
|
125
|
+
raise ValueError("Turn context is missing its sentinel")
|
|
126
|
+
if isinstance(text, list):
|
|
127
|
+
return [{"type": "text", "text": turn_context}, *text], text
|
|
128
|
+
return turn_context + "\n\n" + str(text), text
|
|
129
|
+
|
|
130
|
+
|
|
109
131
|
def clarify(questions):
|
|
110
132
|
answers = {}
|
|
111
133
|
for question in questions:
|
|
@@ -224,6 +246,10 @@ def main():
|
|
|
224
246
|
pending_calls -= {m.get("tool_call_id") for m in history if m.get("role") == "tool"}
|
|
225
247
|
for call in pending_calls:
|
|
226
248
|
history.append({"role":"tool", "tool_call_id":call, "content":json.dumps({"error":"Interrupted before the result was confirmed. Inspect effects before retrying.","outcomeUnknown":True})})
|
|
249
|
+
# A turn that crashed before its cleanup must not leak its state into this one,
|
|
250
|
+
# including rows reloaded from the store after in-turn compaction.
|
|
251
|
+
db.clear_user_api_content_with_prefix(session, TURN_CONTEXT_SENTINEL)
|
|
252
|
+
strip_turn_context_sidecars(history)
|
|
227
253
|
# Existing sessions retain their admitted tools and context. Only the known
|
|
228
254
|
# application identity prefix changes, at a turn boundary before model use.
|
|
229
255
|
row = db.get_session(session)
|
|
@@ -287,7 +313,14 @@ def main():
|
|
|
287
313
|
if not result:
|
|
288
314
|
raise RuntimeError("Native skill review did not finish")
|
|
289
315
|
else:
|
|
290
|
-
|
|
316
|
+
message, persisted = compose_turn(request["text"], request.get("turnContext"))
|
|
317
|
+
try:
|
|
318
|
+
result = agent.run_conversation(message, conversation_history=history,
|
|
319
|
+
**({"persist_user_message": persisted} if persisted is not None else {}))
|
|
320
|
+
finally:
|
|
321
|
+
if persisted is not None:
|
|
322
|
+
for lineage in dict.fromkeys((session, agent.session_id)):
|
|
323
|
+
db.clear_user_api_content_with_prefix(lineage, TURN_CONTEXT_SENTINEL)
|
|
291
324
|
with steer_lock:
|
|
292
325
|
turn_closed = True
|
|
293
326
|
with agent._pending_redirect_lock:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AboutDialog-BW25cB-W.js","names":[],"sources":["../../package.json","../../src/client/components/app/AboutDialog.vue","../../src/client/components/app/AboutDialog.vue"],"sourcesContent":["{\n \"name\": \"@lsamien/yaovi\",\n \"version\": \"0.1.0\",\n \"license\": \"Apache-2.0\",\n \"description\": \"Yaovi:单用户、多 Bot、多设备服务器\",\n \"type\": \"module\",\n \"main\": \"desktop/main.mjs\",\n \"engines\": {\n \"node\": \">=24.0.0\"\n },\n \"bin\": {\n \"yaovi\": \"bin/yaovi-agent.mjs\",\n \"yaovi-agent\": \"bin/yaovi-agent.mjs\"\n },\n \"scripts\": {\n \"dev\": \"cross-env NODE_ENV=development tsx watch src/server/index.ts\",\n \"build\": \"npm run brand:verify && npm run release:verify && vue-tsc -b tsconfig.client.build.json && vite build && node scripts/clean-server.mjs && tsc -p tsconfig.server.json && node scripts/copy-worker.mjs && node scripts/write-build-info.mjs\",\n \"start\": \"node bin/yaovi-agent.mjs start\",\n \"typecheck\": \"vue-tsc -b && tsc --noEmit -p tsconfig.server.json\",\n \"test\": \"vitest run\",\n \"prepack\": \"npm run build\",\n \"test:watch\": \"vitest\",\n \"test:e2e\": \"npm run build && playwright test\",\n \"test:live\": \"cross-env YAOVI_LIVE_TEST=1 vitest run tests/live\",\n \"brand:verify\": \"node scripts/verify-brand.mjs\",\n \"release:verify\": \"node scripts/verify-release.mjs\",\n \"verify:lifecycle\": \"node scripts/verify-lifecycle.mjs\",\n \"test:e2e:workspace\": \"npm run build && playwright test -c playwright.workspace.config.ts\",\n \"test:e2e:desktop-hosts\": \"npm run build && playwright test -c playwright.desktop-hosts.config.ts\",\n \"test:e2e:team-tools\": \"npm run build && playwright test -c playwright.team-tools.config.ts\",\n \"desktop:build\": \"npm run build && node scripts/build-desktop.mjs\",\n \"desktop:build:client\": \"node scripts/write-build-info.mjs && node scripts/build-desktop-client.mjs\",\n \"desktop:dev:client\": \"npm run desktop:build:client && cross-env YAOVI_DESKTOP_CLIENT_ONLY=1 electron .\",\n \"desktop:pack:client\": \"npm run desktop:build:client && electron-builder --config electron-builder.client.yml --mac --arm64 --publish never\",\n \"desktop:dev\": \"npm run desktop:build && cross-env YAOVI_DESKTOP_CLIENT_ONLY=0 electron .\",\n \"desktop:pack\": \"npm run desktop:build && electron-builder --mac --arm64 --publish never\",\n \"desktop:release\": \"npm run desktop:build && node scripts/desktop-release.mjs\",\n \"desktop:test\": \"cross-env YAOVI_DESKTOP_CLIENT_ONLY=0 node --test desktop/*.test.mjs\",\n \"runner\": \"node dist-server/runner/index.js\",\n \"runner:dev\": \"tsx src/runner/index.ts\",\n \"runner:build\": \"node scripts/build-runner.mjs\",\n \"desktop:build:win\": \"npm run build && node scripts/build-windows-desktop.mjs\",\n \"desktop:pack:win\": \"npm run desktop:build:win && node scripts/windows-desktop-release.mjs\",\n \"desktop:test:win\": \"node scripts/test-windows-desktop.mjs\",\n \"agent:setup\": \"node scripts/agent-setup.mjs\",\n \"agent:test\": \".venv/bin/python tests/runtime/test_kernel.py && .venv/bin/python tests/runtime/test_compression.py && .venv/bin/python tests/runtime/test_backup.py && .venv/bin/python tests/runtime/test_hermes_web.py && .venv/bin/python tests/runtime/test_native_openviking.py && .venv/bin/python tests/runtime/test_native_openviking_config.py && .venv/bin/python tests/runtime/test_vault_env.py && vitest run tests/server/embeddedAgent.test.ts tests/server/singleUserDevices.test.ts tests/server/harnessWeb.test.ts\",\n \"agent:pack\": \"npm run build && node scripts/build-agent-host.mjs\",\n \"postinstall\": \"node scripts/agent-setup.mjs --postinstall\"\n },\n \"dependencies\": {\n \"@koa/bodyparser\": \"^5.0.0\",\n \"@koa/router\": \"^15.4.0\",\n \"@openviking/sdk\": \"0.1.0\",\n \"@trycua/cua-driver\": \"0.28.2\",\n \"@types/busboy\": \"^1.5.4\",\n \"@types/koa\": \"^2.15.0\",\n \"@types/koa-send\": \"^4.1.6\",\n \"@types/koa-static\": \"^4.0.4\",\n \"@types/markdown-it\": \"^14.1.2\",\n \"@types/mime-types\": \"^2.1.4\",\n \"@types/node\": \"^24.10.0\",\n \"@types/qrcode\": \"^1.5.6\",\n \"@types/ws\": \"^8.18.1\",\n \"@vicons/ionicons5\": \"^0.13.0\",\n \"@vicons/tabler\": \"^0.13.0\",\n \"@vitejs/plugin-vue\": \"^6.0.5\",\n \"@vue/tsconfig\": \"^0.9.1\",\n \"busboy\": \"^1.6.0\",\n \"cookie\": \"^1.0.2\",\n \"docx-preview\": \"^0.3.7\",\n \"dompurify\": \"^3.2.6\",\n \"highlight.js\": \"^11.11.1\",\n \"koa\": \"^2.15.3\",\n \"koa-send\": \"^5.0.1\",\n \"koa-static\": \"^5.0.0\",\n \"libsodium-wrappers-sumo\": \"0.8.4\",\n \"markdown-it\": \"^14.1.0\",\n \"mime-types\": \"^3.0.1\",\n \"naive-ui\": \"^2.44.1\",\n \"pdfjs-dist\": \"6.2.108\",\n \"pinia\": \"^3.0.4\",\n \"pinyin-pro\": \"3.29.5\",\n \"playwright\": \"1.62.1\",\n \"qrcode\": \"^1.5.4\",\n \"read-excel-file\": \"^7.0.3\",\n \"sass\": \"^1.99.0\",\n \"ssh2\": \"1.17.0\",\n \"typescript\": \"~6.0.2\",\n \"undici\": \"7.29.1\",\n \"vite\": \"^8.0.4\",\n \"vue\": \"^3.5.32\",\n \"vue-router\": \"^4.6.4\",\n \"vue-tsc\": \"^3.2.8\",\n \"ws\": \"^8.20.0\",\n \"zod\": \"^4.1.12\"\n },\n \"devDependencies\": {\n \"@playwright/test\": \"^1.60.0\",\n \"@types/jsdom\": \"^21.1.7\",\n \"@types/ssh2\": \"1.15.5\",\n \"@types/supertest\": \"^6.0.3\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vue/test-utils\": \"^2.4.6\",\n \"cross-env\": \"^10.1.0\",\n \"electron\": \"43.4.0\",\n \"electron-builder\": \"26.15.3\",\n \"electron-updater\": \"6.8.9\",\n \"esbuild\": \"0.28.2\",\n \"js-yaml\": \"4.3.2\",\n \"jsdom\": \"^27.0.1\",\n \"supertest\": \"^7.1.4\",\n \"tsx\": \"^4.21.0\",\n \"vitest\": \"^3.2.4\"\n },\n \"files\": [\n \"bin\",\n \"dist\",\n \"dist-server\",\n \"licenses\",\n \"LICENSE\",\n \"NOTICE\",\n \"THIRD_PARTY_NOTICES.md\",\n \"release.json\",\n \"build-info.json\",\n \"runtime\",\n \"scripts/agent-backup.py\",\n \"scripts/agent-setup.mjs\",\n \"!runtime/**/__pycache__/**\",\n \"!runtime/**/*.pyc\",\n \"!runtime/**/*.pyo\",\n \"!runtime/**/.env\",\n \"!runtime/**/auth.json\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","<script setup lang=\"ts\">\nimport { version } from '../../../../package.json'\nimport BrandMark from '@/components/common/BrandMark.vue'\nimport StandaloneDialog from '@/components/common/StandaloneDialog.vue'\nconst emit = defineEmits<{ close: [] }>()\n</script>\n<template>\n <StandaloneDialog title=\"关于Yaovi\" compact @close=\"emit('close')\"><section class=\"about-content\">\n <BrandMark :size=\"56\" :label=\"false\" compact bare /><h3>Yaovi</h3><p class=\"about-version\">版本 {{ version }}</p>\n <p>通过 OpenAI 模型与 Bot 对话、协作完成任务。<br />基于 Apache-2.0 许可证开放源代码。</p>\n\n </section></StandaloneDialog>\n</template>\n<style scoped>\n.about-content{display:grid;justify-items:center;gap:12px;text-align:center}.about-content h3{font-size:21px;margin:0}.about-content p{margin:0;color:var(--text-secondary);font-size:13px;line-height:1.8}.about-content .about-version{font-size:12px}.about-content nav{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:8px}.about-content a{padding:10px 8px;color:var(--accent);font-size:13px;text-decoration:none}.about-content a:hover{text-decoration:underline}.about-content a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}\n</style>\n","<script setup lang=\"ts\">\nimport { version } from '../../../../package.json'\nimport BrandMark from '@/components/common/BrandMark.vue'\nimport StandaloneDialog from '@/components/common/StandaloneDialog.vue'\nconst emit = defineEmits<{ close: [] }>()\n</script>\n<template>\n <StandaloneDialog title=\"关于Yaovi\" compact @close=\"emit('close')\"><section class=\"about-content\">\n <BrandMark :size=\"56\" :label=\"false\" compact bare /><h3>Yaovi</h3><p class=\"about-version\">版本 {{ version }}</p>\n <p>通过 OpenAI 模型与 Bot 对话、协作完成任务。<br />基于 Apache-2.0 许可证开放源代码。</p>\n\n </section></StandaloneDialog>\n</template>\n<style scoped>\n.about-content{display:grid;justify-items:center;gap:12px;text-align:center}.about-content h3{font-size:21px;margin:0}.about-content p{margin:0;color:var(--text-secondary);font-size:13px;line-height:1.8}.about-content .about-version{font-size:12px}.about-content nav{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:8px}.about-content a{padding:10px 8px;color:var(--accent);font-size:13px;text-decoration:none}.about-content a:hover{text-decoration:underline}.about-content a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}\n</style>\n"],"mappings":"wVCIA,IAAM,EAAO,gBAGX,EAAA,EAAA,EAI6B,EAAA,CAJX,MAAM,UAAU,QAAA,GAAS,QAAK,AAAA,EAAA,KAAA,GAAE,EAAI,OAAA,IAAW,QAAA,MAIvD,CAJuD,EAIvD,UAJuD,EAIvD,CAHR,EAAoD,EAAA,CAAxC,KAAM,GAAK,MAAO,GAAO,QAAA,GAAQ,KAAA,KAAO,AAAA,EAAA,KAAA,EAAc,KAAA,KAAV,QAAK,EAAA,EAAK,EAA6C,IAA7C,EAAyB,MAAG,EAAG,EAAA,CAAA,CAAO,EAAA,CAAA,EACxG,AAAA,EAAA,KAAA,EAAgE,IAAA,KAAA,CAA7D,EAAA,8BAA4B,EAAA,EAAM,IAAA,EAAA,EAAA,yBAAuB"}
|