@jungjaehoon/mama-os 0.22.1 → 0.24.0
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 +22 -0
- package/README.md +3 -1
- package/dist/agent/agent-loop.d.ts +3 -9
- package/dist/agent/agent-loop.d.ts.map +1 -1
- package/dist/agent/agent-loop.js +419 -216
- package/dist/agent/agent-loop.js.map +1 -1
- package/dist/agent/code-act/constants.d.ts +2 -2
- package/dist/agent/code-act/constants.d.ts.map +1 -1
- package/dist/agent/code-act/constants.js +16 -9
- package/dist/agent/code-act/constants.js.map +1 -1
- package/dist/agent/code-act/host-bridge.d.ts +12 -11
- package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
- package/dist/agent/code-act/host-bridge.js +92 -15
- package/dist/agent/code-act/host-bridge.js.map +1 -1
- package/dist/agent/code-act/index.d.ts +2 -0
- package/dist/agent/code-act/index.d.ts.map +1 -1
- package/dist/agent/code-act/index.js +5 -1
- package/dist/agent/code-act/index.js.map +1 -1
- package/dist/agent/code-act/tool-policy.d.ts +42 -0
- package/dist/agent/code-act/tool-policy.d.ts.map +1 -0
- package/dist/agent/code-act/tool-policy.js +122 -0
- package/dist/agent/code-act/tool-policy.js.map +1 -0
- package/dist/agent/code-act/type-definition-generator.d.ts +4 -3
- package/dist/agent/code-act/type-definition-generator.d.ts.map +1 -1
- package/dist/agent/code-act/type-definition-generator.js +26 -48
- package/dist/agent/code-act/type-definition-generator.js.map +1 -1
- package/dist/agent/codex-app-server-process.d.ts +116 -0
- package/dist/agent/codex-app-server-process.d.ts.map +1 -0
- package/dist/agent/codex-app-server-process.js +1382 -0
- package/dist/agent/codex-app-server-process.js.map +1 -0
- package/dist/agent/codex-home.d.ts +9 -0
- package/dist/agent/codex-home.d.ts.map +1 -1
- package/dist/agent/codex-home.js +626 -4
- package/dist/agent/codex-home.js.map +1 -1
- package/dist/agent/codex-thread-registry.d.ts +63 -0
- package/dist/agent/codex-thread-registry.d.ts.map +1 -0
- package/dist/agent/codex-thread-registry.js +433 -0
- package/dist/agent/codex-thread-registry.js.map +1 -0
- package/dist/agent/gateway-tool-executor.d.ts +20 -7
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
- package/dist/agent/gateway-tool-executor.js +254 -90
- package/dist/agent/gateway-tool-executor.js.map +1 -1
- package/dist/agent/gateway-tools.md +10 -5
- package/dist/agent/managed-agent-runtime-sync.d.ts.map +1 -1
- package/dist/agent/managed-agent-runtime-sync.js +0 -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 +51 -3
- package/dist/agent/model-runner.d.ts.map +1 -1
- package/dist/agent/model-runner.js +1 -1
- package/dist/agent/model-runner.js.map +1 -1
- package/dist/agent/persistent-cli-adapter.d.ts +1 -0
- package/dist/agent/persistent-cli-adapter.d.ts.map +1 -1
- package/dist/agent/persistent-cli-adapter.js +3 -0
- package/dist/agent/persistent-cli-adapter.js.map +1 -1
- package/dist/agent/role-manager.d.ts +22 -1
- package/dist/agent/role-manager.d.ts.map +1 -1
- package/dist/agent/role-manager.js +39 -2
- package/dist/agent/role-manager.js.map +1 -1
- package/dist/agent/session-pool.d.ts +2 -2
- package/dist/agent/session-pool.d.ts.map +1 -1
- package/dist/agent/session-pool.js +6 -6
- package/dist/agent/session-pool.js.map +1 -1
- package/dist/agent/tool-registry.d.ts +14 -0
- package/dist/agent/tool-registry.d.ts.map +1 -1
- package/dist/agent/tool-registry.js +81 -12
- package/dist/agent/tool-registry.js.map +1 -1
- package/dist/agent/types.d.ts +49 -7
- 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 +62 -40
- package/dist/api/graph-api.js.map +1 -1
- package/dist/api/operator-tasks-handler.d.ts.map +1 -1
- package/dist/api/operator-tasks-handler.js +6 -2
- package/dist/api/operator-tasks-handler.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 +22 -14
- 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 +7 -4
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/start.d.ts +2 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +259 -23
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.js +2 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/config/config-manager.d.ts +0 -5
- package/dist/cli/config/config-manager.d.ts.map +1 -1
- package/dist/cli/config/config-manager.js +78 -6
- package/dist/cli/config/config-manager.js.map +1 -1
- package/dist/cli/config/types.d.ts +4 -4
- package/dist/cli/config/types.d.ts.map +1 -1
- package/dist/cli/config/types.js +36 -0
- package/dist/cli/config/types.js.map +1 -1
- package/dist/cli/index.js +2 -2
- 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 +106 -60
- package/dist/cli/runtime/agent-loop-init.js.map +1 -1
- package/dist/cli/runtime/api-routes-init.d.ts +3 -0
- package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
- package/dist/cli/runtime/api-routes-init.js +226 -51
- package/dist/cli/runtime/api-routes-init.js.map +1 -1
- package/dist/cli/runtime/connector-init.d.ts.map +1 -1
- package/dist/cli/runtime/connector-init.js +13 -17
- package/dist/cli/runtime/connector-init.js.map +1 -1
- package/dist/cli/runtime/envelope-bootstrap.d.ts.map +1 -1
- package/dist/cli/runtime/envelope-bootstrap.js +13 -1
- 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 +5 -0
- package/dist/cli/runtime/gateway-init.js.map +1 -1
- package/dist/cli/runtime/mama-core-init.d.ts +2 -2
- package/dist/cli/runtime/mama-core-init.d.ts.map +1 -1
- package/dist/cli/runtime/mama-core-init.js +17 -0
- package/dist/cli/runtime/mama-core-init.js.map +1 -1
- package/dist/cli/runtime/memory-agent-init.d.ts +1 -1
- package/dist/cli/runtime/memory-agent-init.d.ts.map +1 -1
- package/dist/cli/runtime/memory-agent-init.js +16 -6
- package/dist/cli/runtime/memory-agent-init.js.map +1 -1
- package/dist/cli/runtime/types.d.ts +4 -26
- package/dist/cli/runtime/types.d.ts.map +1 -1
- package/dist/cli/runtime/utilities.js +2 -2
- package/dist/cli/runtime/utilities.js.map +1 -1
- package/dist/connectors/config-loader.d.ts +24 -0
- package/dist/connectors/config-loader.d.ts.map +1 -0
- package/dist/connectors/config-loader.js +205 -0
- package/dist/connectors/config-loader.js.map +1 -0
- package/dist/connectors/framework/types.d.ts +2 -0
- package/dist/connectors/framework/types.d.ts.map +1 -1
- package/dist/connectors/kagemusha/query-tools.js +2 -2
- package/dist/connectors/kagemusha/query-tools.js.map +1 -1
- package/dist/envelope/reactive-config.d.ts +2 -2
- package/dist/envelope/reactive-config.d.ts.map +1 -1
- package/dist/envelope/reactive-config.js +36 -4
- package/dist/envelope/reactive-config.js.map +1 -1
- package/dist/gateways/context-injector.d.ts +2 -1
- package/dist/gateways/context-injector.d.ts.map +1 -1
- package/dist/gateways/context-injector.js.map +1 -1
- package/dist/gateways/message-router.d.ts +19 -1
- package/dist/gateways/message-router.d.ts.map +1 -1
- package/dist/gateways/message-router.js +179 -24
- package/dist/gateways/message-router.js.map +1 -1
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +13 -0
- package/dist/gateways/telegram.js.map +1 -1
- package/dist/gateways/types.d.ts +4 -1
- package/dist/gateways/types.d.ts.map +1 -1
- package/dist/memory/history-extractor.d.ts +0 -24
- package/dist/memory/history-extractor.d.ts.map +1 -1
- package/dist/memory/history-extractor.js +0 -132
- package/dist/memory/history-extractor.js.map +1 -1
- package/dist/memory/save-candidate-extractor.d.ts +3 -0
- package/dist/memory/save-candidate-extractor.d.ts.map +1 -1
- package/dist/memory/save-candidate-extractor.js +12 -1
- package/dist/memory/save-candidate-extractor.js.map +1 -1
- package/dist/memory/secret-filter.d.ts +22 -0
- package/dist/memory/secret-filter.d.ts.map +1 -0
- package/dist/memory/secret-filter.js +77 -0
- package/dist/memory/secret-filter.js.map +1 -0
- package/dist/multi-agent/agent-process-manager.d.ts +9 -1
- package/dist/multi-agent/agent-process-manager.d.ts.map +1 -1
- package/dist/multi-agent/agent-process-manager.js +197 -49
- package/dist/multi-agent/agent-process-manager.js.map +1 -1
- package/dist/multi-agent/multi-agent-base.d.ts.map +1 -1
- package/dist/multi-agent/multi-agent-base.js +2 -1
- package/dist/multi-agent/multi-agent-base.js.map +1 -1
- package/dist/multi-agent/runtime-process.d.ts +18 -15
- package/dist/multi-agent/runtime-process.d.ts.map +1 -1
- package/dist/multi-agent/runtime-process.js +63 -59
- package/dist/multi-agent/runtime-process.js.map +1 -1
- package/dist/multi-agent/types.d.ts +13 -7
- package/dist/multi-agent/types.d.ts.map +1 -1
- package/dist/multi-agent/types.js.map +1 -1
- package/dist/multi-agent/workflow-engine.js +3 -3
- package/dist/multi-agent/workflow-engine.js.map +1 -1
- package/dist/multi-agent/workflow-types.d.ts +2 -2
- package/dist/multi-agent/workflow-types.d.ts.map +1 -1
- package/dist/observability/code-audit.d.ts +4 -0
- package/dist/observability/code-audit.d.ts.map +1 -1
- package/dist/observability/code-audit.js +69 -0
- package/dist/observability/code-audit.js.map +1 -1
- package/dist/operator/briefs.d.ts +26 -0
- package/dist/operator/briefs.d.ts.map +1 -0
- package/dist/operator/briefs.js +128 -0
- package/dist/operator/briefs.js.map +1 -0
- package/dist/operator/operator-trigger-loop.d.ts +27 -0
- package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
- package/dist/operator/operator-trigger-loop.js +72 -12
- package/dist/operator/operator-trigger-loop.js.map +1 -1
- package/dist/operator/report-carry.d.ts +29 -0
- package/dist/operator/report-carry.d.ts.map +1 -0
- package/dist/operator/report-carry.js +81 -0
- package/dist/operator/report-carry.js.map +1 -0
- package/dist/operator/report-run.d.ts +4 -4
- package/dist/operator/shadow-capture.d.ts +20 -0
- package/dist/operator/shadow-capture.d.ts.map +1 -0
- package/dist/operator/shadow-capture.js +34 -0
- package/dist/operator/shadow-capture.js.map +1 -0
- package/dist/operator/situation-report.d.ts +9 -0
- package/dist/operator/situation-report.d.ts.map +1 -1
- package/dist/operator/situation-report.js +56 -26
- package/dist/operator/situation-report.js.map +1 -1
- package/dist/operator/task-ledger.d.ts +90 -2
- package/dist/operator/task-ledger.d.ts.map +1 -1
- package/dist/operator/task-ledger.js +359 -23
- package/dist/operator/task-ledger.js.map +1 -1
- package/dist/operator/trigger-author.d.ts +35 -1
- package/dist/operator/trigger-author.d.ts.map +1 -1
- package/dist/operator/trigger-author.js +73 -10
- package/dist/operator/trigger-author.js.map +1 -1
- package/dist/operator/worker-run.d.ts +89 -0
- package/dist/operator/worker-run.d.ts.map +1 -0
- package/dist/operator/worker-run.js +127 -0
- package/dist/operator/worker-run.js.map +1 -0
- package/dist/operator/workorder-consumer.d.ts +121 -0
- package/dist/operator/workorder-consumer.d.ts.map +1 -0
- package/dist/operator/workorder-consumer.js +253 -0
- package/dist/operator/workorder-consumer.js.map +1 -0
- package/dist/operator/workorder-hooks.d.ts +30 -0
- package/dist/operator/workorder-hooks.d.ts.map +1 -0
- package/dist/operator/workorder-hooks.js +70 -0
- package/dist/operator/workorder-hooks.js.map +1 -0
- package/dist/operator/workorder-publishers.d.ts +68 -0
- package/dist/operator/workorder-publishers.d.ts.map +1 -0
- package/dist/operator/workorder-publishers.js +150 -0
- package/dist/operator/workorder-publishers.js.map +1 -0
- package/dist/security/security-monitor.d.ts +7 -0
- package/dist/security/security-monitor.d.ts.map +1 -1
- package/dist/security/security-monitor.js +17 -0
- package/dist/security/security-monitor.js.map +1 -1
- 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 +4 -5
- package/dist/setup/setup-prompt.js.map +1 -1
- package/dist/utils/untrusted-content.d.ts +13 -0
- package/dist/utils/untrusted-content.d.ts.map +1 -1
- package/dist/utils/untrusted-content.js +43 -0
- package/dist/utils/untrusted-content.js.map +1 -1
- package/package.json +2 -2
- package/public/viewer/js/modules/agents.js +13 -9
- package/public/viewer/js/modules/settings.js +15 -10
- package/public/viewer/src/modules/agents.ts +12 -10
- package/public/viewer/src/modules/settings.ts +17 -12
- package/public/viewer/src/utils/api.ts +2 -2
- package/templates/AGENTS.codex.md +2 -23
- package/templates/personas/conductor.md +1 -1
- package/dist/agent/codex-mcp-process.d.ts +0 -105
- package/dist/agent/codex-mcp-process.d.ts.map +0 -1
- package/dist/agent/codex-mcp-process.js +0 -748
- package/dist/agent/codex-mcp-process.js.map +0 -1
|
@@ -18,10 +18,16 @@ exports.authorTriggers = authorTriggers;
|
|
|
18
18
|
exports.buildAuthorPrompt = buildAuthorPrompt;
|
|
19
19
|
exports.parseTriggerSpecs = parseTriggerSpecs;
|
|
20
20
|
exports.validateTriggerSpec = validateTriggerSpec;
|
|
21
|
+
exports.createAskAgentCLI = createAskAgentCLI;
|
|
22
|
+
exports.createTriggerAgentRuntime = createTriggerAgentRuntime;
|
|
21
23
|
const node_crypto_1 = require("node:crypto");
|
|
22
24
|
const node_child_process_1 = require("node:child_process");
|
|
23
25
|
const node_util_1 = require("node:util");
|
|
26
|
+
const runtime_process_js_1 = require("../multi-agent/runtime-process.js");
|
|
24
27
|
const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
28
|
+
const TRIGGER_CODEX_SYSTEM_PROMPT = 'Return only the requested JSON value, with no prose or code fences.';
|
|
29
|
+
const TRIGGER_AUTHOR_SESSION_KEY = 'operator:trigger-author';
|
|
30
|
+
const TRIGGER_REVIEW_SESSION_KEY = 'operator:trigger-review';
|
|
25
31
|
async function authorTriggers(events, registry, askAgent, opts = {}) {
|
|
26
32
|
const existing = registry.listActive();
|
|
27
33
|
const prompt = buildAuthorPrompt(events, existing);
|
|
@@ -152,17 +158,74 @@ function validateTriggerSpec(spec) {
|
|
|
152
158
|
requiredEvidence: spec.requiredEvidence,
|
|
153
159
|
};
|
|
154
160
|
}
|
|
155
|
-
/**
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
161
|
+
/** Build the legacy bare-Claude JSON runner while allowing command injection in tests. */
|
|
162
|
+
function createAskAgentCLI(execute = executeClaudeCLI) {
|
|
163
|
+
return async (prompt) => {
|
|
164
|
+
const { stdout } = await execute('claude', ['-p', prompt, '--output-format', 'json'], {
|
|
165
|
+
maxBuffer: 16 * 1024 * 1024,
|
|
166
|
+
});
|
|
167
|
+
const parsed = JSON.parse(stdout);
|
|
168
|
+
if (parsed.type === 'result' && typeof parsed.result === 'string')
|
|
169
|
+
return parsed.result;
|
|
170
|
+
throw new Error('claude CLI did not return a text result');
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/** Real agent: the local claude CLI (CLI-over-API). Preserved for eval compatibility. */
|
|
174
|
+
exports.askAgentCLI = createAskAgentCLI();
|
|
175
|
+
/**
|
|
176
|
+
* Provider boundary for trigger authoring and review.
|
|
177
|
+
*
|
|
178
|
+
* Claude keeps the historical bare CLI path. Codex shares one app-server
|
|
179
|
+
* connection, but every structured task starts a fresh, isolated, read-only
|
|
180
|
+
* session and advertises no host tools.
|
|
181
|
+
*/
|
|
182
|
+
function createTriggerAgentRuntime(backend, options = {}, dependencies = {}) {
|
|
183
|
+
if (backend === 'claude') {
|
|
184
|
+
const askClaude = dependencies.askClaude ?? exports.askAgentCLI;
|
|
185
|
+
return {
|
|
186
|
+
askAuthor: askClaude,
|
|
187
|
+
askReview: askClaude,
|
|
188
|
+
stop: async () => undefined,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
const createCodexRuntime = dependencies.createCodexRuntime ??
|
|
192
|
+
((runtimeOptions) => new runtime_process_js_1.CodexRuntimeProcess(runtimeOptions));
|
|
193
|
+
const runner = createCodexRuntime({
|
|
194
|
+
defaultSessionKey: TRIGGER_AUTHOR_SESSION_KEY,
|
|
195
|
+
model: options.model,
|
|
196
|
+
systemPrompt: TRIGGER_CODEX_SYSTEM_PROMPT,
|
|
197
|
+
cwd: options.cwd,
|
|
198
|
+
sandbox: 'read-only',
|
|
199
|
+
requestTimeout: options.requestTimeout,
|
|
200
|
+
command: options.command,
|
|
159
201
|
});
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
202
|
+
const askInSession = (sessionKey) => async (prompt) => {
|
|
203
|
+
const result = await runner.prompt(prompt, undefined, {
|
|
204
|
+
sessionKey,
|
|
205
|
+
resumeSession: false,
|
|
206
|
+
systemPrompt: TRIGGER_CODEX_SYSTEM_PROMPT,
|
|
207
|
+
});
|
|
208
|
+
if (typeof result.response !== 'string') {
|
|
209
|
+
throw new Error('Codex trigger agent did not return a text result');
|
|
210
|
+
}
|
|
211
|
+
return result.response;
|
|
212
|
+
};
|
|
213
|
+
let stopPromise;
|
|
214
|
+
return {
|
|
215
|
+
askAuthor: askInSession(TRIGGER_AUTHOR_SESSION_KEY),
|
|
216
|
+
askReview: askInSession(TRIGGER_REVIEW_SESSION_KEY),
|
|
217
|
+
stop: () => {
|
|
218
|
+
stopPromise ??= Promise.resolve().then(async () => {
|
|
219
|
+
await runner.stop();
|
|
220
|
+
});
|
|
221
|
+
return stopPromise;
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
async function executeClaudeCLI(file, args, options) {
|
|
226
|
+
const { stdout } = await execFileAsync(file, args, options);
|
|
227
|
+
return { stdout: String(stdout) };
|
|
228
|
+
}
|
|
166
229
|
// ---- helpers ----
|
|
167
230
|
function isObject(value) {
|
|
168
231
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-author.js","sourceRoot":"","sources":["../../src/operator/trigger-author.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;
|
|
1
|
+
{"version":3,"file":"trigger-author.js","sourceRoot":"","sources":["../../src/operator/trigger-author.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* workerRun - the operator's worker primitive (plan: owner-console v6 S0-T1).
|
|
3
|
+
*
|
|
4
|
+
* A worker is NOT a standing agent identity and NOT a delegate/native-Task
|
|
5
|
+
* subagent: it is a briefed, FRESH-session lane run - the same substrate the
|
|
6
|
+
* report lane already uses (LaneManager serialization, loud failure, result
|
|
7
|
+
* returned to the caller, gateway calls audited).
|
|
8
|
+
*
|
|
9
|
+
* CALLER CONTRACT (deadlock seal):
|
|
10
|
+
* - Callers must be HOST CODE running OUTSIDE any lane (scheduler ticks,
|
|
11
|
+
* work-order consumers, forwarder hooks).
|
|
12
|
+
* - NEVER call workerRun from inside an active lane run (an LLM run's tool
|
|
13
|
+
* handler, a report run, another worker): the parent holds its global lane
|
|
14
|
+
* slot for its whole duration, so a nested awaited lane run can queue
|
|
15
|
+
* behind its own parent forever.
|
|
16
|
+
*
|
|
17
|
+
* Concurrency: same-kind runs serialize on the `operator:worker:<kind>`
|
|
18
|
+
* session lane; ALL operator work (reports + workers) serializes on the
|
|
19
|
+
* 'operator' global lane, which is separate from chat 'main' so long worker
|
|
20
|
+
* runs never block owner replies.
|
|
21
|
+
*/
|
|
22
|
+
import type { ContentBlock } from '../agent/types.js';
|
|
23
|
+
import type { BackendType } from '../agent/model-runner.js';
|
|
24
|
+
/** Identity fields workerRun owns - never overridable by callers (plan E7/G3). */
|
|
25
|
+
export interface WorkerIdentityOptions {
|
|
26
|
+
sessionKey: string;
|
|
27
|
+
source: string;
|
|
28
|
+
channelId: string;
|
|
29
|
+
freshSession: boolean;
|
|
30
|
+
}
|
|
31
|
+
export type WorkerRunnerOptions = WorkerIdentityOptions & Record<string, unknown>;
|
|
32
|
+
/** Minimal surface of AgentLoop.runWithContent that workerRun needs (DI seam). */
|
|
33
|
+
export interface WorkerRunner {
|
|
34
|
+
runWithContent(content: ContentBlock[], options: WorkerRunnerOptions): Promise<{
|
|
35
|
+
response: string;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
export interface WorkerRunInput {
|
|
39
|
+
/** Worker kind (kebab-case, e.g. 'board', 'wiki', 'memory-curation'). */
|
|
40
|
+
kind: string;
|
|
41
|
+
/** Procedural brief (skill text) injected ahead of the work order. */
|
|
42
|
+
brief: string;
|
|
43
|
+
/** The work order payload the worker acts on. */
|
|
44
|
+
input: string;
|
|
45
|
+
/**
|
|
46
|
+
* Extra run options (e.g. the Stage-2 shadow capture-publisher override).
|
|
47
|
+
* Applied BEFORE the identity fields - identity always wins (plan E7/G3:
|
|
48
|
+
* an override must never move a worker onto another lane or reset another
|
|
49
|
+
* lane's fresh-session pool).
|
|
50
|
+
*/
|
|
51
|
+
runOptions?: Record<string, unknown>;
|
|
52
|
+
}
|
|
53
|
+
/** Env override for the worker-run per-request CLI timeout, in whole seconds. */
|
|
54
|
+
export declare const WORKER_TIMEOUT_ENV = "MAMA_WORKER_TIMEOUT_SECONDS";
|
|
55
|
+
/**
|
|
56
|
+
* Default worker request timeout: 600s. Worker gather runs (board/wiki briefs)
|
|
57
|
+
* are long single model turns that overrun the 300s chat request bound - live
|
|
58
|
+
* shadow evidence killed 8 of 31 orders mid-run at 300s ("CLI error: Request
|
|
59
|
+
* timeout"). 600s is the plan's original per-kind number, un-dropped by that
|
|
60
|
+
* evidence.
|
|
61
|
+
*/
|
|
62
|
+
export declare const DEFAULT_WORKER_TIMEOUT_SECONDS = 600;
|
|
63
|
+
/**
|
|
64
|
+
* Resolve the worker-run per-request CLI timeout in ms. Unset/empty -> the
|
|
65
|
+
* 600s default; any other value MUST be a positive integer number of seconds.
|
|
66
|
+
* A malformed value throws (no silent fallback: a typo must not quietly revert
|
|
67
|
+
* workers to the 300s bound this raise exists to lift). Mirrors the
|
|
68
|
+
* MAMA_STAGE2_WORKORDERS tri-state precedent (workorder-publishers.ts).
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveWorkerRequestTimeoutMs(env?: NodeJS.ProcessEnv): number;
|
|
71
|
+
/**
|
|
72
|
+
* Worker-specific system prompt (shadow-gate finding §8.2): the spawn-default
|
|
73
|
+
* persona prompt carries code-act sandbox instructions, so worker tool calls
|
|
74
|
+
* went through POST /api/code-act - a server-side surface the per-run
|
|
75
|
+
* execution-context seam (envelope, capture override) cannot reach. A custom
|
|
76
|
+
* systemPrompt REPLACES the persona layers entirely (agent-loop.ts:484-486),
|
|
77
|
+
* so Claude workers advertise only the text-gateway syntax while Codex workers
|
|
78
|
+
* use the injected native host tools. Both routes reach the same in-process
|
|
79
|
+
* gateway executor where the per-run seam works.
|
|
80
|
+
*/
|
|
81
|
+
export declare function buildWorkerSystemPrompt(gatewayToolsPrompt: string, backend?: BackendType): string;
|
|
82
|
+
export declare function buildWorkerSessionKey(kind: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* Run a briefed worker on its own operator lane and return its output.
|
|
85
|
+
* Throws loudly on invalid input, runner failure, or an empty response -
|
|
86
|
+
* a worker never ends silently.
|
|
87
|
+
*/
|
|
88
|
+
export declare function workerRun(runner: WorkerRunner, { kind, brief, input, runOptions }: WorkerRunInput): Promise<string>;
|
|
89
|
+
//# sourceMappingURL=worker-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-run.d.ts","sourceRoot":"","sources":["../../src/operator/worker-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,kFAAkF;AAClF,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElF,kFAAkF;AAClF,MAAM,WAAW,YAAY;IAC3B,cAAc,CACZ,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAID,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,gCAAgC,CAAC;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAY1F;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,kBAAkB,EAAE,MAAM,EAC1B,OAAO,GAAE,WAAsB,GAC9B,MAAM,CAiBR;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,cAAc,GACjD,OAAO,CAAC,MAAM,CAAC,CAoCjB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* workerRun - the operator's worker primitive (plan: owner-console v6 S0-T1).
|
|
4
|
+
*
|
|
5
|
+
* A worker is NOT a standing agent identity and NOT a delegate/native-Task
|
|
6
|
+
* subagent: it is a briefed, FRESH-session lane run - the same substrate the
|
|
7
|
+
* report lane already uses (LaneManager serialization, loud failure, result
|
|
8
|
+
* returned to the caller, gateway calls audited).
|
|
9
|
+
*
|
|
10
|
+
* CALLER CONTRACT (deadlock seal):
|
|
11
|
+
* - Callers must be HOST CODE running OUTSIDE any lane (scheduler ticks,
|
|
12
|
+
* work-order consumers, forwarder hooks).
|
|
13
|
+
* - NEVER call workerRun from inside an active lane run (an LLM run's tool
|
|
14
|
+
* handler, a report run, another worker): the parent holds its global lane
|
|
15
|
+
* slot for its whole duration, so a nested awaited lane run can queue
|
|
16
|
+
* behind its own parent forever.
|
|
17
|
+
*
|
|
18
|
+
* Concurrency: same-kind runs serialize on the `operator:worker:<kind>`
|
|
19
|
+
* session lane; ALL operator work (reports + workers) serializes on the
|
|
20
|
+
* 'operator' global lane, which is separate from chat 'main' so long worker
|
|
21
|
+
* runs never block owner replies.
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.DEFAULT_WORKER_TIMEOUT_SECONDS = exports.WORKER_TIMEOUT_ENV = void 0;
|
|
25
|
+
exports.resolveWorkerRequestTimeoutMs = resolveWorkerRequestTimeoutMs;
|
|
26
|
+
exports.buildWorkerSystemPrompt = buildWorkerSystemPrompt;
|
|
27
|
+
exports.buildWorkerSessionKey = buildWorkerSessionKey;
|
|
28
|
+
exports.workerRun = workerRun;
|
|
29
|
+
const KIND_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
30
|
+
/** Env override for the worker-run per-request CLI timeout, in whole seconds. */
|
|
31
|
+
exports.WORKER_TIMEOUT_ENV = 'MAMA_WORKER_TIMEOUT_SECONDS';
|
|
32
|
+
/**
|
|
33
|
+
* Default worker request timeout: 600s. Worker gather runs (board/wiki briefs)
|
|
34
|
+
* are long single model turns that overrun the 300s chat request bound - live
|
|
35
|
+
* shadow evidence killed 8 of 31 orders mid-run at 300s ("CLI error: Request
|
|
36
|
+
* timeout"). 600s is the plan's original per-kind number, un-dropped by that
|
|
37
|
+
* evidence.
|
|
38
|
+
*/
|
|
39
|
+
exports.DEFAULT_WORKER_TIMEOUT_SECONDS = 600;
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the worker-run per-request CLI timeout in ms. Unset/empty -> the
|
|
42
|
+
* 600s default; any other value MUST be a positive integer number of seconds.
|
|
43
|
+
* A malformed value throws (no silent fallback: a typo must not quietly revert
|
|
44
|
+
* workers to the 300s bound this raise exists to lift). Mirrors the
|
|
45
|
+
* MAMA_STAGE2_WORKORDERS tri-state precedent (workorder-publishers.ts).
|
|
46
|
+
*/
|
|
47
|
+
function resolveWorkerRequestTimeoutMs(env = process.env) {
|
|
48
|
+
const raw = (env[exports.WORKER_TIMEOUT_ENV] ?? '').trim();
|
|
49
|
+
if (raw === '') {
|
|
50
|
+
return exports.DEFAULT_WORKER_TIMEOUT_SECONDS * 1000;
|
|
51
|
+
}
|
|
52
|
+
const seconds = Number(raw);
|
|
53
|
+
if (!Number.isInteger(seconds) || seconds <= 0) {
|
|
54
|
+
throw new Error(`${exports.WORKER_TIMEOUT_ENV} must be a positive integer number of seconds (or unset), got: '${raw}'`);
|
|
55
|
+
}
|
|
56
|
+
return seconds * 1000;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Worker-specific system prompt (shadow-gate finding §8.2): the spawn-default
|
|
60
|
+
* persona prompt carries code-act sandbox instructions, so worker tool calls
|
|
61
|
+
* went through POST /api/code-act - a server-side surface the per-run
|
|
62
|
+
* execution-context seam (envelope, capture override) cannot reach. A custom
|
|
63
|
+
* systemPrompt REPLACES the persona layers entirely (agent-loop.ts:484-486),
|
|
64
|
+
* so Claude workers advertise only the text-gateway syntax while Codex workers
|
|
65
|
+
* use the injected native host tools. Both routes reach the same in-process
|
|
66
|
+
* gateway executor where the per-run seam works.
|
|
67
|
+
*/
|
|
68
|
+
function buildWorkerSystemPrompt(gatewayToolsPrompt, backend = 'claude') {
|
|
69
|
+
const toolInstructions = backend === 'codex'
|
|
70
|
+
? [
|
|
71
|
+
'Follow the brief in the user message. Use the injected native host tools directly.',
|
|
72
|
+
'Call them through the model tool interface; never emit Markdown or JavaScript substitutes.',
|
|
73
|
+
]
|
|
74
|
+
: [
|
|
75
|
+
'Follow the brief in the user message. Call tools ONLY via the tool_call JSON',
|
|
76
|
+
'blocks documented below - no other execution mechanism exists in this session.',
|
|
77
|
+
];
|
|
78
|
+
return [
|
|
79
|
+
'You are a MAMA OS system worker. You execute exactly ONE work order and stop.',
|
|
80
|
+
...toolInstructions,
|
|
81
|
+
'Do not ask questions; finish with the exact final line your brief specifies.',
|
|
82
|
+
...(backend === 'claude' ? ['', gatewayToolsPrompt.trim()] : []),
|
|
83
|
+
].join('\n');
|
|
84
|
+
}
|
|
85
|
+
function buildWorkerSessionKey(kind) {
|
|
86
|
+
return `operator:worker:${kind}`;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Run a briefed worker on its own operator lane and return its output.
|
|
90
|
+
* Throws loudly on invalid input, runner failure, or an empty response -
|
|
91
|
+
* a worker never ends silently.
|
|
92
|
+
*/
|
|
93
|
+
async function workerRun(runner, { kind, brief, input, runOptions }) {
|
|
94
|
+
if (!KIND_PATTERN.test(kind)) {
|
|
95
|
+
throw new Error(`[worker-run] invalid worker kind "${kind}" (expected kebab-case)`);
|
|
96
|
+
}
|
|
97
|
+
if (!brief.trim()) {
|
|
98
|
+
throw new Error(`[worker-run] empty brief for worker kind "${kind}"`);
|
|
99
|
+
}
|
|
100
|
+
if (!input.trim()) {
|
|
101
|
+
throw new Error(`[worker-run] empty input for worker kind "${kind}"`);
|
|
102
|
+
}
|
|
103
|
+
const prompt = `${brief.trim()}\n\n---\n\nWork order:\n${input.trim()}`;
|
|
104
|
+
const result = await runner.runWithContent([{ type: 'text', text: prompt }], {
|
|
105
|
+
// Raised per-run CLI request timeout for long gather runs. Placed BEFORE
|
|
106
|
+
// runOptions so an explicit caller override still wins; identity fields
|
|
107
|
+
// below always win (plan E7/G3). Chat runs never route through workerRun,
|
|
108
|
+
// so their request bound is untouched.
|
|
109
|
+
requestTimeoutMs: resolveWorkerRequestTimeoutMs(),
|
|
110
|
+
// runOptions: identity fields below always win (plan E7/G3).
|
|
111
|
+
...(runOptions ?? {}),
|
|
112
|
+
sessionKey: buildWorkerSessionKey(kind),
|
|
113
|
+
// freshSession pool reset keys on source+channelId (agent-loop.ts) -
|
|
114
|
+
// both MUST be explicit per call or another lane's pool entry gets reset.
|
|
115
|
+
source: 'operator',
|
|
116
|
+
channelId: `worker:${kind}`,
|
|
117
|
+
// Workers are stateless: continuity lives in the brief + artifacts,
|
|
118
|
+
// never in session accumulation (owner principle: session = cache).
|
|
119
|
+
freshSession: true,
|
|
120
|
+
});
|
|
121
|
+
const response = result.response?.trim();
|
|
122
|
+
if (!response) {
|
|
123
|
+
throw new Error(`[worker-run] worker "${kind}" returned an empty response`);
|
|
124
|
+
}
|
|
125
|
+
return response;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=worker-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-run.js","sourceRoot":"","sources":["../../src/operator/worker-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkOrderConsumer - the single host-code consumer of system workorders
|
|
3
|
+
* (Stage 2, plan S2-T3).
|
|
4
|
+
*
|
|
5
|
+
* A dedicated interval timer (60s default) claims pending workorders from the
|
|
6
|
+
* TaskLedger and runs each through workerRun on the operator lane. It runs
|
|
7
|
+
* UNCONDITIONALLY of MAMA_TRIGGER_LOOP (the publishers are unconditional, so
|
|
8
|
+
* coupling consumption to an opt-in loop would strand every workorder - plan
|
|
9
|
+
* A1 BLOCKER), gated only by MAMA_STAGE2_WORKORDERS=shadow|on.
|
|
10
|
+
*
|
|
11
|
+
* Serial consumption: one claim at a time, awaited to completion, with a tick
|
|
12
|
+
* re-entrancy guard (a 260s board run spans 4+ ticks - overlapping ticks skip,
|
|
13
|
+
* plan G4). Blocking bound = the runner's per-request timeout x maxTurns; no
|
|
14
|
+
* consumer-level watchdog (plan N2).
|
|
15
|
+
*
|
|
16
|
+
* Failure policy (plan G5/M4): failWorkOrder marks the row, then per-kind
|
|
17
|
+
* maxAttempts decides requeue (fresh row, attempts+1, same occurrence key)
|
|
18
|
+
* vs retries-exhausted (owner alarm, deduped per kind). Boot recovery routes
|
|
19
|
+
* stale in_progress claims (crash artifacts) through the SAME policy, with a
|
|
20
|
+
* separate stale-claim alarm.
|
|
21
|
+
*
|
|
22
|
+
* Completion hooks (plan E3/E4): per-kind before/after seams re-home the
|
|
23
|
+
* post-run host effects the legacy closures owned (board bracket
|
|
24
|
+
* verification, promotion event re-emission, wiki noUpdate reading). Hook
|
|
25
|
+
* errors are LOUD but never fail a completed run (observe, never block).
|
|
26
|
+
*/
|
|
27
|
+
import type { WorkOrderKind, WorkOrderRecord, EnqueueWorkOrderInput } from './task-ledger.js';
|
|
28
|
+
import { type WorkerRunner } from './worker-run.js';
|
|
29
|
+
export interface WorkOrderLedgerPort {
|
|
30
|
+
claimNextWorkOrder(): WorkOrderRecord | null;
|
|
31
|
+
completeWorkOrder(id: number): void;
|
|
32
|
+
failWorkOrder(id: number, reason: string): void;
|
|
33
|
+
/** Atomic fail+replacement (retry) - one transaction (PR bot round). */
|
|
34
|
+
requeueWorkOrder(wo: WorkOrderRecord, reason: string): WorkOrderRecord;
|
|
35
|
+
enqueueWorkOrder(order: EnqueueWorkOrderInput): WorkOrderRecord;
|
|
36
|
+
listStaleClaims(): WorkOrderRecord[];
|
|
37
|
+
countPendingWorkOrders(): number;
|
|
38
|
+
}
|
|
39
|
+
/** Active owner alarm channel (telegram via the ops sink; may be unconfigured). */
|
|
40
|
+
export interface OpsAlarmSink {
|
|
41
|
+
configured: boolean;
|
|
42
|
+
send(line: string): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
export interface WorkOrderHook {
|
|
45
|
+
/** Bracket 'before' state (e.g. verifier snapshot at claim time). */
|
|
46
|
+
before?: (wo: WorkOrderRecord) => unknown;
|
|
47
|
+
/** Post-run effects (verification, event re-emission, outcome reading). */
|
|
48
|
+
after?: (wo: WorkOrderRecord, response: string, beforeState: unknown) => void;
|
|
49
|
+
}
|
|
50
|
+
export interface WorkOrderConsumerEvent {
|
|
51
|
+
type: 'complete' | 'failed' | 'requeued' | 'exhausted' | 'stale-claim';
|
|
52
|
+
workKind: WorkOrderKind;
|
|
53
|
+
workOrderId: number;
|
|
54
|
+
reason?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface WorkOrderConsumerDeps {
|
|
57
|
+
ledger: WorkOrderLedgerPort;
|
|
58
|
+
runner: WorkerRunner;
|
|
59
|
+
/** null = brief missing -> the workorder fails loudly (never a silent skip). */
|
|
60
|
+
loadBrief: (kind: WorkOrderKind) => string | null;
|
|
61
|
+
/** Passive owner surface (AgentNoticeQueue via MessageRouter accessor). */
|
|
62
|
+
noticeOwner: (summary: string) => void;
|
|
63
|
+
opsAlarm: OpsAlarmSink;
|
|
64
|
+
/** Telemetry seam (agent_activity / eventBus) - optional. */
|
|
65
|
+
onEvent?: (event: WorkOrderConsumerEvent) => void;
|
|
66
|
+
/**
|
|
67
|
+
* Per-order extra run options (Stage-2: per-run envelope issuance + the
|
|
68
|
+
* shadow capture-publisher override). May be async - envelope issuance
|
|
69
|
+
* persists to the DB. A THROW/REJECT here fails the order loudly - at
|
|
70
|
+
* shadow, a missing capture publisher must never fall through to a live
|
|
71
|
+
* publish (plan T4 AC), and a run without an envelope would have every
|
|
72
|
+
* model_tool call denied 'envelope_missing'.
|
|
73
|
+
*/
|
|
74
|
+
runOptionsFor?: (wo: WorkOrderRecord) => Record<string, unknown> | undefined | Promise<Record<string, unknown> | undefined>;
|
|
75
|
+
log?: (line: string) => void;
|
|
76
|
+
tickMs?: number;
|
|
77
|
+
now?: () => number;
|
|
78
|
+
}
|
|
79
|
+
/** Per-kind retry budget: attempts start at 1; board/promotion self-heal on
|
|
80
|
+
* the next publish cycle, wiki events do not re-fire so it retries once. */
|
|
81
|
+
export declare const WORKORDER_MAX_ATTEMPTS: Record<WorkOrderKind, number>;
|
|
82
|
+
export declare class WorkOrderConsumer {
|
|
83
|
+
private readonly deps;
|
|
84
|
+
private readonly hooks;
|
|
85
|
+
private readonly lastAlarmAt;
|
|
86
|
+
private timer;
|
|
87
|
+
private consuming;
|
|
88
|
+
private activeTick;
|
|
89
|
+
constructor(deps: WorkOrderConsumerDeps);
|
|
90
|
+
registerHook(kind: WorkOrderKind, hook: WorkOrderHook): void;
|
|
91
|
+
/**
|
|
92
|
+
* Boot recovery (plan C4/M4): in_progress system rows are crash artifacts
|
|
93
|
+
* (single serial consumer). Each routes through the SAME failure policy
|
|
94
|
+
* (a crashed wiki batch requeues once; board/promotion do not), plus a
|
|
95
|
+
* separate stale-claim alarm.
|
|
96
|
+
*/
|
|
97
|
+
bootRecover(): void;
|
|
98
|
+
start(): void;
|
|
99
|
+
isStarted(): boolean;
|
|
100
|
+
/** Graceful: awaits an in-flight tick so shutdown does not race the
|
|
101
|
+
* operator-DB close into "database is not open" noise (review m4). */
|
|
102
|
+
stop(): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Drain pending workorders serially: claim -> await -> next claim. Returns
|
|
105
|
+
* 'skipped' when a previous tick is still consuming (re-entrancy guard,
|
|
106
|
+
* plan G4) - long runs span multiple tick firings.
|
|
107
|
+
*/
|
|
108
|
+
tick(): Promise<'drained' | 'skipped'>;
|
|
109
|
+
private runOne;
|
|
110
|
+
/**
|
|
111
|
+
* Failure policy layer (plan G5): mark failed, then requeue (attempts+1,
|
|
112
|
+
* fresh row, same occurrence key - the terminal row freed it) or declare
|
|
113
|
+
* retries-exhausted with an owner alarm.
|
|
114
|
+
*/
|
|
115
|
+
private handleFailure;
|
|
116
|
+
/** Owner alarm: passive notice + active telegram, deduped per kind (6h). */
|
|
117
|
+
private alarm;
|
|
118
|
+
private emitEvent;
|
|
119
|
+
private log;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=workorder-consumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workorder-consumer.d.ts","sourceRoot":"","sources":["../../src/operator/workorder-consumer.ts"],"names":[],"mappings":"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"}
|