@jungjaehoon/mama-os 0.32.0 → 0.32.2
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/CHANGELOG.md +8 -0
- package/README.md +15 -13
- package/dist/agent/agent-loop.d.ts +10 -1
- package/dist/agent/agent-loop.d.ts.map +1 -1
- package/dist/agent/agent-loop.js +221 -103
- package/dist/agent/agent-loop.js.map +1 -1
- package/dist/agent/backend-model-policy.d.ts +9 -0
- package/dist/agent/backend-model-policy.d.ts.map +1 -0
- package/dist/agent/backend-model-policy.js +21 -0
- package/dist/agent/backend-model-policy.js.map +1 -0
- package/dist/agent/backend-model-runner-factory.d.ts +27 -0
- package/dist/agent/backend-model-runner-factory.d.ts.map +1 -0
- package/dist/agent/backend-model-runner-factory.js +85 -0
- package/dist/agent/backend-model-runner-factory.js.map +1 -0
- package/dist/agent/cline-cli-adapter.d.ts +124 -0
- package/dist/agent/cline-cli-adapter.d.ts.map +1 -0
- package/dist/agent/cline-cli-adapter.js +1040 -0
- package/dist/agent/cline-cli-adapter.js.map +1 -0
- package/dist/agent/cline-native-tool-policy.d.ts +3 -0
- package/dist/agent/cline-native-tool-policy.d.ts.map +1 -0
- package/dist/agent/cline-native-tool-policy.js +50 -0
- package/dist/agent/cline-native-tool-policy.js.map +1 -0
- package/dist/agent/code-act/constants.d.ts +1 -1
- package/dist/agent/code-act/constants.d.ts.map +1 -1
- package/dist/agent/code-act/constants.js +13 -1
- package/dist/agent/code-act/constants.js.map +1 -1
- package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
- package/dist/agent/code-act/host-bridge.js +35 -74
- package/dist/agent/code-act/host-bridge.js.map +1 -1
- package/dist/agent/codex-app-server-process.d.ts +5 -0
- package/dist/agent/codex-app-server-process.d.ts.map +1 -1
- package/dist/agent/codex-app-server-process.js +30 -0
- package/dist/agent/codex-app-server-process.js.map +1 -1
- package/dist/agent/codex-auxiliary-tools.d.ts +17 -0
- package/dist/agent/codex-auxiliary-tools.d.ts.map +1 -0
- package/dist/agent/codex-auxiliary-tools.js +267 -0
- package/dist/agent/codex-auxiliary-tools.js.map +1 -0
- package/dist/agent/codex-home.d.ts.map +1 -1
- package/dist/agent/codex-home.js +1 -0
- package/dist/agent/codex-home.js.map +1 -1
- package/dist/agent/gateway-tool-catalog.d.ts +14 -0
- package/dist/agent/gateway-tool-catalog.d.ts.map +1 -0
- package/dist/agent/gateway-tool-catalog.js +41 -0
- package/dist/agent/gateway-tool-catalog.js.map +1 -0
- package/dist/agent/gateway-tool-executor.d.ts +12 -1
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
- package/dist/agent/gateway-tool-executor.js +149 -15
- package/dist/agent/gateway-tool-executor.js.map +1 -1
- package/dist/agent/gateway-tools.md +5 -7
- package/dist/agent/managed-agent-runtime-sync.d.ts.map +1 -1
- package/dist/agent/managed-agent-runtime-sync.js +17 -3
- package/dist/agent/managed-agent-runtime-sync.js.map +1 -1
- package/dist/agent/managed-agent-validation.js +1 -1
- package/dist/agent/managed-agent-validation.js.map +1 -1
- package/dist/agent/model-runner.d.ts +11 -1
- package/dist/agent/model-runner.d.ts.map +1 -1
- package/dist/agent/model-runner.js +12 -1
- package/dist/agent/model-runner.js.map +1 -1
- package/dist/agent/session-pool.d.ts +10 -9
- package/dist/agent/session-pool.d.ts.map +1 -1
- package/dist/agent/session-pool.js +12 -47
- package/dist/agent/session-pool.js.map +1 -1
- package/dist/agent/tool-registry.d.ts +6 -4
- package/dist/agent/tool-registry.d.ts.map +1 -1
- package/dist/agent/tool-registry.js +62 -30
- package/dist/agent/tool-registry.js.map +1 -1
- package/dist/agent/types.d.ts +36 -4
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/api/graph-api.d.ts.map +1 -1
- package/dist/api/graph-api.js +15 -5
- package/dist/api/graph-api.js.map +1 -1
- package/dist/api/index.d.ts +10 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +7 -16
- package/dist/api/index.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +6 -1
- package/dist/cli/commands/connector.d.ts.map +1 -1
- package/dist/cli/commands/connector.js +61 -45
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +43 -10
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +12 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/setup.d.ts +22 -0
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +79 -28
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/start.d.ts +13 -9
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +190 -97
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +4 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/config/config-manager.d.ts.map +1 -1
- package/dist/cli/config/config-manager.js +63 -14
- package/dist/cli/config/config-manager.js.map +1 -1
- package/dist/cli/config/types.d.ts +12 -5
- package/dist/cli/config/types.d.ts.map +1 -1
- package/dist/cli/config/types.js +3 -4
- package/dist/cli/config/types.js.map +1 -1
- package/dist/cli/index.js +6 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/runtime/agent-loop-init.d.ts +1 -1
- package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
- package/dist/cli/runtime/agent-loop-init.js +8 -3
- package/dist/cli/runtime/agent-loop-init.js.map +1 -1
- package/dist/cli/runtime/api-routes-init.d.ts +38 -1
- package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
- package/dist/cli/runtime/api-routes-init.js +150 -30
- package/dist/cli/runtime/api-routes-init.js.map +1 -1
- package/dist/cli/runtime/api-server-init.d.ts +4 -0
- package/dist/cli/runtime/api-server-init.d.ts.map +1 -1
- package/dist/cli/runtime/api-server-init.js +3 -1
- package/dist/cli/runtime/api-server-init.js.map +1 -1
- package/dist/cli/runtime/connector-bootstrap.d.ts +8 -0
- package/dist/cli/runtime/connector-bootstrap.d.ts.map +1 -0
- package/dist/cli/runtime/connector-bootstrap.js +14 -0
- package/dist/cli/runtime/connector-bootstrap.js.map +1 -0
- package/dist/cli/runtime/connector-init.d.ts +4 -1
- package/dist/cli/runtime/connector-init.d.ts.map +1 -1
- package/dist/cli/runtime/connector-init.js +2 -8
- package/dist/cli/runtime/connector-init.js.map +1 -1
- package/dist/cli/runtime/envelope-bootstrap.d.ts +2 -1
- package/dist/cli/runtime/envelope-bootstrap.d.ts.map +1 -1
- package/dist/cli/runtime/envelope-bootstrap.js +7 -15
- package/dist/cli/runtime/envelope-bootstrap.js.map +1 -1
- package/dist/cli/runtime/gateway-init.d.ts +1 -1
- package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
- package/dist/cli/runtime/gateway-init.js.map +1 -1
- package/dist/cli/runtime/mama-core-init.d.ts +10 -2
- package/dist/cli/runtime/mama-core-init.d.ts.map +1 -1
- package/dist/cli/runtime/mama-core-init.js +52 -68
- package/dist/cli/runtime/mama-core-init.js.map +1 -1
- package/dist/cli/runtime/memory-agent-init.d.ts.map +1 -1
- package/dist/cli/runtime/memory-agent-init.js +18 -5
- package/dist/cli/runtime/memory-agent-init.js.map +1 -1
- package/dist/cli/runtime/scheduler-init.d.ts +4 -0
- package/dist/cli/runtime/scheduler-init.d.ts.map +1 -1
- package/dist/cli/runtime/scheduler-init.js +24 -3
- package/dist/cli/runtime/scheduler-init.js.map +1 -1
- package/dist/cli/runtime/shutdown.d.ts +4 -0
- package/dist/cli/runtime/shutdown.d.ts.map +1 -1
- package/dist/cli/runtime/shutdown.js +30 -6
- package/dist/cli/runtime/shutdown.js.map +1 -1
- package/dist/cli/runtime/utilities.d.ts +2 -0
- package/dist/cli/runtime/utilities.d.ts.map +1 -1
- package/dist/cli/runtime/utilities.js +33 -0
- package/dist/cli/runtime/utilities.js.map +1 -1
- package/dist/connectors/index.d.ts +4 -1
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +3 -2
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/private-connector-policy.d.ts +150 -0
- package/dist/connectors/private-connector-policy.d.ts.map +1 -0
- package/dist/connectors/private-connector-policy.js +289 -0
- package/dist/connectors/private-connector-policy.js.map +1 -0
- package/dist/connectors/private-prompt-overlay.d.ts +17 -0
- package/dist/connectors/private-prompt-overlay.d.ts.map +1 -0
- package/dist/connectors/private-prompt-overlay.js +156 -0
- package/dist/connectors/private-prompt-overlay.js.map +1 -0
- package/dist/db/migrations/operator-task-external-lifecycle.d.ts +8 -0
- package/dist/db/migrations/operator-task-external-lifecycle.d.ts.map +1 -0
- package/dist/db/migrations/operator-task-external-lifecycle.js +169 -0
- package/dist/db/migrations/operator-task-external-lifecycle.js.map +1 -0
- package/dist/envelope/enforcer.js +8 -7
- package/dist/envelope/enforcer.js.map +1 -1
- package/dist/envelope/reactive-config.d.ts.map +1 -1
- package/dist/envelope/reactive-config.js +2 -1
- package/dist/envelope/reactive-config.js.map +1 -1
- package/dist/envelope/tool-connector-scope.d.ts.map +1 -1
- package/dist/envelope/tool-connector-scope.js +4 -0
- package/dist/envelope/tool-connector-scope.js.map +1 -1
- package/dist/gateways/discord.d.ts.map +1 -1
- package/dist/gateways/discord.js +11 -6
- package/dist/gateways/discord.js.map +1 -1
- package/dist/gateways/image-analyzer.d.ts +5 -0
- package/dist/gateways/image-analyzer.d.ts.map +1 -1
- package/dist/gateways/image-analyzer.js +8 -0
- package/dist/gateways/image-analyzer.js.map +1 -1
- package/dist/gateways/message-router.d.ts +11 -1
- package/dist/gateways/message-router.d.ts.map +1 -1
- package/dist/gateways/message-router.js +146 -52
- package/dist/gateways/message-router.js.map +1 -1
- package/dist/gateways/slack.d.ts.map +1 -1
- package/dist/gateways/slack.js +6 -2
- package/dist/gateways/slack.js.map +1 -1
- package/dist/gateways/telegram-message-ledger.d.ts +8 -1
- package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
- package/dist/gateways/telegram-message-ledger.js +141 -24
- package/dist/gateways/telegram-message-ledger.js.map +1 -1
- package/dist/gateways/telegram.d.ts +2 -0
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +19 -12
- package/dist/gateways/telegram.js.map +1 -1
- package/dist/gateways/types.d.ts +1 -1
- package/dist/gateways/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/multi-agent/agent-process-manager.d.ts +14 -4
- package/dist/multi-agent/agent-process-manager.d.ts.map +1 -1
- package/dist/multi-agent/agent-process-manager.js +144 -47
- package/dist/multi-agent/agent-process-manager.js.map +1 -1
- package/dist/multi-agent/dashboard-agent-persona.d.ts +3 -3
- package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
- package/dist/multi-agent/dashboard-agent-persona.js +10 -13
- package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
- package/dist/multi-agent/memory-agent-persona.d.ts +1 -1
- package/dist/multi-agent/memory-agent-persona.d.ts.map +1 -1
- package/dist/multi-agent/memory-agent-persona.js +1 -1
- package/dist/multi-agent/runtime-process.d.ts +3 -0
- package/dist/multi-agent/runtime-process.d.ts.map +1 -1
- package/dist/multi-agent/runtime-process.js +10 -2
- package/dist/multi-agent/runtime-process.js.map +1 -1
- package/dist/multi-agent/types.d.ts +12 -2
- package/dist/multi-agent/types.d.ts.map +1 -1
- package/dist/multi-agent/types.js.map +1 -1
- package/dist/multi-agent/wiki-agent-persona.d.ts +2 -2
- package/dist/multi-agent/wiki-agent-persona.js +2 -2
- package/dist/multi-agent/workflow-types.d.ts +1 -1
- package/dist/multi-agent/workflow-types.d.ts.map +1 -1
- package/dist/onboarding/complete-autonomous-prompt.d.ts +1 -1
- package/dist/onboarding/complete-autonomous-prompt.d.ts.map +1 -1
- package/dist/onboarding/complete-autonomous-prompt.js +9 -9
- package/dist/operator/board-slot-instructions.d.ts +1 -1
- package/dist/operator/board-slot-instructions.js +2 -2
- package/dist/operator/board-slot-instructions.js.map +1 -1
- package/dist/operator/briefs.d.ts +3 -0
- package/dist/operator/briefs.d.ts.map +1 -1
- package/dist/operator/briefs.js +64 -3
- package/dist/operator/briefs.js.map +1 -1
- package/dist/operator/console-brief.d.ts +6 -3
- package/dist/operator/console-brief.d.ts.map +1 -1
- package/dist/operator/console-brief.js +39 -9
- package/dist/operator/console-brief.js.map +1 -1
- package/dist/operator/external-lifecycle-candidates.d.ts +56 -0
- package/dist/operator/external-lifecycle-candidates.d.ts.map +1 -0
- package/dist/operator/external-lifecycle-candidates.js +415 -0
- package/dist/operator/external-lifecycle-candidates.js.map +1 -0
- package/dist/operator/external-lifecycle.d.ts +82 -0
- package/dist/operator/external-lifecycle.d.ts.map +1 -0
- package/dist/operator/external-lifecycle.js +27 -0
- package/dist/operator/external-lifecycle.js.map +1 -0
- package/dist/operator/file-coordination.d.ts +7 -0
- package/dist/operator/file-coordination.d.ts.map +1 -0
- package/dist/operator/file-coordination.js +84 -0
- package/dist/operator/file-coordination.js.map +1 -0
- package/dist/operator/operator-trigger-loop.d.ts +19 -4
- package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
- package/dist/operator/operator-trigger-loop.js +151 -23
- package/dist/operator/operator-trigger-loop.js.map +1 -1
- package/dist/operator/pending-report-store.d.ts +62 -3
- package/dist/operator/pending-report-store.d.ts.map +1 -1
- package/dist/operator/pending-report-store.js +297 -40
- package/dist/operator/pending-report-store.js.map +1 -1
- package/dist/operator/report-carry-delivery.d.ts +35 -0
- package/dist/operator/report-carry-delivery.d.ts.map +1 -0
- package/dist/operator/report-carry-delivery.js +55 -0
- package/dist/operator/report-carry-delivery.js.map +1 -0
- package/dist/operator/report-carry.d.ts +50 -30
- package/dist/operator/report-carry.d.ts.map +1 -1
- package/dist/operator/report-carry.js +323 -71
- package/dist/operator/report-carry.js.map +1 -1
- package/dist/operator/situation-report.d.ts +30 -11
- package/dist/operator/situation-report.d.ts.map +1 -1
- package/dist/operator/situation-report.js +79 -35
- package/dist/operator/situation-report.js.map +1 -1
- package/dist/operator/task-ledger.d.ts +101 -0
- package/dist/operator/task-ledger.d.ts.map +1 -1
- package/dist/operator/task-ledger.js +599 -124
- package/dist/operator/task-ledger.js.map +1 -1
- package/dist/operator/temporal-runtime.d.ts.map +1 -1
- package/dist/operator/temporal-runtime.js +3 -1
- package/dist/operator/temporal-runtime.js.map +1 -1
- package/dist/operator/temporal-worker.js +1 -1
- package/dist/operator/trigger-author.d.ts +13 -1
- package/dist/operator/trigger-author.d.ts.map +1 -1
- package/dist/operator/trigger-author.js +35 -0
- package/dist/operator/trigger-author.js.map +1 -1
- package/dist/operator/worker-run.d.ts +1 -1
- package/dist/operator/worker-run.d.ts.map +1 -1
- package/dist/operator/worker-run.js +27 -9
- package/dist/operator/worker-run.js.map +1 -1
- package/dist/operator/workorder-consumer.d.ts +12 -1
- package/dist/operator/workorder-consumer.d.ts.map +1 -1
- package/dist/operator/workorder-consumer.js +125 -6
- package/dist/operator/workorder-consumer.js.map +1 -1
- package/dist/operator/workorder-hooks.d.ts +7 -2
- package/dist/operator/workorder-hooks.d.ts.map +1 -1
- package/dist/operator/workorder-hooks.js +22 -0
- package/dist/operator/workorder-hooks.js.map +1 -1
- package/dist/operator/workorder-publishers.d.ts +9 -2
- package/dist/operator/workorder-publishers.d.ts.map +1 -1
- package/dist/operator/workorder-publishers.js +167 -5
- package/dist/operator/workorder-publishers.js.map +1 -1
- package/dist/scheduler/cron-worker.d.ts +8 -4
- package/dist/scheduler/cron-worker.d.ts.map +1 -1
- package/dist/scheduler/cron-worker.js +56 -39
- package/dist/scheduler/cron-worker.js.map +1 -1
- package/dist/setup/setup-actions.d.ts +26 -0
- package/dist/setup/setup-actions.d.ts.map +1 -0
- package/dist/setup/setup-actions.js +371 -0
- package/dist/setup/setup-actions.js.map +1 -0
- package/dist/setup/setup-prompt.d.ts +1 -1
- package/dist/setup/setup-prompt.d.ts.map +1 -1
- package/dist/setup/setup-prompt.js +28 -33
- package/dist/setup/setup-prompt.js.map +1 -1
- package/dist/setup/setup-server.d.ts +6 -1
- package/dist/setup/setup-server.d.ts.map +1 -1
- package/dist/setup/setup-server.js +55 -9
- package/dist/setup/setup-server.js.map +1 -1
- package/dist/setup/setup-websocket.d.ts +14 -2
- package/dist/setup/setup-websocket.d.ts.map +1 -1
- package/dist/setup/setup-websocket.js +121 -37
- package/dist/setup/setup-websocket.js.map +1 -1
- package/package.json +2 -2
- package/public/setup.html +9 -6
- package/public/viewer/js/modules/agents.js +5 -4
- package/public/viewer/js/modules/settings.js +34 -10
- package/public/viewer/src/modules/agents.ts +5 -4
- package/public/viewer/src/modules/settings.ts +49 -11
- package/public/viewer/src/utils/api.ts +3 -2
- package/scripts/generate-gateway-tools.ts +13 -3
|
@@ -47,6 +47,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
48
|
exports.CONDUCTOR_TOOL_POLICY = exports.OPERATOR_REPORT_TOOL_POLICY = exports.WORKORDER_TOOL_POLICIES = void 0;
|
|
49
49
|
exports.requireRuntimeBackend = requireRuntimeBackend;
|
|
50
|
+
exports.assertConductorBackendSupported = assertConductorBackendSupported;
|
|
50
51
|
exports.serializeCodeActExecutionResult = serializeCodeActExecutionResult;
|
|
51
52
|
exports.deriveCodeActToolPolicy = deriveCodeActToolPolicy;
|
|
52
53
|
exports.resolveCodeActAgentPolicy = resolveCodeActAgentPolicy;
|
|
@@ -73,6 +74,7 @@ const gateway_tool_executor_js_1 = require("../../agent/gateway-tool-executor.js
|
|
|
73
74
|
const context_compile_service_js_1 = require("../../agent/context-compile-service.js");
|
|
74
75
|
const read_js_1 = require("../../evidence/read.js");
|
|
75
76
|
const tool_registry_js_1 = require("../../agent/tool-registry.js");
|
|
77
|
+
const gateway_tool_catalog_js_1 = require("../../agent/gateway-tool-catalog.js");
|
|
76
78
|
const tool_policy_js_1 = require("../../agent/code-act/tool-policy.js");
|
|
77
79
|
const run_context_registry_js_1 = require("../../agent/code-act/run-context-registry.js");
|
|
78
80
|
const index_js_2 = require("../../gateways/index.js");
|
|
@@ -100,6 +102,9 @@ const api_routes_init_js_1 = require("../runtime/api-routes-init.js");
|
|
|
100
102
|
const server_start_js_1 = require("../runtime/server-start.js");
|
|
101
103
|
const shutdown_js_1 = require("../runtime/shutdown.js");
|
|
102
104
|
const envelope_bootstrap_js_1 = require("../runtime/envelope-bootstrap.js");
|
|
105
|
+
const config_loader_js_1 = require("../../connectors/config-loader.js");
|
|
106
|
+
const connector_bootstrap_js_1 = require("../runtime/connector-bootstrap.js");
|
|
107
|
+
const private_connector_policy_js_1 = require("../../connectors/private-connector-policy.js");
|
|
103
108
|
const message_router_config_js_1 = require("../runtime/message-router-config.js");
|
|
104
109
|
const reactive_config_js_1 = require("../../envelope/reactive-config.js");
|
|
105
110
|
const scope_context_js_1 = require("../../memory/scope-context.js");
|
|
@@ -109,6 +114,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
109
114
|
const debugLogger = __importStar(require("@jungjaehoon/mama-core/debug-logger"));
|
|
110
115
|
const mama_core_1 = require("@jungjaehoon/mama-core");
|
|
111
116
|
const report_run_js_1 = require("../../operator/report-run.js");
|
|
117
|
+
const report_carry_js_1 = require("../../operator/report-carry.js");
|
|
112
118
|
const console_brief_js_1 = require("../../operator/console-brief.js");
|
|
113
119
|
const task_ledger_js_1 = require("../../operator/task-ledger.js");
|
|
114
120
|
const conductor_inbox_js_1 = require("../../operator/conductor-inbox.js");
|
|
@@ -125,12 +131,22 @@ const workorder_consumer_js_1 = require("../../operator/workorder-consumer.js");
|
|
|
125
131
|
const { DebugLogger } = debugLogger;
|
|
126
132
|
const codeActLogger = new DebugLogger('CodeAct');
|
|
127
133
|
const temporalLogger = new DebugLogger('TemporalReconcile');
|
|
134
|
+
const DISABLED_PRIVATE_CONNECTOR_POLICY = (0, private_connector_policy_js_1.resolvePrivateConnectorPolicy)({
|
|
135
|
+
ok: true,
|
|
136
|
+
config: {},
|
|
137
|
+
enabledNames: [],
|
|
138
|
+
});
|
|
128
139
|
function requireRuntimeBackend(value) {
|
|
129
|
-
if (value === 'claude' || value === 'codex') {
|
|
140
|
+
if (value === 'claude' || value === 'codex' || value === 'cline') {
|
|
130
141
|
return value;
|
|
131
142
|
}
|
|
132
143
|
throw new Error(`Unsupported agent backend: ${String(value)}`);
|
|
133
144
|
}
|
|
145
|
+
function assertConductorBackendSupported(enabled, backend) {
|
|
146
|
+
if (enabled && backend === 'codex') {
|
|
147
|
+
throw new Error('conductor.enabled requires the claude or cline backend - codex session lifecycle lands in S2');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
134
150
|
function serializeCodeActExecutionResult(result, toolCalls, hostToolExecutions = []) {
|
|
135
151
|
const hostToolsInvoked = [
|
|
136
152
|
...new Set(hostToolExecutions.filter((execution) => execution.success).map((execution) => execution.name)),
|
|
@@ -343,15 +359,19 @@ function causeEventIdsFromPayload(payload) {
|
|
|
343
359
|
}
|
|
344
360
|
function workOrderEnvelopeScope(input) {
|
|
345
361
|
const isTemporal = input.workKind === 'temporal';
|
|
362
|
+
const surface = (0, private_connector_policy_js_1.resolveWorkOrderPrivateSurface)(input.workKind);
|
|
363
|
+
const candidateConnectors = isTemporal
|
|
364
|
+
? input.temporalBinding
|
|
365
|
+
? [input.temporalBinding.connector]
|
|
366
|
+
: []
|
|
367
|
+
: input.laneConnectors;
|
|
346
368
|
return {
|
|
347
369
|
project_refs: [{ kind: 'project', id: input.projectId }],
|
|
348
370
|
// A temporal run reads its task's connector or nothing. Every other lane keeps the
|
|
349
371
|
// connectors it was configured with.
|
|
350
|
-
raw_connectors:
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
: []
|
|
354
|
-
: input.laneConnectors,
|
|
372
|
+
raw_connectors: [
|
|
373
|
+
...input.privateConnectorPolicy.projectRawConnectors(surface, candidateConnectors),
|
|
374
|
+
],
|
|
355
375
|
memory_scopes: [
|
|
356
376
|
...(0, scope_context_js_1.deriveMemoryScopes)({
|
|
357
377
|
source: 'operator',
|
|
@@ -410,13 +430,11 @@ exports.WORKORDER_TOOL_POLICIES = {
|
|
|
410
430
|
'changes_read',
|
|
411
431
|
'context_compile',
|
|
412
432
|
'contract_no_update',
|
|
413
|
-
'kagemusha_entities',
|
|
414
|
-
'kagemusha_messages',
|
|
415
|
-
'kagemusha_overview',
|
|
416
|
-
'kagemusha_tasks',
|
|
417
433
|
'mama_search',
|
|
418
434
|
'report_publish',
|
|
419
435
|
'task_create',
|
|
436
|
+
'task_external_bind',
|
|
437
|
+
'task_lifecycle_reconcile',
|
|
420
438
|
'task_list',
|
|
421
439
|
'task_update',
|
|
422
440
|
'trello_card',
|
|
@@ -430,23 +448,13 @@ exports.WORKORDER_TOOL_POLICIES = {
|
|
|
430
448
|
},
|
|
431
449
|
'memory-curation': {
|
|
432
450
|
roleName: 'workorder-memory-curation',
|
|
433
|
-
allowedTools: [
|
|
434
|
-
'agent_notices',
|
|
435
|
-
'kagemusha_entities',
|
|
436
|
-
'kagemusha_messages',
|
|
437
|
-
'mama_save',
|
|
438
|
-
'mama_search',
|
|
439
|
-
],
|
|
451
|
+
allowedTools: ['agent_notices', 'mama_save', 'mama_search'],
|
|
440
452
|
},
|
|
441
453
|
temporal: {
|
|
442
454
|
roleName: 'workorder-temporal',
|
|
443
455
|
allowedTools: [
|
|
444
456
|
'agent_notices',
|
|
445
457
|
'context_compile',
|
|
446
|
-
'kagemusha_entities',
|
|
447
|
-
'kagemusha_messages',
|
|
448
|
-
'kagemusha_overview',
|
|
449
|
-
'kagemusha_tasks',
|
|
450
458
|
'schedule_upcoming',
|
|
451
459
|
'task_list',
|
|
452
460
|
'task_temporal_reconcile',
|
|
@@ -484,10 +492,6 @@ exports.OPERATOR_REPORT_TOOL_POLICY = {
|
|
|
484
492
|
// answer that was to re-read current state and infer the delta, which is how a
|
|
485
493
|
// report ends up restating the board instead of naming the change.
|
|
486
494
|
'changes_read',
|
|
487
|
-
'kagemusha_entities',
|
|
488
|
-
'kagemusha_messages',
|
|
489
|
-
'kagemusha_overview',
|
|
490
|
-
'kagemusha_tasks',
|
|
491
495
|
'mama_provenance',
|
|
492
496
|
'mama_recall',
|
|
493
497
|
'mama_save',
|
|
@@ -499,6 +503,28 @@ exports.OPERATOR_REPORT_TOOL_POLICY = {
|
|
|
499
503
|
'trello_kanban',
|
|
500
504
|
],
|
|
501
505
|
};
|
|
506
|
+
function requirePrivateConnectorPolicy(privateConnectorPolicy) {
|
|
507
|
+
if (!privateConnectorPolicy) {
|
|
508
|
+
throw new Error('privateConnectorPolicy is required');
|
|
509
|
+
}
|
|
510
|
+
return privateConnectorPolicy;
|
|
511
|
+
}
|
|
512
|
+
function buildProjectedLaneRole(surface, allowedTools, privateConnectorPolicy) {
|
|
513
|
+
return privateConnectorPolicy.projectRole(surface, {
|
|
514
|
+
allowedTools: [...allowedTools],
|
|
515
|
+
blockedTools: [],
|
|
516
|
+
allowedPaths: [],
|
|
517
|
+
systemControl: false,
|
|
518
|
+
sensitiveAccess: false,
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
function buildProjectedLanePrompt(innerTools, surface, privateConnectorPolicy) {
|
|
522
|
+
return (0, gateway_tool_catalog_js_1.buildGatewayToolCatalog)({
|
|
523
|
+
surface,
|
|
524
|
+
allowedTools: innerTools,
|
|
525
|
+
privateConnectorPolicy,
|
|
526
|
+
}).prompt;
|
|
527
|
+
}
|
|
502
528
|
/**
|
|
503
529
|
* The conductor's grant (S1). Reads and judgment surfaces plus the ONE write
|
|
504
530
|
* family the spec's center names: committing work orders and board cards. No
|
|
@@ -520,7 +546,7 @@ exports.CONDUCTOR_TOOL_POLICY = {
|
|
|
520
546
|
],
|
|
521
547
|
};
|
|
522
548
|
/** Mirrors buildOperatorReportAgentPolicy - same shape, conductor grant. */
|
|
523
|
-
function buildConductorAgentPolicy(model, backend) {
|
|
549
|
+
function buildConductorAgentPolicy(model, backend, privateConnectorPolicy) {
|
|
524
550
|
const blockedTools = [];
|
|
525
551
|
const innerTools = uniqueToolList(exports.CONDUCTOR_TOOL_POLICY.allowedTools);
|
|
526
552
|
const allowedTools = uniqueToolList([...innerTools]);
|
|
@@ -547,7 +573,15 @@ function buildConductorAgentPolicy(model, backend) {
|
|
|
547
573
|
tier: 2,
|
|
548
574
|
backend,
|
|
549
575
|
};
|
|
550
|
-
return {
|
|
576
|
+
return {
|
|
577
|
+
agentContext,
|
|
578
|
+
gatewayToolsPrompt: (0, gateway_tool_catalog_js_1.buildGatewayToolCatalog)({
|
|
579
|
+
surface: 'multi-agent-generic',
|
|
580
|
+
allowedTools: innerTools,
|
|
581
|
+
privateConnectorPolicy,
|
|
582
|
+
}).prompt,
|
|
583
|
+
briefProjectionPolicy: DISABLED_PRIVATE_CONNECTOR_POLICY,
|
|
584
|
+
};
|
|
551
585
|
}
|
|
552
586
|
/**
|
|
553
587
|
* Merge + validate the conductor config at boot. No-fallback: a malformed
|
|
@@ -581,22 +615,18 @@ function resolveConductorConfig(config) {
|
|
|
581
615
|
* logs "executed NO gateway gather tools" while still being delivered. Mirrors
|
|
582
616
|
* buildWorkOrderAgentPolicy so both operator job families get their permissions the same way.
|
|
583
617
|
*/
|
|
584
|
-
function buildOperatorReportAgentPolicy(model, backend) {
|
|
585
|
-
const
|
|
586
|
-
const
|
|
618
|
+
function buildOperatorReportAgentPolicy(model, backend, privateConnectorPolicy) {
|
|
619
|
+
const requiredPrivatePolicy = requirePrivateConnectorPolicy(privateConnectorPolicy);
|
|
620
|
+
const surface = 'operator-report';
|
|
621
|
+
const projectedRole = buildProjectedLaneRole(surface, exports.OPERATOR_REPORT_TOOL_POLICY.allowedTools, requiredPrivatePolicy);
|
|
622
|
+
const blockedTools = [...(projectedRole.blockedTools ?? [])];
|
|
623
|
+
const innerTools = uniqueToolList(projectedRole.allowedTools);
|
|
587
624
|
const allowedTools = uniqueToolList(['code_act', ...innerTools]);
|
|
588
625
|
const agentContext = {
|
|
589
626
|
source: 'operator',
|
|
590
627
|
platform: 'cli',
|
|
591
628
|
roleName: exports.OPERATOR_REPORT_TOOL_POLICY.roleName,
|
|
592
|
-
role: {
|
|
593
|
-
allowedTools,
|
|
594
|
-
blockedTools,
|
|
595
|
-
allowedPaths: [],
|
|
596
|
-
systemControl: false,
|
|
597
|
-
sensitiveAccess: false,
|
|
598
|
-
model,
|
|
599
|
-
},
|
|
629
|
+
role: { ...projectedRole, allowedTools, blockedTools, model },
|
|
600
630
|
session: {
|
|
601
631
|
sessionId: report_run_js_1.OPERATOR_REPORT_SESSION_KEY,
|
|
602
632
|
channelId: 'report',
|
|
@@ -609,28 +639,34 @@ function buildOperatorReportAgentPolicy(model, backend) {
|
|
|
609
639
|
tier: 2,
|
|
610
640
|
backend,
|
|
611
641
|
};
|
|
612
|
-
return {
|
|
642
|
+
return {
|
|
643
|
+
agentContext,
|
|
644
|
+
gatewayToolsPrompt: buildProjectedLanePrompt(innerTools, surface, requiredPrivatePolicy),
|
|
645
|
+
briefProjectionPolicy: requiredPrivatePolicy,
|
|
646
|
+
};
|
|
613
647
|
}
|
|
614
|
-
function buildWorkOrderAgentPolicy(kind, model, backend) {
|
|
648
|
+
function buildWorkOrderAgentPolicy(kind, model, backend, privateConnectorPolicy, rawConnectorScope) {
|
|
649
|
+
const requiredPrivatePolicy = requirePrivateConnectorPolicy(privateConnectorPolicy);
|
|
650
|
+
if (!rawConnectorScope) {
|
|
651
|
+
throw new Error('rawConnectorScope is required');
|
|
652
|
+
}
|
|
615
653
|
const policy = exports.WORKORDER_TOOL_POLICIES[kind];
|
|
616
654
|
if (!policy) {
|
|
617
655
|
throw new Error(`Missing built-in workorder tool policy for '${kind}'`);
|
|
618
656
|
}
|
|
619
|
-
const
|
|
620
|
-
const
|
|
657
|
+
const surface = (0, private_connector_policy_js_1.resolveWorkOrderPrivateSurface)(kind);
|
|
658
|
+
const scopedSurface = requiredPrivatePolicy.enabledPrivateConnectors.some((name) => rawConnectorScope.includes(name))
|
|
659
|
+
? surface
|
|
660
|
+
: 'multi-agent-generic';
|
|
661
|
+
const projectedRole = buildProjectedLaneRole(scopedSurface, policy.allowedTools, requiredPrivatePolicy);
|
|
662
|
+
const blockedTools = [...(projectedRole.blockedTools ?? [])];
|
|
663
|
+
const innerTools = uniqueToolList(projectedRole.allowedTools);
|
|
621
664
|
const allowedTools = uniqueToolList(['code_act', ...innerTools]);
|
|
622
665
|
const agentContext = {
|
|
623
666
|
source: 'operator',
|
|
624
667
|
platform: 'cli',
|
|
625
668
|
roleName: policy.roleName,
|
|
626
|
-
role: {
|
|
627
|
-
allowedTools,
|
|
628
|
-
blockedTools,
|
|
629
|
-
allowedPaths: [],
|
|
630
|
-
systemControl: false,
|
|
631
|
-
sensitiveAccess: false,
|
|
632
|
-
model,
|
|
633
|
-
},
|
|
669
|
+
role: { ...projectedRole, allowedTools, blockedTools, model },
|
|
634
670
|
session: {
|
|
635
671
|
sessionId: `operator:worker:${kind}`,
|
|
636
672
|
channelId: `worker:${kind}`,
|
|
@@ -643,7 +679,10 @@ function buildWorkOrderAgentPolicy(kind, model, backend) {
|
|
|
643
679
|
};
|
|
644
680
|
return {
|
|
645
681
|
agentContext,
|
|
646
|
-
gatewayToolsPrompt:
|
|
682
|
+
gatewayToolsPrompt: buildProjectedLanePrompt(innerTools, scopedSurface, requiredPrivatePolicy),
|
|
683
|
+
briefProjectionPolicy: scopedSurface === 'multi-agent-generic'
|
|
684
|
+
? DISABLED_PRIVATE_CONNECTOR_POLICY
|
|
685
|
+
: requiredPrivatePolicy,
|
|
647
686
|
};
|
|
648
687
|
}
|
|
649
688
|
function bindCodeActParentModelRun(adapter, executionContext, options) {
|
|
@@ -735,6 +774,9 @@ async function startCommand(options = {}) {
|
|
|
735
774
|
if (backend === 'codex') {
|
|
736
775
|
console.log('✓ Codex app-server backend (authentication handled by Codex login)');
|
|
737
776
|
}
|
|
777
|
+
else if (backend === 'cline') {
|
|
778
|
+
console.log('✓ Cline CLI backend (authentication handled by Cline)');
|
|
779
|
+
}
|
|
738
780
|
else {
|
|
739
781
|
console.log('✓ Claude CLI mode (OAuth token not needed)');
|
|
740
782
|
}
|
|
@@ -821,8 +863,9 @@ async function runAgentLoop(config, options = {}) {
|
|
|
821
863
|
// (workorders are the only run path since v0.28.0).
|
|
822
864
|
const temporalStartup = (0, temporal_runtime_js_1.preflightTemporalStartup)(process.env);
|
|
823
865
|
const runtimeBackend = requireRuntimeBackend(config.agent.backend);
|
|
866
|
+
const { connectorConfigLoadResult, privateConnectorPolicy } = (0, connector_bootstrap_js_1.resolveRuntimeConnectorBootstrap)((0, config_loader_js_1.loadConnectorConfig)());
|
|
824
867
|
const temporalPolicy = temporalStartup.temporalFlag === 'on'
|
|
825
|
-
? buildWorkOrderAgentPolicy('temporal', config.agent.model, runtimeBackend)
|
|
868
|
+
? buildWorkOrderAgentPolicy('temporal', config.agent.model, runtimeBackend, privateConnectorPolicy, [])
|
|
826
869
|
: null;
|
|
827
870
|
const temporalEffectiveTools = temporalPolicy
|
|
828
871
|
? (0, tool_policy_js_1.projectCodeActToolPolicy)({
|
|
@@ -843,8 +886,15 @@ async function runAgentLoop(config, options = {}) {
|
|
|
843
886
|
process.env.MAMA_CODEX_COMMAND = codexCommand;
|
|
844
887
|
console.log(`✓ Codex CLI backend (command: ${codexCommand})`);
|
|
845
888
|
}
|
|
846
|
-
|
|
847
|
-
|
|
889
|
+
const usesClineBackend = startupBackend === 'cline' || (0, utilities_js_1.hasClineBackendConfigured)(config);
|
|
890
|
+
if (usesClineBackend) {
|
|
891
|
+
const clineCommand = (0, utilities_js_1.resolveClineCommandForStartup)(config.agent.cline_command);
|
|
892
|
+
process.env.MAMA_CLINE_COMMAND = clineCommand;
|
|
893
|
+
console.log(`✓ Cline CLI backend (command: ${clineCommand})`);
|
|
894
|
+
}
|
|
895
|
+
if (startupBackend === 'claude') {
|
|
896
|
+
console.log('✓ Claude CLI mode (ToS compliance)');
|
|
897
|
+
}
|
|
848
898
|
// Provision default persona templates and multi-agent config on first start
|
|
849
899
|
try {
|
|
850
900
|
await (0, config_manager_js_1.provisionDefaults)();
|
|
@@ -867,7 +917,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
867
917
|
process.env.MAMA_WORKSPACE = workspaceRoot;
|
|
868
918
|
// Initialize channel history with SQLite persistence (Sprint 3 F5)
|
|
869
919
|
(0, index_js_2.initChannelHistory)(db);
|
|
870
|
-
const envelopeBootstrap = (0, envelope_bootstrap_js_1.buildRuntimeEnvelopeBootstrap)(db, config, process.env);
|
|
920
|
+
const envelopeBootstrap = (0, envelope_bootstrap_js_1.buildRuntimeEnvelopeBootstrap)(db, config, process.env, connectorConfigLoadResult);
|
|
871
921
|
const mamaDbPath = (0, config_manager_js_1.expandPath)(config.database.path);
|
|
872
922
|
const toolExecutor = new gateway_tool_executor_js_1.GatewayToolExecutor({
|
|
873
923
|
mamaDbPath: mamaDbPath,
|
|
@@ -875,6 +925,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
875
925
|
rolesConfig: config.roles, // Pass roles from config.yaml
|
|
876
926
|
envelopeIssuanceMode: envelopeBootstrap.metadata.issuance,
|
|
877
927
|
metricsStore,
|
|
928
|
+
privateConnectorPolicy,
|
|
878
929
|
});
|
|
879
930
|
process.env.MAMA_BACKEND = runtimeBackend;
|
|
880
931
|
const agentLoopBackend = runtimeBackend;
|
|
@@ -884,7 +935,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
884
935
|
envelopeIssuanceMode: envelopeBootstrap.metadata.issuance,
|
|
885
936
|
});
|
|
886
937
|
// ── Phase 3: MAMA Core API ────────────────────────────────────────────────
|
|
887
|
-
const { mamaApi, mamaApiClient, connectorExtractionFn } = await (0, mama_core_init_js_1.initMamaCore)(config);
|
|
938
|
+
const { mamaApi, mamaApiClient, connectorExtractionFn, stopExtraction } = await (0, mama_core_init_js_1.initMamaCore)(config);
|
|
888
939
|
// Wire the boot MAMA API onto the shared executor so it never lazily builds a
|
|
889
940
|
// SECOND API/adapter stack against the same DB (initializeMAMAApi). This also
|
|
890
941
|
// lets the memory agent fold into the shared executor (Task 7) instead of
|
|
@@ -903,7 +954,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
903
954
|
toolExecutor.setContextCompileService(contextCompileService);
|
|
904
955
|
agentLoop.setContextCompileService(contextCompileService);
|
|
905
956
|
// ── Phase 4: Memory Agent + MessageRouter ─────────────────────────────────
|
|
906
|
-
const messageRouter = new index_js_2.MessageRouter(sessionStore, agentLoopClient, mamaApiClient, (0, message_router_config_js_1.resolveMessageRouterConfig)(config, runtimeBackend), envelopeBootstrap.envelopeConfig, envelopeBootstrap.envelopeAuthority);
|
|
957
|
+
const messageRouter = new index_js_2.MessageRouter(sessionStore, agentLoopClient, mamaApiClient, (0, message_router_config_js_1.resolveMessageRouterConfig)(config, runtimeBackend), envelopeBootstrap.envelopeConfig, envelopeBootstrap.envelopeAuthority, { privateConnectorPolicy, reportCarry: new report_carry_js_1.FileReportCarryStore() });
|
|
907
958
|
messageRouter.setSessionsDb(db);
|
|
908
959
|
// validationService wired after creation (Phase 5 below)
|
|
909
960
|
const { memoryAgentLoop } = await (0, memory_agent_init_js_1.initMemoryAgent)(oauthManager, config, mamaApi, mamaApiClient, messageRouter, agentLoopBackend, toolExecutor);
|
|
@@ -918,7 +969,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
918
969
|
sessionsDb: db,
|
|
919
970
|
uiCommandQueue,
|
|
920
971
|
};
|
|
921
|
-
|
|
972
|
+
const codeActRawConnectors = resolveCodeActRawConnectors(connectorConfigLoadResult.enabledNames);
|
|
922
973
|
// Wire uiCommandQueue into messageRouter for page context awareness
|
|
923
974
|
messageRouter.setUICommandQueue(uiCommandQueue);
|
|
924
975
|
// Wire sessionsDb into gateway tool executor
|
|
@@ -929,13 +980,16 @@ async function runAgentLoop(config, options = {}) {
|
|
|
929
980
|
const executeLegacyCodeAct = async (code, codeActContext) => {
|
|
930
981
|
const { CodeActSandbox, HostBridge } = await import('../../agent/code-act/index.js');
|
|
931
982
|
const sandbox = new CodeActSandbox();
|
|
932
|
-
const
|
|
983
|
+
const legacyRequestContext = codeActContext
|
|
984
|
+
? { ...codeActContext, agentId: undefined }
|
|
985
|
+
: undefined;
|
|
986
|
+
const resolvedCodeActPolicy = resolveCodeActAgentPolicy(legacyRequestContext, config.multi_agent?.agents, config.multi_agent?.default_agent || 'conductor');
|
|
933
987
|
if (resolvedCodeActPolicy.error) {
|
|
934
988
|
return { success: false, error: resolvedCodeActPolicy.error };
|
|
935
989
|
}
|
|
936
990
|
const codeActAgentId = resolvedCodeActPolicy.agentId;
|
|
937
991
|
const codeActPolicy = resolvedCodeActPolicy.policy ?? {};
|
|
938
|
-
const codeActRole = buildCodeActRole(codeActPolicy);
|
|
992
|
+
const codeActRole = privateConnectorPolicy.projectRole('legacy-unbound', buildCodeActRole(codeActPolicy));
|
|
939
993
|
const codeActReadOnly = isTruthyEnvValue(process.env.MAMA_CODE_ACT_READ_ONLY);
|
|
940
994
|
const codeActTier = codeActReadOnly ? 3 : 2;
|
|
941
995
|
const instanceId = (0, node_crypto_1.randomUUID)();
|
|
@@ -958,7 +1012,9 @@ async function runAgentLoop(config, options = {}) {
|
|
|
958
1012
|
trigger_context: { user_text: '<api-code-act invocation>' },
|
|
959
1013
|
scope: {
|
|
960
1014
|
project_refs: [projectRef],
|
|
961
|
-
raw_connectors:
|
|
1015
|
+
raw_connectors: [
|
|
1016
|
+
...privateConnectorPolicy.projectRawConnectors('legacy-unbound', codeActRawConnectors),
|
|
1017
|
+
],
|
|
962
1018
|
memory_scopes: memoryScopes,
|
|
963
1019
|
allowed_destinations: [],
|
|
964
1020
|
},
|
|
@@ -1172,6 +1228,11 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1172
1228
|
const pm = new AgentProcessManager(fallbackMultiAgentConfig, buildSystemAgentProcessDefaults(config), {
|
|
1173
1229
|
backend: runtimeBackend,
|
|
1174
1230
|
model: config.agent.model,
|
|
1231
|
+
clineCwd: workspaceRoot,
|
|
1232
|
+
clineCommand: process.env.MAMA_CLINE_COMMAND ?? config.agent.cline_command,
|
|
1233
|
+
clineProvider: config.agent.cline_provider,
|
|
1234
|
+
clineDataDir: config.agent.cline_data_dir,
|
|
1235
|
+
privateConnectorPolicy,
|
|
1175
1236
|
});
|
|
1176
1237
|
toolExecutor.setAgentProcessManager(pm);
|
|
1177
1238
|
agentLoop.setAgentProcessManager(pm);
|
|
@@ -1257,11 +1318,12 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1257
1318
|
}
|
|
1258
1319
|
}, 60_000);
|
|
1259
1320
|
const conductorConfig = resolveConductorConfig(config);
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1321
|
+
try {
|
|
1322
|
+
assertConductorBackendSupported(conductorConfig.enabled, runtimeBackend);
|
|
1323
|
+
}
|
|
1324
|
+
catch (error) {
|
|
1263
1325
|
operatorDb.close();
|
|
1264
|
-
throw
|
|
1326
|
+
throw error;
|
|
1265
1327
|
}
|
|
1266
1328
|
// ── Stage-2 workorder consumer (plan S2-T3): the only system run path.
|
|
1267
1329
|
// Constructed before production runtime assembly registers per-kind
|
|
@@ -1332,15 +1394,35 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1332
1394
|
noticeOwner: (summary) => messageRouter.enqueueOperatorNotice(summary),
|
|
1333
1395
|
opsAlarm,
|
|
1334
1396
|
runOptionsFor: async (wo) => {
|
|
1397
|
+
// Resolve the run's raw binding before constructing either backend's
|
|
1398
|
+
// role/catalog. The catalog and execution envelope must use the same
|
|
1399
|
+
// projection so an unbound or non-private run never advertises private
|
|
1400
|
+
// connector tools it cannot execute.
|
|
1401
|
+
const workOrderBatch = causeEventIdsFromPayload(wo.payload);
|
|
1402
|
+
let temporalContext;
|
|
1403
|
+
let temporalBinding = null;
|
|
1404
|
+
if (wo.workKind === 'temporal') {
|
|
1405
|
+
temporalContext = (0, temporal_worker_js_1.buildTemporalWorkerContext)(taskLedger, wo);
|
|
1406
|
+
temporalBinding = temporalTaskBinding(taskLedger, temporalContext.taskId);
|
|
1407
|
+
}
|
|
1408
|
+
const projectId = (0, reactive_config_js_1.resolveReactiveProjectRoot)(config, process.env);
|
|
1409
|
+
const workOrderScope = workOrderEnvelopeScope({
|
|
1410
|
+
workKind: wo.workKind,
|
|
1411
|
+
projectId,
|
|
1412
|
+
laneConnectors: codeActRawConnectors,
|
|
1413
|
+
temporalBinding,
|
|
1414
|
+
privateConnectorPolicy,
|
|
1415
|
+
});
|
|
1335
1416
|
// Worker prompt selects the provider's supported tool path: Claude's
|
|
1336
1417
|
// text gateway or Codex's injected native host tools. Both avoid the
|
|
1337
1418
|
// spawn-default code-act path, where per-run envelope/capture overrides
|
|
1338
1419
|
// cannot reach (shadow-gate §8.2).
|
|
1339
1420
|
const { buildWorkerSystemPrompt } = await import('../../operator/worker-run.js');
|
|
1340
|
-
const workOrderPolicy = buildWorkOrderAgentPolicy(wo.workKind, config.agent.model, runtimeBackend);
|
|
1421
|
+
const workOrderPolicy = buildWorkOrderAgentPolicy(wo.workKind, config.agent.model, runtimeBackend, privateConnectorPolicy, workOrderScope.raw_connectors);
|
|
1341
1422
|
const runOptions = attachWorkOrderAttemptContext({
|
|
1342
1423
|
systemPrompt: buildWorkerSystemPrompt(workOrderPolicy.gatewayToolsPrompt, runtimeBackend, wo.workKind),
|
|
1343
1424
|
agentContext: workOrderPolicy.agentContext,
|
|
1425
|
+
workOrderBriefProjectionPolicy: workOrderPolicy.briefProjectionPolicy,
|
|
1344
1426
|
}, wo.id);
|
|
1345
1427
|
// A temporal run is bound to ONE task on ONE channel, and the packet check
|
|
1346
1428
|
// (temporalPacketRawSourcesWithinBoundSource) enforces exactly that: every raw ref
|
|
@@ -1359,15 +1441,11 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1359
1441
|
// durable change the run produces rest on it WITHOUT the agent restating anything -
|
|
1360
1442
|
// the system knew the batch before the run began. This is the whole difference
|
|
1361
1443
|
// between a bounded run and an unbounded one.
|
|
1362
|
-
const workOrderBatch = causeEventIdsFromPayload(wo.payload);
|
|
1363
1444
|
if (workOrderBatch.length > 0) {
|
|
1364
1445
|
runOptions.causeEventIds = workOrderBatch;
|
|
1365
1446
|
}
|
|
1366
|
-
|
|
1367
|
-
if (wo.workKind === 'temporal') {
|
|
1368
|
-
const temporalContext = (0, temporal_worker_js_1.buildTemporalWorkerContext)(taskLedger, wo);
|
|
1447
|
+
if (temporalContext) {
|
|
1369
1448
|
runOptions.temporalWorkContext = temporalContext;
|
|
1370
|
-
temporalBinding = temporalTaskBinding(taskLedger, temporalContext.taskId);
|
|
1371
1449
|
}
|
|
1372
1450
|
// Per-run scoped envelope (live-gate finding, 2026-07-18): gateway
|
|
1373
1451
|
// 'model_tool' executions are envelope-gated, and workerRun is a new
|
|
@@ -1376,7 +1454,6 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1376
1454
|
// lane's issuance (createPersonaReportAsk wiring below); issuance
|
|
1377
1455
|
// failure rejects -> failWorkOrder (no envelope-less fallback run).
|
|
1378
1456
|
if (envelopeBootstrap.envelopeAuthority && envelopeBootstrap.metadata.issuance !== 'off') {
|
|
1379
|
-
const projectId = (0, reactive_config_js_1.resolveReactiveProjectRoot)(config, process.env);
|
|
1380
1457
|
const wallSeconds = Math.min(Math.max(Number(process.env.MAMA_REPORT_WALL_SECONDS) || 900, 60), 1800);
|
|
1381
1458
|
runOptions.envelope = await envelopeBootstrap.envelopeAuthority.buildAndPersist({
|
|
1382
1459
|
agent_id: `workorder-${wo.workKind}`,
|
|
@@ -1386,16 +1463,8 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1386
1463
|
source: 'watch',
|
|
1387
1464
|
channel_id: `worker:${wo.workKind}`,
|
|
1388
1465
|
trigger_context: { user_text: `<stage2 workorder ${wo.workKind}#${wo.id}>` },
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
workKind: wo.workKind,
|
|
1392
|
-
projectId,
|
|
1393
|
-
laneConnectors: codeActRawConnectors,
|
|
1394
|
-
temporalBinding,
|
|
1395
|
-
});
|
|
1396
|
-
// Identity scopes only - the read mirror is enforcement-layer.
|
|
1397
|
-
return scope;
|
|
1398
|
-
})(),
|
|
1466
|
+
// Identity scopes only - the read mirror is enforcement-layer.
|
|
1467
|
+
scope: workOrderScope,
|
|
1399
1468
|
tier: 2,
|
|
1400
1469
|
budget: { wall_seconds: wallSeconds },
|
|
1401
1470
|
expires_at: new Date(Date.now() + wallSeconds * 1000 + 30_000).toISOString(),
|
|
@@ -1490,8 +1559,10 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1490
1559
|
log: (line) => temporalLogger.info(line),
|
|
1491
1560
|
});
|
|
1492
1561
|
temporalRuntime = temporalAssembly.runtime;
|
|
1493
|
-
const { rawStoreForApi, enabledConnectorNames, connectorSchedulerStop } = await (0, connector_init_js_1.initConnectors)(connectorExtractionFn, {
|
|
1494
|
-
|
|
1562
|
+
const { rawStoreForApi, enabledConnectorNames, connectorSchedulerStop } = await (0, connector_init_js_1.initConnectors)(connectorExtractionFn, {
|
|
1563
|
+
connectorConfigLoadResult,
|
|
1564
|
+
nudge: () => triggerLoopNudge.current?.(),
|
|
1565
|
+
});
|
|
1495
1566
|
// Inject rawStore into tool executor for agent_test connector data access
|
|
1496
1567
|
if (rawStoreForApi) {
|
|
1497
1568
|
toolExecutor.setRawStore(rawStoreForApi);
|
|
@@ -1525,7 +1596,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1525
1596
|
const { createTriggerAgentRuntime } = await import('../../operator/trigger-author.js');
|
|
1526
1597
|
const { reviewTriggerCLI } = await import('../../operator/trigger-review.js');
|
|
1527
1598
|
const { ReportScheduler, FileReportScheduleStore, parseReportHours } = await import('../../operator/report-scheduler.js');
|
|
1528
|
-
const {
|
|
1599
|
+
const { createTelegramReportCarryDelivery, createTelegramReportOutput } = await import('../../operator/report-carry-delivery.js');
|
|
1529
1600
|
// Set when a report is composed, read when that same report is delivered. Safe
|
|
1530
1601
|
// because ALL operator work serializes on the operator lane (SOURCE_GLOBAL_LANES),
|
|
1531
1602
|
// so compose and deliver cannot interleave with another report - stated here
|
|
@@ -1542,10 +1613,14 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1542
1613
|
// Owner-report leg (M1.5): destination chat comes from env (~/.mama/start.sh),
|
|
1543
1614
|
// never source. No chat configured or no telegram gateway -> loop stays read-only.
|
|
1544
1615
|
const reportChatId = resolveOperatorReportChatId(process.env, config.telegram?.allowed_chats);
|
|
1616
|
+
const persistReportCarry = reportChatId
|
|
1617
|
+
? createTelegramReportCarryDelivery({
|
|
1618
|
+
reportChatId,
|
|
1619
|
+
carryStore: new report_carry_js_1.FileReportCarryStore(),
|
|
1620
|
+
})
|
|
1621
|
+
: undefined;
|
|
1545
1622
|
const reportOutput = reportChatId && telegramGateway
|
|
1546
|
-
? {
|
|
1547
|
-
send: (text, deliveryId) => telegramGateway.sendMessage(reportChatId, text, deliveryId ?? `operator-report:legacy:${(0, node_crypto_1.randomUUID)()}`),
|
|
1548
|
-
}
|
|
1623
|
+
? createTelegramReportOutput({ reportChatId, telegramSender: telegramGateway })
|
|
1549
1624
|
: undefined;
|
|
1550
1625
|
// Scheduled full-report leg (M2): local hours from env (~/.mama/start.sh), never source.
|
|
1551
1626
|
// Empty/absent -> [] -> leg off. Requires the same telegram sink as the digest leg.
|
|
@@ -1560,7 +1635,11 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1560
1635
|
const triggerAgentRuntime = createTriggerAgentRuntime(runtimeBackend, {
|
|
1561
1636
|
model: config.agent.model,
|
|
1562
1637
|
cwd: workspaceRoot,
|
|
1563
|
-
command:
|
|
1638
|
+
command: runtimeBackend === 'cline'
|
|
1639
|
+
? (process.env.MAMA_CLINE_COMMAND ?? config.agent.cline_command)
|
|
1640
|
+
: process.env.MAMA_CODEX_COMMAND,
|
|
1641
|
+
provider: config.agent.cline_provider,
|
|
1642
|
+
dataDir: config.agent.cline_data_dir,
|
|
1564
1643
|
});
|
|
1565
1644
|
stopTriggerAgentRuntime = () => triggerAgentRuntime.stop();
|
|
1566
1645
|
const triggerLoop = new OperatorTriggerLoop({
|
|
@@ -1610,7 +1689,9 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1610
1689
|
// read authority is bounded per tool by envelope/tool-connector-scope.ts
|
|
1611
1690
|
// against the connectors granted here.
|
|
1612
1691
|
project_refs: [{ kind: 'project', id: projectId }],
|
|
1613
|
-
raw_connectors:
|
|
1692
|
+
raw_connectors: [
|
|
1693
|
+
...privateConnectorPolicy.projectRawConnectors('operator-report', codeActRawConnectors),
|
|
1694
|
+
],
|
|
1614
1695
|
memory_scopes: uniqueMemoryScopes((0, scope_context_js_1.deriveMemoryScopes)({ source: 'operator', channelId: 'report', projectId })),
|
|
1615
1696
|
allowed_destinations: [],
|
|
1616
1697
|
},
|
|
@@ -1621,6 +1702,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1621
1702
|
}
|
|
1622
1703
|
: undefined,
|
|
1623
1704
|
run: async (prompt, envelope) => {
|
|
1705
|
+
const reportAgentPolicy = buildOperatorReportAgentPolicy(config.agent.model, runtimeBackend, privateConnectorPolicy);
|
|
1624
1706
|
const result = await agentLoop.runWithContent([{ type: 'text', text: prompt }], {
|
|
1625
1707
|
sessionKey: report_run_js_1.OPERATOR_REPORT_SESSION_KEY,
|
|
1626
1708
|
source: 'operator',
|
|
@@ -1630,8 +1712,8 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1630
1712
|
// gather no matter what the prompt instructs (roleAllowsOuterCodeAct
|
|
1631
1713
|
// fails closed on an absent role - agent-loop.ts). Same built-in
|
|
1632
1714
|
// least-privilege treatment the Stage-2 workers get.
|
|
1633
|
-
agentContext:
|
|
1634
|
-
|
|
1715
|
+
agentContext: reportAgentPolicy.agentContext,
|
|
1716
|
+
gatewayToolsPrompt: reportAgentPolicy.gatewayToolsPrompt,
|
|
1635
1717
|
// Stateless report lane: each run starts on a fresh session so the
|
|
1636
1718
|
// continuous session no longer accumulates every run's gather dumps
|
|
1637
1719
|
// (measured 146s -> 521s growth over 3 days). Continuity comes from
|
|
@@ -1667,11 +1749,15 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1667
1749
|
// Kagemusha dual output: the same scheduled run updates the /ui operator board
|
|
1668
1750
|
// slots via report_publish, then writes the plain-text owner report.
|
|
1669
1751
|
fullReportBoardLines: buildBoardPublishLines(),
|
|
1670
|
-
//
|
|
1671
|
-
//
|
|
1672
|
-
|
|
1752
|
+
// TG-06: composition supplies provenance immediately to the prepared
|
|
1753
|
+
// delivery; this callback receives that durable artifact only after send success.
|
|
1754
|
+
fullReportProvenance: () => lastReportProvenance,
|
|
1755
|
+
persistLastFullReport: (report) => {
|
|
1673
1756
|
(0, leg_cadence_js_1.getLegCadence)()?.beat('full-report');
|
|
1674
|
-
|
|
1757
|
+
if (!persistReportCarry) {
|
|
1758
|
+
throw new Error('Cannot persist full report carry without a Telegram report chat');
|
|
1759
|
+
}
|
|
1760
|
+
persistReportCarry(report);
|
|
1675
1761
|
},
|
|
1676
1762
|
pendingReportStore: new FilePendingReportStore((0, config_manager_js_1.expandPath)('~/.mama/operator/pending-owner-reports.json'), (line) => console.error(line)),
|
|
1677
1763
|
config: {
|
|
@@ -1725,7 +1811,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1725
1811
|
maxTurns: conductorConfig.maxTurns,
|
|
1726
1812
|
maxTokens: conductorConfig.maxTokens,
|
|
1727
1813
|
});
|
|
1728
|
-
const conductorPolicy = buildConductorAgentPolicy(config.agent.model, runtimeBackend);
|
|
1814
|
+
const conductorPolicy = buildConductorAgentPolicy(config.agent.model, runtimeBackend, privateConnectorPolicy);
|
|
1729
1815
|
// Per-run envelope, mirroring the report lane: without it every
|
|
1730
1816
|
// model_tool call dies 'envelope_missing' while the run resolves and
|
|
1731
1817
|
// acks the batch - zero work, green ledger (review F2).
|
|
@@ -1819,6 +1905,8 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1819
1905
|
envelopeMetadata: envelopeBootstrap.metadata,
|
|
1820
1906
|
envelopeAuthority: envelopeBootstrap.envelopeAuthority,
|
|
1821
1907
|
contextCompileService,
|
|
1908
|
+
connectorConfigLoadResult,
|
|
1909
|
+
privateConnectorPolicy,
|
|
1822
1910
|
});
|
|
1823
1911
|
channelDeltaSink.current = (channelKey, lines, eventIds) => eventBus.emit({ type: 'operator:channel-delta', channelKey, lines, eventIds });
|
|
1824
1912
|
await (0, api_routes_init_js_1.registerApiRoutes)({
|
|
@@ -1834,6 +1922,10 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1834
1922
|
slackGateway,
|
|
1835
1923
|
graphHandler,
|
|
1836
1924
|
getAdapter,
|
|
1925
|
+
privateConnectorPolicy,
|
|
1926
|
+
rawConnectorScope: [
|
|
1927
|
+
...privateConnectorPolicy.projectRawConnectors('workorder-board', codeActRawConnectors),
|
|
1928
|
+
],
|
|
1837
1929
|
sessionsDb: db,
|
|
1838
1930
|
workOrderConsumer: workOrderConsumer ?? undefined,
|
|
1839
1931
|
});
|
|
@@ -1859,6 +1951,7 @@ async function runAgentLoop(config, options = {}) {
|
|
|
1859
1951
|
pluginLoader,
|
|
1860
1952
|
agentLoop,
|
|
1861
1953
|
memoryAgentLoop,
|
|
1954
|
+
stopExtraction,
|
|
1862
1955
|
sessionStore,
|
|
1863
1956
|
db,
|
|
1864
1957
|
metricsStore,
|