@a5c-ai/agent-platform 5.0.1-staging.04ca6ab00d21 → 5.0.1-staging.19033314d476
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/README.md +8 -13
- package/dist/breakpoints/approvalChains.d.ts +1 -1
- package/dist/breakpoints/approvalChains.js +1 -1
- package/dist/breakpoints/delegation.d.ts +1 -1
- package/dist/breakpoints/delegation.js +1 -1
- package/dist/breakpoints/delegationTypes.d.ts +1 -1
- package/dist/breakpoints/delegationTypes.js +1 -1
- package/dist/breakpoints/postures.d.ts +1 -1
- package/dist/breakpoints/postures.js +1 -1
- package/dist/compression/compaction.d.ts +1 -1
- package/dist/compression/compaction.js +1 -1
- package/dist/cost/effectCost.d.ts +1 -1
- package/dist/cost/journal.d.ts.map +1 -1
- package/dist/cost/journal.js +23 -2
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +36 -0
- package/dist/daemon/durableQueue.d.ts +41 -0
- package/dist/daemon/durableQueue.d.ts.map +1 -0
- package/dist/daemon/durableQueue.js +183 -0
- package/dist/daemon/fileWatcher.d.ts.map +1 -1
- package/dist/daemon/fileWatcher.js +3 -0
- package/dist/daemon/index.d.ts +3 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +6 -1
- package/dist/daemon/loop.d.ts +6 -0
- package/dist/daemon/loop.d.ts.map +1 -1
- package/dist/daemon/loop.js +209 -18
- package/dist/daemon/timerScheduler.d.ts.map +1 -1
- package/dist/daemon/timerScheduler.js +111 -21
- package/dist/daemon/types.d.ts +30 -1
- package/dist/daemon/types.d.ts.map +1 -1
- package/dist/daemon/webhookListener.d.ts.map +1 -1
- package/dist/daemon/webhookListener.js +25 -3
- package/dist/harness/amux/amuxEventMapper.d.ts +6 -1
- package/dist/harness/amux/amuxEventMapper.d.ts.map +1 -1
- package/dist/harness/amux/amuxEventMapper.js +13 -5
- package/dist/harness/amux/amuxStdinReader.js +2 -2
- package/dist/harness/index.d.ts +8 -0
- package/dist/harness/index.d.ts.map +1 -1
- package/dist/harness/index.js +26 -1
- package/dist/harness/internal/createRun/agent-core-loop.d.ts +43 -0
- package/dist/harness/internal/createRun/agent-core-loop.d.ts.map +1 -0
- package/dist/harness/internal/createRun/agent-core-loop.js +247 -0
- package/dist/harness/internal/createRun/index.d.ts.map +1 -1
- package/dist/harness/internal/createRun/index.js +26 -0
- package/dist/harness/internal/createRun/orchestration/constants.d.ts.map +1 -1
- package/dist/harness/internal/createRun/orchestration/constants.js +4 -0
- package/dist/harness/internal/createRun/orchestration/dispatch.d.ts +23 -0
- package/dist/harness/internal/createRun/orchestration/dispatch.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/dispatch.js +135 -0
- package/dist/harness/internal/createRun/orchestration/effects.d.ts +107 -16
- package/dist/harness/internal/createRun/orchestration/effects.d.ts.map +1 -1
- package/dist/harness/internal/createRun/orchestration/effects.js +431 -62
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.js +1 -1
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.d.ts +2 -0
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/effectsHelpers.test.js +81 -0
- package/dist/harness/internal/createRun/orchestration/externalPhase.d.ts.map +1 -1
- package/dist/harness/internal/createRun/orchestration/externalPhase.js +104 -24
- package/dist/harness/internal/createRun/orchestration/externalPhaseHelpers.js +1 -1
- package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.d.ts +32 -0
- package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.d.ts.map +1 -0
- package/dist/harness/internal/createRun/orchestration/hookDecisionEffects.js +76 -0
- package/dist/harness/internal/createRun/orchestration/index.d.ts +15 -0
- package/dist/harness/internal/createRun/orchestration/index.d.ts.map +1 -1
- package/dist/harness/internal/createRun/orchestration/index.js +334 -0
- package/dist/harness/internal/createRun/orchestration/internalPhase.d.ts.map +1 -1
- package/dist/harness/internal/createRun/orchestration/internalPhase.js +38 -9
- package/dist/harness/internal/createRun/output.d.ts +2 -0
- package/dist/harness/internal/createRun/output.d.ts.map +1 -1
- package/dist/harness/internal/createRun/output.js +58 -6
- package/dist/harness/internal/createRun/pi.d.ts +9 -33
- package/dist/harness/internal/createRun/pi.d.ts.map +1 -1
- package/dist/harness/internal/createRun/pi.js +33 -214
- package/dist/harness/internal/createRun/planProcess/delegation.js +1 -1
- package/dist/harness/internal/createRun/planProcess/phase.d.ts.map +1 -1
- package/dist/harness/internal/createRun/planProcess/phase.js +80 -17
- package/dist/harness/internal/createRun/planProcess/prompts.d.ts +2 -0
- package/dist/harness/internal/createRun/planProcess/prompts.d.ts.map +1 -1
- package/dist/harness/internal/createRun/planProcess/prompts.js +31 -0
- package/dist/harness/internal/createRun/planProcess/recovery.d.ts.map +1 -1
- package/dist/harness/internal/createRun/planProcess/recovery.js +20 -3
- package/dist/harness/internal/createRun/planProcess/validation.d.ts +2 -0
- package/dist/harness/internal/createRun/planProcess/validation.d.ts.map +1 -1
- package/dist/harness/internal/createRun/planProcess/validation.js +52 -4
- package/dist/harness/internal/createRun/planProcess/validationSource.d.ts +2 -0
- package/dist/harness/internal/createRun/planProcess/validationSource.d.ts.map +1 -1
- package/dist/harness/internal/createRun/planProcess/validationSource.js +17 -0
- package/dist/harness/internal/createRun/prompts.d.ts +10 -0
- package/dist/harness/internal/createRun/prompts.d.ts.map +1 -1
- package/dist/harness/internal/createRun/prompts.js +120 -0
- package/dist/harness/internal/createRun/utils.d.ts +4 -2
- package/dist/harness/internal/createRun/utils.d.ts.map +1 -1
- package/dist/harness/internal/createRun/utils.js +87 -2
- package/dist/harness/invoker.d.ts +5 -4
- package/dist/harness/invoker.d.ts.map +1 -1
- package/dist/harness/invoker.js +92 -26
- package/dist/harness/piWrapper/moduleSupport.d.ts +3 -2
- package/dist/harness/piWrapper/moduleSupport.d.ts.map +1 -1
- package/dist/harness/piWrapper/moduleSupport.js +23 -20
- package/dist/harness/piWrapper/moduleSupport.test.d.ts +2 -0
- package/dist/harness/piWrapper/moduleSupport.test.d.ts.map +1 -0
- package/dist/harness/piWrapper/moduleSupport.test.js +31 -0
- package/dist/harness/piWrapper.d.ts +4 -2
- package/dist/harness/piWrapper.d.ts.map +1 -1
- package/dist/harness/piWrapper.js +24 -7
- package/dist/harness/piWrapper.test.js +49 -2
- package/dist/harness/types.d.ts +11 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/mcp/channels/index.d.ts +1 -2
- package/dist/mcp/channels/index.d.ts.map +1 -1
- package/dist/mcp/channels/index.js +1 -2
- package/dist/mcp/client/config.d.ts +1 -1
- package/dist/mcp/client/config.d.ts.map +1 -1
- package/dist/mcp/client/config.js +4 -2
- package/dist/mcp/client/executor.d.ts +1 -1
- package/dist/mcp/client/executor.d.ts.map +1 -1
- package/dist/mcp/client/executor.js +2 -1
- package/dist/mcp/client/index.d.ts +1 -1
- package/dist/mcp/client/index.js +1 -1
- package/dist/mcp/client/manager.d.ts +1 -1
- package/dist/mcp/client/manager.d.ts.map +1 -1
- package/dist/mcp/client/manager.js +2 -1
- package/dist/mcp/client/toolRegistry.d.ts +64 -1
- package/dist/mcp/client/toolRegistry.d.ts.map +1 -1
- package/dist/mcp/client/toolRegistry.js +73 -1
- package/dist/mcp/client/types.d.ts +1 -1
- package/dist/mcp/client/types.js +1 -1
- package/dist/mcp/transport/index.d.ts +1 -1
- package/dist/mcp/transport/index.js +1 -1
- package/dist/mcp/transport/session.d.ts +1 -1
- package/dist/mcp/transport/session.js +1 -1
- package/dist/mcp/transport/types.d.ts +1 -1
- package/dist/mcp/transport/types.js +1 -1
- package/dist/mcp/transport/websocket.d.ts +1 -1
- package/dist/mcp/transport/websocket.js +1 -1
- package/dist/seams/contract.d.ts +5 -5
- package/dist/seams/contract.d.ts.map +1 -1
- package/dist/seams/contract.js +3 -5
- package/dist/seams/contract.test.js +4 -7
- package/dist/session/cost.d.ts +9 -0
- package/dist/session/cost.d.ts.map +1 -1
- package/dist/session/cost.js +27 -0
- package/dist/session/history.d.ts.map +1 -1
- package/dist/session/history.js +1 -0
- package/dist/storage/journalWatcher.d.ts.map +1 -1
- package/dist/storage/journalWatcher.js +2 -1
- package/package.json +16 -18
- package/dist/cli/amuxEventsFormatter.d.ts +0 -26
- package/dist/cli/amuxEventsFormatter.d.ts.map +0 -1
- package/dist/cli/amuxEventsFormatter.js +0 -86
- package/dist/cli/args/argFlags.d.ts +0 -6
- package/dist/cli/args/argFlags.d.ts.map +0 -1
- package/dist/cli/args/argFlags.js +0 -72
- package/dist/cli/args/argPositionals.d.ts +0 -3
- package/dist/cli/args/argPositionals.d.ts.map +0 -1
- package/dist/cli/args/argPositionals.js +0 -18
- package/dist/cli/args/index.d.ts +0 -4
- package/dist/cli/args/index.d.ts.map +0 -1
- package/dist/cli/args/index.js +0 -75
- package/dist/cli/args/types.d.ts +0 -13
- package/dist/cli/args/types.d.ts.map +0 -1
- package/dist/cli/args/types.js +0 -2
- package/dist/cli/commands/daemon.d.ts +0 -31
- package/dist/cli/commands/daemon.d.ts.map +0 -1
- package/dist/cli/commands/daemon.js +0 -156
- package/dist/cli/commands/harness/createRun.d.ts +0 -3
- package/dist/cli/commands/harness/createRun.d.ts.map +0 -1
- package/dist/cli/commands/harness/createRun.js +0 -8
- package/dist/cli/commands/harness/resumeRun.d.ts +0 -20
- package/dist/cli/commands/harness/resumeRun.d.ts.map +0 -1
- package/dist/cli/commands/harness/resumeRun.js +0 -341
- package/dist/cli/commands/jsonlInteractive.d.ts +0 -35
- package/dist/cli/commands/jsonlInteractive.d.ts.map +0 -1
- package/dist/cli/commands/jsonlInteractive.js +0 -302
- package/dist/cli/commands/mcpServe.d.ts +0 -18
- package/dist/cli/commands/mcpServe.d.ts.map +0 -1
- package/dist/cli/commands/mcpServe.js +0 -59
- package/dist/cli/commands/session/history.d.ts +0 -14
- package/dist/cli/commands/session/history.d.ts.map +0 -1
- package/dist/cli/commands/session/history.js +0 -100
- package/dist/cli/commands/tui.d.ts +0 -23
- package/dist/cli/commands/tui.d.ts.map +0 -1
- package/dist/cli/commands/tui.js +0 -183
- package/dist/cli/dispatch.d.ts +0 -4
- package/dist/cli/dispatch.d.ts.map +0 -1
- package/dist/cli/dispatch.js +0 -332
- package/dist/cli/main.d.ts +0 -7
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -41
- package/dist/cli/program.d.ts +0 -7
- package/dist/cli/program.d.ts.map +0 -1
- package/dist/cli/program.js +0 -8
- package/dist/cli/ui.d.ts +0 -9
- package/dist/cli/ui.d.ts.map +0 -1
- package/dist/cli/ui.js +0 -125
- package/dist/prompts/commandTemplates.d.ts +0 -3
- package/dist/prompts/commandTemplates.d.ts.map +0 -1
- package/dist/prompts/commandTemplates.js +0 -238
package/README.md
CHANGED
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
# @a5c-ai/agent-platform
|
|
2
2
|
|
|
3
|
-
Agent Platform layer — harness integration, governance,
|
|
3
|
+
Agent Platform layer — harness integration, governance, interaction, storage.
|
|
4
4
|
|
|
5
5
|
<!-- docs-status:start -->
|
|
6
6
|
> Status: Public advanced/runtime package.
|
|
7
7
|
> Canonical docs home: [Package and Plugin Docs Map](../../docs/package-and-plugin-map.md).
|
|
8
|
-
> This README is the canonical runtime
|
|
8
|
+
> This README is the canonical runtime/platform API contract. The product CLI implementation lives in `@a5c-ai/omni`.
|
|
9
9
|
<!-- docs-status:end -->
|
|
10
10
|
|
|
11
11
|
## Installation
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
npm install
|
|
14
|
+
npm install @a5c-ai/agent-platform
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
## Usage
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Use this package as the reusable platform API layer. Install `@a5c-ai/omni` for the product CLI.
|
|
20
20
|
|
|
21
|
-
```
|
|
22
|
-
agent-platform
|
|
23
|
-
|
|
24
|
-
babysitter session:init --session-id demo --state-dir .a5c --run-id run-123
|
|
25
|
-
agent-platform start-server --transport stdio
|
|
26
|
-
agent-platform discover --json
|
|
27
|
-
agent-platform invoke claude-code --prompt "implement feature X" --workspace .
|
|
28
|
-
agent-platform tui --workspace .
|
|
21
|
+
```ts
|
|
22
|
+
import { discoverHarnesses, invokeHarness } from "@a5c-ai/agent-platform/harness";
|
|
23
|
+
import { apiRunStatus } from "@a5c-ai/agent-platform/api";
|
|
29
24
|
```
|
|
30
25
|
|
|
31
|
-
Use the main `babysitter` CLI for harness installation and session-state commands:
|
|
26
|
+
Use `@a5c-ai/omni` for the product CLI and the main `babysitter` CLI for harness installation and session-state commands:
|
|
32
27
|
|
|
33
28
|
```bash
|
|
34
29
|
babysitter harness:install claude-code
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/cost/journal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAe,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAGb,MAAM,SAAS,CAAC;AAGjB,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,iBAAiB,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/cost/journal.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAe,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAGb,MAAM,SAAS,CAAC;AAGjB,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,iBAAiB,CAAC;AAEtD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,aAAa,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA+B5B;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAExE;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EAAE,GACrB,YAAY,CAyGd"}
|
package/dist/cost/journal.js
CHANGED
|
@@ -37,10 +37,14 @@ async function appendCostEvent(runDir, costData) {
|
|
|
37
37
|
if (!enriched.timestamp) {
|
|
38
38
|
enriched.timestamp = new Date().toISOString();
|
|
39
39
|
}
|
|
40
|
+
// Convert CostEventData to JsonRecord (Record<string, unknown>) without a
|
|
41
|
+
// double-cast. Spread produces a plain object whose type satisfies the
|
|
42
|
+
// index signature that CostEventData's interface lacks.
|
|
43
|
+
const eventRecord = { ...enriched };
|
|
40
44
|
return (0, babysitter_sdk_1.appendEvent)({
|
|
41
45
|
runDir,
|
|
42
46
|
eventType: exports.COST_TRACKED_EVENT_TYPE,
|
|
43
|
-
event:
|
|
47
|
+
event: eventRecord,
|
|
44
48
|
});
|
|
45
49
|
}
|
|
46
50
|
/**
|
|
@@ -77,7 +81,24 @@ function computeRunCostStats(runId, events) {
|
|
|
77
81
|
byKind: {},
|
|
78
82
|
};
|
|
79
83
|
for (const event of costEvents) {
|
|
80
|
-
|
|
84
|
+
// Validate the expected shape before treating data as CostEventData.
|
|
85
|
+
// journal event data is typed as JsonRecord (Record<string, unknown>),
|
|
86
|
+
// so we perform a runtime check on the critical numeric fields.
|
|
87
|
+
const raw = event.data;
|
|
88
|
+
if (typeof raw !== "object" || raw === null) {
|
|
89
|
+
continue; // skip malformed events
|
|
90
|
+
}
|
|
91
|
+
const data = {
|
|
92
|
+
model: typeof raw.model === "string" ? raw.model : "unknown",
|
|
93
|
+
inputTokens: typeof raw.inputTokens === "number" ? raw.inputTokens : 0,
|
|
94
|
+
outputTokens: typeof raw.outputTokens === "number" ? raw.outputTokens : 0,
|
|
95
|
+
cacheCreationTokens: typeof raw.cacheCreationTokens === "number" ? raw.cacheCreationTokens : 0,
|
|
96
|
+
cacheReadTokens: typeof raw.cacheReadTokens === "number" ? raw.cacheReadTokens : 0,
|
|
97
|
+
cacheCreation5mTokens: typeof raw.cacheCreation5mTokens === "number" ? raw.cacheCreation5mTokens : 0,
|
|
98
|
+
cacheCreation1hTokens: typeof raw.cacheCreation1hTokens === "number" ? raw.cacheCreation1hTokens : 0,
|
|
99
|
+
costUsd: typeof raw.costUsd === "number" ? raw.costUsd : undefined,
|
|
100
|
+
taskKind: typeof raw.taskKind === "string" ? raw.taskKind : undefined,
|
|
101
|
+
};
|
|
81
102
|
const inputTokens = data.inputTokens ?? 0;
|
|
82
103
|
const outputTokens = data.outputTokens ?? 0;
|
|
83
104
|
const cacheCreationTokens = data.cacheCreationTokens ?? 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/daemon/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/daemon/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA+L5C,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CA0BlC;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAgB1B"}
|
package/dist/daemon/config.js
CHANGED
|
@@ -133,6 +133,37 @@ function validateAutomationRule(raw, index) {
|
|
|
133
133
|
}
|
|
134
134
|
return null;
|
|
135
135
|
}
|
|
136
|
+
function validateAdmission(raw) {
|
|
137
|
+
if (raw === undefined)
|
|
138
|
+
return null;
|
|
139
|
+
if (!isRecord(raw)) {
|
|
140
|
+
return "triggerAdmission must be an object";
|
|
141
|
+
}
|
|
142
|
+
if (raw.maxPendingRuns !== undefined
|
|
143
|
+
&& (typeof raw.maxPendingRuns !== "number" || !Number.isInteger(raw.maxPendingRuns) || raw.maxPendingRuns < 0)) {
|
|
144
|
+
return "triggerAdmission.maxPendingRuns must be a non-negative integer";
|
|
145
|
+
}
|
|
146
|
+
if (raw.dedupeWindowMs !== undefined
|
|
147
|
+
&& (typeof raw.dedupeWindowMs !== "number" || !Number.isInteger(raw.dedupeWindowMs) || raw.dedupeWindowMs < 0)) {
|
|
148
|
+
return "triggerAdmission.dedupeWindowMs must be a non-negative integer";
|
|
149
|
+
}
|
|
150
|
+
if (raw.rateLimit !== undefined) {
|
|
151
|
+
if (!isRecord(raw.rateLimit)) {
|
|
152
|
+
return "triggerAdmission.rateLimit must be an object";
|
|
153
|
+
}
|
|
154
|
+
if (typeof raw.rateLimit.maxTriggers !== "number"
|
|
155
|
+
|| !Number.isInteger(raw.rateLimit.maxTriggers)
|
|
156
|
+
|| raw.rateLimit.maxTriggers <= 0) {
|
|
157
|
+
return "triggerAdmission.rateLimit.maxTriggers must be a positive integer";
|
|
158
|
+
}
|
|
159
|
+
if (typeof raw.rateLimit.windowMs !== "number"
|
|
160
|
+
|| !Number.isInteger(raw.rateLimit.windowMs)
|
|
161
|
+
|| raw.rateLimit.windowMs <= 0) {
|
|
162
|
+
return "triggerAdmission.rateLimit.windowMs must be a positive integer";
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
136
167
|
function validateConfig(raw) {
|
|
137
168
|
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
138
169
|
return { valid: false, error: "Config must be a JSON object" };
|
|
@@ -156,12 +187,17 @@ function validateConfig(raw) {
|
|
|
156
187
|
const maxConcurrent = typeof obj.maxConcurrentRuns === "number"
|
|
157
188
|
? obj.maxConcurrentRuns
|
|
158
189
|
: DEFAULT_MAX_CONCURRENT_RUNS;
|
|
190
|
+
const admissionError = validateAdmission(obj.triggerAdmission);
|
|
191
|
+
if (admissionError) {
|
|
192
|
+
return { valid: false, error: admissionError };
|
|
193
|
+
}
|
|
159
194
|
return {
|
|
160
195
|
valid: true,
|
|
161
196
|
config: {
|
|
162
197
|
workspace: obj.workspace,
|
|
163
198
|
triggers: obj.triggers,
|
|
164
199
|
maxConcurrentRuns: maxConcurrent,
|
|
200
|
+
triggerAdmission: obj.triggerAdmission,
|
|
165
201
|
},
|
|
166
202
|
};
|
|
167
203
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { TriggerEvent } from "./types";
|
|
2
|
+
export type DurableTriggerState = "pending" | "running" | "succeeded" | "failed" | "dead-letter";
|
|
3
|
+
export interface DurableTriggerQueueOptions {
|
|
4
|
+
maxAttempts?: number;
|
|
5
|
+
baseBackoffMs?: number;
|
|
6
|
+
now?: () => number;
|
|
7
|
+
}
|
|
8
|
+
export interface DurableTriggerRecord {
|
|
9
|
+
id: string;
|
|
10
|
+
trigger: TriggerEvent;
|
|
11
|
+
state: DurableTriggerState;
|
|
12
|
+
attempts: number;
|
|
13
|
+
enqueuedAt: string;
|
|
14
|
+
updatedAt: string;
|
|
15
|
+
nextAttemptAt?: string;
|
|
16
|
+
ackedAt?: string;
|
|
17
|
+
lastError?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class DurableTriggerQueue {
|
|
20
|
+
private readonly filePath;
|
|
21
|
+
private readonly maxAttempts;
|
|
22
|
+
private readonly baseBackoffMs;
|
|
23
|
+
private readonly now;
|
|
24
|
+
private events;
|
|
25
|
+
private writeChain;
|
|
26
|
+
private constructor();
|
|
27
|
+
static open(daemonDir: string, options?: DurableTriggerQueueOptions): Promise<DurableTriggerQueue>;
|
|
28
|
+
enqueue(trigger: TriggerEvent): Promise<DurableTriggerRecord>;
|
|
29
|
+
claimDue(limit?: number): Promise<DurableTriggerRecord[]>;
|
|
30
|
+
ack(id: string): Promise<void>;
|
|
31
|
+
fail(id: string, error: unknown): Promise<void>;
|
|
32
|
+
snapshot(): Promise<DurableTriggerRecord[]>;
|
|
33
|
+
counts(): {
|
|
34
|
+
active: number;
|
|
35
|
+
pending: number;
|
|
36
|
+
deadLetter: number;
|
|
37
|
+
};
|
|
38
|
+
private load;
|
|
39
|
+
private persist;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=durableQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durableQueue.d.ts","sourceRoot":"","sources":["../../src/daemon/durableQueue.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEjG,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,mBAAmB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,UAAU,CAAqB;IAEvC,OAAO;WAOM,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMlG,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAe7D,QAAQ,CAAC,KAAK,SAA2B,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAmB3E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9B,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C,QAAQ,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAIjD,MAAM,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;YAQnD,IAAI;YAiBJ,OAAO;CAUtB"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.DurableTriggerQueue = void 0;
|
|
37
|
+
const node_crypto_1 = require("node:crypto");
|
|
38
|
+
const node_fs_1 = require("node:fs");
|
|
39
|
+
const path = __importStar(require("node:path"));
|
|
40
|
+
const QUEUE_FILE = "trigger-queue.json";
|
|
41
|
+
class DurableTriggerQueue {
|
|
42
|
+
filePath;
|
|
43
|
+
maxAttempts;
|
|
44
|
+
baseBackoffMs;
|
|
45
|
+
now;
|
|
46
|
+
events = [];
|
|
47
|
+
writeChain = Promise.resolve();
|
|
48
|
+
constructor(daemonDir, options) {
|
|
49
|
+
this.filePath = path.join(daemonDir, QUEUE_FILE);
|
|
50
|
+
this.maxAttempts = options?.maxAttempts ?? 3;
|
|
51
|
+
this.baseBackoffMs = options?.baseBackoffMs ?? 1_000;
|
|
52
|
+
this.now = options?.now ?? Date.now;
|
|
53
|
+
}
|
|
54
|
+
static async open(daemonDir, options) {
|
|
55
|
+
const queue = new DurableTriggerQueue(daemonDir, options);
|
|
56
|
+
await queue.load();
|
|
57
|
+
return queue;
|
|
58
|
+
}
|
|
59
|
+
async enqueue(trigger) {
|
|
60
|
+
const timestamp = new Date(this.now()).toISOString();
|
|
61
|
+
const record = {
|
|
62
|
+
id: (0, node_crypto_1.randomUUID)(),
|
|
63
|
+
trigger: redactTrigger(trigger),
|
|
64
|
+
state: "pending",
|
|
65
|
+
attempts: 0,
|
|
66
|
+
enqueuedAt: timestamp,
|
|
67
|
+
updatedAt: timestamp,
|
|
68
|
+
};
|
|
69
|
+
this.events.push(record);
|
|
70
|
+
await this.persist();
|
|
71
|
+
return { ...record };
|
|
72
|
+
}
|
|
73
|
+
async claimDue(limit = Number.POSITIVE_INFINITY) {
|
|
74
|
+
const now = this.now;
|
|
75
|
+
const timestamp = new Date(now()).toISOString();
|
|
76
|
+
const claimed = [];
|
|
77
|
+
for (const event of this.events) {
|
|
78
|
+
if (claimed.length >= limit)
|
|
79
|
+
break;
|
|
80
|
+
if (event.state !== "pending" && event.state !== "failed")
|
|
81
|
+
continue;
|
|
82
|
+
if (event.nextAttemptAt && Date.parse(event.nextAttemptAt) > now())
|
|
83
|
+
continue;
|
|
84
|
+
event.state = "running";
|
|
85
|
+
event.attempts += 1;
|
|
86
|
+
event.updatedAt = timestamp;
|
|
87
|
+
claimed.push({ ...event, trigger: cloneTrigger(event.trigger) });
|
|
88
|
+
}
|
|
89
|
+
if (claimed.length > 0) {
|
|
90
|
+
await this.persist();
|
|
91
|
+
}
|
|
92
|
+
return claimed;
|
|
93
|
+
}
|
|
94
|
+
async ack(id) {
|
|
95
|
+
const event = this.events.find((item) => item.id === id);
|
|
96
|
+
if (!event)
|
|
97
|
+
return;
|
|
98
|
+
const timestamp = new Date(this.now()).toISOString();
|
|
99
|
+
event.state = "succeeded";
|
|
100
|
+
event.ackedAt = timestamp;
|
|
101
|
+
event.updatedAt = timestamp;
|
|
102
|
+
await this.persist();
|
|
103
|
+
}
|
|
104
|
+
async fail(id, error) {
|
|
105
|
+
const event = this.events.find((item) => item.id === id);
|
|
106
|
+
if (!event || event.state === "succeeded")
|
|
107
|
+
return;
|
|
108
|
+
const timestamp = new Date(this.now()).toISOString();
|
|
109
|
+
event.lastError = error instanceof Error ? error.message : String(error);
|
|
110
|
+
event.updatedAt = timestamp;
|
|
111
|
+
if (event.attempts >= this.maxAttempts) {
|
|
112
|
+
event.state = "dead-letter";
|
|
113
|
+
delete event.nextAttemptAt;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
event.state = "failed";
|
|
117
|
+
const delay = this.baseBackoffMs * Math.max(1, 2 ** Math.max(0, event.attempts - 1));
|
|
118
|
+
event.nextAttemptAt = new Date(this.now() + delay).toISOString();
|
|
119
|
+
}
|
|
120
|
+
await this.persist();
|
|
121
|
+
}
|
|
122
|
+
async snapshot() {
|
|
123
|
+
return this.events.map((event) => ({ ...event, trigger: cloneTrigger(event.trigger) }));
|
|
124
|
+
}
|
|
125
|
+
counts() {
|
|
126
|
+
return {
|
|
127
|
+
active: this.events.filter((event) => event.state === "running").length,
|
|
128
|
+
pending: this.events.filter((event) => event.state === "pending" || event.state === "failed").length,
|
|
129
|
+
deadLetter: this.events.filter((event) => event.state === "dead-letter").length,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
async load() {
|
|
133
|
+
try {
|
|
134
|
+
const raw = await node_fs_1.promises.readFile(this.filePath, "utf-8");
|
|
135
|
+
const parsed = JSON.parse(raw);
|
|
136
|
+
this.events = (parsed.events ?? []).map((event) => ({
|
|
137
|
+
...event,
|
|
138
|
+
state: event.state === "running" ? "pending" : event.state,
|
|
139
|
+
trigger: cloneTrigger(event.trigger),
|
|
140
|
+
}));
|
|
141
|
+
if (this.events.some((event) => event.state === "pending" && event.updatedAt)) {
|
|
142
|
+
await this.persist();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
this.events = [];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
async persist() {
|
|
150
|
+
const content = JSON.stringify({ version: 1, events: this.events }, null, 2);
|
|
151
|
+
this.writeChain = this.writeChain.then(async () => {
|
|
152
|
+
await node_fs_1.promises.mkdir(path.dirname(this.filePath), { recursive: true });
|
|
153
|
+
const tmpPath = `${this.filePath}.tmp-${process.pid}-${Date.now()}`;
|
|
154
|
+
await node_fs_1.promises.writeFile(tmpPath, content, "utf-8");
|
|
155
|
+
await node_fs_1.promises.rename(tmpPath, this.filePath);
|
|
156
|
+
});
|
|
157
|
+
await this.writeChain;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.DurableTriggerQueue = DurableTriggerQueue;
|
|
161
|
+
function cloneTrigger(trigger) {
|
|
162
|
+
return JSON.parse(JSON.stringify(trigger));
|
|
163
|
+
}
|
|
164
|
+
const SECRET_KEY_PATTERN = /(secret|token|api[-_]?key|authorization|password|credential|private[-_]?key)/i;
|
|
165
|
+
function redactTrigger(trigger) {
|
|
166
|
+
return redactValue(cloneTrigger(trigger), "");
|
|
167
|
+
}
|
|
168
|
+
function redactValue(value, key) {
|
|
169
|
+
if (SECRET_KEY_PATTERN.test(key)) {
|
|
170
|
+
return "[REDACTED]";
|
|
171
|
+
}
|
|
172
|
+
if (Array.isArray(value)) {
|
|
173
|
+
return value.map((item) => redactValue(item, ""));
|
|
174
|
+
}
|
|
175
|
+
if (value && typeof value === "object") {
|
|
176
|
+
const result = {};
|
|
177
|
+
for (const [childKey, childValue] of Object.entries(value)) {
|
|
178
|
+
result[childKey] = redactValue(childValue, childKey);
|
|
179
|
+
}
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../src/daemon/fileWatcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../src/daemon/fileWatcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoDrF,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,iBAAiB,EAAE,EAC7B,SAAS,EAAE,eAAe,GACzB,iBAAiB,CAgEnB"}
|
|
@@ -90,6 +90,7 @@ function createFileWatcher(triggers, onTrigger) {
|
|
|
90
90
|
trigger,
|
|
91
91
|
watcher: null,
|
|
92
92
|
debounceTimer: null,
|
|
93
|
+
lastPath: null,
|
|
93
94
|
};
|
|
94
95
|
try {
|
|
95
96
|
entry.watcher = fsSync.watch(watchDir, { recursive: true }, (_eventType, filename) => {
|
|
@@ -97,6 +98,7 @@ function createFileWatcher(triggers, onTrigger) {
|
|
|
97
98
|
return;
|
|
98
99
|
if (!matchesExtension(filename, trigger.pattern))
|
|
99
100
|
return;
|
|
101
|
+
entry.lastPath = path.resolve(watchDir, filename.toString());
|
|
100
102
|
// Debounce: clear previous timer and set a new one
|
|
101
103
|
if (entry.debounceTimer) {
|
|
102
104
|
clearTimeout(entry.debounceTimer);
|
|
@@ -108,6 +110,7 @@ function createFileWatcher(triggers, onTrigger) {
|
|
|
108
110
|
type: "file",
|
|
109
111
|
processId: trigger.processId,
|
|
110
112
|
entrypoint: trigger.entrypoint,
|
|
113
|
+
inputs: entry.lastPath ? { path: entry.lastPath } : undefined,
|
|
111
114
|
});
|
|
112
115
|
}, debounceMs);
|
|
113
116
|
});
|
package/dist/daemon/index.d.ts
CHANGED
|
@@ -3,5 +3,7 @@
|
|
|
3
3
|
* Internal agent-platform consumers continue to import via relative paths
|
|
4
4
|
* through this barrel file.
|
|
5
5
|
*/
|
|
6
|
-
export { startDaemon, stopDaemon, getDaemonStatus, loadDaemonConfig, writeDaemonConfig, createFileWatcher, createWebhookListener, createTimerScheduler, runDaemonLoop, readDaemonLoopStatus, appendDaemonLog, readDaemonLog, type DaemonConfig, type DaemonStartOptions, type DaemonStartOutput, type DaemonStopOptions, type DaemonStopOutput, type DaemonStatusOptions, type DaemonStatusOutput, type DaemonMetadata, type TriggerConfig, type TriggerEvent, type FileTriggerEvent, type AutomationTriggerEvent, type FileTriggerConfig, type FileWatcherHandle, type WebhookListenerOptions, type WebhookListenerHandle, type TriggerCallback, type TimerSchedulerHandle, type DaemonLoopOptions, type DaemonLoopStatus, type DaemonLogEntry, } from "@a5c-ai/agent-runtime/daemon";
|
|
6
|
+
export { startDaemon, stopDaemon, getDaemonStatus, loadDaemonConfig, writeDaemonConfig, createFileWatcher, createWebhookListener, createTimerScheduler, runDaemonLoop, readDaemonLoopStatus, appendDaemonLog, readDaemonLog, DurableTriggerQueue, type DaemonConfig, type DaemonStartOptions, type DaemonStartOutput, type DaemonStopOptions, type DaemonStopOutput, type DaemonStatusOptions, type DaemonStatusOutput, type DaemonMetadata, type TriggerConfig, type TriggerEvent, type FileTriggerEvent, type AutomationTriggerEvent, type FileTriggerConfig, type FileWatcherHandle, type WebhookListenerOptions, type WebhookListenerHandle, type TriggerCallback, type TriggerAdmissionConfig, type TriggerAdmissionResult, type TriggerAdmissionStatus, type TriggerRateLimitConfig, type TimerSchedulerHandle, type DaemonLoopOptions, type DaemonLoopStatus, type DaemonLogEntry, type DurableTriggerQueueOptions, type DurableTriggerRecord, type DurableTriggerState, } from "@a5c-ai/agent-runtime/daemon";
|
|
7
|
+
export { executeAutomationTrigger } from "./automationExecutor";
|
|
8
|
+
export { isAutomationTriggerEvent } from "./types";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC"}
|
package/dist/daemon/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.readDaemonLog = exports.appendDaemonLog = exports.readDaemonLoopStatus = exports.runDaemonLoop = exports.createTimerScheduler = exports.createWebhookListener = exports.createFileWatcher = exports.writeDaemonConfig = exports.loadDaemonConfig = exports.getDaemonStatus = exports.stopDaemon = exports.startDaemon = void 0;
|
|
3
|
+
exports.isAutomationTriggerEvent = exports.executeAutomationTrigger = exports.DurableTriggerQueue = exports.readDaemonLog = exports.appendDaemonLog = exports.readDaemonLoopStatus = exports.runDaemonLoop = exports.createTimerScheduler = exports.createWebhookListener = exports.createFileWatcher = exports.writeDaemonConfig = exports.loadDaemonConfig = exports.getDaemonStatus = exports.stopDaemon = exports.startDaemon = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Re-export shim — canonical implementation lives in @a5c-ai/agent-runtime.
|
|
6
6
|
* Internal agent-platform consumers continue to import via relative paths
|
|
@@ -19,3 +19,8 @@ Object.defineProperty(exports, "runDaemonLoop", { enumerable: true, get: functio
|
|
|
19
19
|
Object.defineProperty(exports, "readDaemonLoopStatus", { enumerable: true, get: function () { return daemon_1.readDaemonLoopStatus; } });
|
|
20
20
|
Object.defineProperty(exports, "appendDaemonLog", { enumerable: true, get: function () { return daemon_1.appendDaemonLog; } });
|
|
21
21
|
Object.defineProperty(exports, "readDaemonLog", { enumerable: true, get: function () { return daemon_1.readDaemonLog; } });
|
|
22
|
+
Object.defineProperty(exports, "DurableTriggerQueue", { enumerable: true, get: function () { return daemon_1.DurableTriggerQueue; } });
|
|
23
|
+
var automationExecutor_1 = require("./automationExecutor");
|
|
24
|
+
Object.defineProperty(exports, "executeAutomationTrigger", { enumerable: true, get: function () { return automationExecutor_1.executeAutomationTrigger; } });
|
|
25
|
+
var types_1 = require("./types");
|
|
26
|
+
Object.defineProperty(exports, "isAutomationTriggerEvent", { enumerable: true, get: function () { return types_1.isAutomationTriggerEvent; } });
|
package/dist/daemon/loop.d.ts
CHANGED
|
@@ -2,14 +2,20 @@
|
|
|
2
2
|
* GAP-REMOTE-001: Daemon Loop — main event loop with concurrent run pool.
|
|
3
3
|
*/
|
|
4
4
|
import type { DaemonConfig, TriggerCallback } from "./types";
|
|
5
|
+
import type { DurableTriggerQueueOptions } from "./durableQueue";
|
|
5
6
|
export interface DaemonLoopOptions {
|
|
6
7
|
onTrigger?: TriggerCallback;
|
|
7
8
|
signal?: AbortSignal;
|
|
8
9
|
logDir?: string;
|
|
10
|
+
queue?: DurableTriggerQueueOptions;
|
|
9
11
|
}
|
|
10
12
|
export interface DaemonLoopStatus {
|
|
11
13
|
activeRuns: number;
|
|
12
14
|
pendingRuns: number;
|
|
15
|
+
deadLetterRuns?: number;
|
|
16
|
+
rejectedTriggers?: number;
|
|
17
|
+
duplicateTriggers?: number;
|
|
18
|
+
rateLimitedTriggers?: number;
|
|
13
19
|
updatedAt: string;
|
|
14
20
|
}
|
|
15
21
|
export declare function runDaemonLoop(config: DaemonConfig, options?: DaemonLoopOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/daemon/loop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/daemon/loop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EACV,YAAY,EAGZ,eAAe,EAEhB,MAAM,SAAS,CAAC;AAYjB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,0BAA0B,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAwPf;AAsHD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQ9F"}
|