@shawnstack/quickforge 1.7.7 → 1.7.9
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/bin/quickforge.mjs +10 -1
- package/dist/assets/AgentProfilesPage-BSM5w3bn.js +1 -0
- package/dist/assets/ChatPanelHost-cd80S4EX.js +48 -0
- package/dist/assets/CloudAccountSettingsPage-BJMrfgy9.js +1 -0
- package/dist/assets/{PluginsPage-CPE5tbbf.js → PluginsPage-mJkTmVVV.js} +1 -1
- package/dist/assets/ScheduledTasksPage-DJj_NLm9.js +2 -0
- package/dist/assets/{SettingsWorkspacePage-BE2T4d3P.js → SettingsWorkspacePage-7lQ0Wl63.js} +389 -389
- package/dist/assets/ShareLinksSettingsPage-DjFq_Lnb.js +1 -0
- package/dist/assets/SharedConversationPage-BbuNpcpP.js +1 -0
- package/dist/assets/TerminalDock-CczcCJJE.js +2 -0
- package/dist/assets/WorkspaceInspector-0i6x-diB.js +36 -0
- package/dist/assets/{icons-2D18YbSI.js → icons-DM_qJ7VJ.js} +1 -1
- package/dist/assets/{index-BiCTgUlY.css → index-D-J_8Smf.css} +1 -1
- package/dist/assets/index-DFASc15l.js +66 -0
- package/dist/assets/local-tools-Dn1Y9aPe.js +270 -0
- package/dist/assets/{model-display-label-C6-0eDxF.js → logger-8REuLPGK.js} +1 -1
- package/dist/assets/{mcp-servers-dialog-GY7sdfIr.js → mcp-servers-dialog-BG4b67ea.js} +2 -2
- package/dist/assets/{model-reference-o41fJ6jQ.js → model-display-label-CURwH0xM.js} +1 -1
- package/dist/assets/{monaco-DvXErxp2.js → monaco-bDr860xx.js} +1 -1
- package/dist/assets/{react-vendor-3UaA-C9W.js → react-vendor-BpWW_Nvp.js} +1 -1
- package/dist/assets/{skills-dialog-C1fJ1Jl7.js → skills-dialog-DIzZvQqW.js} +3 -3
- package/dist/index.html +8 -8
- package/package.json +1 -1
- package/server/acp/server.mjs +17 -1
- package/server/agent-manager.mjs +251 -31
- package/server/ai-http-logger.mjs +162 -19
- package/server/ai-provider-options.mjs +4 -1
- package/server/auto-archive.mjs +42 -29
- package/server/cloud/auto-approval.mjs +155 -0
- package/server/cloud/client.mjs +5 -0
- package/server/cloud/qf-agent-process.mjs +163 -3
- package/server/cloud/service-config.mjs +1 -1
- package/server/index.mjs +69 -13
- package/server/lan-access-backup.mjs +256 -0
- package/server/lan-access-cutover.mjs +306 -0
- package/server/lan-access-json-file.mjs +75 -0
- package/server/lan-access-service.mjs +155 -0
- package/server/lan-access-store.mjs +110 -9
- package/server/maintenance/downgrade-lan-access-v1.mjs +101 -0
- package/server/maintenance/downgrade-session-state-v1.mjs +130 -0
- package/server/maintenance/downgrade-share-v1.mjs +101 -0
- package/server/maintenance/export-lan-access-v1.mjs +80 -0
- package/server/maintenance/export-scheduled-runs-v1.mjs +45 -0
- package/server/maintenance/export-session-state-v1.mjs +67 -0
- package/server/maintenance/export-share-v1.mjs +77 -0
- package/server/public-api.mjs +21 -2
- package/server/routes/agent.mjs +37 -4
- package/server/routes/backup.mjs +221 -39
- package/server/routes/cloud.mjs +28 -1
- package/server/routes/scheduled-tasks.mjs +347 -134
- package/server/routes/shares.mjs +4 -2
- package/server/routes/storage.mjs +138 -8
- package/server/routes/workspace.mjs +265 -4
- package/server/scheduled-runs-backup.mjs +235 -0
- package/server/scheduled-runs-cutover.mjs +497 -0
- package/server/scheduled-task-runs-service.mjs +279 -0
- package/server/session-index-service.mjs +495 -0
- package/server/session-state-backup.mjs +277 -0
- package/server/session-state-cutover.mjs +370 -0
- package/server/session-state-service.mjs +709 -0
- package/server/share-backup.mjs +255 -0
- package/server/share-cutover.mjs +296 -0
- package/server/share-json-file.mjs +60 -0
- package/server/share-service.mjs +163 -0
- package/server/share-store.mjs +196 -19
- package/server/skills.mjs +0 -1
- package/server/sqlite/database.mjs +233 -0
- package/server/sqlite/lan-access-repository.mjs +652 -0
- package/server/sqlite/migrations.mjs +577 -0
- package/server/sqlite/scheduled-task-runs-repository.mjs +464 -0
- package/server/sqlite/session-index-repository.mjs +297 -0
- package/server/sqlite/session-state-repository.mjs +786 -0
- package/server/sqlite/share-repository.mjs +854 -0
- package/server/storage.mjs +317 -1
- package/dist/assets/AgentProfilesPage-BfA_sQ3A.js +0 -1
- package/dist/assets/ChatPanelHost-Dul1ahKj.js +0 -307
- package/dist/assets/CloudAccountSettingsPage-qZh0lTUN.js +0 -1
- package/dist/assets/ScheduledTasksPage-PTxL_PPg.js +0 -2
- package/dist/assets/ShareLinksSettingsPage-Bl8fP62X.js +0 -1
- package/dist/assets/SharedConversationPage-BK9XJnEe.js +0 -1
- package/dist/assets/TerminalDock-CL7HU9DI.js +0 -2
- package/dist/assets/WorkspaceInspector-MNBLIKMn.js +0 -36
- package/dist/assets/index-BTPzyq7d.js +0 -65
- package/dist/assets/mermaid-renderer-jEbqFaTe.js +0 -2
- /package/dist/assets/{plugin-api-Uu2xAB4d.js → plugin-api-BrdQeM4B.js} +0 -0
package/server/routes/cloud.mjs
CHANGED
|
@@ -2,6 +2,7 @@ import { getQfAgentStatus } from '../cloud/qf-agent-process.mjs'
|
|
|
2
2
|
import { isAuthenticatedAppClient } from '../access-policy.mjs'
|
|
3
3
|
import { CloudClient, CloudApiError } from '../cloud/client.mjs'
|
|
4
4
|
import { parseCloudBaseUrl } from '../cloud/config.mjs'
|
|
5
|
+
import { armAgentAutoApproval, clearAgentAutoApproval, retryAgentAutoApproval } from '../cloud/auto-approval.mjs'
|
|
5
6
|
import { createCloudCredentialStore } from '../cloud/credential-store.mjs'
|
|
6
7
|
import { getCloudRuntime, invalidateCloudRuntime } from '../cloud/runtime.mjs'
|
|
7
8
|
import {
|
|
@@ -22,6 +23,7 @@ const JSON_WRITE_ROUTES = new Set([
|
|
|
22
23
|
'POST /api/cloud/device/start',
|
|
23
24
|
'POST /api/cloud/device/poll',
|
|
24
25
|
'POST /api/cloud/device/cancel',
|
|
26
|
+
'POST /api/cloud/remote/authorize-retry',
|
|
25
27
|
])
|
|
26
28
|
|
|
27
29
|
function routeError(message, statusCode, code) {
|
|
@@ -81,6 +83,9 @@ export function createCloudRouteHandler({
|
|
|
81
83
|
invalidateRuntime = invalidateCloudRuntime,
|
|
82
84
|
cloudClientFactory = (config) => new CloudClient(config),
|
|
83
85
|
qfAgentStatus = getQfAgentStatus,
|
|
86
|
+
armAutoApproval = armAgentAutoApproval,
|
|
87
|
+
clearAutoApproval = clearAgentAutoApproval,
|
|
88
|
+
retryAutoApproval = retryAgentAutoApproval,
|
|
84
89
|
onServiceConfigChanged,
|
|
85
90
|
} = {}) {
|
|
86
91
|
async function runtimeOrError() {
|
|
@@ -108,6 +113,17 @@ export function createCloudRouteHandler({
|
|
|
108
113
|
return
|
|
109
114
|
}
|
|
110
115
|
|
|
116
|
+
// 自动批准失败后由 UI 发起的重试:仍使用服务端内存中保留的 user_code,
|
|
117
|
+
// 不要求用户打开授权页或输入码。
|
|
118
|
+
if (req.method === 'POST' && url.pathname === '/api/cloud/remote/authorize-retry') {
|
|
119
|
+
if (context.isLocalRequest !== true) {
|
|
120
|
+
throw routeError('Remote agent authorization can be retried only on this computer.', 403, 'cloud_local_only')
|
|
121
|
+
}
|
|
122
|
+
await readJsonBody(req, CLOUD_CONFIG_BODY_MAX_BYTES)
|
|
123
|
+
sendJson(res, 200, await retryAutoApproval())
|
|
124
|
+
return
|
|
125
|
+
}
|
|
126
|
+
|
|
111
127
|
if (req.method === 'GET' && url.pathname === '/api/cloud/config') {
|
|
112
128
|
sendJson(res, 200, publicCloudServiceConfig(await readServiceConfig({ strict: false })))
|
|
113
129
|
return
|
|
@@ -138,6 +154,10 @@ export function createCloudRouteHandler({
|
|
|
138
154
|
const currentConfig = await readServiceConfig({ strict: false })
|
|
139
155
|
const nextUrl = parseCloudBaseUrl(body?.cloudUrl === undefined ? currentConfig.cloudUrl : body.cloudUrl).href
|
|
140
156
|
const nextEnabled = body?.enabled === undefined ? currentConfig.enabled === true : body.enabled
|
|
157
|
+
// 仅在本机用户显式将 Cloud 服务从 disabled 切换为 enabled 时立即创建短时、一次性的
|
|
158
|
+
// agent 自动批准意图;其余场景由 qf-agent 在首次 authorizing 时依据本机 desktop 会话
|
|
159
|
+
// 自动 arm(认证远程客户端触发的变更以 'manual' 策略排除,见下方 notify)。
|
|
160
|
+
const enabledTransition = context.isLocalRequest === true && currentConfig.enabled !== true && nextEnabled === true
|
|
141
161
|
const urlChanged = !sameCloudUrl(currentConfig.cloudUrl, nextUrl)
|
|
142
162
|
if (body?.cloudUrl !== undefined) {
|
|
143
163
|
const credentialStore = credentialStoreFactory()
|
|
@@ -152,9 +172,16 @@ export function createCloudRouteHandler({
|
|
|
152
172
|
}
|
|
153
173
|
await saveServiceConfig({ cloudUrl: nextUrl, enabled: nextEnabled })
|
|
154
174
|
invalidateRuntime()
|
|
175
|
+
if (enabledTransition) armAutoApproval()
|
|
176
|
+
else if (!nextEnabled) clearAutoApproval()
|
|
155
177
|
const saved = await readServiceConfig({ strict: false })
|
|
156
178
|
const notify = context.onCloudServiceConfigChanged || onServiceConfigChanged
|
|
157
|
-
|
|
179
|
+
// 认证远程客户端触发的配置变更以 manual 策略通知生命周期:由此启动的 agent
|
|
180
|
+
// 生命周期(含其自动重启)不自动创建批准意图;本机请求保持默认(允许自动 arm)。
|
|
181
|
+
const remoteInitiated = context.isLocalRequest !== true
|
|
182
|
+
if (typeof notify === 'function') {
|
|
183
|
+
await notify(saved, remoteInitiated ? { urlChanged, autoApprovalPolicy: 'manual' } : { urlChanged })
|
|
184
|
+
}
|
|
158
185
|
sendJson(res, 200, publicCloudServiceConfig(saved))
|
|
159
186
|
return
|
|
160
187
|
}
|