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
package/dist/telemetry/index.js
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import { context, SpanStatusCode, trace, metrics } from "@opentelemetry/api";
|
|
2
|
-
import { NodeSDK } from "@opentelemetry/sdk-node";
|
|
3
|
-
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
4
|
-
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
5
|
-
import { PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
|
|
6
|
-
import { resourceFromAttributes } from "@opentelemetry/resources";
|
|
7
|
-
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
|
|
8
|
-
import { OTEL_COLLECTOR_SANDBOX_ENDPOINT } from "../sandbox/egress-firewall-config.js";
|
|
9
|
-
export const OTEL_SANDBOX_ENV_ALLOWLIST = [
|
|
10
|
-
"OTEL_SERVICE_NAME",
|
|
11
|
-
"OTEL_RESOURCE_ATTRIBUTES",
|
|
12
|
-
"OTEL_TRACES_EXPORTER",
|
|
13
|
-
"OTEL_METRICS_EXPORTER",
|
|
14
|
-
"OTEL_LOGS_EXPORTER",
|
|
15
|
-
"OTEL_EXPORTER_OTLP_ENDPOINT",
|
|
16
|
-
"OTEL_EXPORTER_OTLP_TRACES_ENDPOINT",
|
|
17
|
-
"OTEL_EXPORTER_OTLP_METRICS_ENDPOINT",
|
|
18
|
-
"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT",
|
|
19
|
-
"OTEL_EXPORTER_OTLP_PROTOCOL",
|
|
20
|
-
"OTEL_EXPORTER_OTLP_TRACES_PROTOCOL",
|
|
21
|
-
"OTEL_EXPORTER_OTLP_METRICS_PROTOCOL",
|
|
22
|
-
"OTEL_EXPORTER_OTLP_LOGS_PROTOCOL",
|
|
23
|
-
"OTEL_EXPORTER_OTLP_HEADERS",
|
|
24
|
-
"OTEL_EXPORTER_OTLP_TRACES_HEADERS",
|
|
25
|
-
"OTEL_EXPORTER_OTLP_METRICS_HEADERS",
|
|
26
|
-
"OTEL_EXPORTER_OTLP_LOGS_HEADERS",
|
|
27
|
-
"OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT",
|
|
28
|
-
"OTEL_ATTRIBUTE_COUNT_LIMIT",
|
|
29
|
-
"OTEL_BSP_MAX_QUEUE_SIZE",
|
|
30
|
-
"OTEL_BSP_SCHEDULE_DELAY",
|
|
31
|
-
"OTEL_METRIC_EXPORT_INTERVAL",
|
|
32
|
-
];
|
|
33
|
-
const METRIC_ATTR_ALLOWLIST = new Set([
|
|
34
|
-
"workflow.name",
|
|
35
|
-
"phase.name",
|
|
36
|
-
"repo",
|
|
37
|
-
"sandbox.backend",
|
|
38
|
-
"model",
|
|
39
|
-
"runtime",
|
|
40
|
-
"surface",
|
|
41
|
-
"success",
|
|
42
|
-
"stop_reason",
|
|
43
|
-
"github.profile",
|
|
44
|
-
]);
|
|
45
|
-
const EXPLICIT_CONTENT_ATTR_ALLOWLIST = new Set([
|
|
46
|
-
"message.content",
|
|
47
|
-
"tool.result",
|
|
48
|
-
"tool.output",
|
|
49
|
-
"error.stack",
|
|
50
|
-
]);
|
|
51
|
-
let sdk;
|
|
52
|
-
let enabled = false;
|
|
53
|
-
let includeContent = false;
|
|
54
|
-
const tracer = () => trace.getTracer("lastlight");
|
|
55
|
-
const meter = () => metrics.getMeter("lastlight");
|
|
56
|
-
function primitive(value) {
|
|
57
|
-
if (typeof value === "string")
|
|
58
|
-
return value.length > 1024 ? value.slice(0, 1021) + "…" : value;
|
|
59
|
-
if (typeof value === "number" && Number.isFinite(value))
|
|
60
|
-
return value;
|
|
61
|
-
if (typeof value === "boolean")
|
|
62
|
-
return value;
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
export function isTelemetryEnabled() {
|
|
66
|
-
return enabled;
|
|
67
|
-
}
|
|
68
|
-
export function telemetryIncludesContent() {
|
|
69
|
-
return includeContent;
|
|
70
|
-
}
|
|
71
|
-
export function safeSpanAttributes(attrs = {}) {
|
|
72
|
-
const out = {};
|
|
73
|
-
for (const [key, value] of Object.entries(attrs)) {
|
|
74
|
-
const explicitlyAllowedContent = EXPLICIT_CONTENT_ATTR_ALLOWLIST.has(key);
|
|
75
|
-
if (!explicitlyAllowedContent && (/prompt|body|stack|secret|token|headers?/i.test(key) || /(^|\.)content$/i.test(key)))
|
|
76
|
-
continue;
|
|
77
|
-
const p = primitive(value);
|
|
78
|
-
if (p !== undefined)
|
|
79
|
-
out[key] = p;
|
|
80
|
-
}
|
|
81
|
-
return out;
|
|
82
|
-
}
|
|
83
|
-
export function safeMetricAttributes(attrs = {}) {
|
|
84
|
-
const out = {};
|
|
85
|
-
for (const [key, value] of Object.entries(attrs)) {
|
|
86
|
-
if (!METRIC_ATTR_ALLOWLIST.has(key))
|
|
87
|
-
continue;
|
|
88
|
-
const p = primitive(value);
|
|
89
|
-
if (p !== undefined)
|
|
90
|
-
out[key] = p;
|
|
91
|
-
}
|
|
92
|
-
return out;
|
|
93
|
-
}
|
|
94
|
-
export async function initTelemetry(config, opts = {}) {
|
|
95
|
-
enabled = false;
|
|
96
|
-
includeContent = config.includeContent === true;
|
|
97
|
-
if (!config.enabled)
|
|
98
|
-
return;
|
|
99
|
-
try {
|
|
100
|
-
if (!process.env.OTEL_SERVICE_NAME)
|
|
101
|
-
process.env.OTEL_SERVICE_NAME = config.serviceName;
|
|
102
|
-
const resource = resourceFromAttributes({
|
|
103
|
-
[ATTR_SERVICE_NAME]: config.serviceName,
|
|
104
|
-
...(opts.packageVersion ? { [ATTR_SERVICE_VERSION]: opts.packageVersion } : {}),
|
|
105
|
-
});
|
|
106
|
-
sdk = new NodeSDK({
|
|
107
|
-
resource,
|
|
108
|
-
traceExporter: new OTLPTraceExporter(),
|
|
109
|
-
metricReader: new PeriodicExportingMetricReader({ exporter: new OTLPMetricExporter() }),
|
|
110
|
-
});
|
|
111
|
-
await sdk.start();
|
|
112
|
-
enabled = true;
|
|
113
|
-
}
|
|
114
|
-
catch (err) {
|
|
115
|
-
sdk = undefined;
|
|
116
|
-
enabled = false;
|
|
117
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
118
|
-
if (config.strict)
|
|
119
|
-
throw err;
|
|
120
|
-
console.warn(`[otel] initialization failed; continuing without telemetry: ${msg}`);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
export async function shutdownTelemetry() {
|
|
124
|
-
if (!sdk)
|
|
125
|
-
return;
|
|
126
|
-
const active = sdk;
|
|
127
|
-
sdk = undefined;
|
|
128
|
-
enabled = false;
|
|
129
|
-
await active.shutdown().catch((err) => {
|
|
130
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
131
|
-
console.warn(`[otel] shutdown failed: ${msg}`);
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
export async function withSpan(name, attrs, fn) {
|
|
135
|
-
if (!enabled)
|
|
136
|
-
return await fn(undefined);
|
|
137
|
-
const spanOptions = { attributes: safeSpanAttributes(attrs) };
|
|
138
|
-
const span = tracer().startSpan(name, spanOptions);
|
|
139
|
-
return await context.with(trace.setSpan(context.active(), span), async () => {
|
|
140
|
-
try {
|
|
141
|
-
const result = await fn(span);
|
|
142
|
-
span.setStatus({ code: SpanStatusCode.OK });
|
|
143
|
-
return result;
|
|
144
|
-
}
|
|
145
|
-
catch (err) {
|
|
146
|
-
span.recordException(err);
|
|
147
|
-
span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
|
|
148
|
-
throw err;
|
|
149
|
-
}
|
|
150
|
-
finally {
|
|
151
|
-
span.end();
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
export function recordExecutionMetrics(surface, attrs = {}) {
|
|
156
|
-
if (!enabled)
|
|
157
|
-
return;
|
|
158
|
-
const metricAttrs = safeMetricAttributes({ ...attrs, surface });
|
|
159
|
-
const m = meter();
|
|
160
|
-
const durationMs = typeof attrs.durationMs === "number" ? attrs.durationMs : undefined;
|
|
161
|
-
const costUsd = typeof attrs.costUsd === "number" ? attrs.costUsd : undefined;
|
|
162
|
-
const inputTokens = typeof attrs.inputTokens === "number" ? attrs.inputTokens : undefined;
|
|
163
|
-
const outputTokens = typeof attrs.outputTokens === "number" ? attrs.outputTokens : undefined;
|
|
164
|
-
if (durationMs !== undefined)
|
|
165
|
-
m.createHistogram("lastlight.execution.duration_ms").record(durationMs, metricAttrs);
|
|
166
|
-
if (costUsd !== undefined)
|
|
167
|
-
m.createCounter("lastlight.execution.cost_usd").add(costUsd, metricAttrs);
|
|
168
|
-
if (inputTokens !== undefined)
|
|
169
|
-
m.createCounter("lastlight.execution.input_tokens").add(inputTokens, metricAttrs);
|
|
170
|
-
if (outputTokens !== undefined)
|
|
171
|
-
m.createCounter("lastlight.execution.output_tokens").add(outputTokens, metricAttrs);
|
|
172
|
-
m.createCounter("lastlight.execution.count").add(1, metricAttrs);
|
|
173
|
-
}
|
|
174
|
-
export function recordWorkflowRunStart(attrs = {}) {
|
|
175
|
-
if (enabled)
|
|
176
|
-
meter().createCounter("lastlight.workflow.run.started").add(1, safeMetricAttributes({ ...attrs, surface: "workflow" }));
|
|
177
|
-
}
|
|
178
|
-
export function recordWorkflowRunEnd(attrs = {}) {
|
|
179
|
-
recordExecutionMetrics("workflow", attrs);
|
|
180
|
-
}
|
|
181
|
-
export function recordError(surface, error, attrs = {}) {
|
|
182
|
-
if (!enabled)
|
|
183
|
-
return;
|
|
184
|
-
const span = trace.getActiveSpan();
|
|
185
|
-
const errAttrs = safeSpanAttributes({ ...attrs, surface, "error.message": error instanceof Error ? error.message : String(error), "error.name": error instanceof Error ? error.name : "Error" });
|
|
186
|
-
span?.addEvent("lastlight.error", errAttrs);
|
|
187
|
-
span?.setStatus({ code: SpanStatusCode.ERROR, message: errAttrs["error.message"] });
|
|
188
|
-
meter().createCounter("lastlight.errors").add(1, safeMetricAttributes({ ...attrs, surface }));
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Safe, non-secret OTEL descriptors passed through to a sandbox alongside
|
|
192
|
-
* the collector endpoint — span/resource labels only, never headers or the
|
|
193
|
-
* real backend endpoint.
|
|
194
|
-
*/
|
|
195
|
-
const OTEL_SANDBOX_LABEL_ENV = [
|
|
196
|
-
"OTEL_SERVICE_NAME",
|
|
197
|
-
"OTEL_RESOURCE_ATTRIBUTES",
|
|
198
|
-
"OTEL_TRACES_EXPORTER",
|
|
199
|
-
"OTEL_METRICS_EXPORTER",
|
|
200
|
-
"OTEL_LOGS_EXPORTER",
|
|
201
|
-
];
|
|
202
|
-
/**
|
|
203
|
-
* OTEL env for the **docker** backend, where pi-coding-agent runs *inside*
|
|
204
|
-
* the container. The sandbox is pointed at the in-network collector by its
|
|
205
|
-
* static IP — it never learns the real backend endpoint or its auth
|
|
206
|
-
* headers (those stay host-side on the collector). Reached directly by IP
|
|
207
|
-
* on `sandbox-egress`, so it traverses neither the SNI firewall nor DNS,
|
|
208
|
-
* and works identically in strict and unrestricted-egress phases.
|
|
209
|
-
*/
|
|
210
|
-
export function getDockerSandboxOtelEnv(env = process.env) {
|
|
211
|
-
const out = {
|
|
212
|
-
OTEL_EXPORTER_OTLP_ENDPOINT: OTEL_COLLECTOR_SANDBOX_ENDPOINT,
|
|
213
|
-
OTEL_EXPORTER_OTLP_PROTOCOL: "http/protobuf",
|
|
214
|
-
};
|
|
215
|
-
for (const key of OTEL_SANDBOX_LABEL_ENV) {
|
|
216
|
-
const value = env[key];
|
|
217
|
-
if (value && !/[\r\n']/.test(value))
|
|
218
|
-
out[key] = value;
|
|
219
|
-
}
|
|
220
|
-
return out;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* OTEL env for the **in-process** backends (gondolin / none), where
|
|
224
|
-
* pi-coding-agent runs in the harness process rather than a container —
|
|
225
|
-
* its own telemetry already inherits the harness SDK. This forwards the
|
|
226
|
-
* host's OTEL_* config into the sandbox shell env for child processes the
|
|
227
|
-
* agent spawns. There is no in-network collector reachable from a gondolin
|
|
228
|
-
* VM, so the real endpoint/headers are forwarded directly; unsafe values
|
|
229
|
-
* (newline / single-quote, which would break downstream shell quoting) are
|
|
230
|
-
* dropped with a warning rather than forwarded.
|
|
231
|
-
*/
|
|
232
|
-
export function getOtelEnvForSandbox(env = process.env) {
|
|
233
|
-
const out = {};
|
|
234
|
-
for (const key of OTEL_SANDBOX_ENV_ALLOWLIST) {
|
|
235
|
-
const value = env[key];
|
|
236
|
-
if (!value)
|
|
237
|
-
continue;
|
|
238
|
-
// The docker backend shell-quotes each value as `KEY='value'` when
|
|
239
|
-
// building `--sandbox-env`, so a newline or single-quote in the value
|
|
240
|
-
// would break the wrap and make docker.ts throw — aborting the whole
|
|
241
|
-
// agent run. Drop the unsafe value here (with a warning) instead, so
|
|
242
|
-
// telemetry forwarding degrades gracefully rather than taking the run
|
|
243
|
-
// down with it. OTLP header values legitimately almost never contain a
|
|
244
|
-
// single quote; when they do, the operator gets a clear log line.
|
|
245
|
-
if (/[\r\n']/.test(value)) {
|
|
246
|
-
console.warn(`[otel] not forwarding ${key}: value contains a newline or single quote`);
|
|
247
|
-
continue;
|
|
248
|
-
}
|
|
249
|
-
out[key] = value;
|
|
250
|
-
}
|
|
251
|
-
return out;
|
|
252
|
-
}
|
|
253
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Span } from "@opentelemetry/api";
|
|
2
|
-
export interface PiEventRecordOptions {
|
|
3
|
-
includeContent: boolean;
|
|
4
|
-
span?: Span;
|
|
5
|
-
surface: "agent" | "chat";
|
|
6
|
-
sessionId?: string;
|
|
7
|
-
workflowName?: string;
|
|
8
|
-
phaseName?: string;
|
|
9
|
-
model?: string;
|
|
10
|
-
}
|
|
11
|
-
export declare function sanitizePiEvent(record: Record<string, unknown>, includeContent?: boolean): Record<string, unknown>;
|
|
12
|
-
export declare function recordPiEvent(record: Record<string, unknown>, opts: PiEventRecordOptions): void;
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { trace } from "@opentelemetry/api";
|
|
2
|
-
import { safeSpanAttributes } from "./index.js";
|
|
3
|
-
const CONTENT_LIMIT = 4096;
|
|
4
|
-
function trunc(value) {
|
|
5
|
-
if (typeof value !== "string")
|
|
6
|
-
return value;
|
|
7
|
-
return value.length > CONTENT_LIMIT ? value.slice(0, CONTENT_LIMIT - 1) + "…" : value;
|
|
8
|
-
}
|
|
9
|
-
function contentTypes(content) {
|
|
10
|
-
if (!Array.isArray(content))
|
|
11
|
-
return [];
|
|
12
|
-
return content.map((c) => typeof c === "object" && c !== null && "type" in c ? String(c.type) : "unknown");
|
|
13
|
-
}
|
|
14
|
-
function sanitizeMessage(message, includeContent) {
|
|
15
|
-
if (typeof message !== "object" || message === null)
|
|
16
|
-
return {};
|
|
17
|
-
const m = message;
|
|
18
|
-
const content = Array.isArray(m.content) ? m.content : [];
|
|
19
|
-
const out = {
|
|
20
|
-
"message.role": typeof m.role === "string" ? m.role : undefined,
|
|
21
|
-
"message.content_block_count": content.length,
|
|
22
|
-
"message.content_block_types": contentTypes(content).join(","),
|
|
23
|
-
};
|
|
24
|
-
const usage = typeof m.usage === "object" && m.usage !== null ? m.usage : undefined;
|
|
25
|
-
if (usage) {
|
|
26
|
-
for (const [key, value] of Object.entries(usage)) {
|
|
27
|
-
if (typeof value === "number" || typeof value === "string" || typeof value === "boolean")
|
|
28
|
-
out[`usage.${key}`] = value;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (includeContent) {
|
|
32
|
-
out["message.content"] = JSON.stringify(content, (_k, v) => trunc(v));
|
|
33
|
-
}
|
|
34
|
-
return out;
|
|
35
|
-
}
|
|
36
|
-
export function sanitizePiEvent(record, includeContent = false) {
|
|
37
|
-
const type = typeof record.type === "string" ? record.type : "unknown";
|
|
38
|
-
const out = { "pi.event_type": type };
|
|
39
|
-
if (typeof record.sessionId === "string")
|
|
40
|
-
out["agent.session_id"] = record.sessionId;
|
|
41
|
-
switch (type) {
|
|
42
|
-
case "session":
|
|
43
|
-
if (typeof record.id === "string")
|
|
44
|
-
out["agent.session_id"] = record.id;
|
|
45
|
-
if (typeof record.cwd === "string")
|
|
46
|
-
out["agent.cwd"] = record.cwd;
|
|
47
|
-
if (typeof record.runtime === "string")
|
|
48
|
-
out["agent.runtime"] = record.runtime;
|
|
49
|
-
if (typeof record.version === "string")
|
|
50
|
-
out["agent.version"] = record.version;
|
|
51
|
-
break;
|
|
52
|
-
case "message_end":
|
|
53
|
-
Object.assign(out, sanitizeMessage(record.message, includeContent));
|
|
54
|
-
break;
|
|
55
|
-
case "tool_execution_end":
|
|
56
|
-
if (typeof record.toolName === "string")
|
|
57
|
-
out["tool.name"] = record.toolName;
|
|
58
|
-
if (typeof record.tool === "string")
|
|
59
|
-
out["tool.name"] = record.tool;
|
|
60
|
-
if (typeof record.isError === "boolean")
|
|
61
|
-
out["tool.is_error"] = record.isError;
|
|
62
|
-
if (typeof record.durationMs === "number")
|
|
63
|
-
out["tool.duration_ms"] = record.durationMs;
|
|
64
|
-
if (typeof record.status === "string")
|
|
65
|
-
out["tool.status"] = record.status;
|
|
66
|
-
if (record.error instanceof Error) {
|
|
67
|
-
out["error.name"] = record.error.name;
|
|
68
|
-
out["error.message"] = record.error.message;
|
|
69
|
-
if (includeContent)
|
|
70
|
-
out["error.stack"] = trunc(record.error.stack);
|
|
71
|
-
}
|
|
72
|
-
else if (typeof record.error === "string") {
|
|
73
|
-
out["error.message"] = record.error;
|
|
74
|
-
}
|
|
75
|
-
if (includeContent) {
|
|
76
|
-
if (record.result !== undefined)
|
|
77
|
-
out["tool.result"] = trunc(typeof record.result === "string" ? record.result : JSON.stringify(record.result));
|
|
78
|
-
if (record.output !== undefined)
|
|
79
|
-
out["tool.output"] = trunc(typeof record.output === "string" ? record.output : JSON.stringify(record.output));
|
|
80
|
-
}
|
|
81
|
-
break;
|
|
82
|
-
case "extension_status":
|
|
83
|
-
for (const key of ["extension", "status", "mode", "provider", "toolCount", "reason"]) {
|
|
84
|
-
const value = record[key];
|
|
85
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean")
|
|
86
|
-
out[`extension.${key}`] = value;
|
|
87
|
-
}
|
|
88
|
-
break;
|
|
89
|
-
case "skills_status":
|
|
90
|
-
for (const key of ["status", "discovered", "noSkills"]) {
|
|
91
|
-
const value = record[key];
|
|
92
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean")
|
|
93
|
-
out[`skills.${key}`] = value;
|
|
94
|
-
}
|
|
95
|
-
if (Array.isArray(record.skills)) {
|
|
96
|
-
out["skills.names"] = record.skills
|
|
97
|
-
.map((s) => (s && typeof s === "object" && "name" in s ? String(s.name) : ""))
|
|
98
|
-
.filter(Boolean)
|
|
99
|
-
.join(",");
|
|
100
|
-
}
|
|
101
|
-
break;
|
|
102
|
-
case "usage_snapshot":
|
|
103
|
-
for (const key of ["turns", "costUsd", "inputTokens", "outputTokens", "cacheReadInputTokens", "cacheCreationInputTokens"]) {
|
|
104
|
-
const value = record[key];
|
|
105
|
-
if (typeof value === "number")
|
|
106
|
-
out[`usage.${key}`] = value;
|
|
107
|
-
}
|
|
108
|
-
break;
|
|
109
|
-
case "fatal_error":
|
|
110
|
-
if (typeof record.name === "string")
|
|
111
|
-
out["error.name"] = record.name;
|
|
112
|
-
if (typeof record.message === "string")
|
|
113
|
-
out["error.message"] = record.message;
|
|
114
|
-
if (includeContent && typeof record.stack === "string")
|
|
115
|
-
out["error.stack"] = trunc(record.stack);
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
return safeSpanAttributes(out);
|
|
119
|
-
}
|
|
120
|
-
export function recordPiEvent(record, opts) {
|
|
121
|
-
const span = opts.span ?? trace.getActiveSpan();
|
|
122
|
-
if (!span)
|
|
123
|
-
return;
|
|
124
|
-
const attrs = safeSpanAttributes({
|
|
125
|
-
...sanitizePiEvent(record, opts.includeContent),
|
|
126
|
-
surface: opts.surface,
|
|
127
|
-
"workflow.name": opts.workflowName,
|
|
128
|
-
"phase.name": opts.phaseName,
|
|
129
|
-
model: opts.model,
|
|
130
|
-
"agent.session_id": opts.sessionId,
|
|
131
|
-
});
|
|
132
|
-
span.addEvent(`pi.${typeof record.type === "string" ? record.type : "event"}`, attrs);
|
|
133
|
-
}
|
|
134
|
-
//# sourceMappingURL=pi-events.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pi-events.js","sourceRoot":"","sources":["../../src/telemetry/pi-events.ts"],"names":[],"mappings":"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"}
|
package/dist/workflows/dag.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { PhaseDefinition } from "./schema.js";
|
|
2
|
-
export type NodeStatus = "pending" | "running" | "succeeded" | "failed" | "skipped";
|
|
3
|
-
export type TriggerRule = "all_success" | "one_success" | "none_failed_min_one_success" | "all_done";
|
|
4
|
-
export interface DagNode {
|
|
5
|
-
name: string;
|
|
6
|
-
depends_on: string[];
|
|
7
|
-
trigger_rule: TriggerRule;
|
|
8
|
-
status: NodeStatus;
|
|
9
|
-
output?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface BuildDagOptions {
|
|
12
|
-
/**
|
|
13
|
-
* When set and **no** phase declares `depends_on`, synthesize a chain:
|
|
14
|
-
* each phase depends on the one declared before it (trigger rule
|
|
15
|
-
* `all_success`). This reproduces the old linear runner's semantics —
|
|
16
|
-
* sequential execution with a failure cascade — as a degenerate DAG, so
|
|
17
|
-
* the unified scheduler can treat every workflow uniformly. When any phase
|
|
18
|
-
* declares an explicit edge, the declared graph is used verbatim (no
|
|
19
|
-
* synthesis).
|
|
20
|
-
*/
|
|
21
|
-
chainIfNoDeps?: boolean;
|
|
22
|
-
}
|
|
23
|
-
/** Build a DAG from phase definitions. Validates edges and detects cycles. */
|
|
24
|
-
export declare function buildDag(phases: PhaseDefinition[], opts?: BuildDagOptions): DagNode[];
|
|
25
|
-
/** Evaluate a trigger rule against upstream dependency statuses. */
|
|
26
|
-
export declare function evaluateTriggerRule(rule: TriggerRule, depStatuses: NodeStatus[]): boolean;
|
|
27
|
-
/** Return nodes that are ready to run: pending, all deps terminal, trigger rule satisfied. */
|
|
28
|
-
export declare function getReadyNodes(dag: DagNode[]): DagNode[];
|
|
29
|
-
/** Return nodes that should be skipped: pending, all deps terminal, trigger rule NOT satisfied. */
|
|
30
|
-
export declare function getNodesToSkip(dag: DagNode[]): DagNode[];
|
|
31
|
-
/** Check if all nodes are in a terminal state. */
|
|
32
|
-
export declare function isComplete(dag: DagNode[]): boolean;
|
|
33
|
-
/**
|
|
34
|
-
* Return layers of parallelizable phase names (topological sort).
|
|
35
|
-
* Each layer contains phases that can run concurrently.
|
|
36
|
-
*/
|
|
37
|
-
export declare function topoSort(dag: DagNode[]): string[][];
|
package/dist/workflows/dag.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
const TERMINAL = ["succeeded", "failed", "skipped"];
|
|
2
|
-
/** Build a DAG from phase definitions. Validates edges and detects cycles. */
|
|
3
|
-
export function buildDag(phases, opts = {}) {
|
|
4
|
-
const names = new Set(phases.map((p) => p.name));
|
|
5
|
-
for (const phase of phases) {
|
|
6
|
-
if (!phase.depends_on?.length)
|
|
7
|
-
continue;
|
|
8
|
-
for (const dep of phase.depends_on) {
|
|
9
|
-
if (dep === phase.name)
|
|
10
|
-
throw new Error(`Phase "${phase.name}" depends on itself`);
|
|
11
|
-
if (!names.has(dep))
|
|
12
|
-
throw new Error(`Phase "${phase.name}" depends on unknown phase "${dep}"`);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
const anyDeclared = phases.some((p) => p.depends_on && p.depends_on.length > 0);
|
|
16
|
-
const synthesizeChain = opts.chainIfNoDeps === true && !anyDeclared;
|
|
17
|
-
const nodes = phases.map((p, i) => ({
|
|
18
|
-
name: p.name,
|
|
19
|
-
depends_on: synthesizeChain
|
|
20
|
-
? (i > 0 ? [phases[i - 1].name] : [])
|
|
21
|
-
: (p.depends_on ?? []),
|
|
22
|
-
trigger_rule: p.trigger_rule ?? "all_success",
|
|
23
|
-
status: "pending",
|
|
24
|
-
}));
|
|
25
|
-
// Detect cycles via DFS
|
|
26
|
-
const nodeMap = new Map(nodes.map((n) => [n.name, n]));
|
|
27
|
-
const WHITE = 0, GRAY = 1, BLACK = 2;
|
|
28
|
-
const color = new Map(nodes.map((n) => [n.name, WHITE]));
|
|
29
|
-
// NOTE: DFS follows depends_on edges (child → parent), the reverse of conventional
|
|
30
|
-
// execution-order direction. Cycle detection still works: a GRAY ancestor reachable
|
|
31
|
-
// from a descendant via depends_on edges indicates a cycle in this representation.
|
|
32
|
-
function dfs(name, path) {
|
|
33
|
-
color.set(name, GRAY);
|
|
34
|
-
for (const dep of nodeMap.get(name).depends_on) {
|
|
35
|
-
if (color.get(dep) === GRAY) {
|
|
36
|
-
throw new Error(`Cycle detected: ${[...path, name, dep].join(" -> ")}`);
|
|
37
|
-
}
|
|
38
|
-
if (color.get(dep) === WHITE) {
|
|
39
|
-
dfs(dep, [...path, name]);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
color.set(name, BLACK);
|
|
43
|
-
}
|
|
44
|
-
for (const node of nodes) {
|
|
45
|
-
if (color.get(node.name) === WHITE)
|
|
46
|
-
dfs(node.name, []);
|
|
47
|
-
}
|
|
48
|
-
return nodes;
|
|
49
|
-
}
|
|
50
|
-
/** Evaluate a trigger rule against upstream dependency statuses. */
|
|
51
|
-
export function evaluateTriggerRule(rule, depStatuses) {
|
|
52
|
-
if (depStatuses.length === 0)
|
|
53
|
-
return true;
|
|
54
|
-
switch (rule) {
|
|
55
|
-
case "all_success":
|
|
56
|
-
return depStatuses.every((s) => s === "succeeded");
|
|
57
|
-
case "one_success":
|
|
58
|
-
return depStatuses.some((s) => s === "succeeded");
|
|
59
|
-
case "none_failed_min_one_success":
|
|
60
|
-
return !depStatuses.some((s) => s === "failed") && depStatuses.some((s) => s === "succeeded");
|
|
61
|
-
case "all_done":
|
|
62
|
-
return depStatuses.every((s) => TERMINAL.includes(s));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/** Return nodes that are ready to run: pending, all deps terminal, trigger rule satisfied. */
|
|
66
|
-
export function getReadyNodes(dag) {
|
|
67
|
-
const nodeMap = new Map(dag.map((n) => [n.name, n]));
|
|
68
|
-
return dag.filter((node) => {
|
|
69
|
-
if (node.status !== "pending")
|
|
70
|
-
return false;
|
|
71
|
-
const deps = node.depends_on.map((d) => nodeMap.get(d));
|
|
72
|
-
if (!deps.every((d) => TERMINAL.includes(d.status)))
|
|
73
|
-
return false;
|
|
74
|
-
return evaluateTriggerRule(node.trigger_rule, deps.map((d) => d.status));
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
/** Return nodes that should be skipped: pending, all deps terminal, trigger rule NOT satisfied. */
|
|
78
|
-
export function getNodesToSkip(dag) {
|
|
79
|
-
const nodeMap = new Map(dag.map((n) => [n.name, n]));
|
|
80
|
-
return dag.filter((node) => {
|
|
81
|
-
if (node.status !== "pending")
|
|
82
|
-
return false;
|
|
83
|
-
const deps = node.depends_on.map((d) => nodeMap.get(d));
|
|
84
|
-
if (!deps.every((d) => TERMINAL.includes(d.status)))
|
|
85
|
-
return false;
|
|
86
|
-
return !evaluateTriggerRule(node.trigger_rule, deps.map((d) => d.status));
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
/** Check if all nodes are in a terminal state. */
|
|
90
|
-
export function isComplete(dag) {
|
|
91
|
-
return dag.every((n) => TERMINAL.includes(n.status));
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Return layers of parallelizable phase names (topological sort).
|
|
95
|
-
* Each layer contains phases that can run concurrently.
|
|
96
|
-
*/
|
|
97
|
-
export function topoSort(dag) {
|
|
98
|
-
const inDegree = new Map(dag.map((n) => [n.name, n.depends_on.length]));
|
|
99
|
-
const layers = [];
|
|
100
|
-
let current = dag.filter((n) => (inDegree.get(n.name) ?? 0) === 0).map((n) => n.name);
|
|
101
|
-
while (current.length > 0) {
|
|
102
|
-
layers.push([...current]);
|
|
103
|
-
const next = [];
|
|
104
|
-
for (const name of current) {
|
|
105
|
-
for (const node of dag) {
|
|
106
|
-
if (node.depends_on.includes(name)) {
|
|
107
|
-
const deg = (inDegree.get(node.name) ?? 0) - 1;
|
|
108
|
-
inDegree.set(node.name, deg);
|
|
109
|
-
if (deg === 0)
|
|
110
|
-
next.push(node.name);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
current = next;
|
|
115
|
-
}
|
|
116
|
-
return layers;
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=dag.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dag.js","sourceRoot":"","sources":["../../src/workflows/dag.ts"],"names":[],"mappings":"AAaA,MAAM,QAAQ,GAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAelE,8EAA8E;AAC9E,MAAM,UAAU,QAAQ,CAAC,MAAyB,EAAE,OAAwB,EAAE;IAC5E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM;YAAE,SAAS;QACxC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,GAAG,KAAK,KAAK,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,qBAAqB,CAAC,CAAC;YACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,+BAA+B,GAAG,GAAG,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChF,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC;IAEpE,MAAM,KAAK,GAAc,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,UAAU,EAAE,eAAe;YACzB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;QACxB,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,aAAa;QAC7C,MAAM,EAAE,SAAuB;KAChC,CAAC,CAAC,CAAC;IAEJ,wBAAwB;IACxB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAEzE,mFAAmF;IACnF,oFAAoF;IACpF,mFAAmF;IACnF,SAAS,GAAG,CAAC,IAAY,EAAE,IAAc;QACvC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,UAAU,EAAE,CAAC;YAChD,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC7B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,mBAAmB,CAAC,IAAiB,EAAE,WAAyB;IAC9E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;QACrD,KAAK,aAAa;YAChB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;QACpD,KAAK,6BAA6B;YAChC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;QAChG,KAAK,UAAU;YACb,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,aAAa,CAAC,GAAc;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAClE,OAAO,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,cAAc,CAAC,GAAc;IAC3C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAClE,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,UAAU,CAAC,GAAc;IACvC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAc;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAiB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEtF,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;oBAC7B,IAAI,GAAG,KAAK,CAAC;wBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { type AgentWorkflowDefinition, type CronWorkflowDefinition } from "./schema.js";
|
|
2
|
-
import type { DisabledConfig, RouteConfig } from "../config/config.js";
|
|
3
|
-
export interface WorkflowAssetConfig {
|
|
4
|
-
builtInRoot?: string;
|
|
5
|
-
overlayRoot?: string;
|
|
6
|
-
disabled?: Partial<DisabledConfig>;
|
|
7
|
-
}
|
|
8
|
-
export interface WorkflowOrigin {
|
|
9
|
-
layer: string;
|
|
10
|
-
filePath: string;
|
|
11
|
-
}
|
|
12
|
-
/** Configure ordered asset layers. Built-ins load first; overlay wins by logical name. */
|
|
13
|
-
export declare function configureWorkflowAssets(config?: WorkflowAssetConfig): void;
|
|
14
|
-
/** Legacy wrapper used by older tests to point directly at a workflow directory. */
|
|
15
|
-
export declare function setWorkflowDir(dir: string): void;
|
|
16
|
-
export declare function clearWorkflowCache(): void;
|
|
17
|
-
/** Monotonic counter bumped on every asset-layer reconfigure / cache clear. */
|
|
18
|
-
export declare function getAssetVersion(): number;
|
|
19
|
-
export declare function getWorkflow(name: string): AgentWorkflowDefinition;
|
|
20
|
-
export declare function getCronWorkflows(): CronWorkflowDefinition[];
|
|
21
|
-
export declare function listAgentWorkflows(): AgentWorkflowDefinition[];
|
|
22
|
-
/**
|
|
23
|
-
* The enabled workflow that claims a given classifier intent via its
|
|
24
|
-
* `classification.intent`, if any. Backs the router's data-driven fallback: an
|
|
25
|
-
* intent the router's bespoke switch doesn't handle routes to its owning
|
|
26
|
-
* workflow. Returns undefined for control intents and unclaimed tokens.
|
|
27
|
-
*/
|
|
28
|
-
export declare function getWorkflowByIntent(intent: string): AgentWorkflowDefinition | undefined;
|
|
29
|
-
export declare function getWorkflowOrigin(name: string): WorkflowOrigin | undefined;
|
|
30
|
-
export declare function getCronWorkflowOrigin(name: string): WorkflowOrigin | undefined;
|
|
31
|
-
export declare function loadWorkflowYamlRaw(name: string): string;
|
|
32
|
-
export declare function loadPromptTemplate(relativePath: string): string;
|
|
33
|
-
export declare function resolvePromptPath(relativePath: string): string;
|
|
34
|
-
export declare function loadSkillRaw(name: string): string;
|
|
35
|
-
export declare function loadSkillInstructions(name: string): string;
|
|
36
|
-
/**
|
|
37
|
-
* Resolve a list of skill names to their absolute directory paths.
|
|
38
|
-
* Each returned path is the skill folder root (containing `SKILL.md`
|
|
39
|
-
* plus any `scripts/`, `references/`, `assets/`) — not the .md file.
|
|
40
|
-
* The sandbox staging step in agent-executor uses these to symlink or
|
|
41
|
-
* copy the whole folder into the phase's bundle at
|
|
42
|
-
* `<workspaceRoot>/.lastlight-skills/<phase>/<name>/`.
|
|
43
|
-
* Layer-aware: overlay skills win over built-ins (same precedence and
|
|
44
|
-
* disabled-skill handling as `loadSkillRaw`).
|
|
45
|
-
*/
|
|
46
|
-
export declare function resolveSkillPaths(names: readonly string[]): string[];
|
|
47
|
-
/**
|
|
48
|
-
* Concatenate resolved agent-context/*.md with overlay filename replacement.
|
|
49
|
-
* Later layers replace earlier files by basename; disabled.agentContext removes
|
|
50
|
-
* either exact filenames (rules.md) or stem names (rules).
|
|
51
|
-
*/
|
|
52
|
-
export declare function loadAgentContext(): string;
|
|
53
|
-
export declare function validateAssets(routes?: RouteConfig): void;
|