@yeaft/webchat-agent 1.0.132 → 1.0.134

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": "@yeaft/webchat-agent",
3
- "version": "1.0.132",
3
+ "version": "1.0.134",
4
4
  "description": "Remote worker agent for Yeaft Web Code Agent — connects the native Yeaft engine, CLI providers, and workbench tools",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -7,7 +7,7 @@ import { WorkCenterService } from './service.js';
7
7
  import { WorkItemRunner } from './runner.js';
8
8
  import { projectWorkCenterEvent, projectWorkItemDetail } from './projection.js';
9
9
  import { previewWorkCenterPlan } from './planner.js';
10
- import { readWorkCenterSettings } from './settings.js';
10
+ import { readWorkCenterSettings, writeWorkCenterSettings } from './settings.js';
11
11
  import { join } from 'node:path';
12
12
 
13
13
  let service = null;
@@ -26,9 +26,45 @@ async function getRuntime() {
26
26
  return ensureSessionLoaded();
27
27
  }
28
28
 
29
- async function createDefaultService() {
29
+ function requireYeaftDir() {
30
30
  const yeaftDir = ctx.CONFIG?.yeaftDir;
31
31
  if (!yeaftDir) throw new Error('Work Center requires a configured Yeaft directory');
32
+ return yeaftDir;
33
+ }
34
+
35
+ async function getSettingsRuntime() {
36
+ const runtime = await getRuntime();
37
+ const yeaftDir = requireYeaftDir();
38
+ if (defaultRegistry.vpCount() === 0) {
39
+ for (const vp of scanVpLibrary({ dir: join(yeaftDir, 'virtual-persons') })) defaultRegistry.setVp(vp);
40
+ }
41
+ return {
42
+ vps: defaultRegistry.listVps().map(vp => ({
43
+ id: vp.id,
44
+ name: vp.name || vp.id,
45
+ nameZh: vp.nameZh || '',
46
+ role: vp.role || '',
47
+ roleZh: vp.roleZh || '',
48
+ area: vp.area || '',
49
+ traits: Array.isArray(vp.traits) ? vp.traits : [],
50
+ modelHint: vp.modelHint || null,
51
+ })),
52
+ models: Array.isArray(runtime.config.availableModels) ? runtime.config.availableModels : [],
53
+ primaryModel: runtime.config.primaryModel || runtime.config.model || null,
54
+ fastModel: runtime.config.fastModel || null,
55
+ };
56
+ }
57
+
58
+ async function readSettingsResponse() {
59
+ const yeaftDir = requireYeaftDir();
60
+ return {
61
+ settings: readWorkCenterSettings(yeaftDir),
62
+ runtime: await getSettingsRuntime(),
63
+ };
64
+ }
65
+
66
+ async function createDefaultService() {
67
+ const yeaftDir = requireYeaftDir();
32
68
  const runner = new WorkItemRunner({
33
69
  runtimeProvider: async () => {
34
70
  const runtime = await getRuntime();
@@ -46,27 +82,7 @@ async function createDefaultService() {
46
82
  const created = new WorkCenterService({
47
83
  yeaftDir,
48
84
  runner,
49
- runtimeInfoProvider: async () => {
50
- const runtime = await getRuntime();
51
- if (defaultRegistry.vpCount() === 0) {
52
- for (const vp of scanVpLibrary({ dir: join(yeaftDir, 'virtual-persons') })) defaultRegistry.setVp(vp);
53
- }
54
- return {
55
- vps: defaultRegistry.listVps().map(vp => ({
56
- id: vp.id,
57
- name: vp.name || vp.id,
58
- nameZh: vp.nameZh || '',
59
- role: vp.role || '',
60
- roleZh: vp.roleZh || '',
61
- area: vp.area || '',
62
- traits: Array.isArray(vp.traits) ? vp.traits : [],
63
- modelHint: vp.modelHint || null,
64
- })),
65
- models: Array.isArray(runtime.config.availableModels) ? runtime.config.availableModels : [],
66
- primaryModel: runtime.config.primaryModel || runtime.config.model || null,
67
- fastModel: runtime.config.fastModel || null,
68
- };
69
- },
85
+ runtimeInfoProvider: getSettingsRuntime,
70
86
  onEvent(event) {
71
87
  send({ type: 'work_center_event', event: projectWorkCenterEvent(event) });
72
88
  },
@@ -109,12 +125,15 @@ export async function handleWorkCenterRequest(msg) {
109
125
  const requestId = typeof msg.requestId === 'string' ? msg.requestId : null;
110
126
  const op = typeof msg.op === 'string' ? msg.op : '';
111
127
  try {
112
- const workCenter = await ensureWorkCenter();
113
128
  let data;
114
- if (op === 'preview') {
129
+ if (op === 'get_settings') {
130
+ data = await readSettingsResponse();
131
+ } else if (op === 'update_settings') {
132
+ const settings = writeWorkCenterSettings(requireYeaftDir(), msg.payload?.settings);
133
+ data = { settings, runtime: await getSettingsRuntime() };
134
+ } else if (op === 'preview') {
115
135
  const runtime = await getRuntime();
116
- const yeaftDir = ctx.CONFIG?.yeaftDir;
117
- if (!yeaftDir) throw new Error('Work Center requires a configured Yeaft directory');
136
+ const yeaftDir = requireYeaftDir();
118
137
  if (defaultRegistry.vpCount() === 0) {
119
138
  for (const vp of scanVpLibrary({ dir: join(yeaftDir, 'virtual-persons') })) defaultRegistry.setVp(vp);
120
139
  }
@@ -127,8 +146,9 @@ export async function handleWorkCenterRequest(msg) {
127
146
  });
128
147
  } else if (op === 'refresh_runtime') {
129
148
  await resetYeaftSession();
130
- data = await workCenter.handle('get_settings', {});
149
+ data = await readSettingsResponse();
131
150
  } else {
151
+ const workCenter = await ensureWorkCenter();
132
152
  data = await workCenter.handle(op, msg.payload || {});
133
153
  }
134
154
  if (BROWSER_DETAIL_OPS.has(op)) data = projectWorkItemDetail(data);