lastlight 0.16.0 → 0.16.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/README.md +71 -692
- package/dist/cli-config.js.map +1 -0
- package/dist/cli-format.js.map +1 -0
- package/dist/{cli/cli-server.d.ts → cli-server.d.ts} +39 -1
- package/dist/{cli/cli-server.js → cli-server.js} +105 -5
- package/dist/cli-server.js.map +1 -0
- package/dist/cli-timeline.js.map +1 -0
- package/dist/{cli/cli.js → cli.js} +9 -7
- package/dist/cli.js.map +1 -0
- package/dist/{cli/fork-cli.d.ts → fork-cli.d.ts} +3 -3
- package/dist/{cli/fork-cli.js → fork-cli.js} +28 -27
- package/dist/fork-cli.js.map +1 -0
- package/dist/{cli/oauth-cli.js → oauth-cli.js} +1 -1
- package/dist/oauth-cli.js.map +1 -0
- package/dist/{cli/setup.js → setup.js} +10 -4
- package/dist/setup.js.map +1 -0
- package/dist/{cli/skills-install.d.ts → skills-install.d.ts} +6 -0
- package/dist/{cli/skills-install.js → skills-install.js} +6 -2
- package/dist/skills-install.js.map +1 -0
- package/package.json +20 -65
- package/plugins/lastlight/.claude-plugin/plugin.json +1 -1
- package/agent-context/rules.md +0 -80
- package/agent-context/security.md +0 -69
- package/agent-context/soul.md +0 -21
- package/config/default.yaml +0 -119
- package/deploy/.env.production.example +0 -100
- package/deploy/entrypoint.sh +0 -82
- package/deploy/native/README.md +0 -160
- package/deploy/native/install.sh +0 -110
- package/deploy/native/lastlight.env.example +0 -95
- package/deploy/native/lastlight.service +0 -50
- package/deploy/sandbox-entrypoint.sh +0 -93
- package/dist/admin/auth.d.ts +0 -51
- package/dist/admin/auth.js +0 -121
- package/dist/admin/auth.js.map +0 -1
- package/dist/admin/chat-session-reader.d.ts +0 -39
- package/dist/admin/chat-session-reader.js +0 -84
- package/dist/admin/chat-session-reader.js.map +0 -1
- package/dist/admin/docker.d.ts +0 -61
- package/dist/admin/docker.js +0 -187
- package/dist/admin/docker.js.map +0 -1
- package/dist/admin/index.d.ts +0 -9
- package/dist/admin/index.js +0 -59
- package/dist/admin/index.js.map +0 -1
- package/dist/admin/routes.d.ts +0 -81
- package/dist/admin/routes.js +0 -1381
- package/dist/admin/routes.js.map +0 -1
- package/dist/admin/sessions.d.ts +0 -89
- package/dist/admin/sessions.js +0 -204
- package/dist/admin/sessions.js.map +0 -1
- package/dist/admin/tail.d.ts +0 -12
- package/dist/admin/tail.js +0 -145
- package/dist/admin/tail.js.map +0 -1
- package/dist/admin/version.d.ts +0 -22
- package/dist/admin/version.js +0 -92
- package/dist/admin/version.js.map +0 -1
- package/dist/cli/cli-config.js.map +0 -1
- package/dist/cli/cli-format.js.map +0 -1
- package/dist/cli/cli-server.js.map +0 -1
- package/dist/cli/cli-timeline.js.map +0 -1
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/fork-cli.js.map +0 -1
- package/dist/cli/oauth-cli.js.map +0 -1
- package/dist/cli/setup.js.map +0 -1
- package/dist/cli/skills-install.js.map +0 -1
- package/dist/config/config-resolve.d.ts +0 -28
- package/dist/config/config-resolve.js +0 -47
- package/dist/config/config-resolve.js.map +0 -1
- package/dist/config/config.d.ts +0 -157
- package/dist/config/config.js +0 -581
- package/dist/config/config.js.map +0 -1
- package/dist/config/core-pin.d.ts +0 -16
- package/dist/config/core-pin.js +0 -85
- package/dist/config/core-pin.js.map +0 -1
- package/dist/config/overlay-assets.d.ts +0 -20
- package/dist/config/overlay-assets.js +0 -114
- package/dist/config/overlay-assets.js.map +0 -1
- package/dist/config/overlay-bootstrap.d.ts +0 -44
- package/dist/config/overlay-bootstrap.js +0 -304
- package/dist/config/overlay-bootstrap.js.map +0 -1
- package/dist/connectors/github-webhook.d.ts +0 -45
- package/dist/connectors/github-webhook.js +0 -321
- package/dist/connectors/github-webhook.js.map +0 -1
- package/dist/connectors/index.d.ts +0 -18
- package/dist/connectors/index.js +0 -41
- package/dist/connectors/index.js.map +0 -1
- package/dist/connectors/messaging/base.d.ts +0 -42
- package/dist/connectors/messaging/base.js +0 -139
- package/dist/connectors/messaging/base.js.map +0 -1
- package/dist/connectors/messaging/delivery.d.ts +0 -14
- package/dist/connectors/messaging/delivery.js +0 -38
- package/dist/connectors/messaging/delivery.js.map +0 -1
- package/dist/connectors/messaging/index.d.ts +0 -4
- package/dist/connectors/messaging/index.js +0 -4
- package/dist/connectors/messaging/index.js.map +0 -1
- package/dist/connectors/messaging/session-manager.d.ts +0 -53
- package/dist/connectors/messaging/session-manager.js +0 -255
- package/dist/connectors/messaging/session-manager.js.map +0 -1
- package/dist/connectors/messaging/types.d.ts +0 -58
- package/dist/connectors/messaging/types.js +0 -7
- package/dist/connectors/messaging/types.js.map +0 -1
- package/dist/connectors/slack/connector.d.ts +0 -142
- package/dist/connectors/slack/connector.js +0 -494
- package/dist/connectors/slack/connector.js.map +0 -1
- package/dist/connectors/slack/index.d.ts +0 -2
- package/dist/connectors/slack/index.js +0 -3
- package/dist/connectors/slack/index.js.map +0 -1
- package/dist/connectors/slack/mrkdwn.d.ts +0 -19
- package/dist/connectors/slack/mrkdwn.js +0 -240
- package/dist/connectors/slack/mrkdwn.js.map +0 -1
- package/dist/connectors/types.d.ts +0 -61
- package/dist/connectors/types.js +0 -2
- package/dist/connectors/types.js.map +0 -1
- package/dist/cron/fanout.d.ts +0 -33
- package/dist/cron/fanout.js +0 -55
- package/dist/cron/fanout.js.map +0 -1
- package/dist/cron/jobs.d.ts +0 -18
- package/dist/cron/jobs.js +0 -37
- package/dist/cron/jobs.js.map +0 -1
- package/dist/cron/scheduler.d.ts +0 -45
- package/dist/cron/scheduler.js +0 -105
- package/dist/cron/scheduler.js.map +0 -1
- package/dist/engine/agent-executor.d.ts +0 -34
- package/dist/engine/agent-executor.js +0 -246
- package/dist/engine/agent-executor.js.map +0 -1
- package/dist/engine/chat/chat-runner.d.ts +0 -132
- package/dist/engine/chat/chat-runner.js +0 -424
- package/dist/engine/chat/chat-runner.js.map +0 -1
- package/dist/engine/chat/chat-skills.d.ts +0 -45
- package/dist/engine/chat/chat-skills.js +0 -184
- package/dist/engine/chat/chat-skills.js.map +0 -1
- package/dist/engine/chat/chat.d.ts +0 -54
- package/dist/engine/chat/chat.js +0 -316
- package/dist/engine/chat/chat.js.map +0 -1
- package/dist/engine/chat/message-batcher.d.ts +0 -32
- package/dist/engine/chat/message-batcher.js +0 -109
- package/dist/engine/chat/message-batcher.js.map +0 -1
- package/dist/engine/dispatcher.d.ts +0 -73
- package/dist/engine/dispatcher.js +0 -663
- package/dist/engine/dispatcher.js.map +0 -1
- package/dist/engine/event-shim.d.ts +0 -117
- package/dist/engine/event-shim.js +0 -435
- package/dist/engine/event-shim.js.map +0 -1
- package/dist/engine/executors/orchestrator.d.ts +0 -81
- package/dist/engine/executors/orchestrator.js +0 -365
- package/dist/engine/executors/orchestrator.js.map +0 -1
- package/dist/engine/executors/shared.d.ts +0 -189
- package/dist/engine/executors/shared.js +0 -616
- package/dist/engine/executors/shared.js.map +0 -1
- package/dist/engine/github/git-auth.d.ts +0 -62
- package/dist/engine/github/git-auth.js +0 -161
- package/dist/engine/github/git-auth.js.map +0 -1
- package/dist/engine/github/github-app-client.d.ts +0 -23
- package/dist/engine/github/github-app-client.js +0 -33
- package/dist/engine/github/github-app-client.js.map +0 -1
- package/dist/engine/github/github-tools.d.ts +0 -18
- package/dist/engine/github/github-tools.js +0 -263
- package/dist/engine/github/github-tools.js.map +0 -1
- package/dist/engine/github/github.d.ts +0 -1193
- package/dist/engine/github/github.js +0 -357
- package/dist/engine/github/github.js.map +0 -1
- package/dist/engine/github/profiles.d.ts +0 -279
- package/dist/engine/github/profiles.js +0 -42
- package/dist/engine/github/profiles.js.map +0 -1
- package/dist/engine/github/review-poster.d.ts +0 -98
- package/dist/engine/github/review-poster.js +0 -177
- package/dist/engine/github/review-poster.js.map +0 -1
- package/dist/engine/llm.d.ts +0 -79
- package/dist/engine/llm.js +0 -269
- package/dist/engine/llm.js.map +0 -1
- package/dist/engine/oauth.d.ts +0 -43
- package/dist/engine/oauth.js +0 -103
- package/dist/engine/oauth.js.map +0 -1
- package/dist/engine/router.d.ts +0 -29
- package/dist/engine/router.js +0 -680
- package/dist/engine/router.js.map +0 -1
- package/dist/engine/screen/classifier.d.ts +0 -93
- package/dist/engine/screen/classifier.js +0 -215
- package/dist/engine/screen/classifier.js.map +0 -1
- package/dist/engine/screen/screen.d.ts +0 -41
- package/dist/engine/screen/screen.js +0 -93
- package/dist/engine/screen/screen.js.map +0 -1
- package/dist/evals-api.d.ts +0 -24
- package/dist/evals-api.js +0 -22
- package/dist/evals-api.js.map +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -940
- package/dist/index.js.map +0 -1
- package/dist/managed-repos.d.ts +0 -30
- package/dist/managed-repos.js +0 -72
- package/dist/managed-repos.js.map +0 -1
- package/dist/notify/blocks.d.ts +0 -23
- package/dist/notify/blocks.js +0 -118
- package/dist/notify/blocks.js.map +0 -1
- package/dist/notify/index.d.ts +0 -17
- package/dist/notify/index.js +0 -7
- package/dist/notify/index.js.map +0 -1
- package/dist/notify/model.d.ts +0 -57
- package/dist/notify/model.js +0 -89
- package/dist/notify/model.js.map +0 -1
- package/dist/notify/notifier.d.ts +0 -18
- package/dist/notify/notifier.js +0 -100
- package/dist/notify/notifier.js.map +0 -1
- package/dist/notify/render.d.ts +0 -21
- package/dist/notify/render.js +0 -59
- package/dist/notify/render.js.map +0 -1
- package/dist/notify/transports/github.d.ts +0 -26
- package/dist/notify/transports/github.js +0 -27
- package/dist/notify/transports/github.js.map +0 -1
- package/dist/notify/transports/slack.d.ts +0 -27
- package/dist/notify/transports/slack.js +0 -37
- package/dist/notify/transports/slack.js.map +0 -1
- package/dist/notify/types.d.ts +0 -119
- package/dist/notify/types.js +0 -16
- package/dist/notify/types.js.map +0 -1
- package/dist/providers.d.ts +0 -125
- package/dist/providers.js +0 -279
- package/dist/providers.js.map +0 -1
- package/dist/sandbox/docker.d.ts +0 -180
- package/dist/sandbox/docker.js +0 -517
- package/dist/sandbox/docker.js.map +0 -1
- package/dist/sandbox/egress-allowlist.d.ts +0 -74
- package/dist/sandbox/egress-allowlist.js +0 -164
- package/dist/sandbox/egress-allowlist.js.map +0 -1
- package/dist/sandbox/egress-firewall-config.d.ts +0 -127
- package/dist/sandbox/egress-firewall-config.js +0 -434
- package/dist/sandbox/egress-firewall-config.js.map +0 -1
- package/dist/sandbox/images.d.ts +0 -23
- package/dist/sandbox/images.js +0 -55
- package/dist/sandbox/images.js.map +0 -1
- package/dist/sandbox/index.d.ts +0 -112
- package/dist/sandbox/index.js +0 -332
- package/dist/sandbox/index.js.map +0 -1
- package/dist/sandbox/sandbox.d.ts +0 -214
- package/dist/sandbox/sandbox.js +0 -453
- package/dist/sandbox/sandbox.js.map +0 -1
- package/dist/sandbox/smol.d.ts +0 -162
- package/dist/sandbox/smol.js +0 -485
- package/dist/sandbox/smol.js.map +0 -1
- package/dist/session-log.d.ts +0 -63
- package/dist/session-log.js +0 -290
- package/dist/session-log.js.map +0 -1
- package/dist/state/approval-store.d.ts +0 -88
- package/dist/state/approval-store.js +0 -149
- package/dist/state/approval-store.js.map +0 -1
- package/dist/state/build-assets.d.ts +0 -50
- package/dist/state/build-assets.js +0 -154
- package/dist/state/build-assets.js.map +0 -1
- package/dist/state/db.d.ts +0 -81
- package/dist/state/db.js +0 -155
- package/dist/state/db.js.map +0 -1
- package/dist/state/execution-store.d.ts +0 -257
- package/dist/state/execution-store.js +0 -527
- package/dist/state/execution-store.js.map +0 -1
- package/dist/state/migrate.d.ts +0 -15
- package/dist/state/migrate.js +0 -175
- package/dist/state/migrate.js.map +0 -1
- package/dist/state/workflow-run-store.d.ts +0 -216
- package/dist/state/workflow-run-store.js +0 -403
- package/dist/state/workflow-run-store.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -38
- package/dist/telemetry/index.js +0 -253
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry/pi-events.d.ts +0 -12
- package/dist/telemetry/pi-events.js +0 -134
- package/dist/telemetry/pi-events.js.map +0 -1
- package/dist/workflows/dag.d.ts +0 -37
- package/dist/workflows/dag.js +0 -118
- package/dist/workflows/dag.js.map +0 -1
- package/dist/workflows/loader.d.ts +0 -53
- package/dist/workflows/loader.js +0 -421
- package/dist/workflows/loader.js.map +0 -1
- package/dist/workflows/loop-eval.d.ts +0 -28
- package/dist/workflows/loop-eval.js +0 -74
- package/dist/workflows/loop-eval.js.map +0 -1
- package/dist/workflows/phase-executor.d.ts +0 -222
- package/dist/workflows/phase-executor.js +0 -1153
- package/dist/workflows/phase-executor.js.map +0 -1
- package/dist/workflows/phase-ref.d.ts +0 -50
- package/dist/workflows/phase-ref.js +0 -91
- package/dist/workflows/phase-ref.js.map +0 -1
- package/dist/workflows/resume.d.ts +0 -58
- package/dist/workflows/resume.js +0 -313
- package/dist/workflows/resume.js.map +0 -1
- package/dist/workflows/runner.d.ts +0 -63
- package/dist/workflows/runner.js +0 -381
- package/dist/workflows/runner.js.map +0 -1
- package/dist/workflows/schema.d.ts +0 -344
- package/dist/workflows/schema.js +0 -460
- package/dist/workflows/schema.js.map +0 -1
- package/dist/workflows/simple.d.ts +0 -90
- package/dist/workflows/simple.js +0 -393
- package/dist/workflows/simple.js.map +0 -1
- package/dist/workflows/target-policy.d.ts +0 -74
- package/dist/workflows/target-policy.js +0 -80
- package/dist/workflows/target-policy.js.map +0 -1
- package/dist/workflows/templates.d.ts +0 -88
- package/dist/workflows/templates.js +0 -127
- package/dist/workflows/templates.js.map +0 -1
- package/dist/workflows/triggers.d.ts +0 -21
- package/dist/workflows/triggers.js +0 -45
- package/dist/workflows/triggers.js.map +0 -1
- package/dist/workflows/verdict.d.ts +0 -19
- package/dist/workflows/verdict.js +0 -30
- package/dist/workflows/verdict.js.map +0 -1
- package/dist/worktree/manager.d.ts +0 -43
- package/dist/worktree/manager.js +0 -127
- package/dist/worktree/manager.js.map +0 -1
- package/docker-compose.yml +0 -274
- package/sandbox.Dockerfile +0 -68
- package/skills/README.md +0 -42
- package/skills/browser-qa/SKILL.md +0 -208
- package/skills/browser-qa/scripts/agent-browser.mjs +0 -531
- package/skills/building/SKILL.md +0 -95
- package/skills/chat/SKILL.md +0 -36
- package/skills/code-review/SKILL.md +0 -82
- package/skills/debug-production/SKILL.md +0 -108
- package/skills/demo/SKILL.md +0 -228
- package/skills/demo/scripts/compose-demo.sh +0 -243
- package/skills/issue-answer/SKILL.md +0 -91
- package/skills/issue-comment/SKILL.md +0 -49
- package/skills/issue-triage/SKILL.md +0 -149
- package/skills/issue-triage/references/AGENT-BRIEF.md +0 -65
- package/skills/pr-comment/SKILL.md +0 -64
- package/skills/pr-review/SKILL.md +0 -148
- package/skills/pr-review/references/findings-schema.md +0 -89
- package/skills/qa-test/SKILL.md +0 -97
- package/skills/repo-health/SKILL.md +0 -67
- package/skills/security-feedback/SKILL.md +0 -173
- package/skills/security-feedback/references/templates.md +0 -77
- package/skills/security-review/SKILL.md +0 -215
- package/skills/security-review/references/issue-format.md +0 -302
- package/skills/verify/SKILL.md +0 -118
- package/workflows/answer.yaml +0 -44
- package/workflows/build.yaml +0 -129
- package/workflows/cron-health.yaml +0 -6
- package/workflows/cron-review.yaml +0 -8
- package/workflows/cron-security.yaml +0 -6
- package/workflows/cron-triage.yaml +0 -8
- package/workflows/demo.yaml +0 -62
- package/workflows/examples/bash-smoke.yaml +0 -41
- package/workflows/examples/parallel-review.yaml +0 -36
- package/workflows/examples/tdd-loop.yaml +0 -17
- package/workflows/explore.yaml +0 -80
- package/workflows/issue-comment.yaml +0 -15
- package/workflows/issue-triage.yaml +0 -22
- package/workflows/pr-comment.yaml +0 -16
- package/workflows/pr-fix.yaml +0 -17
- package/workflows/pr-review.yaml +0 -50
- package/workflows/prompts/answer.md +0 -68
- package/workflows/prompts/architect.md +0 -44
- package/workflows/prompts/classifier.md +0 -60
- package/workflows/prompts/classify-adds-info.md +0 -17
- package/workflows/prompts/demo.md +0 -125
- package/workflows/prompts/executor.md +0 -42
- package/workflows/prompts/explore-ask.md +0 -99
- package/workflows/prompts/explore-publish.md +0 -31
- package/workflows/prompts/explore-read.md +0 -120
- package/workflows/prompts/explore-synthesize.md +0 -88
- package/workflows/prompts/fix.md +0 -18
- package/workflows/prompts/guardrails.md +0 -96
- package/workflows/prompts/pr-fix.md +0 -26
- package/workflows/prompts/pr.md +0 -39
- package/workflows/prompts/qa-browser.md +0 -95
- package/workflows/prompts/qa-synth.md +0 -44
- package/workflows/prompts/qa-test.md +0 -60
- package/workflows/prompts/re-reviewer.md +0 -33
- package/workflows/prompts/reviewer.md +0 -60
- package/workflows/prompts/verify-browser.md +0 -93
- package/workflows/prompts/verify-synth.md +0 -44
- package/workflows/prompts/verify.md +0 -63
- package/workflows/qa-test.yaml +0 -94
- package/workflows/repo-health.yaml +0 -15
- package/workflows/security-feedback.yaml +0 -25
- package/workflows/security-review.yaml +0 -37
- package/workflows/verify.yaml +0 -93
- /package/dist/{cli/cli-config.d.ts → cli-config.d.ts} +0 -0
- /package/dist/{cli/cli-config.js → cli-config.js} +0 -0
- /package/dist/{cli/cli-format.d.ts → cli-format.d.ts} +0 -0
- /package/dist/{cli/cli-format.js → cli-format.js} +0 -0
- /package/dist/{cli/cli-timeline.d.ts → cli-timeline.d.ts} +0 -0
- /package/dist/{cli/cli-timeline.js → cli-timeline.js} +0 -0
- /package/dist/{cli/cli.d.ts → cli.d.ts} +0 -0
- /package/dist/{cli/oauth-cli.d.ts → oauth-cli.d.ts} +0 -0
- /package/dist/{cli/setup.d.ts → setup.d.ts} +0 -0
|
@@ -1,403 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Aggregate root for a workflow run's lifecycle. Owns the `workflow_runs`
|
|
3
|
-
* table (including the `phase_history` JSON column) and the named, atomic
|
|
4
|
-
* transitions a run moves through: create → pause-for-approval →
|
|
5
|
-
* resume/finish, plus gate resolution and the socratic reply append.
|
|
6
|
-
*
|
|
7
|
-
* Carved out of the old `StateDb` god-class (issue #97). The deepening: every
|
|
8
|
-
* multi-step mutation that previously lived as an un-guarded read-modify-write
|
|
9
|
-
* chain in `index.ts` / `admin/routes.ts` / `phase-executor.ts` is now a
|
|
10
|
-
* single named operation wrapped in ONE `better-sqlite3` transaction — a throw
|
|
11
|
-
* partway through rolls the whole thing back, so a run can never be left
|
|
12
|
-
* marked `running` with its gate unresolved (the hazard the issue calls out).
|
|
13
|
-
*
|
|
14
|
-
* Constructed with an injected {@link ApprovalStore}: an approval has no life
|
|
15
|
-
* independent of its run, so the cross-table ops call the approval store's
|
|
16
|
-
* single-table writes from inside this store's transaction. Both stores MUST
|
|
17
|
-
* be built from the same `Database` — better-sqlite3 transactions are
|
|
18
|
-
* per-connection.
|
|
19
|
-
*
|
|
20
|
-
* The long-running re-dispatch (`dispatchWorkflow`, which spawns a Docker
|
|
21
|
-
* sandbox for minutes) is deliberately NOT part of any transaction here —
|
|
22
|
-
* better-sqlite3 transactions are synchronous. The atomic boundary is the DB
|
|
23
|
-
* mutations only; the caller dispatches after the transaction commits.
|
|
24
|
-
*/
|
|
25
|
-
export class WorkflowRunStore {
|
|
26
|
-
db;
|
|
27
|
-
approvals;
|
|
28
|
-
constructor(db, deps) {
|
|
29
|
-
this.db = db;
|
|
30
|
-
this.approvals = deps.approvals;
|
|
31
|
-
}
|
|
32
|
-
// ── Plain single-mutation operations ───────────────────────────
|
|
33
|
-
/** Create a new workflow run record */
|
|
34
|
-
createRun(run) {
|
|
35
|
-
const now = new Date().toISOString();
|
|
36
|
-
this.db.prepare(`
|
|
37
|
-
INSERT INTO workflow_runs (id, workflow_name, trigger_id, repo, issue_number, current_phase, phase_history, status, context, scratch, started_at, updated_at)
|
|
38
|
-
VALUES (?, ?, ?, ?, ?, ?, '[]', ?, ?, ?, ?, ?)
|
|
39
|
-
`).run(run.id, run.workflowName, run.triggerId, run.repo ?? null, run.issueNumber ?? null, run.currentPhase, run.status, run.context ? JSON.stringify(run.context) : null, run.scratch ? JSON.stringify(run.scratch) : null, run.startedAt, now);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Top-level merge of `patch` into the workflow run's scratch state.
|
|
43
|
-
* Loop iterations can append to `scratch.socratic.qa` without clobbering
|
|
44
|
-
* other keys.
|
|
45
|
-
*
|
|
46
|
-
* Throws if `patch` is not JSON-serializable (e.g. it contains a BigInt) —
|
|
47
|
-
* which is exactly how the atomic ops prove their rollback: a poison patch
|
|
48
|
-
* makes `JSON.stringify` throw mid-transaction.
|
|
49
|
-
*/
|
|
50
|
-
mergeScratch(id, patch) {
|
|
51
|
-
const now = new Date().toISOString();
|
|
52
|
-
const row = this.db
|
|
53
|
-
.prepare(`SELECT scratch FROM workflow_runs WHERE id = ?`)
|
|
54
|
-
.get(id);
|
|
55
|
-
if (!row)
|
|
56
|
-
return;
|
|
57
|
-
const current = row.scratch ? JSON.parse(row.scratch) : {};
|
|
58
|
-
const merged = { ...current, ...patch };
|
|
59
|
-
// Stringify BEFORE the UPDATE so a non-serializable patch throws without
|
|
60
|
-
// having mutated the row — keeps the op all-or-nothing even outside a txn.
|
|
61
|
-
const serialized = JSON.stringify(merged);
|
|
62
|
-
this.db
|
|
63
|
-
.prepare(`UPDATE workflow_runs SET scratch = ?, updated_at = ? WHERE id = ?`)
|
|
64
|
-
.run(serialized, now, id);
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Update the current phase and append to phase history. This is the single
|
|
68
|
-
* seam through which all phase-history writes flow (issue #97 defers the
|
|
69
|
-
* full `phase_history`/`executions` reconciliation to a follow-up, but
|
|
70
|
-
* routes every write through here so that future change touches one method
|
|
71
|
-
* instead of ~10 call sites).
|
|
72
|
-
*/
|
|
73
|
-
appendPhase(id, phase, entry) {
|
|
74
|
-
const now = new Date().toISOString();
|
|
75
|
-
const row = this.db.prepare(`SELECT phase_history FROM workflow_runs WHERE id = ?`).get(id);
|
|
76
|
-
if (!row)
|
|
77
|
-
return;
|
|
78
|
-
const history = JSON.parse(row.phase_history);
|
|
79
|
-
history.push(entry);
|
|
80
|
-
this.db.prepare(`
|
|
81
|
-
UPDATE workflow_runs SET current_phase = ?, phase_history = ?, updated_at = ? WHERE id = ?
|
|
82
|
-
`).run(phase, JSON.stringify(history), now, id);
|
|
83
|
-
}
|
|
84
|
-
/** Get a single workflow run by ID */
|
|
85
|
-
getRun(id) {
|
|
86
|
-
const row = this.db.prepare(`SELECT * FROM workflow_runs WHERE id = ?`).get(id);
|
|
87
|
-
return row ? this.deserialize(row) : null;
|
|
88
|
-
}
|
|
89
|
-
/** Find the most recent active (running or paused) workflow run for a trigger */
|
|
90
|
-
getByTrigger(triggerId) {
|
|
91
|
-
const row = this.db.prepare(`
|
|
92
|
-
SELECT * FROM workflow_runs
|
|
93
|
-
WHERE trigger_id = ? AND status IN ('running', 'paused')
|
|
94
|
-
ORDER BY started_at DESC
|
|
95
|
-
LIMIT 1
|
|
96
|
-
`).get(triggerId);
|
|
97
|
-
return row ? this.deserialize(row) : null;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* True if any run of `workflowName` exists for this trigger, in ANY status.
|
|
101
|
-
* Unlike `getByTrigger` (active runs only), this also sees a build that has
|
|
102
|
-
* already succeeded/failed/cancelled — the signal the router uses to gate
|
|
103
|
-
* reporter-driven re-triage to the pre-build window.
|
|
104
|
-
*/
|
|
105
|
-
hasRunForTrigger(triggerId, workflowName) {
|
|
106
|
-
const row = this.db.prepare(`
|
|
107
|
-
SELECT 1 FROM workflow_runs
|
|
108
|
-
WHERE trigger_id = ? AND workflow_name = ?
|
|
109
|
-
LIMIT 1
|
|
110
|
-
`).get(triggerId, workflowName);
|
|
111
|
-
return !!row;
|
|
112
|
-
}
|
|
113
|
-
/** List all active (running or paused) workflow runs */
|
|
114
|
-
listActive() {
|
|
115
|
-
const rows = this.db.prepare(`
|
|
116
|
-
SELECT * FROM workflow_runs WHERE status IN ('running', 'paused') ORDER BY started_at DESC
|
|
117
|
-
`).all();
|
|
118
|
-
return rows.map((r) => this.deserialize(r));
|
|
119
|
-
}
|
|
120
|
-
/** List recent workflow runs, ordered by start time descending */
|
|
121
|
-
listRecent(limit = 20) {
|
|
122
|
-
const rows = this.db.prepare(`
|
|
123
|
-
SELECT * FROM workflow_runs ORDER BY started_at DESC LIMIT ?
|
|
124
|
-
`).all(limit);
|
|
125
|
-
return rows.map((r) => this.deserialize(r));
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* List workflow runs with pagination + filters. Returns the page slice
|
|
129
|
-
* AND the post-filter total so the dashboard knows how many remain.
|
|
130
|
-
*
|
|
131
|
-
* - sinceIso filters `started_at >= sinceIso` (used for the header date range).
|
|
132
|
-
* - workflowName filters by exact `workflow_name`.
|
|
133
|
-
* - statuses filters to one of the workflow statuses (`running`, `paused`,
|
|
134
|
-
* `succeeded`, `failed`, `cancelled`). Used for the dashboard's "live"
|
|
135
|
-
* filter, which maps to ['running','paused'].
|
|
136
|
-
*/
|
|
137
|
-
list(opts = {}) {
|
|
138
|
-
const limit = opts.limit ?? 20;
|
|
139
|
-
const offset = opts.offset ?? 0;
|
|
140
|
-
const where = [];
|
|
141
|
-
const params = [];
|
|
142
|
-
if (opts.sinceIso) {
|
|
143
|
-
where.push("started_at >= ?");
|
|
144
|
-
params.push(opts.sinceIso);
|
|
145
|
-
}
|
|
146
|
-
if (opts.workflowName) {
|
|
147
|
-
where.push("workflow_name = ?");
|
|
148
|
-
params.push(opts.workflowName);
|
|
149
|
-
}
|
|
150
|
-
if (opts.statuses && opts.statuses.length > 0) {
|
|
151
|
-
where.push(`status IN (${opts.statuses.map(() => "?").join(",")})`);
|
|
152
|
-
params.push(...opts.statuses);
|
|
153
|
-
}
|
|
154
|
-
const whereClause = where.length > 0 ? `WHERE ${where.join(" AND ")}` : "";
|
|
155
|
-
const total = this.db
|
|
156
|
-
.prepare(`SELECT COUNT(*) as c FROM workflow_runs ${whereClause}`)
|
|
157
|
-
.get(...params).c;
|
|
158
|
-
// Explicit column list — the heavy JSON blobs (`context`, `scratch`)
|
|
159
|
-
// can each be many MB on long-running build runs and
|
|
160
|
-
// the dashboard list view doesn't read them. Returning them turned a
|
|
161
|
-
// 20-row page into a 14MB payload. The single-row endpoint
|
|
162
|
-
// (`getRun`) still uses `SELECT *` so the detail panel keeps
|
|
163
|
-
// the full row when the user picks one.
|
|
164
|
-
const rows = this.db
|
|
165
|
-
.prepare(`SELECT
|
|
166
|
-
id, workflow_name, trigger_id, repo, issue_number,
|
|
167
|
-
current_phase, phase_history, status,
|
|
168
|
-
restart_count, started_at, updated_at, finished_at
|
|
169
|
-
FROM workflow_runs
|
|
170
|
-
${whereClause}
|
|
171
|
-
ORDER BY started_at DESC
|
|
172
|
-
LIMIT ? OFFSET ?`)
|
|
173
|
-
.all(...params, limit, offset);
|
|
174
|
-
return {
|
|
175
|
-
runs: rows.map((r) => this.deserialize(r)),
|
|
176
|
-
total,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
/** Distinct workflow_name values, sorted alphabetically. */
|
|
180
|
-
distinctNames() {
|
|
181
|
-
const rows = this.db
|
|
182
|
-
.prepare(`SELECT DISTINCT workflow_name FROM workflow_runs ORDER BY workflow_name ASC`)
|
|
183
|
-
.all();
|
|
184
|
-
return rows.map((r) => r.workflow_name);
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Mark a workflow run as finished. Plain status flip when called with just
|
|
188
|
-
* `{ error }`; when a `terminalMarker` is supplied (the runner's
|
|
189
|
-
* `on_success.set_phase`), the phase-history append and the status flip
|
|
190
|
-
* happen in ONE transaction so the dashboard never sees the terminal phase
|
|
191
|
-
* without the finished status, or vice versa.
|
|
192
|
-
*/
|
|
193
|
-
finishRun(id, status, opts = {}) {
|
|
194
|
-
const apply = () => {
|
|
195
|
-
if (opts.terminalMarker) {
|
|
196
|
-
this.appendPhase(id, opts.terminalMarker.phase, {
|
|
197
|
-
phase: opts.terminalMarker.phase,
|
|
198
|
-
timestamp: new Date().toISOString(),
|
|
199
|
-
success: true,
|
|
200
|
-
summary: opts.terminalMarker.summary,
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
this.flipFinished(id, status, opts.error);
|
|
204
|
-
};
|
|
205
|
-
if (opts.terminalMarker) {
|
|
206
|
-
this.db.transaction(apply)();
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
apply();
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
flipFinished(id, status, error) {
|
|
213
|
-
const now = new Date().toISOString();
|
|
214
|
-
this.db.prepare(`
|
|
215
|
-
UPDATE workflow_runs SET status = ?, finished_at = ?, updated_at = ?, context = CASE
|
|
216
|
-
WHEN ? IS NOT NULL THEN json_patch(COALESCE(context, '{}'), json_object('error', ?))
|
|
217
|
-
ELSE context
|
|
218
|
-
END WHERE id = ?
|
|
219
|
-
`).run(status, now, now, error ?? null, error ?? null, id);
|
|
220
|
-
}
|
|
221
|
-
/** Cancel a workflow run */
|
|
222
|
-
cancelRun(id) {
|
|
223
|
-
const now = new Date().toISOString();
|
|
224
|
-
this.db.prepare(`
|
|
225
|
-
UPDATE workflow_runs SET status = 'cancelled', updated_at = ?, finished_at = ? WHERE id = ?
|
|
226
|
-
`).run(now, now, id);
|
|
227
|
-
}
|
|
228
|
-
/** Pause a workflow run (waiting for approval) */
|
|
229
|
-
setPaused(id) {
|
|
230
|
-
const now = new Date().toISOString();
|
|
231
|
-
this.db.prepare(`
|
|
232
|
-
UPDATE workflow_runs SET status = 'paused', updated_at = ? WHERE id = ?
|
|
233
|
-
`).run(now, id);
|
|
234
|
-
}
|
|
235
|
-
/** Resume a paused workflow run (set back to running) */
|
|
236
|
-
setRunning(id) {
|
|
237
|
-
const now = new Date().toISOString();
|
|
238
|
-
this.db.prepare(`
|
|
239
|
-
UPDATE workflow_runs SET status = 'running', updated_at = ? WHERE id = ?
|
|
240
|
-
`).run(now, id);
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Restart a FAILED run so it can be retried from the phase that failed.
|
|
244
|
-
* Unlike {@link setRunning} this also clears the terminal markers a failure
|
|
245
|
-
* left behind — `finished_at` and the `context.error` string `flipFinished`
|
|
246
|
-
* wrote — so the row reads live again rather than "failed at …". The taskId,
|
|
247
|
-
* branch, scratch and phase_history are all preserved, so the ledger-driven
|
|
248
|
-
* re-dispatch (`resumeSimpleRun`) resumes from the failed phase with the same
|
|
249
|
-
* context.
|
|
250
|
-
*
|
|
251
|
-
* Guarded by `WHERE status = 'failed'` and returns the changed-row count so
|
|
252
|
-
* the caller can make retry a compare-and-set: a second concurrent retry
|
|
253
|
-
* click sees 0 rows changed and does NOT dispatch again.
|
|
254
|
-
*/
|
|
255
|
-
restartRun(id) {
|
|
256
|
-
const now = new Date().toISOString();
|
|
257
|
-
const info = this.db.prepare(`
|
|
258
|
-
UPDATE workflow_runs
|
|
259
|
-
SET status = 'running',
|
|
260
|
-
finished_at = NULL,
|
|
261
|
-
updated_at = ?,
|
|
262
|
-
restart_count = COALESCE(restart_count, 0) + 1,
|
|
263
|
-
context = json_remove(COALESCE(context, '{}'), '$.error')
|
|
264
|
-
WHERE id = ? AND status = 'failed'
|
|
265
|
-
`).run(now, id);
|
|
266
|
-
return info.changes;
|
|
267
|
-
}
|
|
268
|
-
/**
|
|
269
|
-
* Increment the restart counter and return the new value. Used by
|
|
270
|
-
* `resumeOrphanedWorkflows` to enforce a retry budget so a run that
|
|
271
|
-
* crashes the host (agent OOM, etc.) eventually self-terminates instead
|
|
272
|
-
* of being re-dispatched on every boot.
|
|
273
|
-
*/
|
|
274
|
-
incrementRestartCount(id) {
|
|
275
|
-
const now = new Date().toISOString();
|
|
276
|
-
this.db.prepare(`
|
|
277
|
-
UPDATE workflow_runs
|
|
278
|
-
SET restart_count = COALESCE(restart_count, 0) + 1, updated_at = ?
|
|
279
|
-
WHERE id = ?
|
|
280
|
-
`).run(now, id);
|
|
281
|
-
const row = this.db.prepare(`SELECT restart_count FROM workflow_runs WHERE id = ?`)
|
|
282
|
-
.get(id);
|
|
283
|
-
return row?.restart_count ?? 0;
|
|
284
|
-
}
|
|
285
|
-
deserialize(row) {
|
|
286
|
-
return {
|
|
287
|
-
id: row.id,
|
|
288
|
-
workflowName: row.workflow_name,
|
|
289
|
-
triggerId: row.trigger_id,
|
|
290
|
-
repo: row.repo,
|
|
291
|
-
issueNumber: row.issue_number,
|
|
292
|
-
currentPhase: row.current_phase,
|
|
293
|
-
phaseHistory: JSON.parse(row.phase_history),
|
|
294
|
-
status: row.status,
|
|
295
|
-
context: row.context ? JSON.parse(row.context) : undefined,
|
|
296
|
-
scratch: row.scratch ? JSON.parse(row.scratch) : undefined,
|
|
297
|
-
restartCount: typeof row.restart_count === "number" ? row.restart_count : 0,
|
|
298
|
-
startedAt: row.started_at,
|
|
299
|
-
updatedAt: row.updated_at,
|
|
300
|
-
finishedAt: row.finished_at,
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
// ── Named atomic lifecycle operations ──────────────────────────
|
|
304
|
-
//
|
|
305
|
-
// Each wraps ONE better-sqlite3 transaction. The long-running re-dispatch
|
|
306
|
-
// (`dispatchWorkflow`) stays OUT of these — the caller dispatches after the
|
|
307
|
-
// transaction commits.
|
|
308
|
-
/**
|
|
309
|
-
* Resolve a socratic reply gate and resume the run, atomically: the reply
|
|
310
|
-
* gate flips `pending → approved` (recording the reply text), the caller's
|
|
311
|
-
* scratch patch merges in, and the run goes back to `running` — all in one
|
|
312
|
-
* transaction. A throw anywhere rolls the whole thing back, so the run can
|
|
313
|
-
* never be left `running` with its gate unresolved or its reply lost (the
|
|
314
|
-
* hazard issue #97 calls out).
|
|
315
|
-
*
|
|
316
|
-
* The reply-gate resolve is guarded by `kind = 'reply' AND status = 'pending'`
|
|
317
|
-
* (see {@link ApprovalStore.resolveReplyGate}); if it changes zero rows —
|
|
318
|
-
* because a racing reply already resolved the gate — this throws and the
|
|
319
|
-
* transaction aborts, which is the double-reply concurrency guard.
|
|
320
|
-
*
|
|
321
|
-
* The caller (`index.ts`) computes the explore-domain `scratch.socratic.qa`
|
|
322
|
-
* patch and passes it in; the generic store stays ignorant of that shape.
|
|
323
|
-
*/
|
|
324
|
-
/**
|
|
325
|
-
* Pause a run for an approval gate, atomically: create the pending approval,
|
|
326
|
-
* optionally merge a scratch patch (loops persist their iteration state
|
|
327
|
-
* here), append the `waiting_approval` phase marker, and flip the run to
|
|
328
|
-
* `paused` — all in one transaction. Covers the standard post-phase gate,
|
|
329
|
-
* the reviewer-loop gate, and the interactive generic-loop gate.
|
|
330
|
-
*
|
|
331
|
-
* The marker is appended BEFORE the approval insert so that an insert
|
|
332
|
-
* failure provably rolls back the phase-history write (the injected
|
|
333
|
-
* ApprovalStore participates in the same transaction); ordering is invisible
|
|
334
|
-
* outside the transaction.
|
|
335
|
-
*/
|
|
336
|
-
pauseForApproval(runId, approval, marker, scratchPatch) {
|
|
337
|
-
this.db.transaction(() => {
|
|
338
|
-
this.appendPhase(runId, marker.phase, {
|
|
339
|
-
phase: marker.phase,
|
|
340
|
-
timestamp: new Date().toISOString(),
|
|
341
|
-
success: true,
|
|
342
|
-
summary: marker.summary,
|
|
343
|
-
});
|
|
344
|
-
if (scratchPatch)
|
|
345
|
-
this.mergeScratch(runId, scratchPatch);
|
|
346
|
-
this.approvals.create(approval);
|
|
347
|
-
this.setPaused(runId);
|
|
348
|
-
})();
|
|
349
|
-
}
|
|
350
|
-
/**
|
|
351
|
-
* Approve a gate and resume its run, atomically. Reads the approval to find
|
|
352
|
-
* its run, records the `approved` response, and flips the run back to
|
|
353
|
-
* `running` in one transaction; returns the run so the caller can dispatch.
|
|
354
|
-
* Used by the GitHub/Slack path (`index.ts`), which validates the dispatch
|
|
355
|
-
* target BEFORE calling this so the flip to `running` is always followed by a
|
|
356
|
-
* dispatch. The dashboard path does NOT use this — it can't prove a dispatch
|
|
357
|
-
* will follow before responding, so it records the approval and lets
|
|
358
|
-
* `resumeWorkflow` flip the run only as part of an actual dispatch.
|
|
359
|
-
*/
|
|
360
|
-
resolveGateAndResume(approvalId, responder) {
|
|
361
|
-
return this.db.transaction(() => {
|
|
362
|
-
const approval = this.approvals.getById(approvalId);
|
|
363
|
-
if (!approval)
|
|
364
|
-
throw new Error(`approval ${approvalId} not found`);
|
|
365
|
-
const changed = this.approvals.respond(approvalId, "approved", responder);
|
|
366
|
-
if (changed !== 1) {
|
|
367
|
-
throw new Error(`approval ${approvalId} is not pending (already resolved?)`);
|
|
368
|
-
}
|
|
369
|
-
this.setRunning(approval.workflowRunId);
|
|
370
|
-
return this.getRun(approval.workflowRunId);
|
|
371
|
-
})();
|
|
372
|
-
}
|
|
373
|
-
/**
|
|
374
|
-
* Reject a gate and fail its run, atomically: record the `rejected` response
|
|
375
|
-
* (with reason) and flip the run to `failed` in one transaction. Returns the
|
|
376
|
-
* run (or null if the approval's run was already gone).
|
|
377
|
-
*/
|
|
378
|
-
resolveGateAndFail(approvalId, responder, reason) {
|
|
379
|
-
return this.db.transaction(() => {
|
|
380
|
-
const approval = this.approvals.getById(approvalId);
|
|
381
|
-
if (!approval)
|
|
382
|
-
throw new Error(`approval ${approvalId} not found`);
|
|
383
|
-
const changed = this.approvals.respond(approvalId, "rejected", responder, reason);
|
|
384
|
-
if (changed !== 1) {
|
|
385
|
-
throw new Error(`approval ${approvalId} is not pending (already resolved?)`);
|
|
386
|
-
}
|
|
387
|
-
this.flipFinished(approval.workflowRunId, "failed", `Rejected: ${reason || "no reason given"}`);
|
|
388
|
-
return this.getRun(approval.workflowRunId);
|
|
389
|
-
})();
|
|
390
|
-
}
|
|
391
|
-
resolveReplyGateAndResume(runId, approvalId, replyText, responder, scratchPatch) {
|
|
392
|
-
return this.db.transaction(() => {
|
|
393
|
-
const changed = this.approvals.resolveReplyGate(approvalId, replyText, responder);
|
|
394
|
-
if (changed !== 1) {
|
|
395
|
-
throw new Error(`reply gate ${approvalId} is not pending (already resolved?)`);
|
|
396
|
-
}
|
|
397
|
-
this.mergeScratch(runId, scratchPatch);
|
|
398
|
-
this.setRunning(runId);
|
|
399
|
-
return this.getRun(runId);
|
|
400
|
-
})();
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
//# sourceMappingURL=workflow-run-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-run-store.js","sourceRoot":"","sources":["../../src/state/workflow-run-store.ts"],"names":[],"mappings":"AA6CA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,gBAAgB;IACnB,EAAE,CAAoB;IACtB,SAAS,CAAgB;IAEjC,YAAY,EAAqB,EAAE,IAAkC;QACnE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,kEAAkE;IAElE,uCAAuC;IACvC,SAAS,CAAC,GAAoD;QAC5D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGf,CAAC,CAAC,GAAG,CACJ,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,IAAI,IAAI,IAAI,EAChB,GAAG,CAAC,WAAW,IAAI,IAAI,EACvB,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAChD,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAChD,GAAG,CAAC,SAAS,EACb,GAAG,CACJ,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAU,EAAE,KAA8B;QACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE;aAChB,OAAO,CAAC,gDAAgD,CAAC;aACzD,GAAG,CAAC,EAAE,CAA2C,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAA6B,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;QACxC,yEAAyE;QACzE,2EAA2E;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE;aACJ,OAAO,CAAC,mEAAmE,CAAC;aAC5E,GAAG,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;;OAMG;IACH,WAAW,CAAC,EAAU,EAAE,KAAa,EAAE,KAAwB;QAC7D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,GAAG,CAAC,EAAE,CAA0C,CAAC;QACrI,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,OAAO,GAAwB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAEf,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,sCAAsC;IACtC,MAAM,CAAC,EAAU;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,CAAC,EAAE,CAAwC,CAAC;QACvH,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED,iFAAiF;IACjF,YAAY,CAAC,SAAiB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAK3B,CAAC,CAAC,GAAG,CAAC,SAAS,CAAwC,CAAC;QACzD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,SAAiB,EAAE,YAAoB;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAI3B,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC,GAAG,CAAC;IACf,CAAC;IAED,wDAAwD;IACxD,UAAU;QACR,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC,GAAG,EAA+B,CAAC;QACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,kEAAkE;IAClE,UAAU,CAAC,KAAK,GAAG,EAAE;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAE5B,CAAC,CAAC,GAAG,CAAC,KAAK,CAA8B,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;;;OASG;IACH,IAAI,CAAC,OAMD,EAAE;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,MAAM,KAAK,GACT,IAAI,CAAC,EAAE;aACJ,OAAO,CAAC,2CAA2C,WAAW,EAAE,CAAC;aACjE,GAAG,CAAC,GAAG,MAAM,CACjB,CAAC,CAAC,CAAC;QAEJ,qEAAqE;QACrE,qDAAqD;QACrD,qEAAqE;QACrE,2DAA2D;QAC3D,6DAA6D;QAC7D,wCAAwC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;;;WAKG,WAAW;;0BAEI,CACnB;aACA,GAAG,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,CAA8B,CAAC;QAE9D,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAC1C,KAAK;SACN,CAAC;IACJ,CAAC;IAED,4DAA4D;IAC5D,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CAAC,6EAA6E,CAAC;aACtF,GAAG,EAAiC,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,SAAS,CACP,EAAU,EACV,MAA4C,EAC5C,OAAyD,EAAE;QAE3D,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;oBAC9C,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;oBAChC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO;iBACrC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,EAAU,EAAE,MAA4C,EAAE,KAAc;QAC3F,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;KAKf,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,4BAA4B;IAC5B,SAAS,CAAC,EAAU;QAClB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAEf,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,kDAAkD;IAClD,SAAS,CAAC,EAAU;QAClB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAEf,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,yDAAyD;IACzD,UAAU,CAAC,EAAU;QACnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;KAEf,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAU;QACnB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;KAQ5B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACH,qBAAqB,CAAC,EAAU;QAC9B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;KAIf,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC;aAChF,GAAG,CAAC,EAAE,CAA0C,CAAC;QACpD,OAAO,GAAG,EAAE,aAAa,IAAI,CAAC,CAAC;IACjC,CAAC;IAEO,WAAW,CAAC,GAA4B;QAC9C,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAY;YACpB,YAAY,EAAE,GAAG,CAAC,aAAuB;YACzC,SAAS,EAAE,GAAG,CAAC,UAAoB;YACnC,IAAI,EAAE,GAAG,CAAC,IAA0B;YACpC,WAAW,EAAE,GAAG,CAAC,YAAkC;YACnD,YAAY,EAAE,GAAG,CAAC,aAAuB;YACzC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAuB,CAAwB;YAC5E,MAAM,EAAE,GAAG,CAAC,MAA+B;YAC3C,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAiB,CAA4B,CAAC,CAAC,CAAC,SAAS;YAC/F,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAiB,CAA4B,CAAC,CAAC,CAAC,SAAS;YAC/F,YAAY,EAAE,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3E,SAAS,EAAE,GAAG,CAAC,UAAoB;YACnC,SAAS,EAAE,GAAG,CAAC,UAAoB;YACnC,UAAU,EAAE,GAAG,CAAC,WAAiC;SAClD,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,EAAE;IACF,0EAA0E;IAC1E,4EAA4E;IAC5E,uBAAuB;IAEvB;;;;;;;;;;;;;;;OAeG;IACH;;;;;;;;;;;OAWG;IACH,gBAAgB,CACd,KAAa,EACb,QAAgD,EAChD,MAAmB,EACnB,YAAsC;QAEtC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACvB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE;gBACpC,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;YACH,IAAI,YAAY;gBAAE,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACzD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED;;;;;;;;;OASG;IACH,oBAAoB,CAAC,UAAkB,EAAE,SAAiB;QACxD,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,YAAY,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAC1E,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,qCAAqC,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,UAAkB,EAAE,SAAiB,EAAE,MAAe;QACvE,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,YAAY,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAClF,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,qCAAqC,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,MAAM,IAAI,iBAAiB,EAAE,CAAC,CAAC;YAChG,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAED,yBAAyB,CACvB,KAAa,EACb,UAAkB,EAClB,SAAiB,EACjB,SAAiB,EACjB,YAAqC;QAErC,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAClF,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,qCAAqC,CAAC,CAAC;YACjF,CAAC;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;CACF"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { type Span } from "@opentelemetry/api";
|
|
2
|
-
import type { OtelConfig } from "../config/config.js";
|
|
3
|
-
export type TelemetryPrimitive = string | number | boolean;
|
|
4
|
-
export type TelemetryAttributes = Record<string, unknown>;
|
|
5
|
-
export declare const OTEL_SANDBOX_ENV_ALLOWLIST: readonly ["OTEL_SERVICE_NAME", "OTEL_RESOURCE_ATTRIBUTES", "OTEL_TRACES_EXPORTER", "OTEL_METRICS_EXPORTER", "OTEL_LOGS_EXPORTER", "OTEL_EXPORTER_OTLP_ENDPOINT", "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", "OTEL_EXPORTER_OTLP_METRICS_ENDPOINT", "OTEL_EXPORTER_OTLP_LOGS_ENDPOINT", "OTEL_EXPORTER_OTLP_PROTOCOL", "OTEL_EXPORTER_OTLP_TRACES_PROTOCOL", "OTEL_EXPORTER_OTLP_METRICS_PROTOCOL", "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL", "OTEL_EXPORTER_OTLP_HEADERS", "OTEL_EXPORTER_OTLP_TRACES_HEADERS", "OTEL_EXPORTER_OTLP_METRICS_HEADERS", "OTEL_EXPORTER_OTLP_LOGS_HEADERS", "OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT", "OTEL_ATTRIBUTE_COUNT_LIMIT", "OTEL_BSP_MAX_QUEUE_SIZE", "OTEL_BSP_SCHEDULE_DELAY", "OTEL_METRIC_EXPORT_INTERVAL"];
|
|
6
|
-
export declare function isTelemetryEnabled(): boolean;
|
|
7
|
-
export declare function telemetryIncludesContent(): boolean;
|
|
8
|
-
export declare function safeSpanAttributes(attrs?: TelemetryAttributes): Record<string, TelemetryPrimitive>;
|
|
9
|
-
export declare function safeMetricAttributes(attrs?: TelemetryAttributes): Record<string, TelemetryPrimitive>;
|
|
10
|
-
export declare function initTelemetry(config: OtelConfig, opts?: {
|
|
11
|
-
packageVersion?: string;
|
|
12
|
-
}): Promise<void>;
|
|
13
|
-
export declare function shutdownTelemetry(): Promise<void>;
|
|
14
|
-
export declare function withSpan<T>(name: string, attrs: TelemetryAttributes, fn: (span: Span | undefined) => Promise<T> | T): Promise<T>;
|
|
15
|
-
export declare function recordExecutionMetrics(surface: "workflow" | "phase" | "agent" | "chat", attrs?: TelemetryAttributes): void;
|
|
16
|
-
export declare function recordWorkflowRunStart(attrs?: TelemetryAttributes): void;
|
|
17
|
-
export declare function recordWorkflowRunEnd(attrs?: TelemetryAttributes): void;
|
|
18
|
-
export declare function recordError(surface: string, error: unknown, attrs?: TelemetryAttributes): void;
|
|
19
|
-
/**
|
|
20
|
-
* OTEL env for the **docker** backend, where pi-coding-agent runs *inside*
|
|
21
|
-
* the container. The sandbox is pointed at the in-network collector by its
|
|
22
|
-
* static IP — it never learns the real backend endpoint or its auth
|
|
23
|
-
* headers (those stay host-side on the collector). Reached directly by IP
|
|
24
|
-
* on `sandbox-egress`, so it traverses neither the SNI firewall nor DNS,
|
|
25
|
-
* and works identically in strict and unrestricted-egress phases.
|
|
26
|
-
*/
|
|
27
|
-
export declare function getDockerSandboxOtelEnv(env?: NodeJS.ProcessEnv): Record<string, string>;
|
|
28
|
-
/**
|
|
29
|
-
* OTEL env for the **in-process** backends (gondolin / none), where
|
|
30
|
-
* pi-coding-agent runs in the harness process rather than a container —
|
|
31
|
-
* its own telemetry already inherits the harness SDK. This forwards the
|
|
32
|
-
* host's OTEL_* config into the sandbox shell env for child processes the
|
|
33
|
-
* agent spawns. There is no in-network collector reachable from a gondolin
|
|
34
|
-
* VM, so the real endpoint/headers are forwarded directly; unsafe values
|
|
35
|
-
* (newline / single-quote, which would break downstream shell quoting) are
|
|
36
|
-
* dropped with a warning rather than forwarded.
|
|
37
|
-
*/
|
|
38
|
-
export declare function getOtelEnvForSandbox(env?: NodeJS.ProcessEnv): Record<string, string>;
|