lastlight 0.16.0 → 0.16.1
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} +26 -1
- package/dist/{cli/cli-server.js → cli-server.js} +40 -5
- package/dist/cli-server.js.map +1 -0
- package/dist/cli-timeline.js.map +1 -0
- package/dist/{cli/cli.js → cli.js} +4 -3
- 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,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal template engine for workflow prompt files.
|
|
3
|
-
*
|
|
4
|
-
* Supports:
|
|
5
|
-
* {{varName}} — simple variable substitution
|
|
6
|
-
* {{slugify varName}} — slugify helper applied to a variable
|
|
7
|
-
* {{branchUrl file}} — generate a GitHub branch URL for a file in issueDir
|
|
8
|
-
* {{#if varName}}...{{/if}} — conditional blocks (no nesting, truthy check)
|
|
9
|
-
*/
|
|
10
|
-
export interface TemplateContext {
|
|
11
|
-
owner: string;
|
|
12
|
-
repo: string;
|
|
13
|
-
issueNumber: number;
|
|
14
|
-
issueTitle: string;
|
|
15
|
-
issueBody: string;
|
|
16
|
-
issueLabels: string[];
|
|
17
|
-
commentBody: string;
|
|
18
|
-
sender: string;
|
|
19
|
-
branch: string;
|
|
20
|
-
taskId: string;
|
|
21
|
-
issueDir: string;
|
|
22
|
-
bootstrapLabel: string;
|
|
23
|
-
/**
|
|
24
|
-
* True only in server mode (handoff docs externalized to the Last Light
|
|
25
|
-
* store instead of committed into the target repo). Prompts gate their
|
|
26
|
-
* `git add .lastlight/ && commit` behind `{{#if !externalizeArtifacts}}`, so
|
|
27
|
-
* an absent flag defaults to repo behaviour (commit the docs) — fail-safe for
|
|
28
|
-
* any render path that doesn't set it.
|
|
29
|
-
*/
|
|
30
|
-
externalizeArtifacts?: boolean;
|
|
31
|
-
/**
|
|
32
|
-
* Dashboard base URL (no trailing slash). Used by the `{{artifactUrl file}}`
|
|
33
|
-
* helper to build a server-mode dashboard link to a handoff doc. Absent when
|
|
34
|
-
* no public URL is configured.
|
|
35
|
-
*/
|
|
36
|
-
publicUrl?: string;
|
|
37
|
-
/**
|
|
38
|
-
* Public, unauthenticated, image-only base URL for inline screenshot embeds
|
|
39
|
-
* in the browser-QA comment (`<publicUrl>/admin/api/public/artifacts/<owner>/
|
|
40
|
-
* <repo>/<issueKey>`). The agent appends `/<name>.png` per screenshot. Empty
|
|
41
|
-
* string when no public URL is configured — browser-QA prompts then fall back
|
|
42
|
-
* to filename-only references via `{{#if !artifactBaseUrl}}`.
|
|
43
|
-
*/
|
|
44
|
-
artifactBaseUrl?: string;
|
|
45
|
-
/**
|
|
46
|
-
* Id of the approval being created — injected into an approval-gate message's
|
|
47
|
-
* render context by `PhaseExecutor.pauseForApproval` so the `{{approvalUrl}}`
|
|
48
|
-
* helper can deep-link to the focused approval view.
|
|
49
|
-
*/
|
|
50
|
-
approvalId?: string;
|
|
51
|
-
approved?: boolean;
|
|
52
|
-
fixCycles?: number;
|
|
53
|
-
reviewerNote?: string;
|
|
54
|
-
docLinks?: string;
|
|
55
|
-
fixCycle?: number;
|
|
56
|
-
prNumber?: number;
|
|
57
|
-
prTitle?: string;
|
|
58
|
-
prBody?: string;
|
|
59
|
-
failedChecks?: string;
|
|
60
|
-
ciSection?: string;
|
|
61
|
-
prePopulateBranch?: string;
|
|
62
|
-
contextSnapshot?: string;
|
|
63
|
-
iteration?: number;
|
|
64
|
-
maxIterations?: number;
|
|
65
|
-
previousOutput?: string;
|
|
66
|
-
phaseOutputs?: Record<string, unknown>;
|
|
67
|
-
/**
|
|
68
|
-
* Mutable phase-to-phase state surfaced from `workflow_runs.scratch`.
|
|
69
|
-
* Used by the socratic explore loop to accumulate Q&A across reply-gate
|
|
70
|
-
* pauses. Templates can read {{scratch.socratic.qa}} etc. via the
|
|
71
|
-
* existing two-level dot notation in renderTemplate.
|
|
72
|
-
*/
|
|
73
|
-
scratch?: Record<string, unknown>;
|
|
74
|
-
/**
|
|
75
|
-
* Non-GitHub trigger id (currently only `slack:{teamId}:{channel}:{thread}`).
|
|
76
|
-
* When set, the runner uses this instead of deriving one from
|
|
77
|
-
* owner/repo/issueNumber — that gives Slack-initiated workflows a stable
|
|
78
|
-
* key to pause/resume on.
|
|
79
|
-
*/
|
|
80
|
-
triggerIdOverride?: string;
|
|
81
|
-
[key: string]: unknown;
|
|
82
|
-
}
|
|
83
|
-
export declare function slugify(text: string): string;
|
|
84
|
-
/**
|
|
85
|
-
* Render a template string with the given context.
|
|
86
|
-
* Processes: {{#if}}, {{slugify}}, {{branchUrl}}, {{varName}}.
|
|
87
|
-
*/
|
|
88
|
-
export declare function renderTemplate(template: string, ctx: TemplateContext): string;
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal template engine for workflow prompt files.
|
|
3
|
-
*
|
|
4
|
-
* Supports:
|
|
5
|
-
* {{varName}} — simple variable substitution
|
|
6
|
-
* {{slugify varName}} — slugify helper applied to a variable
|
|
7
|
-
* {{branchUrl file}} — generate a GitHub branch URL for a file in issueDir
|
|
8
|
-
* {{#if varName}}...{{/if}} — conditional blocks (no nesting, truthy check)
|
|
9
|
-
*/
|
|
10
|
-
export function slugify(text) {
|
|
11
|
-
return text
|
|
12
|
-
.toLowerCase()
|
|
13
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
14
|
-
.replace(/^-|-$/g, "")
|
|
15
|
-
.slice(0, 40);
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Render a template string with the given context.
|
|
19
|
-
* Processes: {{#if}}, {{slugify}}, {{branchUrl}}, {{varName}}.
|
|
20
|
-
*/
|
|
21
|
-
export function renderTemplate(template, ctx) {
|
|
22
|
-
let result = template;
|
|
23
|
-
// 0. Phase output substitution: ${phaseName.output} → phaseOutputs[phaseName]
|
|
24
|
-
if (ctx.phaseOutputs) {
|
|
25
|
-
const phaseOutputs = ctx.phaseOutputs;
|
|
26
|
-
result = result.replace(/\$\{(\w+)\.output\}/g, (_match, phaseName) => {
|
|
27
|
-
const val = phaseOutputs[phaseName];
|
|
28
|
-
if (val === undefined || val === null)
|
|
29
|
-
return "";
|
|
30
|
-
return typeof val === "string" ? val : String(val?.output ?? JSON.stringify(val));
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
// Walk a dotted key like `scratch.socratic.ready` through ctx, falling
|
|
34
|
-
// back to ctx.phaseOutputs for the first segment. Returns undefined on
|
|
35
|
-
// any missing intermediate.
|
|
36
|
-
const walkKey = (key) => {
|
|
37
|
-
const parts = key.split(".");
|
|
38
|
-
if (parts.length === 1) {
|
|
39
|
-
const val = ctx[key];
|
|
40
|
-
if (val !== undefined && val !== null)
|
|
41
|
-
return val;
|
|
42
|
-
return ctx.phaseOutputs?.[key];
|
|
43
|
-
}
|
|
44
|
-
let cur = ctx[parts[0]];
|
|
45
|
-
if (cur === undefined || cur === null)
|
|
46
|
-
cur = ctx.phaseOutputs?.[parts[0]];
|
|
47
|
-
for (let i = 1; i < parts.length; i++) {
|
|
48
|
-
if (cur === null || typeof cur !== "object")
|
|
49
|
-
return undefined;
|
|
50
|
-
cur = cur[parts[i]];
|
|
51
|
-
}
|
|
52
|
-
return cur;
|
|
53
|
-
};
|
|
54
|
-
// 1. Conditional blocks: {{#if varName}}...{{/if}} (supports dot notation).
|
|
55
|
-
// Key segments allow hyphens so phase/model keys like `pr-fix` resolve
|
|
56
|
-
// (e.g. {{models.pr-fix}}); \w alone would leave them unrendered.
|
|
57
|
-
result = result.replace(/\{\{#if\s+(!?)([\w-]+(?:\.[\w-]+)*)\}\}([\s\S]*?)\{\{\/if\}\}/g, (_match, negate, varName, body) => {
|
|
58
|
-
const val = walkKey(varName);
|
|
59
|
-
// Truthy: non-empty string, non-zero number, non-empty array, true boolean
|
|
60
|
-
const truthy = val !== undefined &&
|
|
61
|
-
val !== null &&
|
|
62
|
-
val !== "" &&
|
|
63
|
-
val !== false &&
|
|
64
|
-
val !== 0 &&
|
|
65
|
-
!(Array.isArray(val) && val.length === 0);
|
|
66
|
-
return (negate ? !truthy : truthy) ? body : "";
|
|
67
|
-
});
|
|
68
|
-
// 2. Slugify helper: {{slugify varName}}
|
|
69
|
-
result = result.replace(/\{\{slugify\s+(\w+)\}\}/g, (_match, varName) => {
|
|
70
|
-
const val = ctx[varName];
|
|
71
|
-
if (val === undefined || val === null)
|
|
72
|
-
return "";
|
|
73
|
-
return slugify(String(val));
|
|
74
|
-
});
|
|
75
|
-
// 3. Branch URL helper: {{branchUrl filename}}
|
|
76
|
-
// Generates: https://github.com/{owner}/{repo}/blob/{branch}/.lastlight/issue-{N}/{file}
|
|
77
|
-
result = result.replace(/\{\{branchUrl\s+(\S+)\}\}/g, (_match, file) => {
|
|
78
|
-
const encoded = encodeURIComponent(ctx.branch);
|
|
79
|
-
return `https://github.com/${ctx.owner}/${ctx.repo}/blob/${encoded}/${ctx.issueDir}/${file}`;
|
|
80
|
-
});
|
|
81
|
-
// 3b. Artifact URL helper: {{artifactUrl filename}} — mode-aware link to a
|
|
82
|
-
// handoff doc. In repo mode it's identical to {{branchUrl}} (the doc is
|
|
83
|
-
// committed on the branch). In server mode the doc lives on the Last Light
|
|
84
|
-
// host, so the link points at the admin dashboard's Artifacts view. Falls
|
|
85
|
-
// back to the branch URL when no publicUrl is configured so a server-mode
|
|
86
|
-
// deploy without PUBLIC_URL still produces a usable (if GitHub-less) link.
|
|
87
|
-
result = result.replace(/\{\{artifactUrl\s+(\S+)\}\}/g, (_match, file) => {
|
|
88
|
-
const branchHref = `https://github.com/${ctx.owner}/${ctx.repo}/blob/${encodeURIComponent(ctx.branch)}/${ctx.issueDir}/${file}`;
|
|
89
|
-
if (!ctx.externalizeArtifacts)
|
|
90
|
-
return branchHref;
|
|
91
|
-
if (!ctx.publicUrl)
|
|
92
|
-
return branchHref;
|
|
93
|
-
const issueKey = ctx.issueDir.replace(/^\.lastlight\//, "");
|
|
94
|
-
const base = String(ctx.publicUrl).replace(/\/+$/, "");
|
|
95
|
-
const q = `repo=${encodeURIComponent(`${ctx.owner}/${ctx.repo}`)}` +
|
|
96
|
-
`&key=${encodeURIComponent(issueKey)}` +
|
|
97
|
-
`&doc=${encodeURIComponent(file)}`;
|
|
98
|
-
return `${base}/admin/?tab=artifacts&${q}`;
|
|
99
|
-
});
|
|
100
|
-
// 3c. Approval URL helper: {{approvalUrl}} — deep link to the focused
|
|
101
|
-
// approval view for the gate currently being rendered. `approvalId` is
|
|
102
|
-
// injected into the message context by PhaseExecutor.pauseForApproval, and
|
|
103
|
-
// `publicUrl` is the dashboard base. Renders empty when either is absent
|
|
104
|
-
// (e.g. no PUBLIC_URL configured) so the rest of the gate message still
|
|
105
|
-
// posts cleanly.
|
|
106
|
-
result = result.replace(/\{\{approvalUrl\}\}/g, () => {
|
|
107
|
-
if (!ctx.publicUrl || !ctx.approvalId)
|
|
108
|
-
return "";
|
|
109
|
-
const base = String(ctx.publicUrl).replace(/\/+$/, "");
|
|
110
|
-
return `${base}/admin/?approval=${encodeURIComponent(String(ctx.approvalId))}`;
|
|
111
|
-
});
|
|
112
|
-
// 4. Simple variable substitution: {{varName}} and {{a.b.c...}}.
|
|
113
|
-
// Dotted access first checks top-level ctx, then falls back to
|
|
114
|
-
// ctx.phaseOutputs[parent] for the first segment so YAML phases can
|
|
115
|
-
// emit structured output via `output_var` and downstream prompts can
|
|
116
|
-
// read it directly — and the socratic explore loop can read
|
|
117
|
-
// {{scratch.socratic.qa}}.
|
|
118
|
-
// Key segments allow hyphens (e.g. {{models.pr-fix}}) — see #1.
|
|
119
|
-
result = result.replace(/\{\{([\w-]+(?:\.[\w-]+)*)\}\}/g, (_match, key) => {
|
|
120
|
-
const val = walkKey(key);
|
|
121
|
-
if (val === undefined || val === null)
|
|
122
|
-
return "";
|
|
123
|
-
return typeof val === "object" ? JSON.stringify(val) : String(val);
|
|
124
|
-
});
|
|
125
|
-
return result;
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/workflows/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
export type TriggerInfo = {
|
|
2
|
-
kind: "cron";
|
|
3
|
-
name: string;
|
|
4
|
-
schedule: string;
|
|
5
|
-
} | {
|
|
6
|
-
kind: "github";
|
|
7
|
-
event: string;
|
|
8
|
-
description: string;
|
|
9
|
-
} | {
|
|
10
|
-
kind: "slack";
|
|
11
|
-
command: string;
|
|
12
|
-
description: string;
|
|
13
|
-
} | {
|
|
14
|
-
kind: "mention";
|
|
15
|
-
description: string;
|
|
16
|
-
} | {
|
|
17
|
-
kind: "internal";
|
|
18
|
-
description: string;
|
|
19
|
-
};
|
|
20
|
-
export declare function getWorkflowTriggers(workflowName: string): TriggerInfo[];
|
|
21
|
-
export declare function getWorkflowTriggerKinds(workflowName: string): TriggerInfo["kind"][];
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { getCronWorkflows } from "./loader.js";
|
|
2
|
-
import { getRoutes, getBotName } from "../config/config.js";
|
|
3
|
-
function add(map, name, info) {
|
|
4
|
-
if (!name)
|
|
5
|
-
return;
|
|
6
|
-
const effectiveName = name === "github-orchestrator" ? "build" : name;
|
|
7
|
-
map.set(effectiveName, [...(map.get(effectiveName) || []), info]);
|
|
8
|
-
}
|
|
9
|
-
function routeTriggers() {
|
|
10
|
-
const routes = getRoutes();
|
|
11
|
-
const bot = `@${getBotName()}`;
|
|
12
|
-
const map = new Map();
|
|
13
|
-
add(map, routes.github.issue_opened, { kind: "github", event: "issue.opened", description: "An issue is opened" });
|
|
14
|
-
add(map, routes.github.issue_reopened, { kind: "github", event: "issue.reopened", description: "An issue is reopened" });
|
|
15
|
-
add(map, routes.github.pr_opened, { kind: "github", event: "pr.opened", description: "A PR is opened" });
|
|
16
|
-
add(map, routes.github.pr_synchronize, { kind: "github", event: "pr.synchronize", description: "A PR is updated" });
|
|
17
|
-
add(map, routes.github.pr_reopened, { kind: "github", event: "pr.reopened", description: "A PR is reopened" });
|
|
18
|
-
add(map, routes.github.pr_fix, { kind: "mention", description: `\`${bot} build …\` on a PR comment (maintainers only)` });
|
|
19
|
-
add(map, routes.github.pr_comment, { kind: "mention", description: `\`${bot} <message>\` on a PR comment / review` });
|
|
20
|
-
add(map, routes.github.issue_build, { kind: "mention", description: `\`${bot} build …\` on an issue comment (maintainers only)` });
|
|
21
|
-
add(map, routes.github.issue_explore, { kind: "mention", description: `\`${bot} explore …\` on an issue comment` });
|
|
22
|
-
add(map, routes.github.issue_comment, { kind: "mention", description: `\`${bot} <message>\` on an issue comment` });
|
|
23
|
-
add(map, routes.github.security_feedback, { kind: "internal", description: "Chained from `security-review` when issues are found" });
|
|
24
|
-
add(map, routes.slack.build, { kind: "slack", command: "build", description: "Slack: `build <repo>#<n>`" });
|
|
25
|
-
add(map, routes.slack.triage, { kind: "slack", command: "triage", description: "Slack: `triage <repo>`" });
|
|
26
|
-
add(map, routes.slack.review, { kind: "slack", command: "review", description: "Slack: `review <repo>`" });
|
|
27
|
-
add(map, routes.slack.security, { kind: "slack", command: "security", description: "Slack: `security <repo>`" });
|
|
28
|
-
add(map, routes.slack.explore, { kind: "slack", command: "explore", description: "Slack: `explore <repo>#<n>`" });
|
|
29
|
-
return map;
|
|
30
|
-
}
|
|
31
|
-
export function getWorkflowTriggers(workflowName) {
|
|
32
|
-
const cronTriggers = getCronWorkflows()
|
|
33
|
-
.filter((c) => c.workflow === workflowName)
|
|
34
|
-
.map((c) => ({ kind: "cron", name: c.name, schedule: c.schedule }));
|
|
35
|
-
return [...cronTriggers, ...(routeTriggers().get(workflowName) ?? [])];
|
|
36
|
-
}
|
|
37
|
-
export function getWorkflowTriggerKinds(workflowName) {
|
|
38
|
-
const triggers = getWorkflowTriggers(workflowName);
|
|
39
|
-
const seen = new Set();
|
|
40
|
-
for (const t of triggers)
|
|
41
|
-
seen.add(t.kind);
|
|
42
|
-
const order = ["cron", "github", "mention", "slack", "internal"];
|
|
43
|
-
return order.filter((k) => seen.has(k));
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=triggers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../src/workflows/triggers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAS5D,SAAS,GAAG,CAAC,GAA+B,EAAE,IAAwB,EAAE,IAAiB;IACvF,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,MAAM,aAAa,GAAG,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC,CAAC;IACnH,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACzH,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACzG,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACpH,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC/G,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,GAAG,+CAA+C,EAAE,CAAC,CAAC;IAC1H,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,GAAG,uCAAuC,EAAE,CAAC,CAAC;IACtH,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,GAAG,mDAAmD,EAAE,CAAC,CAAC;IACnI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,GAAG,kCAAkC,EAAE,CAAC,CAAC;IACpH,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,GAAG,kCAAkC,EAAE,CAAC,CAAC;IACpH,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,sDAAsD,EAAE,CAAC,CAAC;IACrI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,CAAC;IAC5G,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAC3G,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAC3G,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,0BAA0B,EAAE,CAAC,CAAC;IACjH,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAClH,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,MAAM,YAAY,GAAkB,gBAAgB,EAAE;SACnD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC;SAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC/E,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,YAAoB;IAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,KAAK,GAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACxF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The single parser for a reviewer phase's verdict.
|
|
3
|
-
*
|
|
4
|
-
* A reviewer agent is asked to end its output with a `VERDICT:` marker line —
|
|
5
|
-
* either `VERDICT: APPROVED` or `VERDICT: REQUEST_CHANGES`. When that marker is
|
|
6
|
-
* present we trust it. When it's absent we fall back to a fragile heuristic
|
|
7
|
-
* (preserved here exactly as both runner sites had it): treat the output as
|
|
8
|
-
* approved only when it does NOT mention `REQUEST_CHANGES` and DOES start with
|
|
9
|
-
* `APPROVED`. `viaFallback` lets callers warn when the marker was missing.
|
|
10
|
-
*
|
|
11
|
-
* Hardening the fallback is deliberately out of scope — this parser is
|
|
12
|
-
* behaviour-neutral on verdict semantics.
|
|
13
|
-
*/
|
|
14
|
-
export type ReviewerVerdict = "APPROVED" | "REQUEST_CHANGES";
|
|
15
|
-
export interface ParsedVerdict {
|
|
16
|
-
verdict: ReviewerVerdict;
|
|
17
|
-
viaFallback: boolean;
|
|
18
|
-
}
|
|
19
|
-
export declare function parseReviewerVerdict(output: string): ParsedVerdict;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The single parser for a reviewer phase's verdict.
|
|
3
|
-
*
|
|
4
|
-
* A reviewer agent is asked to end its output with a `VERDICT:` marker line —
|
|
5
|
-
* either `VERDICT: APPROVED` or `VERDICT: REQUEST_CHANGES`. When that marker is
|
|
6
|
-
* present we trust it. When it's absent we fall back to a fragile heuristic
|
|
7
|
-
* (preserved here exactly as both runner sites had it): treat the output as
|
|
8
|
-
* approved only when it does NOT mention `REQUEST_CHANGES` and DOES start with
|
|
9
|
-
* `APPROVED`. `viaFallback` lets callers warn when the marker was missing.
|
|
10
|
-
*
|
|
11
|
-
* Hardening the fallback is deliberately out of scope — this parser is
|
|
12
|
-
* behaviour-neutral on verdict semantics.
|
|
13
|
-
*/
|
|
14
|
-
export function parseReviewerVerdict(output) {
|
|
15
|
-
const marker = output.match(/^\s*VERDICT:\s*(APPROVED|REQUEST_CHANGES)\s*$/im);
|
|
16
|
-
if (marker) {
|
|
17
|
-
return {
|
|
18
|
-
verdict: marker[1].toUpperCase() === "APPROVED" ? "APPROVED" : "REQUEST_CHANGES",
|
|
19
|
-
viaFallback: false,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
const upper = output.toUpperCase();
|
|
23
|
-
const hasRequestChanges = /\bREQUEST_CHANGES\b/.test(upper);
|
|
24
|
-
const isApproved = !hasRequestChanges && /^APPROVED\b/.test(upper);
|
|
25
|
-
return {
|
|
26
|
-
verdict: isApproved ? "APPROVED" : "REQUEST_CHANGES",
|
|
27
|
-
viaFallback: true,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=verdict.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verdict.js","sourceRoot":"","sources":["../../src/workflows/verdict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC/E,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB;YAChF,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,CAAC,iBAAiB,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB;QACpD,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
export interface WorktreeInfo {
|
|
2
|
-
taskId: string;
|
|
3
|
-
path: string;
|
|
4
|
-
branch: string;
|
|
5
|
-
repo: string;
|
|
6
|
-
createdAt: Date;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Manages git worktrees for per-task isolation.
|
|
10
|
-
* Each build task gets its own worktree (isolated working directory + branch).
|
|
11
|
-
* The Docker container the harness runs in IS the sandbox — worktrees provide
|
|
12
|
-
* per-task isolation within that sandbox.
|
|
13
|
-
*/
|
|
14
|
-
export declare class WorktreeManager {
|
|
15
|
-
private baseDir;
|
|
16
|
-
private active;
|
|
17
|
-
constructor(baseDir?: string);
|
|
18
|
-
private execGit;
|
|
19
|
-
/**
|
|
20
|
-
* Create a new worktree for a task.
|
|
21
|
-
* Clones the repo first (if not already cloned), then creates a worktree.
|
|
22
|
-
*/
|
|
23
|
-
create(opts: {
|
|
24
|
-
taskId: string;
|
|
25
|
-
repoUrl: string;
|
|
26
|
-
branch: string;
|
|
27
|
-
baseBranch?: string;
|
|
28
|
-
}): Promise<WorktreeInfo>;
|
|
29
|
-
/**
|
|
30
|
-
* Get the path for an active worktree.
|
|
31
|
-
*/
|
|
32
|
-
getPath(taskId: string): string | null;
|
|
33
|
-
/**
|
|
34
|
-
* Cleanup a worktree. Removes the worktree and optionally the branch.
|
|
35
|
-
*/
|
|
36
|
-
cleanup(taskId: string, opts?: {
|
|
37
|
-
deleteBranch?: boolean;
|
|
38
|
-
}): Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* List all active worktrees.
|
|
41
|
-
*/
|
|
42
|
-
listActive(): WorktreeInfo[];
|
|
43
|
-
}
|
package/dist/worktree/manager.js
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from "child_process";
|
|
2
|
-
import { existsSync, mkdirSync, rmSync } from "fs";
|
|
3
|
-
import { join, resolve } from "path";
|
|
4
|
-
const WORKTREE_DIR = ".worktrees";
|
|
5
|
-
/**
|
|
6
|
-
* Manages git worktrees for per-task isolation.
|
|
7
|
-
* Each build task gets its own worktree (isolated working directory + branch).
|
|
8
|
-
* The Docker container the harness runs in IS the sandbox — worktrees provide
|
|
9
|
-
* per-task isolation within that sandbox.
|
|
10
|
-
*/
|
|
11
|
-
export class WorktreeManager {
|
|
12
|
-
baseDir;
|
|
13
|
-
active = new Map();
|
|
14
|
-
constructor(baseDir) {
|
|
15
|
-
this.baseDir = baseDir || resolve(WORKTREE_DIR);
|
|
16
|
-
}
|
|
17
|
-
execGit(args, opts) {
|
|
18
|
-
return execFileSync("git", args, { encoding: "utf-8", stdio: "pipe", ...opts });
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Create a new worktree for a task.
|
|
22
|
-
* Clones the repo first (if not already cloned), then creates a worktree.
|
|
23
|
-
*/
|
|
24
|
-
async create(opts) {
|
|
25
|
-
const { taskId, repoUrl, branch, baseBranch } = opts;
|
|
26
|
-
if (this.active.has(taskId)) {
|
|
27
|
-
return this.active.get(taskId);
|
|
28
|
-
}
|
|
29
|
-
const worktreePath = join(this.baseDir, taskId);
|
|
30
|
-
// Ensure base directory exists
|
|
31
|
-
if (!existsSync(this.baseDir)) {
|
|
32
|
-
mkdirSync(this.baseDir, { recursive: true });
|
|
33
|
-
}
|
|
34
|
-
// We need a bare/normal repo to create worktrees from.
|
|
35
|
-
// Use a shared bare clone per repo to avoid re-cloning each time.
|
|
36
|
-
const repoName = repoUrl.replace(/.*\/([^/]+?)(?:\.git)?$/, "$1");
|
|
37
|
-
const bareDir = join(this.baseDir, `.bare-${repoName}`);
|
|
38
|
-
if (!existsSync(bareDir)) {
|
|
39
|
-
console.log(`[worktree] Bare clone: ${repoUrl}`);
|
|
40
|
-
this.execGit(["clone", "--bare", repoUrl, bareDir]);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
// Fetch latest
|
|
44
|
-
this.execGit(["-C", bareDir, "fetch", "--all", "--prune"]);
|
|
45
|
-
}
|
|
46
|
-
// Create worktree with new branch from base
|
|
47
|
-
const base = baseBranch || "main";
|
|
48
|
-
const baseRef = `origin/${base}`;
|
|
49
|
-
// Check if branch already exists remotely
|
|
50
|
-
let branchExists = false;
|
|
51
|
-
try {
|
|
52
|
-
this.execGit(["-C", bareDir, "rev-parse", "--verify", `origin/${branch}`]);
|
|
53
|
-
branchExists = true;
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
// Branch doesn't exist remotely — that's fine
|
|
57
|
-
}
|
|
58
|
-
if (branchExists) {
|
|
59
|
-
// Resume existing branch
|
|
60
|
-
console.log(`[worktree] Resuming branch: ${branch}`);
|
|
61
|
-
this.execGit(["-C", bareDir, "worktree", "add", worktreePath, `origin/${branch}`]);
|
|
62
|
-
this.execGit(["-C", worktreePath, "checkout", "-B", branch, `origin/${branch}`]);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// Create new branch from base
|
|
66
|
-
console.log(`[worktree] New branch: ${branch} from ${baseRef}`);
|
|
67
|
-
this.execGit(["-C", bareDir, "worktree", "add", "-b", branch, worktreePath, baseRef]);
|
|
68
|
-
}
|
|
69
|
-
const info = {
|
|
70
|
-
taskId,
|
|
71
|
-
path: worktreePath,
|
|
72
|
-
branch,
|
|
73
|
-
repo: repoUrl,
|
|
74
|
-
createdAt: new Date(),
|
|
75
|
-
};
|
|
76
|
-
this.active.set(taskId, info);
|
|
77
|
-
return info;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Get the path for an active worktree.
|
|
81
|
-
*/
|
|
82
|
-
getPath(taskId) {
|
|
83
|
-
return this.active.get(taskId)?.path || null;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Cleanup a worktree. Removes the worktree and optionally the branch.
|
|
87
|
-
*/
|
|
88
|
-
async cleanup(taskId, opts) {
|
|
89
|
-
const info = this.active.get(taskId);
|
|
90
|
-
if (!info)
|
|
91
|
-
return;
|
|
92
|
-
const repoName = info.repo.replace(/.*\/([^/]+?)(?:\.git)?$/, "$1");
|
|
93
|
-
const bareDir = join(this.baseDir, `.bare-${repoName}`);
|
|
94
|
-
try {
|
|
95
|
-
// Remove worktree
|
|
96
|
-
if (existsSync(info.path)) {
|
|
97
|
-
this.execGit(["-C", bareDir, "worktree", "remove", "--force", info.path]);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
catch (err) {
|
|
101
|
-
// Force cleanup if git worktree remove fails
|
|
102
|
-
if (existsSync(info.path)) {
|
|
103
|
-
rmSync(info.path, { recursive: true, force: true });
|
|
104
|
-
try {
|
|
105
|
-
this.execGit(["-C", bareDir, "worktree", "prune"]);
|
|
106
|
-
}
|
|
107
|
-
catch { /* best effort */ }
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
// Optionally delete the branch
|
|
111
|
-
if (opts?.deleteBranch) {
|
|
112
|
-
try {
|
|
113
|
-
this.execGit(["-C", bareDir, "branch", "-D", info.branch]);
|
|
114
|
-
}
|
|
115
|
-
catch { /* branch may not exist locally */ }
|
|
116
|
-
}
|
|
117
|
-
this.active.delete(taskId);
|
|
118
|
-
console.log(`[worktree] Cleaned up: ${taskId}`);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* List all active worktrees.
|
|
122
|
-
*/
|
|
123
|
-
listActive() {
|
|
124
|
-
return Array.from(this.active.values());
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/worktree/manager.ts"],"names":[],"mappings":"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"}
|