@xopcai/xopc 0.0.331 → 0.0.332
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/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-B0BtF24E.js → agent-avatar-dicebear-C2wg3xC_.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-DgP5DEJF.js → agent-defaults-settings-panel-Se1Z72VG.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-DbvLXQO2.js → agent-plugin-dialog-BeNnu1Ts.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-Bh4XNLyk.js → agents-udIitwV8.js} +3 -3
- package/dist/gateway/static/root/assets/{app-management-settings-panel-fwzTRJfP.js → app-management-settings-panel-etFSkfzl.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-v_GGe8UZ.js → appearance-settings-DKmU2VAP.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-C9ZMEuuA.js → apps-page-DVNySL58.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-B6EgADeH.js → archive-plugin-D0z_Fr2G.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-B4H_IFeX.js → attachment-load-DNCDbeOX.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-UlVCvg4r.js → automations-page-B7_C-p66.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-BMgJvdcv.js +7 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BxTSx30f.js → binary-plugins-BYn2hScX.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CVzdrpjl.js → block-editor-ChWW8Z9L.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-CBVD8k6O.js → browser-automations-page-BV00BXRb.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-CC43CC43.js → browser-settings-page-xwTmuZjS.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-CHA-sTAZ.js +1 -0
- package/dist/gateway/static/root/assets/{capabilities-page-BAT7Vvb8.js → capabilities-page-v0WkhV5o.js} +2 -2
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-DPETQOfF.js → capabilities-settings-panel-DefBGjhV.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-header-actions-EETjXmkG.js → capability-header-actions-vmx35sbu.js} +1 -1
- package/dist/gateway/static/root/assets/{channels-CwA619os.js → channels-Eo4ONF5X.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-terminal-dock-DCqm9j9W.js → chat-terminal-dock-C41mXCAi.js} +1 -1
- package/dist/gateway/static/root/assets/{computer-settings-page-CxFWdovV.js → computer-settings-page-BJkqok2G.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-wxsEhmlU.js → connector-service-page-BKCZMmwm.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-page-l7goF6QS.js → connectors-page-DZYgogQw.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-h_OS6uBR.js → date-picker-CrOV4Ynd.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-DNgSSH3z.js → dependency-picker-CqADAHZp.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-CflvPnB-.js → desktop-pet-Bab-iWED.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CXy0X5Js.js → desktop-pet-settings-BqgzLOdi.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-BDMiJcsK.js → device-pairing-wizard-DFg7FDPf.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-BqkOh13m.js → directory-picker-path-field-hqJ9sFCR.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-VT4s-9pK.js → extension-debug-page-DX3PFhRE.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CBSeGhGA.js → extension-page-DkREdHLs.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DRB6uOo8.js → extension-settings-page-wF-HNTM-.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-lF-FpnZy.js → gateway-settings-Du-Dos9O.js} +1 -1
- package/dist/gateway/static/root/assets/{home-page-DSaXXoLm.js → home-page-D7YoMHq4.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-DGkOijwE.js → imports-page-B80Cv043.js} +1 -1
- package/dist/gateway/static/root/assets/{index-D99vN3es.js → index-DalslRUx.js} +8 -8
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-iU6c2zg1.js → keyboard-shortcuts-settings-BgoFaTwv.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-rH33N8I9.js → local-app-workbench-page-BKL5UZAj.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-C0BWC8D2.js → local-apps-page-HO6OQlQT.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-Dpoi-r-_.js → logs-page-CjzR9Rpj.js} +1 -1
- package/dist/gateway/static/root/assets/{management-settings-RFDLaquR.js → management-settings-Dk_gTJb9.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-C8E_F2F_.js → media-plugins-Dlj6TD3M.js} +1 -1
- package/dist/gateway/static/root/assets/{note-detail-panel-DI7CIjmM.js → note-detail-panel-BebJPjjk.js} +3 -3
- package/dist/gateway/static/root/assets/{notes-page-BkqnU-Jh.js → notes-page-CmS_hvz8.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-qqWG_gs_.js → page-context-capture-button-BArPtqp5.js} +1 -1
- package/dist/gateway/static/root/assets/{page-tabs-b3lheKy4.js → page-tabs-vqI30Yrg.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-0Q4rTfGX.js → preview-open-alternatives-B-mwPBJW.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-jnJZCrKQ.js → product-open-page-D--sj_uN.js} +1 -1
- package/dist/gateway/static/root/assets/{project-detail-page-BvvcTH2F.js → project-detail-page-BFUdtWXF.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-r96k_2wB.js → projects-page-DBsBwAQ6.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-B1d8pB_y.js → remote-access-hub-BurdDY0m.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-Do_iF13W.js → runtime-tools-settings-panel-CAnb0PNY.js} +1 -1
- package/dist/gateway/static/root/assets/{scenes-page-DK316w9a.js → scenes-page-Cj8xtr5t.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-Cfft26Je.js → schema-form-BKj6wIMb.js} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-EIk8iJTK.js → sessions-page-BCsjgkCs.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BLL7csOJ.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-iI0MTyuU.js → settings-form-section-78ycUHfv.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-C2Ka9oJm.js → settings-page-BOdxIVzo.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-nnmS_p5h.js → setup-status-panel-CbKHBjrU.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-D0Knvtlp.js → share-preview-page-DyLfktib.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-BcaxGQLC.js → shares-settings-BzvSNouj.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-api-BuZKcy9b.js → skill-api-CiBGQ0Jg.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-Cb_CUL-U.js → skill-reload-api-BHnru0F5.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-DcxWxIrR.js → skills-page-C35VKjhb.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-CMG0ZAsd.js → system-settings-panel-CyJUeREH.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-Cvr1qUTW.js → task-detail-page-Bd1_Fguk.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-DGYA6GyO.js → tunnel-api-Day9zhKi.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-CDemMoSX.js → use-autosave-Bj9hC6ML.js} +1 -1
- package/dist/gateway/static/root/assets/{user-model-page-VXfz3rE7.js → user-model-page-DuYzuR1T.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-CXArY4t5.js → voice-api-key-field-fWRD6B8r.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-Dk5KsKOm.js → work-discovery-overlay-CnxdvIk8.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DNpdaI-2.js → workflow-run-setup-panel-DlWNN1VA.js} +1 -1
- package/dist/gateway/static/root/assets/{workflows-page-DDNDLdId.js → workflows-page-B45YDiEw.js} +1 -1
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/automations.js +15 -0
- package/dist/src/agent/agent-manager.js +4 -4
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/bootstrap/filter-bootstrap-files.js +1 -1
- package/dist/src/agent/external-tools/endpoint-provider.js +2 -2
- package/dist/src/agent/image/tool-model-config.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +0 -21
- package/dist/src/agent/service.js +2 -2
- package/dist/src/agent/tools/xopc-use-tool.js +1 -1
- package/dist/src/agent-catalog/capabilities.js +2 -2
- package/dist/src/auth/credentials.js +1 -1
- package/dist/src/auth/oauth-provider-lock.js +1 -1
- package/dist/src/auth/sync-provider-auth.js +1 -1
- package/dist/src/automations/capabilities/drafts.js +1 -1
- package/dist/src/automations/capabilities/write.d.ts +17 -0
- package/dist/src/automations/capabilities/write.js +26 -2
- package/dist/src/automations/domain/defaults.js +1 -1
- package/dist/src/automations/domain/index.js +2 -2
- package/dist/src/automations/domain/types.d.ts +22 -0
- package/dist/src/automations/domain/validation.d.ts +68 -0
- package/dist/src/automations/domain/validation.js +17 -1
- package/dist/src/automations/draft/automation-draft-validator.d.ts +9 -0
- package/dist/src/automations/draft/automation-draft-validator.js +1 -0
- package/dist/src/automations/index.js +2 -2
- package/dist/src/automations/service/action-executor.js +16 -0
- package/dist/src/automations/storage/automation-repository.js +4 -3
- package/dist/src/bootstrap/application-state.js +1 -1
- package/dist/src/capabilities/runtime/dispatcher.js +1 -1
- package/dist/src/capabilities/runtime/product.js +1 -1
- package/dist/src/chat-commands/agent-edit.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/agents.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/models.js +1 -1
- package/dist/src/cli/commands/onboard/model.js +2 -2
- package/dist/src/cli/utils/init-workspace-core.js +1 -1
- package/dist/src/config/index.js +4 -4
- package/dist/src/config/loader.js +2 -2
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/schema.d.ts +4 -0
- package/dist/src/config/schema.js +5 -1
- package/dist/src/extensions/agent-plugins/validation.js +1 -1
- package/dist/src/gateway/agents-admin.js +2 -2
- package/dist/src/gateway/file-path-classifier.js +1 -1
- package/dist/src/gateway/home-intelligence-automation-reconciler.d.ts +3 -0
- package/dist/src/gateway/home-intelligence-automation-reconciler.js +49 -0
- package/dist/src/gateway/hono/lib/config-payload.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +18 -4
- package/dist/src/gateway/hono/routes/home.js +0 -1
- package/dist/src/gateway/hono/routes/notes.js +2 -2
- package/dist/src/gateway/hono/routes/projects.js +2 -2
- package/dist/src/gateway/hono/routes/session-input-handler.js +1 -1
- package/dist/src/gateway/hono/routes/tasks.js +1 -1
- package/dist/src/gateway/hono/routes/update.js +6 -1
- package/dist/src/gateway/image-generation-setup.js +2 -2
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/memory-maintenance-automation-reconciler.js +17 -14
- package/dist/src/gateway/service.d.ts +1 -0
- package/dist/src/gateway/service.js +27 -5
- package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
- package/dist/src/home-intelligence/host.d.ts +1 -1
- package/dist/src/home-intelligence/host.js +1 -9
- package/dist/src/home-intelligence/notification.js +1 -1
- package/dist/src/home-intelligence/repository.d.ts +1 -1
- package/dist/src/infra/update-check.d.ts +8 -4
- package/dist/src/infra/update-check.js +43 -41
- package/dist/src/infra/update-startup.d.ts +7 -1
- package/dist/src/infra/update-startup.js +15 -6
- package/dist/src/local-apps/service.js +1 -1
- package/dist/src/memory-maintenance/index.js +2 -2
- package/dist/src/memory-maintenance/schedule.d.ts +0 -3
- package/dist/src/memory-maintenance/schedule.js +1 -8
- package/dist/src/providers/model-catalog-persistence.js +1 -1
- package/dist/src/storage/sqlite/migrations/208_automation_management.sql +2 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/tasks/capabilities/read.js +2 -2
- package/dist/src/tasks/home-query-service.js +1 -0
- package/dist/src/tui/backends/embedded-backend.js +2 -2
- package/dist/src/tui/tui-commands.js +1 -1
- package/dist/src/tui/tui-startup-resources.js +1 -1
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/user-context/config.d.ts +9 -0
- package/dist/src/user-context/config.js +13 -4
- package/dist/src/voice/realtime/persona-context.js +1 -1
- package/package.json +5 -5
- package/dist/gateway/static/root/assets/automations-workspace-C7VS-yb7.js +0 -7
- package/dist/gateway/static/root/assets/capabilities-sAZT4brT.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-DcOsdz78.js +0 -1
|
@@ -3,8 +3,8 @@ import { init_paths, resolveOAuthPath } from "../config/paths.js";
|
|
|
3
3
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
4
4
|
import { dirname } from "node:path";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
|
-
import { mkdir, open, readFile, rm, stat } from "node:fs/promises";
|
|
7
6
|
import { setTimeout } from "node:timers/promises";
|
|
7
|
+
import { mkdir, open, readFile, rm, stat } from "node:fs/promises";
|
|
8
8
|
//#region src/auth/oauth-provider-lock.ts
|
|
9
9
|
function lockPath(providerId) {
|
|
10
10
|
return `${resolveOAuthPath(providerId.toLowerCase())}.lock`;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
-
import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveOAuthPath } from "../config/paths.js";
|
|
3
2
|
import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
|
|
3
|
+
import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveOAuthPath } from "../config/paths.js";
|
|
4
4
|
import { init_registry, isOAuthOnlyProvider } from "./oauth/registry.js";
|
|
5
5
|
import { existsSync, readFileSync } from "node:fs";
|
|
6
6
|
//#region src/auth/sync-provider-auth.ts
|
|
@@ -3,10 +3,10 @@ import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
|
3
3
|
import { init_trust_policy, resolveAutomationSafetyForTrust } from "../../user-context/trust-policy.js";
|
|
4
4
|
import { getUserTrustPolicy } from "../../storage/sqlite/user-trust-repository.js";
|
|
5
5
|
import { init_sqlite } from "../../storage/sqlite/index.js";
|
|
6
|
+
import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
6
7
|
import { CapabilityError } from "../../capabilities/runtime/errors.js";
|
|
7
8
|
import { ExternalEffectNotAppliedError } from "../../capabilities/runtime/external-operations.js";
|
|
8
9
|
import { defineExternalCapability, defineReadCapability } from "../../capabilities/runtime/dispatcher.js";
|
|
9
|
-
import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
10
10
|
import { AutomationCreateCapabilityInputSchema } from "./write.js";
|
|
11
11
|
import { simulateAutomation } from "../draft/automation-draft-validator.js";
|
|
12
12
|
import { AutomationDraftService } from "../draft/automation-draft-service.js";
|
|
@@ -121,6 +121,14 @@ export declare const AutomationCreateCapabilityInputSchema: z.ZodObject<{
|
|
|
121
121
|
outputDestinations: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
122
122
|
}, z.core.$strip>;
|
|
123
123
|
}, z.core.$strip>], "type">;
|
|
124
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
125
|
+
kind: z.ZodLiteral<"system">;
|
|
126
|
+
capability: z.ZodEnum<{
|
|
127
|
+
"home.advisor.refresh": "home.advisor.refresh";
|
|
128
|
+
"memory.temporal_sweep": "memory.temporal_sweep";
|
|
129
|
+
"memory.daily_reconciliation": "memory.daily_reconciliation";
|
|
130
|
+
"memory.weekly_knowledge": "memory.weekly_knowledge";
|
|
131
|
+
}>;
|
|
124
132
|
}, z.core.$strict>], "kind">;
|
|
125
133
|
id: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
126
134
|
trigger: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
@@ -293,6 +301,14 @@ export declare const AutomationUpdatePatchSchema: z.ZodObject<{
|
|
|
293
301
|
outputDestinations: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
294
302
|
}, z.core.$strip>;
|
|
295
303
|
}, z.core.$strip>], "type">;
|
|
304
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
305
|
+
kind: z.ZodLiteral<"system">;
|
|
306
|
+
capability: z.ZodEnum<{
|
|
307
|
+
"home.advisor.refresh": "home.advisor.refresh";
|
|
308
|
+
"memory.temporal_sweep": "memory.temporal_sweep";
|
|
309
|
+
"memory.daily_reconciliation": "memory.daily_reconciliation";
|
|
310
|
+
"memory.weekly_knowledge": "memory.weekly_knowledge";
|
|
311
|
+
}>;
|
|
296
312
|
}, z.core.$strict>], "kind">>;
|
|
297
313
|
trigger: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
298
314
|
kind: z.ZodLiteral<"manual">;
|
|
@@ -345,5 +361,6 @@ export declare const AutomationUpdatePatchSchema: z.ZodObject<{
|
|
|
345
361
|
none: "none";
|
|
346
362
|
}>>;
|
|
347
363
|
state: z.ZodOptional<z.ZodNever>;
|
|
364
|
+
management: z.ZodOptional<z.ZodNever>;
|
|
348
365
|
}, z.core.$strict>;
|
|
349
366
|
export declare function registerAutomationWriteCapabilities(dispatcher: CapabilityDispatcher, service: AutomationService, projects?: ProjectService): void;
|
|
@@ -10,8 +10,28 @@ import { AutomationAlreadyExistsError, AutomationAlreadyRunningError } from "../
|
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
//#region src/automations/capabilities/write.ts
|
|
12
12
|
init_src();
|
|
13
|
-
const AutomationCreateCapabilityInputSchema = CreateAutomationSchema.omit({
|
|
14
|
-
|
|
13
|
+
const AutomationCreateCapabilityInputSchema = CreateAutomationSchema.omit({
|
|
14
|
+
state: true,
|
|
15
|
+
management: true
|
|
16
|
+
}).refine((input) => input.action.kind !== "system", { message: "System actions can only be created by the runtime" });
|
|
17
|
+
const AutomationUpdatePatchSchema = UpdateAutomationSchema.safeExtend({
|
|
18
|
+
state: z.never().optional(),
|
|
19
|
+
management: z.never().optional()
|
|
20
|
+
});
|
|
21
|
+
function assertManagedOperation(automation, operation, patch) {
|
|
22
|
+
const management = automation.management;
|
|
23
|
+
if (!management) return;
|
|
24
|
+
if (operation === "run") {
|
|
25
|
+
if (!management.runnable) throw new CapabilityError("FORBIDDEN", "This managed automation cannot be run manually");
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (operation === "delete") {
|
|
29
|
+
if (!management.deletable) throw new CapabilityError("FORBIDDEN", "This managed automation cannot be deleted");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const forbidden = Object.entries(patch ?? {}).filter(([key, value]) => JSON.stringify(automation[key]) !== JSON.stringify(value)).map(([key]) => key).filter((field) => !management.editable.includes(field));
|
|
33
|
+
if (forbidden.length > 0) throw new CapabilityError("FORBIDDEN", `Managed fields cannot be changed: ${forbidden.join(", ")}`);
|
|
34
|
+
}
|
|
15
35
|
function registerAutomationWriteCapabilities(dispatcher, service, projects) {
|
|
16
36
|
const policy = {
|
|
17
37
|
majorVersion: 1,
|
|
@@ -75,6 +95,7 @@ function registerAutomationWriteCapabilities(dispatcher, service, projects) {
|
|
|
75
95
|
const automationId = command === "run" ? id : getAutomationRun(id)?.automationId;
|
|
76
96
|
const automation = automationId ? getAutomation(automationId) : null;
|
|
77
97
|
if (!automation) throw new CapabilityError("NOT_FOUND", "Automation or source run not found");
|
|
98
|
+
assertManagedOperation(automation, "run");
|
|
78
99
|
try {
|
|
79
100
|
const run = command === "run" ? service.queueRunAtomically(id) : service.queueRerunAtomically(id);
|
|
80
101
|
return {
|
|
@@ -98,6 +119,7 @@ function registerAutomationWriteCapabilities(dispatcher, service, projects) {
|
|
|
98
119
|
execute({ id, expectedRevision }) {
|
|
99
120
|
const current = getAutomation(id);
|
|
100
121
|
if (current && current.updatedAtMs !== expectedRevision) throw new CapabilityError("REVISION_CONFLICT", "Automation changed");
|
|
122
|
+
if (current) assertManagedOperation(current, "delete");
|
|
101
123
|
const result = service.removeAtomically(id);
|
|
102
124
|
return {
|
|
103
125
|
ok: true,
|
|
@@ -138,6 +160,7 @@ function registerAutomationWriteCapabilities(dispatcher, service, projects) {
|
|
|
138
160
|
const current = getAutomation(id);
|
|
139
161
|
if (!current) throw new CapabilityError("NOT_FOUND", "Automation not found");
|
|
140
162
|
if (current.updatedAtMs !== expectedRevision) throw new CapabilityError("REVISION_CONFLICT", "Automation changed");
|
|
163
|
+
assertManagedOperation(current, "update", patch);
|
|
141
164
|
requireProject(patch.projectId);
|
|
142
165
|
return {
|
|
143
166
|
ok: true,
|
|
@@ -158,6 +181,7 @@ function registerAutomationWriteCapabilities(dispatcher, service, projects) {
|
|
|
158
181
|
const current = getAutomation(id);
|
|
159
182
|
if (!current) throw new CapabilityError("NOT_FOUND", "Automation not found");
|
|
160
183
|
if (current.updatedAtMs !== expectedRevision) throw new CapabilityError("REVISION_CONFLICT", "Automation changed");
|
|
184
|
+
assertManagedOperation(current, "update", { enabled });
|
|
161
185
|
const automation = service.updateAtomically(id, { enabled });
|
|
162
186
|
if (!automation) throw new CapabilityError("NOT_FOUND", "Automation not found");
|
|
163
187
|
return {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const DEFAULT_AUTOMATION_TIMEOUT_SECONDS = 1800;
|
|
3
3
|
const DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS = 600;
|
|
4
4
|
function defaultAutomationTimeoutSeconds(action) {
|
|
5
|
-
return action.kind === "browser_automation" ? 600 : DEFAULT_AUTOMATION_TIMEOUT_SECONDS;
|
|
5
|
+
return action.kind === "system" ? 60 : action.kind === "browser_automation" ? 600 : DEFAULT_AUTOMATION_TIMEOUT_SECONDS;
|
|
6
6
|
}
|
|
7
7
|
function resolveAutomationTimeoutSeconds(action, reliability) {
|
|
8
8
|
return reliability?.executionTimeoutSeconds ?? ("timeoutSeconds" in action ? action.timeoutSeconds : void 0) ?? reliability?.timeoutSeconds ?? defaultAutomationTimeoutSeconds(action);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AutomationActionSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema } from "./validation.js";
|
|
1
|
+
import { AutomationActionSchema, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema } from "./validation.js";
|
|
2
2
|
import { computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, timerDelayUntil } from "./schedule.js";
|
|
3
3
|
import { DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, defaultAutomationTimeoutSeconds, resolveAutomationTimeoutSeconds } from "./defaults.js";
|
|
4
|
-
export { AutomationActionSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, UpdateAutomationSchema, computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, defaultAutomationTimeoutSeconds, resolveAutomationTimeoutSeconds, timerDelayUntil };
|
|
4
|
+
export { AutomationActionSchema, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, UpdateAutomationSchema, computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, defaultAutomationTimeoutSeconds, resolveAutomationTimeoutSeconds, timerDelayUntil };
|
|
@@ -54,7 +54,17 @@ export type AutomationAction = {
|
|
|
54
54
|
kind: 'task_command';
|
|
55
55
|
taskId: string;
|
|
56
56
|
command: TaskCommand;
|
|
57
|
+
} | {
|
|
58
|
+
kind: 'system';
|
|
59
|
+
capability: 'home.advisor.refresh' | 'memory.temporal_sweep' | 'memory.daily_reconciliation' | 'memory.weekly_knowledge';
|
|
57
60
|
};
|
|
61
|
+
export type AutomationEditableField = 'enabled' | 'trigger';
|
|
62
|
+
export interface AutomationManagement {
|
|
63
|
+
owner: string;
|
|
64
|
+
editable: AutomationEditableField[];
|
|
65
|
+
runnable: boolean;
|
|
66
|
+
deletable: boolean;
|
|
67
|
+
}
|
|
58
68
|
export type AutomationConversationMode = 'new_session' | 'continuous';
|
|
59
69
|
export type AutomationNotificationPolicy = 'attention' | 'all' | 'none';
|
|
60
70
|
export interface AutomationReliability {
|
|
@@ -97,6 +107,7 @@ export interface Automation {
|
|
|
97
107
|
notificationPolicy: AutomationNotificationPolicy;
|
|
98
108
|
completionWebhookUrl?: string;
|
|
99
109
|
reliability?: AutomationReliability;
|
|
110
|
+
management?: AutomationManagement;
|
|
100
111
|
state: AutomationState;
|
|
101
112
|
createdAtMs: number;
|
|
102
113
|
updatedAtMs: number;
|
|
@@ -210,6 +221,17 @@ export interface AutomationDeps {
|
|
|
210
221
|
reason?: string;
|
|
211
222
|
runId?: string;
|
|
212
223
|
};
|
|
224
|
+
executeSystemAction?: (input: {
|
|
225
|
+
capability: Extract<AutomationAction, {
|
|
226
|
+
kind: 'system';
|
|
227
|
+
}>['capability'];
|
|
228
|
+
automationId: string;
|
|
229
|
+
runId: string;
|
|
230
|
+
}) => Promise<{
|
|
231
|
+
summary?: string;
|
|
232
|
+
}> | {
|
|
233
|
+
summary?: string;
|
|
234
|
+
};
|
|
213
235
|
}
|
|
214
236
|
export interface AutomationActionTask {
|
|
215
237
|
status: 'succeeded' | 'failed' | 'timeout' | 'cancelled';
|
|
@@ -151,7 +151,24 @@ export declare const AutomationActionSchema: z.ZodDiscriminatedUnion<[z.ZodObjec
|
|
|
151
151
|
outputDestinations: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
152
152
|
}, z.core.$strip>;
|
|
153
153
|
}, z.core.$strip>], "type">;
|
|
154
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
155
|
+
kind: z.ZodLiteral<"system">;
|
|
156
|
+
capability: z.ZodEnum<{
|
|
157
|
+
"home.advisor.refresh": "home.advisor.refresh";
|
|
158
|
+
"memory.temporal_sweep": "memory.temporal_sweep";
|
|
159
|
+
"memory.daily_reconciliation": "memory.daily_reconciliation";
|
|
160
|
+
"memory.weekly_knowledge": "memory.weekly_knowledge";
|
|
161
|
+
}>;
|
|
154
162
|
}, z.core.$strict>], "kind">;
|
|
163
|
+
export declare const AutomationManagementSchema: z.ZodObject<{
|
|
164
|
+
owner: z.ZodString;
|
|
165
|
+
editable: z.ZodArray<z.ZodEnum<{
|
|
166
|
+
enabled: "enabled";
|
|
167
|
+
trigger: "trigger";
|
|
168
|
+
}>>;
|
|
169
|
+
runnable: z.ZodBoolean;
|
|
170
|
+
deletable: z.ZodBoolean;
|
|
171
|
+
}, z.core.$strict>;
|
|
155
172
|
export declare const AutomationReliabilitySchema: z.ZodObject<{
|
|
156
173
|
executionTimeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
157
174
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
@@ -328,6 +345,14 @@ export declare const AutomationSchema: z.ZodObject<{
|
|
|
328
345
|
outputDestinations: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
329
346
|
}, z.core.$strip>;
|
|
330
347
|
}, z.core.$strip>], "type">;
|
|
348
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
349
|
+
kind: z.ZodLiteral<"system">;
|
|
350
|
+
capability: z.ZodEnum<{
|
|
351
|
+
"home.advisor.refresh": "home.advisor.refresh";
|
|
352
|
+
"memory.temporal_sweep": "memory.temporal_sweep";
|
|
353
|
+
"memory.daily_reconciliation": "memory.daily_reconciliation";
|
|
354
|
+
"memory.weekly_knowledge": "memory.weekly_knowledge";
|
|
355
|
+
}>;
|
|
331
356
|
}, z.core.$strict>], "kind">;
|
|
332
357
|
safety: z.ZodOptional<z.ZodObject<{
|
|
333
358
|
mode: z.ZodEnum<{
|
|
@@ -353,6 +378,15 @@ export declare const AutomationSchema: z.ZodObject<{
|
|
|
353
378
|
maxConcurrentRuns: z.ZodOptional<z.ZodNumber>;
|
|
354
379
|
disableAfterConsecutiveFailures: z.ZodOptional<z.ZodNumber>;
|
|
355
380
|
}, z.core.$strict>>;
|
|
381
|
+
management: z.ZodOptional<z.ZodObject<{
|
|
382
|
+
owner: z.ZodString;
|
|
383
|
+
editable: z.ZodArray<z.ZodEnum<{
|
|
384
|
+
enabled: "enabled";
|
|
385
|
+
trigger: "trigger";
|
|
386
|
+
}>>;
|
|
387
|
+
runnable: z.ZodBoolean;
|
|
388
|
+
deletable: z.ZodBoolean;
|
|
389
|
+
}, z.core.$strict>>;
|
|
356
390
|
state: z.ZodDefault<z.ZodObject<{
|
|
357
391
|
nextRunAtMs: z.ZodOptional<z.ZodNumber>;
|
|
358
392
|
runningRunId: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
@@ -490,6 +524,14 @@ export declare const CreateAutomationSchema: z.ZodObject<{
|
|
|
490
524
|
outputDestinations: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
491
525
|
}, z.core.$strip>;
|
|
492
526
|
}, z.core.$strip>], "type">;
|
|
527
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
528
|
+
kind: z.ZodLiteral<"system">;
|
|
529
|
+
capability: z.ZodEnum<{
|
|
530
|
+
"home.advisor.refresh": "home.advisor.refresh";
|
|
531
|
+
"memory.temporal_sweep": "memory.temporal_sweep";
|
|
532
|
+
"memory.daily_reconciliation": "memory.daily_reconciliation";
|
|
533
|
+
"memory.weekly_knowledge": "memory.weekly_knowledge";
|
|
534
|
+
}>;
|
|
493
535
|
}, z.core.$strict>], "kind">;
|
|
494
536
|
trigger: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
495
537
|
kind: z.ZodLiteral<"manual">;
|
|
@@ -541,6 +583,15 @@ export declare const CreateAutomationSchema: z.ZodObject<{
|
|
|
541
583
|
maxConcurrentRuns: z.ZodOptional<z.ZodNumber>;
|
|
542
584
|
disableAfterConsecutiveFailures: z.ZodOptional<z.ZodNumber>;
|
|
543
585
|
}, z.core.$strict>>;
|
|
586
|
+
management: z.ZodOptional<z.ZodObject<{
|
|
587
|
+
owner: z.ZodString;
|
|
588
|
+
editable: z.ZodArray<z.ZodEnum<{
|
|
589
|
+
enabled: "enabled";
|
|
590
|
+
trigger: "trigger";
|
|
591
|
+
}>>;
|
|
592
|
+
runnable: z.ZodBoolean;
|
|
593
|
+
deletable: z.ZodBoolean;
|
|
594
|
+
}, z.core.$strict>>;
|
|
544
595
|
id: z.ZodPipe<z.ZodOptional<z.ZodNullable<z.ZodString>>, z.ZodTransform<string, string>>;
|
|
545
596
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
546
597
|
state: z.ZodOptional<z.ZodObject<{
|
|
@@ -679,6 +730,14 @@ export declare const UpdateAutomationSchema: z.ZodObject<{
|
|
|
679
730
|
outputDestinations: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
680
731
|
}, z.core.$strip>;
|
|
681
732
|
}, z.core.$strip>], "type">;
|
|
733
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
734
|
+
kind: z.ZodLiteral<"system">;
|
|
735
|
+
capability: z.ZodEnum<{
|
|
736
|
+
"home.advisor.refresh": "home.advisor.refresh";
|
|
737
|
+
"memory.temporal_sweep": "memory.temporal_sweep";
|
|
738
|
+
"memory.daily_reconciliation": "memory.daily_reconciliation";
|
|
739
|
+
"memory.weekly_knowledge": "memory.weekly_knowledge";
|
|
740
|
+
}>;
|
|
682
741
|
}, z.core.$strict>], "kind">>;
|
|
683
742
|
trigger: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
684
743
|
kind: z.ZodLiteral<"manual">;
|
|
@@ -721,6 +780,15 @@ export declare const UpdateAutomationSchema: z.ZodObject<{
|
|
|
721
780
|
maxConcurrentRuns: z.ZodOptional<z.ZodNumber>;
|
|
722
781
|
disableAfterConsecutiveFailures: z.ZodOptional<z.ZodNumber>;
|
|
723
782
|
}, z.core.$strict>>>;
|
|
783
|
+
management: z.ZodOptional<z.ZodOptional<z.ZodObject<{
|
|
784
|
+
owner: z.ZodString;
|
|
785
|
+
editable: z.ZodArray<z.ZodEnum<{
|
|
786
|
+
enabled: "enabled";
|
|
787
|
+
trigger: "trigger";
|
|
788
|
+
}>>;
|
|
789
|
+
runnable: z.ZodBoolean;
|
|
790
|
+
deletable: z.ZodBoolean;
|
|
791
|
+
}, z.core.$strict>>>;
|
|
724
792
|
conversationMode: z.ZodOptional<z.ZodEnum<{
|
|
725
793
|
new_session: "new_session";
|
|
726
794
|
continuous: "continuous";
|
|
@@ -89,8 +89,23 @@ const AutomationActionSchema = z.discriminatedUnion("kind", [
|
|
|
89
89
|
kind: z.literal("task_command"),
|
|
90
90
|
taskId: nonEmptyString.max(200),
|
|
91
91
|
command: TaskCommandSchema
|
|
92
|
+
}).strict(),
|
|
93
|
+
z.object({
|
|
94
|
+
kind: z.literal("system"),
|
|
95
|
+
capability: z.enum([
|
|
96
|
+
"home.advisor.refresh",
|
|
97
|
+
"memory.temporal_sweep",
|
|
98
|
+
"memory.daily_reconciliation",
|
|
99
|
+
"memory.weekly_knowledge"
|
|
100
|
+
])
|
|
92
101
|
}).strict()
|
|
93
102
|
]);
|
|
103
|
+
const AutomationManagementSchema = z.object({
|
|
104
|
+
owner: nonEmptyString.max(100),
|
|
105
|
+
editable: z.array(z.enum(["enabled", "trigger"])).max(2),
|
|
106
|
+
runnable: z.boolean(),
|
|
107
|
+
deletable: z.boolean()
|
|
108
|
+
}).strict();
|
|
94
109
|
const AutomationReliabilitySchema = z.object({
|
|
95
110
|
executionTimeoutSeconds: z.number().int().min(1).max(86400).optional(),
|
|
96
111
|
timeoutSeconds: z.number().int().min(1).max(86400).optional(),
|
|
@@ -136,6 +151,7 @@ const AutomationSchema = z.object({
|
|
|
136
151
|
]).default("attention"),
|
|
137
152
|
completionWebhookUrl: optionalTrimmedString(2e3),
|
|
138
153
|
reliability: AutomationReliabilitySchema.optional(),
|
|
154
|
+
management: AutomationManagementSchema.optional(),
|
|
139
155
|
state: AutomationStateSchema.default({}),
|
|
140
156
|
createdAtMs: z.number().int().nonnegative(),
|
|
141
157
|
updatedAtMs: z.number().int().nonnegative()
|
|
@@ -165,4 +181,4 @@ const UpdateAutomationSchema = AutomationSchema.omit({
|
|
|
165
181
|
state: AutomationStateSchema
|
|
166
182
|
}).partial().refine((data) => Object.keys(data).length > 0, { message: "At least one field must be provided" });
|
|
167
183
|
//#endregion
|
|
168
|
-
export { AutomationActionSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema };
|
|
184
|
+
export { AutomationActionSchema, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema };
|
|
@@ -102,6 +102,9 @@ export declare function buildAutomationDraftResponse(draft: GeneratedAutomationD
|
|
|
102
102
|
outputDestinations: Record<string, unknown>[];
|
|
103
103
|
};
|
|
104
104
|
};
|
|
105
|
+
} | {
|
|
106
|
+
kind: "system";
|
|
107
|
+
capability: "home.advisor.refresh" | "memory.temporal_sweep" | "memory.daily_reconciliation" | "memory.weekly_knowledge";
|
|
105
108
|
};
|
|
106
109
|
trigger?: {
|
|
107
110
|
kind: "manual";
|
|
@@ -140,6 +143,12 @@ export declare function buildAutomationDraftResponse(draft: GeneratedAutomationD
|
|
|
140
143
|
maxConcurrentRuns?: number;
|
|
141
144
|
disableAfterConsecutiveFailures?: number;
|
|
142
145
|
};
|
|
146
|
+
management?: {
|
|
147
|
+
owner: string;
|
|
148
|
+
editable: ("enabled" | "trigger")[];
|
|
149
|
+
runnable: boolean;
|
|
150
|
+
deletable: boolean;
|
|
151
|
+
};
|
|
143
152
|
id?: string;
|
|
144
153
|
enabled?: boolean;
|
|
145
154
|
state?: {
|
|
@@ -92,6 +92,7 @@ function summarizeAction(action) {
|
|
|
92
92
|
if (action.kind === "workflow") return `Starts workflow ${action.workflowId}.`;
|
|
93
93
|
if (action.kind === "browser_automation") return `Runs browser automation ${action.automationId}.`;
|
|
94
94
|
if (action.kind === "task_command") return `Applies ${action.command?.type ?? "a command"} to task ${action.taskId}.`;
|
|
95
|
+
if (action.kind === "system") return `Runs system capability ${action.capability}.`;
|
|
95
96
|
return action.agentId ? `Runs agent ${action.agentId}.` : "Runs the default agent.";
|
|
96
97
|
}
|
|
97
98
|
function repairPatchNeedsApproval(patch) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { onAutomationProductEvent, publishAutomationProductEvent } from "./product-events.js";
|
|
2
|
-
import { AutomationActionSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema } from "./domain/validation.js";
|
|
2
|
+
import { AutomationActionSchema, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, UpdateAutomationSchema } from "./domain/validation.js";
|
|
3
3
|
import { computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, timerDelayUntil } from "./domain/schedule.js";
|
|
4
4
|
import { DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, defaultAutomationTimeoutSeconds, resolveAutomationTimeoutSeconds } from "./domain/defaults.js";
|
|
5
5
|
import { AutomationActionExecutor } from "./service/action-executor.js";
|
|
6
6
|
import { AutomationAlreadyExistsError, AutomationAlreadyRunningError, AutomationService } from "./service/automation-service.js";
|
|
7
7
|
import "./domain/index.js";
|
|
8
8
|
import "./service/index.js";
|
|
9
|
-
export { AutomationActionExecutor, AutomationActionSchema, AutomationAlreadyExistsError, AutomationAlreadyRunningError, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationService, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, UpdateAutomationSchema, computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, defaultAutomationTimeoutSeconds, onAutomationProductEvent, publishAutomationProductEvent, resolveAutomationTimeoutSeconds, timerDelayUntil };
|
|
9
|
+
export { AutomationActionExecutor, AutomationActionSchema, AutomationAlreadyExistsError, AutomationAlreadyRunningError, AutomationManagementSchema, AutomationReliabilitySchema, AutomationSafetyPolicySchema, AutomationScheduleSchema, AutomationSchema, AutomationService, AutomationStateSchema, AutomationTriggerSchema, CreateAutomationSchema, DEFAULT_AUTOMATION_TIMEOUT_SECONDS, DEFAULT_BROWSER_AUTOMATION_TIMEOUT_SECONDS, UpdateAutomationSchema, computeNextAutomationRunAtMs, computeNextScheduleRunAtMs, defaultAutomationTimeoutSeconds, onAutomationProductEvent, publishAutomationProductEvent, resolveAutomationTimeoutSeconds, timerDelayUntil };
|
|
@@ -128,6 +128,22 @@ var AutomationActionExecutor = class {
|
|
|
128
128
|
error: result.reason ?? "Task command failed"
|
|
129
129
|
};
|
|
130
130
|
}
|
|
131
|
+
if (automation.action.kind === "system") {
|
|
132
|
+
await hooks.onRunPatch?.({ currentPhase: "action" });
|
|
133
|
+
const execute = this.deps.executeSystemAction;
|
|
134
|
+
if (!execute) return {
|
|
135
|
+
status: "failed",
|
|
136
|
+
error: "System action executor is unavailable"
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
status: "succeeded",
|
|
140
|
+
summary: (await execute({
|
|
141
|
+
capability: automation.action.capability,
|
|
142
|
+
automationId: automation.id,
|
|
143
|
+
runId: run.id
|
|
144
|
+
})).summary ?? "System action completed"
|
|
145
|
+
};
|
|
146
|
+
}
|
|
131
147
|
return this.executeAgent(automation, automation.action, run, signal, hooks, deadlineAtMs, context);
|
|
132
148
|
}
|
|
133
149
|
async executeBrowserAutomation(automation, action, signal, hooks, context) {
|
|
@@ -23,6 +23,7 @@ function rowToAutomation(row) {
|
|
|
23
23
|
notificationPolicy: row.notification_policy,
|
|
24
24
|
completionWebhookUrl: row.completion_webhook_url ?? void 0,
|
|
25
25
|
reliability: parseJson(row.reliability_json),
|
|
26
|
+
management: parseJson(row.management_json),
|
|
26
27
|
state: parseJson(row.state_json) ?? {},
|
|
27
28
|
createdAtMs: row.created_at_ms,
|
|
28
29
|
updatedAtMs: row.updated_at_ms
|
|
@@ -32,13 +33,13 @@ function upsertAutomation(db, automation) {
|
|
|
32
33
|
db.prepare(`INSERT OR REPLACE INTO automations (
|
|
33
34
|
automation_id, name, description, project_id, enabled, trigger_json, action_json,
|
|
34
35
|
safety_json, conversation_mode, notification_policy, completion_webhook_url,
|
|
35
|
-
reliability_json, state_json, created_at_ms, updated_at_ms
|
|
36
|
-
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(automation.id, automation.name, automation.description ?? null, automation.projectId ?? null, automation.enabled ? 1 : 0, JSON.stringify(automation.trigger), JSON.stringify(automation.action), bindJson(automation.safety ?? { mode: "auto_apply" }), automation.conversationMode, automation.notificationPolicy, automation.completionWebhookUrl ?? null, bindJson(automation.reliability), JSON.stringify(automation.state ?? {}), automation.createdAtMs, automation.updatedAtMs);
|
|
36
|
+
reliability_json, management_json, state_json, created_at_ms, updated_at_ms
|
|
37
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(automation.id, automation.name, automation.description ?? null, automation.projectId ?? null, automation.enabled ? 1 : 0, JSON.stringify(automation.trigger), JSON.stringify(automation.action), bindJson(automation.safety ?? { mode: "auto_apply" }), automation.conversationMode, automation.notificationPolicy, automation.completionWebhookUrl ?? null, bindJson(automation.reliability), bindJson(automation.management), JSON.stringify(automation.state ?? {}), automation.createdAtMs, automation.updatedAtMs);
|
|
37
38
|
}
|
|
38
39
|
const AUTOMATION_SELECT = `
|
|
39
40
|
SELECT automation_id, name, description, project_id, enabled, trigger_json, action_json,
|
|
40
41
|
safety_json, conversation_mode, notification_policy, completion_webhook_url,
|
|
41
|
-
reliability_json, state_json, created_at_ms, updated_at_ms
|
|
42
|
+
reliability_json, management_json, state_json, created_at_ms, updated_at_ms
|
|
42
43
|
FROM automations
|
|
43
44
|
`;
|
|
44
45
|
function listAutomations(options) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { requireXopcDatabase } from "../storage/sqlite/connection.js";
|
|
2
2
|
import { init_sqlite } from "../storage/sqlite/index.js";
|
|
3
3
|
import { AgentCatalogService } from "../agent-catalog/service.js";
|
|
4
|
+
import { ensureStarterAgentsInitialized } from "../agent/starter-agents.js";
|
|
4
5
|
import { cutoverLegacyAgentConfig } from "../agent-catalog/migrations/legacy-config-cutover.js";
|
|
5
6
|
import "../agent-catalog/index.js";
|
|
6
|
-
import { ensureStarterAgentsInitialized } from "../agent/starter-agents.js";
|
|
7
7
|
import { runBootstrapMigrationsSync } from "../migrations/runner.js";
|
|
8
8
|
//#region src/bootstrap/application-state.ts
|
|
9
9
|
init_sqlite();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SqliteCommitEffectError, init_transaction } from "../../storage/sqlite/transaction.js";
|
|
2
|
-
import { OperationConflictError, executeAtomicOperation } from "./atomic-operations.js";
|
|
3
2
|
import { CapabilityError } from "./errors.js";
|
|
4
3
|
import { executeExternalOperation } from "./external-operations.js";
|
|
4
|
+
import { OperationConflictError, executeAtomicOperation } from "./atomic-operations.js";
|
|
5
5
|
import { createHash } from "node:crypto";
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
//#region src/capabilities/runtime/dispatcher.ts
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { CapabilityError } from "./errors.js";
|
|
2
2
|
import { CapabilityDispatcher } from "./dispatcher.js";
|
|
3
|
-
import { registerAgentCapabilities } from "../../agent-catalog/capabilities.js";
|
|
4
3
|
import { registerLocalAppReadCapabilities } from "../../local-apps/capabilities/read.js";
|
|
5
4
|
import { registerNoteReadCapabilities } from "../../notes/capabilities/read.js";
|
|
6
5
|
import { registerNoteWriteCapabilities } from "../../notes/capabilities/write.js";
|
|
@@ -19,6 +18,7 @@ import { registerSceneReadCapabilities } from "../../scenes/capabilities/read.js
|
|
|
19
18
|
import { registerSceneWriteCapabilities } from "../../scenes/capabilities/write.js";
|
|
20
19
|
import { registerSettingsCapability } from "./settings.js";
|
|
21
20
|
import { registerAppContextCapability } from "./app-context.js";
|
|
21
|
+
import { registerAgentCapabilities } from "../../agent-catalog/capabilities.js";
|
|
22
22
|
//#region src/capabilities/runtime/product.ts
|
|
23
23
|
function createProductDispatcher(getNotes, taskWrites) {
|
|
24
24
|
const dispatcher = new CapabilityDispatcher();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { normalizeAgentId } from "../agent-catalog/id.js";
|
|
2
2
|
import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
|
|
3
|
-
import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
|
|
4
3
|
import { init_agent_session_key, resolveAgentIdFromConversationId } from "../routing/agent-session-key.js";
|
|
4
|
+
import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
|
|
5
5
|
import { commandRegistry } from "./registry.js";
|
|
6
6
|
import { join } from "node:path";
|
|
7
7
|
import { readFile } from "node:fs/promises";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_paths, resolveConfigPath } from "../../config/paths.js";
|
|
4
3
|
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
4
|
+
import { init_paths, resolveConfigPath } from "../../config/paths.js";
|
|
5
5
|
import { commandRegistry } from "../registry.js";
|
|
6
6
|
import { parseConfigValue } from "../config-value.js";
|
|
7
7
|
import { getConfigValueAtPath, parseConfigPath, setConfigValueAtPath, unsetConfigValueAtPath } from "../config-paths.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
4
3
|
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
4
|
+
import { init_agent_scope, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
5
5
|
import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
|
|
6
6
|
import { ExtensionLoader } from "../../extensions/loader.js";
|
|
7
7
|
import "../../extensions/index.js";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { normalizeAgentId, validateAgentIdForNewAgent } from "../../agent-catalog/id.js";
|
|
2
2
|
import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
|
|
3
3
|
import { init_agent_scope, resolveAgentDir, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agent/agent-scope.js";
|
|
4
|
-
import { AgentCatalogService } from "../../agent-catalog/service.js";
|
|
5
4
|
import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
|
|
5
|
+
import { AgentCatalogService } from "../../agent-catalog/service.js";
|
|
6
6
|
import { colors } from "../utils/colors.js";
|
|
7
7
|
//#region src/cli/commands/agents.ts
|
|
8
8
|
init_repository();
|
|
@@ -53,7 +53,7 @@ async function checkDatabaseSchema(ctx) {
|
|
|
53
53
|
id: "database-schema",
|
|
54
54
|
label: "Database schema",
|
|
55
55
|
status: "pass",
|
|
56
|
-
message: `SQLite schema v${status.dbVersion} (current release
|
|
56
|
+
message: `SQLite schema v${status.dbVersion} (current release v208).`,
|
|
57
57
|
hints: []
|
|
58
58
|
};
|
|
59
59
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
|
|
2
|
-
import { AgentCatalogService } from "../../agent-catalog/service.js";
|
|
3
2
|
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
4
3
|
import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
|
|
5
4
|
import { getAllModels, getAvailableModels, getConfiguredProviders, getProviderAuthState, getProviderDisplayName, init_providers, isProviderConfigured, providerSupportsApiKey, providerSupportsOAuth, resolveModel } from "../../providers/index.js";
|
|
5
|
+
import { AgentCatalogService } from "../../agent-catalog/service.js";
|
|
6
6
|
import { loadConfig } from "../../config/loader.js";
|
|
7
7
|
import { formatExamples, register } from "../registry.js";
|
|
8
8
|
import { getContextWithOpts } from "../context.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
|
|
2
|
-
import { resolveModelsJsonPath } from "../../../config/paths.js";
|
|
3
|
-
import { AgentCatalogService } from "../../../agent-catalog/service.js";
|
|
4
2
|
import { getAgentDefaultModelRef, init_schema } from "../../../config/schema.js";
|
|
3
|
+
import { resolveModelsJsonPath } from "../../../config/paths.js";
|
|
5
4
|
import { init_models_json, loadModelsJson, saveModelsJson } from "../../../config/models-json.js";
|
|
6
5
|
import { getApiKeyFromEnv } from "../../../providers/env-keys.js";
|
|
7
6
|
import { getModelRegistry } from "../../../providers/model-registry.js";
|
|
8
7
|
import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
|
|
9
8
|
import { getAllProviders, getModelsByProvider, getProviderDisplayName, init_providers, providerSupportsApiKey, providerSupportsOAuth } from "../../../providers/index.js";
|
|
9
|
+
import { AgentCatalogService } from "../../../agent-catalog/service.js";
|
|
10
10
|
import { prepareUpdateGlobalDefaults } from "../../../gateway/global-defaults-admin.js";
|
|
11
11
|
import { discoverProviderModels, isProviderApiDiscoverable } from "../../../providers/model-discovery.js";
|
|
12
12
|
import { getXopcCloudCatalogCoordinator } from "../../../providers/xopc-cloud-catalog-coordinator.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AgentCatalogRepository, init_repository } from "../../agent-catalog/repository.js";
|
|
2
|
-
import { AgentCatalogService } from "../../agent-catalog/service.js";
|
|
3
2
|
import { ConfigSchema, init_schema } from "../../config/schema.js";
|
|
3
|
+
import { AgentCatalogService } from "../../agent-catalog/service.js";
|
|
4
4
|
import { assertConfigRewriteSafeForRunningGateway, saveConfig } from "../../config/loader.js";
|
|
5
5
|
import { ensureStarterAgentsInitialized } from "../../agent/starter-agents.js";
|
|
6
6
|
import { bootstrapApplicationStateSync } from "../../bootstrap/application-state.js";
|
package/dist/src/config/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXopcCloudCatalogCachePath, resolveXopcDatabasePath } from "./paths-state.js";
|
|
2
|
-
import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
|
|
3
|
-
import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
4
|
-
import { resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
5
|
-
import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMcpOAuthPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
6
2
|
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
7
3
|
import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
|
|
8
4
|
import { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, BrowserConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewayScenesConfigSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GatewayWebchatConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpOAuthConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, RuntimeToolsConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
9
5
|
import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
|
|
6
|
+
import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
|
|
7
|
+
import { resolveDefaultAgentWorkspaceDir } from "./workspace-defaults.js";
|
|
8
|
+
import { resolveAgentWorkspaceDir } from "../agent/agent-scope.js";
|
|
10
9
|
import { extractProfileAgentId, resolveEffectiveAgentConfigForAgent, resolveEffectiveAgentConfigForSession, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "./agent-profile.js";
|
|
10
|
+
import { FILENAMES, WORKSPACE_FILES, existsSync, hasBundledExtensionManifest, init_paths, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentHomeDir, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveCredentialsDir, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveMcpOAuthPath, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath } from "./paths.js";
|
|
11
11
|
import { clearConfigValueCache, getAllowedCommands, getCacheStats, init_resolve_config_value, resolveConfigValue, resolveHeaders, testApiKeyResolution } from "./resolve-config-value.js";
|
|
12
12
|
import { CustomModelSchema, ImageGenerationCapabilitiesSchema, ImageGenerationModelSchema, ImageGenerationProviderSchema, ModelOverrideSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProviderConfigSchema, VercelGatewayRoutingSchema, getDefaultModelValues, init_models_json, loadModelsJson, modelsJsonExists, saveModelsJson, validateModelsConfig } from "./models-json.js";
|
|
13
13
|
import { canonicalizeConfiguredMcpServer, isKnownCliMcpTypeAlias, normalizeConfiguredMcpServers, resolveXopcMcpTransportAlias } from "./mcp-config-normalize.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
4
|
-
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
5
3
|
import { ConfigSchema, init_schema } from "./schema.js";
|
|
4
|
+
import { init_paths, resolveConfigPath } from "./paths.js";
|
|
6
5
|
import { init_resolution, setActivePlatformDiscovery } from "../platform/resolution.js";
|
|
6
|
+
import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
|
|
7
7
|
import { assertChannelPluginConfigs } from "./validate-channel-configs.js";
|
|
8
8
|
import { isGatewayConfigLockedByAnotherProcessSync } from "../gateway/lock.js";
|
|
9
9
|
import { dirname } from "path";
|