lastlight 0.15.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 -100
- package/dist/connectors/slack/connector.js +0 -341
- 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 -8
- package/dist/connectors/slack/mrkdwn.js +0 -123
- 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 -923
- 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/index.d.ts +0 -15
- package/dist/notify/index.js +0 -6
- 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 -17
- package/dist/notify/notifier.js +0 -87
- 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 -26
- package/dist/notify/transports/github.js.map +0 -1
- package/dist/notify/transports/slack.d.ts +0 -26
- package/dist/notify/transports/slack.js +0 -28
- package/dist/notify/transports/slack.js.map +0 -1
- package/dist/notify/types.d.ts +0 -95
- 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 -215
- package/dist/workflows/phase-executor.js +0 -1144
- 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 -364
- 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,42 +0,0 @@
|
|
|
1
|
-
import { loadAgentContext as loadResolvedAgentContext } from "../../workflows/loader.js";
|
|
2
|
-
/**
|
|
3
|
-
* agentic-pi's GitHub extension uses the same four profile names — they
|
|
4
|
-
* pass through unchanged. Kept as an explicit map so renames on either
|
|
5
|
-
* side surface as a type error rather than a silent runtime mismatch.
|
|
6
|
-
*/
|
|
7
|
-
export const AGENTIC_PROFILE_FOR = {
|
|
8
|
-
read: "read",
|
|
9
|
-
"issues-write": "issues-write",
|
|
10
|
-
"review-write": "review-write",
|
|
11
|
-
"repo-write": "repo-write",
|
|
12
|
-
};
|
|
13
|
-
export const GITHUB_PERMISSION_PROFILES = {
|
|
14
|
-
read: {
|
|
15
|
-
contents: "read",
|
|
16
|
-
issues: "read",
|
|
17
|
-
pull_requests: "read",
|
|
18
|
-
metadata: "read",
|
|
19
|
-
},
|
|
20
|
-
"issues-write": {
|
|
21
|
-
contents: "read",
|
|
22
|
-
issues: "write",
|
|
23
|
-
pull_requests: "read",
|
|
24
|
-
metadata: "read",
|
|
25
|
-
},
|
|
26
|
-
"review-write": {
|
|
27
|
-
contents: "read",
|
|
28
|
-
issues: "write",
|
|
29
|
-
pull_requests: "write",
|
|
30
|
-
metadata: "read",
|
|
31
|
-
},
|
|
32
|
-
"repo-write": {
|
|
33
|
-
contents: "write",
|
|
34
|
-
issues: "write",
|
|
35
|
-
pull_requests: "write",
|
|
36
|
-
metadata: "read",
|
|
37
|
-
},
|
|
38
|
-
};
|
|
39
|
-
export function loadAgentContext(_dir) {
|
|
40
|
-
return loadResolvedAgentContext();
|
|
41
|
-
}
|
|
42
|
-
//# sourceMappingURL=profiles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../../src/engine/github/profiles.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAiOzF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAqC;IACnE,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,cAAc;IAC9B,cAAc,EAAE,cAAc;IAC9B,YAAY,EAAE,YAAY;CAC3B,CAAC;AAoDF,MAAM,CAAC,MAAM,0BAA0B,GAAqD;IAC1F,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,MAAM;KACjB;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,OAAO;QACf,aAAa,EAAE,MAAM;QACrB,QAAQ,EAAE,MAAM;KACjB;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,MAAM;QAChB,MAAM,EAAE,OAAO;QACf,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE,MAAM;KACjB;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,OAAO;QACf,aAAa,EAAE,OAAO;QACtB,QAAQ,EAAE,MAAM;KACjB;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,OAAO,wBAAwB,EAAE,CAAC;AACpC,CAAC"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure PR-review composition: turn a set of structured findings + the PR diff
|
|
3
|
-
* into the payload for one formal GitHub review (`POST /pulls/{n}/reviews`).
|
|
4
|
-
*
|
|
5
|
-
* This is the tested core of the first-class `post-review` action
|
|
6
|
-
* (`PhaseExecutor.runPostReview`). It replaces the ~150-line JS blob that used
|
|
7
|
-
* to live inline in `workflows/pr-review.yaml` — that script depended on the AI
|
|
8
|
-
* agent hand-writing `pr_number`/`base_ref`/`head_sha` into the findings file
|
|
9
|
-
* and silently `exit 0`'d on any mismatch. Here the harness owns all of that:
|
|
10
|
-
* the agent supplies only *content* (`summary`, `event`, `findings`), and this
|
|
11
|
-
* module anchors each finding to the diff, demoting anything off-diff to the
|
|
12
|
-
* body (GitHub 422s on comments that don't sit on a changed line).
|
|
13
|
-
*
|
|
14
|
-
* No I/O — every function is a pure transform, so the anchoring rules are
|
|
15
|
-
* exercised directly in `review-poster.test.ts` rather than by eval-extracting
|
|
16
|
-
* a function out of a YAML string.
|
|
17
|
-
*/
|
|
18
|
-
export type ReviewEvent = "APPROVE" | "REQUEST_CHANGES" | "COMMENT";
|
|
19
|
-
export type ReviewSide = "LEFT" | "RIGHT";
|
|
20
|
-
/** One finding as written by the `pr-review` skill into findings.json. */
|
|
21
|
-
export interface ReviewFinding {
|
|
22
|
-
path: string;
|
|
23
|
-
line: number;
|
|
24
|
-
side?: ReviewSide;
|
|
25
|
-
start_line?: number;
|
|
26
|
-
severity?: string;
|
|
27
|
-
title?: string;
|
|
28
|
-
body?: string;
|
|
29
|
-
suggestion?: string;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* The findings document the agent writes. `pr_number` / `base_ref` /
|
|
33
|
-
* `head_sha` are intentionally NOT here — the harness knows them from its own
|
|
34
|
-
* run context and the PR object, so the agent never hand-copies metadata.
|
|
35
|
-
*/
|
|
36
|
-
export interface ReviewFindingsDoc {
|
|
37
|
-
skip?: boolean;
|
|
38
|
-
summary?: string;
|
|
39
|
-
event?: ReviewEvent;
|
|
40
|
-
findings?: ReviewFinding[];
|
|
41
|
-
}
|
|
42
|
-
/** An inline review comment in the shape GitHub's create-review API expects. */
|
|
43
|
-
export interface InlineComment {
|
|
44
|
-
path: string;
|
|
45
|
-
line: number;
|
|
46
|
-
side: ReviewSide;
|
|
47
|
-
body: string;
|
|
48
|
-
start_line?: number;
|
|
49
|
-
start_side?: ReviewSide;
|
|
50
|
-
}
|
|
51
|
-
/** Everything needed to POST one review, ready for `createPullRequestReview`. */
|
|
52
|
-
export interface BuiltReview {
|
|
53
|
-
event: ReviewEvent;
|
|
54
|
-
body: string;
|
|
55
|
-
comments: InlineComment[];
|
|
56
|
-
inlineCount: number;
|
|
57
|
-
demotedCount: number;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Map a unified diff to `path -> Set<"SIDE:line">`. Added/`+` and context lines
|
|
61
|
-
* are `RIGHT:<newLine>`; removed/`-` and context lines are `LEFT:<oldLine>` —
|
|
62
|
-
* mirroring GitHub's three-dot PR diff anchoring. A finding may be commented
|
|
63
|
-
* inline only when its `side:line` appears in this set.
|
|
64
|
-
*/
|
|
65
|
-
export declare function parseDiff(diff: string): Map<string, Set<string>>;
|
|
66
|
-
/** True when a finding anchors onto a line that appears in the diff. */
|
|
67
|
-
export declare function isAnchored(f: ReviewFinding, commentable: Map<string, Set<string>> | null): boolean;
|
|
68
|
-
/**
|
|
69
|
-
* Partition findings into `inline` (anchor is on the diff) and `demoted`
|
|
70
|
-
* (off-diff, or missing path/line — folded into the body). When `commentable`
|
|
71
|
-
* is null (the diff couldn't be computed) every finding is demoted, so the
|
|
72
|
-
* review still posts and nothing is lost.
|
|
73
|
-
*/
|
|
74
|
-
export declare function splitFindings(findings: ReviewFinding[], commentable: Map<string, Set<string>> | null): {
|
|
75
|
-
inline: ReviewFinding[];
|
|
76
|
-
demoted: ReviewFinding[];
|
|
77
|
-
};
|
|
78
|
-
/** The "Additional findings" section appended to the body for demoted findings. */
|
|
79
|
-
export declare function renderDemoted(list: ReviewFinding[]): string;
|
|
80
|
-
/** Build the inline-comment objects GitHub's create-review API expects. */
|
|
81
|
-
export declare function toInlineComments(list: ReviewFinding[]): InlineComment[];
|
|
82
|
-
/**
|
|
83
|
-
* Resolve the review event. An explicit `doc.event` wins; otherwise an empty
|
|
84
|
-
* findings set is an `APPROVE` and anything else is a `COMMENT` (never an
|
|
85
|
-
* automatic `REQUEST_CHANGES` — that stays an explicit, deliberate call).
|
|
86
|
-
*/
|
|
87
|
-
export declare function resolveEvent(doc: ReviewFindingsDoc): ReviewEvent;
|
|
88
|
-
/**
|
|
89
|
-
* Compose the full review payload. Pass `commentable = null` to force every
|
|
90
|
-
* finding into the body (the diff-unavailable fallback).
|
|
91
|
-
*/
|
|
92
|
-
export declare function buildReview(doc: ReviewFindingsDoc, commentable: Map<string, Set<string>> | null): BuiltReview;
|
|
93
|
-
/**
|
|
94
|
-
* The body-only fallback: when the inline POST is rejected (e.g. a stale diff
|
|
95
|
-
* yields a 422 on a comment line), re-render with ALL findings in the body so
|
|
96
|
-
* the review still lands. Same event as the inline attempt.
|
|
97
|
-
*/
|
|
98
|
-
export declare function buildBodyOnlyReview(doc: ReviewFindingsDoc): BuiltReview;
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Pure PR-review composition: turn a set of structured findings + the PR diff
|
|
3
|
-
* into the payload for one formal GitHub review (`POST /pulls/{n}/reviews`).
|
|
4
|
-
*
|
|
5
|
-
* This is the tested core of the first-class `post-review` action
|
|
6
|
-
* (`PhaseExecutor.runPostReview`). It replaces the ~150-line JS blob that used
|
|
7
|
-
* to live inline in `workflows/pr-review.yaml` — that script depended on the AI
|
|
8
|
-
* agent hand-writing `pr_number`/`base_ref`/`head_sha` into the findings file
|
|
9
|
-
* and silently `exit 0`'d on any mismatch. Here the harness owns all of that:
|
|
10
|
-
* the agent supplies only *content* (`summary`, `event`, `findings`), and this
|
|
11
|
-
* module anchors each finding to the diff, demoting anything off-diff to the
|
|
12
|
-
* body (GitHub 422s on comments that don't sit on a changed line).
|
|
13
|
-
*
|
|
14
|
-
* No I/O — every function is a pure transform, so the anchoring rules are
|
|
15
|
-
* exercised directly in `review-poster.test.ts` rather than by eval-extracting
|
|
16
|
-
* a function out of a YAML string.
|
|
17
|
-
*/
|
|
18
|
-
const FENCE = "```";
|
|
19
|
-
/**
|
|
20
|
-
* Map a unified diff to `path -> Set<"SIDE:line">`. Added/`+` and context lines
|
|
21
|
-
* are `RIGHT:<newLine>`; removed/`-` and context lines are `LEFT:<oldLine>` —
|
|
22
|
-
* mirroring GitHub's three-dot PR diff anchoring. A finding may be commented
|
|
23
|
-
* inline only when its `side:line` appears in this set.
|
|
24
|
-
*/
|
|
25
|
-
export function parseDiff(diff) {
|
|
26
|
-
const map = new Map();
|
|
27
|
-
let path = null;
|
|
28
|
-
let right = 0;
|
|
29
|
-
let left = 0;
|
|
30
|
-
let inHunk = false;
|
|
31
|
-
for (const line of diff.split("\n")) {
|
|
32
|
-
if (line.startsWith("+++ ")) {
|
|
33
|
-
const p = line.slice(4).replace(/^b\//, "");
|
|
34
|
-
path = p === "/dev/null" ? null : p;
|
|
35
|
-
if (path && !map.has(path))
|
|
36
|
-
map.set(path, new Set());
|
|
37
|
-
inHunk = false;
|
|
38
|
-
}
|
|
39
|
-
else if (line.startsWith("@@")) {
|
|
40
|
-
const m = /@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(line);
|
|
41
|
-
if (m) {
|
|
42
|
-
left = parseInt(m[1], 10);
|
|
43
|
-
right = parseInt(m[2], 10);
|
|
44
|
-
inHunk = true;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
else if (inHunk && path) {
|
|
48
|
-
const set = map.get(path);
|
|
49
|
-
if (line.startsWith("+")) {
|
|
50
|
-
set.add("RIGHT:" + right);
|
|
51
|
-
right++;
|
|
52
|
-
}
|
|
53
|
-
else if (line.startsWith("-")) {
|
|
54
|
-
set.add("LEFT:" + left);
|
|
55
|
-
left++;
|
|
56
|
-
}
|
|
57
|
-
else if (line.startsWith(" ")) {
|
|
58
|
-
set.add("RIGHT:" + right);
|
|
59
|
-
set.add("LEFT:" + left);
|
|
60
|
-
right++;
|
|
61
|
-
left++;
|
|
62
|
-
}
|
|
63
|
-
else if (line.startsWith("\\")) {
|
|
64
|
-
/* "" */
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
inHunk = false;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return map;
|
|
72
|
-
}
|
|
73
|
-
/** True when a finding anchors onto a line that appears in the diff. */
|
|
74
|
-
export function isAnchored(f, commentable) {
|
|
75
|
-
if (!commentable)
|
|
76
|
-
return false;
|
|
77
|
-
const side = f.side === "LEFT" ? "LEFT" : "RIGHT";
|
|
78
|
-
const set = commentable.get(f.path);
|
|
79
|
-
if (!set || !set.has(side + ":" + f.line))
|
|
80
|
-
return false;
|
|
81
|
-
if (f.start_line && !set.has(side + ":" + f.start_line))
|
|
82
|
-
return false;
|
|
83
|
-
return true;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Partition findings into `inline` (anchor is on the diff) and `demoted`
|
|
87
|
-
* (off-diff, or missing path/line — folded into the body). When `commentable`
|
|
88
|
-
* is null (the diff couldn't be computed) every finding is demoted, so the
|
|
89
|
-
* review still posts and nothing is lost.
|
|
90
|
-
*/
|
|
91
|
-
export function splitFindings(findings, commentable) {
|
|
92
|
-
const inline = [];
|
|
93
|
-
const demoted = [];
|
|
94
|
-
for (const f of findings) {
|
|
95
|
-
if (f && f.path && f.line && isAnchored(f, commentable))
|
|
96
|
-
inline.push(f);
|
|
97
|
-
else if (f)
|
|
98
|
-
demoted.push(f);
|
|
99
|
-
}
|
|
100
|
-
return { inline, demoted };
|
|
101
|
-
}
|
|
102
|
-
function commentBody(f) {
|
|
103
|
-
let b = "**[" + (f.severity || "Important") + "] " + (f.title || "") + "**\n\n" + (f.body || "");
|
|
104
|
-
if (f.suggestion)
|
|
105
|
-
b += "\n\n" + FENCE + "suggestion\n" + f.suggestion + "\n" + FENCE;
|
|
106
|
-
return b;
|
|
107
|
-
}
|
|
108
|
-
/** The "Additional findings" section appended to the body for demoted findings. */
|
|
109
|
-
export function renderDemoted(list) {
|
|
110
|
-
if (!list.length)
|
|
111
|
-
return "";
|
|
112
|
-
return ("\n\n### Additional findings\n" +
|
|
113
|
-
list
|
|
114
|
-
.map((f) => "- **[" +
|
|
115
|
-
(f.severity || "Important") +
|
|
116
|
-
"] " +
|
|
117
|
-
(f.title || "") +
|
|
118
|
-
"** (" +
|
|
119
|
-
f.path +
|
|
120
|
-
":" +
|
|
121
|
-
f.line +
|
|
122
|
-
") — " +
|
|
123
|
-
(f.body || ""))
|
|
124
|
-
.join("\n"));
|
|
125
|
-
}
|
|
126
|
-
/** Build the inline-comment objects GitHub's create-review API expects. */
|
|
127
|
-
export function toInlineComments(list) {
|
|
128
|
-
return list.map((f) => {
|
|
129
|
-
const side = f.side === "LEFT" ? "LEFT" : "RIGHT";
|
|
130
|
-
const c = { path: f.path, line: f.line, side, body: commentBody(f) };
|
|
131
|
-
if (f.start_line) {
|
|
132
|
-
c.start_line = f.start_line;
|
|
133
|
-
c.start_side = side;
|
|
134
|
-
}
|
|
135
|
-
return c;
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Resolve the review event. An explicit `doc.event` wins; otherwise an empty
|
|
140
|
-
* findings set is an `APPROVE` and anything else is a `COMMENT` (never an
|
|
141
|
-
* automatic `REQUEST_CHANGES` — that stays an explicit, deliberate call).
|
|
142
|
-
*/
|
|
143
|
-
export function resolveEvent(doc) {
|
|
144
|
-
const findings = Array.isArray(doc.findings) ? doc.findings : [];
|
|
145
|
-
return doc.event || (findings.length === 0 ? "APPROVE" : "COMMENT");
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Compose the full review payload. Pass `commentable = null` to force every
|
|
149
|
-
* finding into the body (the diff-unavailable fallback).
|
|
150
|
-
*/
|
|
151
|
-
export function buildReview(doc, commentable) {
|
|
152
|
-
const findings = Array.isArray(doc.findings) ? doc.findings : [];
|
|
153
|
-
const { inline, demoted } = splitFindings(findings, commentable);
|
|
154
|
-
return {
|
|
155
|
-
event: resolveEvent(doc),
|
|
156
|
-
body: (doc.summary || "") + renderDemoted(demoted),
|
|
157
|
-
comments: toInlineComments(inline),
|
|
158
|
-
inlineCount: inline.length,
|
|
159
|
-
demotedCount: demoted.length,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* The body-only fallback: when the inline POST is rejected (e.g. a stale diff
|
|
164
|
-
* yields a 422 on a comment line), re-render with ALL findings in the body so
|
|
165
|
-
* the review still lands. Same event as the inline attempt.
|
|
166
|
-
*/
|
|
167
|
-
export function buildBodyOnlyReview(doc) {
|
|
168
|
-
const findings = Array.isArray(doc.findings) ? doc.findings : [];
|
|
169
|
-
return {
|
|
170
|
-
event: resolveEvent(doc),
|
|
171
|
-
body: (doc.summary || "") + renderDemoted(findings),
|
|
172
|
-
comments: [],
|
|
173
|
-
inlineCount: 0,
|
|
174
|
-
demotedCount: findings.length,
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
//# sourceMappingURL=review-poster.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"review-poster.js","sourceRoot":"","sources":["../../../src/engine/github/review-poster.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgDH,MAAM,KAAK,GAAG,KAAK,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,GAAG,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;aAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,wCAAwC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,EAAE,CAAC;gBACN,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;gBAC3B,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;gBAC5B,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;gBAC1B,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBACxB,IAAI,EAAE,CAAC;YACT,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;gBACxB,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,CAAC;YACT,CAAC;iBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,mCAAmC;YACrC,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,UAAU,CACxB,CAAgB,EAChB,WAA4C;IAE5C,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,IAAI,GAAe,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9D,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAyB,EACzB,WAA4C;IAE5C,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACnE,IAAI,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAAC,CAAgB;IACnC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACjG,IAAI,CAAC,CAAC,UAAU;QAAE,CAAC,IAAI,MAAM,GAAG,KAAK,GAAG,cAAc,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC;IACrF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,aAAa,CAAC,IAAqB;IACjD,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO,CACL,+BAA+B;QAC/B,IAAI;aACD,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,OAAO;YACP,CAAC,CAAC,CAAC,QAAQ,IAAI,WAAW,CAAC;YAC3B,IAAI;YACJ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,MAAM;YACN,CAAC,CAAC,IAAI;YACN,GAAG;YACH,CAAC,CAAC,IAAI;YACN,MAAM;YACN,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CACjB;aACA,IAAI,CAAC,IAAI,CAAC,CACd,CAAC;AACJ,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,IAAqB;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACpB,MAAM,IAAI,GAAe,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,MAAM,CAAC,GAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;YAC5B,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAsB;IACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,GAAsB,EACtB,WAA4C;IAE5C,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjE,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC;QACxB,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;QAClD,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC,MAAM;QAC1B,YAAY,EAAE,OAAO,CAAC,MAAM;KAC7B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAsB;IACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC;QACxB,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC;QACnD,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,QAAQ,CAAC,MAAM;KAC9B,CAAC;AACJ,CAAC"}
|
package/dist/engine/llm.d.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Thin one-shot LLM chat helper used by the prompt-injection screener and the
|
|
3
|
-
* intent classifier. Powered by `src/providers.ts` — that registry is the
|
|
4
|
-
* single source of truth for which providers this helper can call.
|
|
5
|
-
*
|
|
6
|
-
* The screener + classifier are deliberately small and explicit. They need a
|
|
7
|
-
* cheap/fast model on the SAME provider the user picked (or any registered
|
|
8
|
-
* provider whose key is present) so the agent's primary model and the cheap
|
|
9
|
-
* helper share one footprint. We support two request families:
|
|
10
|
-
*
|
|
11
|
-
* `openai-completions` — body `{ model, messages, <maxTokensField> }`,
|
|
12
|
-
* response `choices[0].message.content`. Covers
|
|
13
|
-
* OpenAI, OpenRouter, Groq, Cerebras, xAI,
|
|
14
|
-
* Hugging Face, Moonshot, NVIDIA, Fireworks,
|
|
15
|
-
* Together, DeepSeek, Z.AI, and Google/Mistral
|
|
16
|
-
* via their OpenAI-compatible endpoints.
|
|
17
|
-
* `anthropic-messages` — `system` field + content-block response.
|
|
18
|
-
* Covers Anthropic, Kimi for Coding, MiniMax.
|
|
19
|
-
*
|
|
20
|
-
* Scope: this helper supports the providers listed in `src/providers.ts`.
|
|
21
|
-
* Workflow phases themselves are provider-agnostic (whatever pi-ai
|
|
22
|
-
* supports); only the screener/classifier path is constrained here.
|
|
23
|
-
*/
|
|
24
|
-
import { type ApiType } from "../providers.js";
|
|
25
|
-
export type ChatRole = "system" | "user" | "assistant";
|
|
26
|
-
export interface ChatMessage {
|
|
27
|
-
role: ChatRole;
|
|
28
|
-
content: string;
|
|
29
|
-
}
|
|
30
|
-
export interface ChatOptions {
|
|
31
|
-
/** Hard cap on output tokens (default: 256 — these calls are tiny). */
|
|
32
|
-
maxTokens?: number;
|
|
33
|
-
/** Per-call timeout (default: 30s). */
|
|
34
|
-
timeoutMs?: number;
|
|
35
|
-
}
|
|
36
|
-
export type CallLlmOptions = ChatOptions;
|
|
37
|
-
export type ChatFunction = (model: string, messages: ChatMessage[], opts?: ChatOptions) => Promise<string>;
|
|
38
|
-
/** Resolved routing for a `provider/model` spec. */
|
|
39
|
-
export interface ResolvedProvider {
|
|
40
|
-
/** Pi-ai-style provider prefix (`anthropic`, `openai`, `openrouter`, …). */
|
|
41
|
-
provider: string;
|
|
42
|
-
/** Model id the upstream API expects (prefix stripped, nested tail preserved if applicable). */
|
|
43
|
-
modelId: string;
|
|
44
|
-
/** Which request family to use. */
|
|
45
|
-
api: ApiType;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Resolve a `provider/model` spec (or a bare model id) into a routing
|
|
49
|
-
* decision. Prefers an explicit `<prefix>/<model>` over name-inference.
|
|
50
|
-
*
|
|
51
|
-
* @throws if the prefix is present but not registered — silently
|
|
52
|
-
* mis-routing a `xai/grok-4` to OpenAI would bill the wrong account and
|
|
53
|
-
* fail at request time with a confusing error, so we surface it early.
|
|
54
|
-
*/
|
|
55
|
-
export declare function resolveProvider(model: string): ResolvedProvider;
|
|
56
|
-
/**
|
|
57
|
-
* Resolve the model id for a tiny one-shot helper call (classifier / screener).
|
|
58
|
-
* Precedence for a given `taskType`:
|
|
59
|
-
* 1. an explicit per-task entry in the config `models:` map (`models.classifier`,
|
|
60
|
-
* `models.screener`) — which already has env `OPENCODE_MODELS` /
|
|
61
|
-
* `LASTLIGHT_MODELS` layered on top at config-load, so this covers both
|
|
62
|
-
* config.yaml and the env override in one lookup;
|
|
63
|
-
* 2. the env `OPENCODE_MODELS` map read directly — a fallback for contexts
|
|
64
|
-
* where runtime config isn't loaded (some CLI / test paths);
|
|
65
|
-
* 3. the first configured provider in `PROVIDERS` order (registry order:
|
|
66
|
-
* Anthropic first, then OpenAI, OpenRouter, then the rest — `src/providers.ts`).
|
|
67
|
-
*
|
|
68
|
-
* Note: only an EXPLICIT per-task entry counts — never `models.default` — so the
|
|
69
|
-
* cheap helpers stay cheap unless a deployment deliberately pins them.
|
|
70
|
-
*/
|
|
71
|
-
export declare function defaultFastModel(taskType?: string): string;
|
|
72
|
-
/**
|
|
73
|
-
* Make a provider-agnostic chat call and return the final assistant text.
|
|
74
|
-
*
|
|
75
|
-
* @throws if the relevant API key isn't set or the upstream returns non-2xx
|
|
76
|
-
*/
|
|
77
|
-
export declare function chat(model: string, messages: ChatMessage[], opts?: ChatOptions): Promise<string>;
|
|
78
|
-
/** Compatibility wrapper for older single-turn call sites. */
|
|
79
|
-
export declare function callLlm(model: string, systemPrompt: string, userPrompt: string, opts?: CallLlmOptions): Promise<string>;
|