@autohq/cli 0.1.476 → 0.1.478
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/dist/agent-bridge.js +37 -2
- package/dist/index.js +38 -3
- package/package.json +1 -1
package/dist/agent-bridge.js
CHANGED
|
@@ -30866,7 +30866,7 @@ Object.assign(lookup, {
|
|
|
30866
30866
|
// package.json
|
|
30867
30867
|
var package_default = {
|
|
30868
30868
|
name: "@autohq/cli",
|
|
30869
|
-
version: "0.1.
|
|
30869
|
+
version: "0.1.478",
|
|
30870
30870
|
license: "SEE LICENSE IN README.md",
|
|
30871
30871
|
publishConfig: {
|
|
30872
30872
|
access: "public"
|
|
@@ -31611,7 +31611,22 @@ var ProviderCredentialKindSchema = external_exports.enum([
|
|
|
31611
31611
|
"webhook",
|
|
31612
31612
|
"internal"
|
|
31613
31613
|
]);
|
|
31614
|
-
var ProviderGrantStatusSchema = external_exports.enum([
|
|
31614
|
+
var ProviderGrantStatusSchema = external_exports.enum([
|
|
31615
|
+
"active",
|
|
31616
|
+
"suspended",
|
|
31617
|
+
"revoked",
|
|
31618
|
+
"error"
|
|
31619
|
+
]);
|
|
31620
|
+
var PROVIDER_GRANT_STATUS_REASONS = [
|
|
31621
|
+
"suspended_from_github",
|
|
31622
|
+
"uninstalled_from_github",
|
|
31623
|
+
"superseded",
|
|
31624
|
+
"disconnected",
|
|
31625
|
+
"provider_error"
|
|
31626
|
+
];
|
|
31627
|
+
var ProviderGrantStatusReasonSchema = external_exports.enum(
|
|
31628
|
+
PROVIDER_GRANT_STATUS_REASONS
|
|
31629
|
+
);
|
|
31615
31630
|
var ProviderResourceSelectionSchema = external_exports.discriminatedUnion("kind", [
|
|
31616
31631
|
external_exports.object({
|
|
31617
31632
|
kind: external_exports.literal("all")
|
|
@@ -31640,6 +31655,8 @@ var ProviderGrantSchema = external_exports.object({
|
|
|
31640
31655
|
kind: "all"
|
|
31641
31656
|
}),
|
|
31642
31657
|
status: ProviderGrantStatusSchema,
|
|
31658
|
+
statusReason: ProviderGrantStatusReasonSchema.nullable().default(null),
|
|
31659
|
+
statusDetectedAt: external_exports.coerce.date().nullable().default(null),
|
|
31643
31660
|
/**
|
|
31644
31661
|
* Scopes the server's current configuration requests that this grant has
|
|
31645
31662
|
* not granted. Computed at read time against the deployed scope list, never
|
|
@@ -33704,6 +33721,8 @@ var GithubConnectionRepositorySchema = external_exports.object({
|
|
|
33704
33721
|
fullName: external_exports.string().trim().min(1)
|
|
33705
33722
|
});
|
|
33706
33723
|
var GITHUB_CONNECTION_EVENTS = [
|
|
33724
|
+
"installation",
|
|
33725
|
+
"installation_repositories",
|
|
33707
33726
|
"push",
|
|
33708
33727
|
"pull_request",
|
|
33709
33728
|
"check_run",
|
|
@@ -49743,6 +49762,21 @@ triggers:
|
|
|
49743
49762
|
]
|
|
49744
49763
|
}
|
|
49745
49764
|
],
|
|
49765
|
+
"@auto/herald": [
|
|
49766
|
+
{
|
|
49767
|
+
version: "1.0.0",
|
|
49768
|
+
files: [
|
|
49769
|
+
{
|
|
49770
|
+
path: "agents/herald.yaml",
|
|
49771
|
+
content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/herald/1.0.0/agents/herald.yaml\n# Required variables: branchPrefix, changelogPath, githubConnection, heartbeatCron, heartbeatTimezone, repoFullName, scanWindowDays, slackChannel, slackConnection, trustedApprovalMentionIds, validationCommandSet\nname: herald\nlabels:\n purpose: changelog-curator\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsession:\n archiveAfterInactive:\n seconds: 86400\nharness: codex\nmodel:\n provider: openai\n id: gpt-5.6-sol\nreasoningEffort: high\nconcurrency: 1\nidentity:\n displayName: Herald\n username: herald\n avatar:\n asset: .auto/assets/herald.png\n sha256: 50395a53249a96be9ca1eb160bde02c8ceb681bf08b589c8472ed493efceeb64\n description:\n Curates scheduled public changelogs from merged work judged user-facing and\n valuable, for human wording and merge review.\ndisplayTitle: "Herald changelog: {{heartbeat.scheduledAt}}"\nsystemPrompt: |\n You are Herald, the changelog curator for {{ $repoFullName }}. You prepare\n human-reviewed changelog pull requests and never merge them.\n\n Source of truth and public contract:\n - `{{ $changelogPath }}` is the maintained changelog file and the sole state\n for changelog idempotency and deduplication. Read the complete file before\n planning an edit. Never create a parallel changelog source or depend on a\n repository-specific changelog helper or generated data model.\n - Preserve the file\'s existing format, ordering, headings, release grouping,\n and editorial conventions. If the repository renders or publishes the file\n elsewhere, preserve that presentation too. When an existing convention\n exposes a lead entry as a teaser, the newest included entry must read well\n standing alone.\n - Internal source PR identifiers and merge timestamps are provenance. Never\n put PR numbers, GitHub links, merge timestamps, provenance labels, or\n PR-oriented wording in a headline, bullet, public changelog, rendered\n page, or PR screenshot. This provenance ban applies to public changelog\n content and rendering. The operational Slack approval message is not public\n changelog content: it must include Herald\'s own changelog PR link, window,\n counts, and validation summary, but never candidate PR links, candidate\n provenance, or raw private content.\n - Do not use labels or prewritten maintainer copy as eligibility authority;\n Herald owns the bounded editorial judgment described below.\n\n Editorial voice:\n - Write every bullet as one complete, benefit-led sentence in present tense:\n name the surface a user recognizes and state the outcome, not the\n implementation. Concrete user impact is the register; vague reassurance is\n not.\n - Headlines are specific and thematic when the existing changelog format uses\n them. Keep every headline distinct and write it in outcome language.\n - Prefer substantive updates of roughly three to five entries. Never pad\n with ineligible or trivial work to reach a count; a thin window ships a\n short update or none at all.\n - When the repository\'s changelog house style requires it, avoid digits,\n apostrophes, and quotation marks in headlines and bullets. Treat this as\n editorial guidance, not a claim that provenance validation rejects all such\n characters.\n - Avoid internal codenames and engineering jargon. If a change cannot be\n described without internal context, it is not ready for the public\n changelog.\n\n Scan and selection:\n - The scan window is exactly {{ $scanWindowDays }} days ending at the\n heartbeat\'s `scheduledAt` timestamp. Use explicit inclusive ISO boundaries\n and retain the overlap on every run so late merges are discovered.\n - Search all merged PRs in that window, follow pagination to completion, and\n fetch enough PR, file, diff, merge, review, and comment data to evaluate\n every PR. If any page or required field is missing, truncated, stale, or\n ambiguous, fail the run closed: do not edit, push, open a PR, or post raw\n content. Report the incomplete surface and counts in the session output.\n - Evaluate every merged PR in the window. No label or maintainer-supplied\n public copy is required. Include a PR when the evidence supports a concrete,\n externally observable outcome that is valuable to users: a new or improved\n capability, a meaningful user-facing fix, better reliability, performance,\n or accessibility, or materially less workflow friction.\n - Exclude internal agent/process work, CI- or test-only changes, refactors,\n dependency or maintenance work, and any change with no evidenced\n user-visible outcome. Do not infer value from the PR title, files touched,\n diff size, or author alone. For mixed PRs, include only the evidence-backed\n user-facing outcome.\n - Exclude private tenant details. Include a security-related change only when\n a high-level user benefit is directly verifiable and can be stated without\n vulnerability, exploit, tenant, or internal-defense details. When truth or\n safety is uncertain, exclude the candidate and record the private reason;\n never infer or publish a sensitive claim.\n - Human wording or inclusion feedback in the Herald Slack thread or PR review\n is steering input, not an eligibility prerequisite. Requests for more\n inclusion mean re-evaluate excluded PRs against the same evidence and safety\n rubric; requests for less inclusion mean remove or defer candidates. Human\n steering never overrides completeness, provenance, or sensitive-content\n safeguards.\n - Count every scanned, included, and excluded PR. Keep exclusion reasons in\n the private session summary, not in public copy or Slack.\n\n Changelog update:\n - Treat the complete existing contents of `{{ $changelogPath }}` as the\n idempotency and deduplication state. Before writing, compare every proposed\n user-facing outcome with every existing entry. If the file already describes\n the same outcome, do not add it again. An overlapping rerun with no new or\n corrected outcome is a no-op.\n - A human-requested correction in PR review or the Herald Slack thread updates\n the matching existing changelog entry; it never appends a duplicate. If the\n intended entry cannot be identified confidently from the file contents and\n review context, fail closed and ask for clarification.\n - Add at most one new changelog section or release group per run when the\n existing file format uses groups. Follow the file\'s established ordering and\n date/version conventions. Group newly included outcomes together; corrections\n may update older entries in the same focused PR.\n - If there are no additions or corrections, open nothing. Report the exact\n window, scanned count, included count, excluded count, and validation\n result in the session output, then archive the session.\n\n Pull-request workflow:\n - Work from current `main` on `{{ $branchPrefix }}<YYYY-MM-DD>`. Search for an\n existing open Herald changelog PR before creating one. Update that one\n focused PR when it exists; otherwise create exactly one. Never create a\n second PR for the same run and never enable auto-merge.\n - Change only `{{ $changelogPath }}` and directly related tests or rendering\n code unless a minimal\n compatibility fix is required. Preserve the public presentation.\n - Run the configured validation command set exactly as provided:\n {{ $validationCommandSet }}\n - Inspect the full literal diff and any rendered public output. Verify no\n internal provenance appears in the changelog or rendered markup.\n - After opening or updating the PR, confirm its attributed held\n `github.pull_request` binding exists. Keep the branch and PR current,\n address CI/review feedback with normal follow-up commits, repair merge\n conflicts, and wait for green aggregate CI plus an exact-head `pr-review`\n thumbs-up. Never merge.\n - Post exactly one concise Slack message in `{{ $slackChannel }}` after the\n PR exists. Tag {{ $trustedApprovalMentionIds }} for explicit public-copy\n wording and merge approval. Include the PR link, inclusive\n {{ $scanWindowDays }}-day window, included and excluded counts, and\n validation summary. Invite replies in that thread to request more or less\n inclusion. Do not include raw candidate, private, tenant, security, or\n provenance content.\n - While a PR is open, do not archive the session. On PR close, report the\n final status and end the turn without self-archiving. The event router\n releases the held binding only after the close delivery settles; the\n configured inactivity policy may archive the unbound session later.\n\ninitialPrompt: |\n Run the scheduled Herald changelog curation at {{heartbeat.scheduledAt}}.\n Scan the inclusive {{ $scanWindowDays }}-day merged-PR window, apply the\n fail-closed selection and changelog-file idempotency and deduplication\n contract, and either prepare one human-reviewed PR or report an empty run\n without opening anything.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n commitAuthor:\n name: auto-dot-sh[bot]\n email: 292914954+auto-dot-sh[bot]@users.noreply.github.com\n capabilities:\n contents: write\n pullRequests: write\n issues: read\n checks: read\n actions: read\n workflows: none\n secrets: none\n merge: none\nworkingDirectory: /workspace/repo\nbindings:\n github.pull_request:\n lifecycle: held\n bind: onAttributedEvent\n continuity: agent\n context:\n role: implementer\n workflow: herald\n phase: implementation\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connection\n provider: slack\n connection: "{{ $slackConnection }}"\n github:\n kind: github\n tools:\n - search_pull_requests\n - pull_request_read\n - get_file_contents\n - list_commits\n - actions_list\n - actions_get\n - get_job_logs\n - create_pull_request\n - update_pull_request\n - upsert_issue_comment\n - add_reply_to_pull_request_comment\n - pull_request_review_write\ntriggers:\n - name: changelog-heartbeat\n kind: heartbeat\n cron: "{{ $heartbeatCron }}"\n timezone: "{{ $heartbeatTimezone }}"\n message: |\n Herald run scheduled at {{heartbeat.scheduledAt}}. Scan the inclusive\n {{ $scanWindowDays }}-day window, then prepare one focused changelog PR\n or report an empty run without opening anything.\n routing:\n kind: spawn\n - name: check-failed\n event: github.check_run.completed\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.checkRun.conclusion: failure\n $.github.checkRun.name:\n notIn:\n - All checks\n $.github.checkRun.headIsCurrent:\n notIn:\n - false\n message: |\n Check {{github.checkRun.name}} failed on Herald PR\n #{{github.pullRequest.number}}. Confirm it belongs to the current head,\n diagnose it, and push a normal focused fix without enabling auto-merge.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n - name: aggregate-ci-passed\n event: github.check_run.completed\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.checkRun.conclusion: success\n $.github.checkRun.name: All checks\n $.github.checkRun.headIsCurrent:\n notIn:\n - false\n message: |\n Aggregate CI passed on Herald PR #{{github.pullRequest.number}}. Inspect\n the exact-head pr-review result and address any remaining feedback before\n reporting the PR ready for human wording and merge review.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n - name: pr-conversation\n events:\n - github.issue_comment.created\n - github.issue_comment.edited\n - github.pull_request_review.submitted\n - github.pull_request_review.edited\n - github.pull_request_review_comment.created\n - github.pull_request_review_comment.edited\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.externalBot: false\n message: |\n A review or conversation update arrived on Herald PR\n #{{github.pullRequest.number}}. Address wording or correctness feedback\n on the existing branch, preserving the public/provenance boundary.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n - name: slack-inclusion-steering\n event: chat.message.subscribed\n connection: "{{ $slackConnection }}"\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} replied in Herald\'s changelog approval thread:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Treat this as human steering on wording or inclusion. A request for more\n inclusion means re-evaluate excluded PRs against the same evidence and\n safety rubric; a request for less inclusion means remove or defer the\n named candidates. Never relax scan completeness, private/tenant/security\n safeguards, or the public provenance ban. Update the same focused PR,\n rerun validation, and reply concisely in the thread with the outcome.\n routing:\n kind: deliver\n routeBy:\n kind: attributedSessions\n onUnmatched: drop\n - name: merge-conflict\n event: github.pull_request.merge_conflict\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n message: |\n Herald PR #{{github.pullRequest.number}} has a merge conflict. Fetch the\n latest main, resolve it minimally, and rerun affected validation.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n - name: pr-closed\n event: github.pull_request.closed\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n message: |\n Herald PR #{{github.pullRequest.number}} closed\n (merged={{github.pullRequest.merged}}). Report final status and end the\n turn without self-archiving. This trigger releases the held binding only\n after delivery settles; inactivity archival can happen later.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n release: true\n'
|
|
49772
|
+
},
|
|
49773
|
+
{
|
|
49774
|
+
path: "fragments/environments/agent-runtime.yaml",
|
|
49775
|
+
content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/herald/1.0.0/fragments/environments/agent-runtime.yaml\nharness: codex\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
|
|
49776
|
+
}
|
|
49777
|
+
]
|
|
49778
|
+
}
|
|
49779
|
+
],
|
|
49746
49780
|
"@auto/incident-response": [
|
|
49747
49781
|
{
|
|
49748
49782
|
version: "1.0.0",
|
|
@@ -68545,6 +68579,7 @@ var TEMPLATE_DESCRIPTIONS = {
|
|
|
68545
68579
|
"@auto/default": "Auto's minimum general-purpose runtime contract, implicitly imported by the permanent Default agent in every project.",
|
|
68546
68580
|
"@auto/engineering-tier": "An engineering-tier fleet: senior and junior engineers with PR ownership, a live-iteration designer, and a session introspector.",
|
|
68547
68581
|
"@auto/handoff": "A handoff coder that takes ownership of delegated PRs or coding tasks and reports back when ready.",
|
|
68582
|
+
"@auto/herald": "A scheduled changelog curator that judges merged work for user-facing value and prepares one provenance-free, human-reviewed public changelog PR per run.",
|
|
68548
68583
|
"@auto/incident-response": "A first responder for production alerts: investigates, delivers an evidence-based triage report, and opens a draft fix PR when the cause is clear; -slack entrypoint for channel triage.",
|
|
68549
68584
|
"@auto/inspector": "A root-cause investigator that reproduces unusual behavior, bisects it, and produces a case file before anyone changes the code.",
|
|
68550
68585
|
"@auto/intern": "A low-cost GLM 5.2 generalist for quick questions and bounded fixes, with calibrated escalation when work exceeds the intern lane.",
|
package/dist/index.js
CHANGED
|
@@ -15237,7 +15237,7 @@ var init_primitives = __esm({
|
|
|
15237
15237
|
});
|
|
15238
15238
|
|
|
15239
15239
|
// ../../packages/schemas/src/provider-grants.ts
|
|
15240
|
-
var ProviderNameSchema, ExternalAccountTypeSchema, ProviderCredentialKindSchema, ProviderGrantStatusSchema, ProviderResourceSelectionSchema, ExternalAccountSchema, ProviderGrantSchema, ProjectProviderAccessSchema, ConnectionViewSchema, ConnectionListResponseSchema, ConnectionRepositorySchema, ConnectionRepositorySourceSchema, ConnectionRepositoryListResponseSchema;
|
|
15240
|
+
var ProviderNameSchema, ExternalAccountTypeSchema, ProviderCredentialKindSchema, ProviderGrantStatusSchema, PROVIDER_GRANT_STATUS_REASONS, ProviderGrantStatusReasonSchema, ProviderResourceSelectionSchema, ExternalAccountSchema, ProviderGrantSchema, ProjectProviderAccessSchema, ConnectionViewSchema, ConnectionListResponseSchema, ConnectionRepositorySchema, ConnectionRepositorySourceSchema, ConnectionRepositoryListResponseSchema;
|
|
15241
15241
|
var init_provider_grants = __esm({
|
|
15242
15242
|
"../../packages/schemas/src/provider-grants.ts"() {
|
|
15243
15243
|
"use strict";
|
|
@@ -15259,7 +15259,22 @@ var init_provider_grants = __esm({
|
|
|
15259
15259
|
"webhook",
|
|
15260
15260
|
"internal"
|
|
15261
15261
|
]);
|
|
15262
|
-
ProviderGrantStatusSchema = external_exports.enum([
|
|
15262
|
+
ProviderGrantStatusSchema = external_exports.enum([
|
|
15263
|
+
"active",
|
|
15264
|
+
"suspended",
|
|
15265
|
+
"revoked",
|
|
15266
|
+
"error"
|
|
15267
|
+
]);
|
|
15268
|
+
PROVIDER_GRANT_STATUS_REASONS = [
|
|
15269
|
+
"suspended_from_github",
|
|
15270
|
+
"uninstalled_from_github",
|
|
15271
|
+
"superseded",
|
|
15272
|
+
"disconnected",
|
|
15273
|
+
"provider_error"
|
|
15274
|
+
];
|
|
15275
|
+
ProviderGrantStatusReasonSchema = external_exports.enum(
|
|
15276
|
+
PROVIDER_GRANT_STATUS_REASONS
|
|
15277
|
+
);
|
|
15263
15278
|
ProviderResourceSelectionSchema = external_exports.discriminatedUnion("kind", [
|
|
15264
15279
|
external_exports.object({
|
|
15265
15280
|
kind: external_exports.literal("all")
|
|
@@ -15288,6 +15303,8 @@ var init_provider_grants = __esm({
|
|
|
15288
15303
|
kind: "all"
|
|
15289
15304
|
}),
|
|
15290
15305
|
status: ProviderGrantStatusSchema,
|
|
15306
|
+
statusReason: ProviderGrantStatusReasonSchema.nullable().default(null),
|
|
15307
|
+
statusDetectedAt: external_exports.coerce.date().nullable().default(null),
|
|
15291
15308
|
/**
|
|
15292
15309
|
* Scopes the server's current configuration requests that this grant has
|
|
15293
15310
|
* not granted. Computed at read time against the deployed scope list, never
|
|
@@ -17537,6 +17554,8 @@ var init_connections = __esm({
|
|
|
17537
17554
|
fullName: external_exports.string().trim().min(1)
|
|
17538
17555
|
});
|
|
17539
17556
|
GITHUB_CONNECTION_EVENTS = [
|
|
17557
|
+
"installation",
|
|
17558
|
+
"installation_repositories",
|
|
17540
17559
|
"push",
|
|
17541
17560
|
"pull_request",
|
|
17542
17561
|
"check_run",
|
|
@@ -34179,6 +34198,21 @@ triggers:
|
|
|
34179
34198
|
]
|
|
34180
34199
|
}
|
|
34181
34200
|
],
|
|
34201
|
+
"@auto/herald": [
|
|
34202
|
+
{
|
|
34203
|
+
version: "1.0.0",
|
|
34204
|
+
files: [
|
|
34205
|
+
{
|
|
34206
|
+
path: "agents/herald.yaml",
|
|
34207
|
+
content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/herald/1.0.0/agents/herald.yaml\n# Required variables: branchPrefix, changelogPath, githubConnection, heartbeatCron, heartbeatTimezone, repoFullName, scanWindowDays, slackChannel, slackConnection, trustedApprovalMentionIds, validationCommandSet\nname: herald\nlabels:\n purpose: changelog-curator\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsession:\n archiveAfterInactive:\n seconds: 86400\nharness: codex\nmodel:\n provider: openai\n id: gpt-5.6-sol\nreasoningEffort: high\nconcurrency: 1\nidentity:\n displayName: Herald\n username: herald\n avatar:\n asset: .auto/assets/herald.png\n sha256: 50395a53249a96be9ca1eb160bde02c8ceb681bf08b589c8472ed493efceeb64\n description:\n Curates scheduled public changelogs from merged work judged user-facing and\n valuable, for human wording and merge review.\ndisplayTitle: "Herald changelog: {{heartbeat.scheduledAt}}"\nsystemPrompt: |\n You are Herald, the changelog curator for {{ $repoFullName }}. You prepare\n human-reviewed changelog pull requests and never merge them.\n\n Source of truth and public contract:\n - `{{ $changelogPath }}` is the maintained changelog file and the sole state\n for changelog idempotency and deduplication. Read the complete file before\n planning an edit. Never create a parallel changelog source or depend on a\n repository-specific changelog helper or generated data model.\n - Preserve the file\'s existing format, ordering, headings, release grouping,\n and editorial conventions. If the repository renders or publishes the file\n elsewhere, preserve that presentation too. When an existing convention\n exposes a lead entry as a teaser, the newest included entry must read well\n standing alone.\n - Internal source PR identifiers and merge timestamps are provenance. Never\n put PR numbers, GitHub links, merge timestamps, provenance labels, or\n PR-oriented wording in a headline, bullet, public changelog, rendered\n page, or PR screenshot. This provenance ban applies to public changelog\n content and rendering. The operational Slack approval message is not public\n changelog content: it must include Herald\'s own changelog PR link, window,\n counts, and validation summary, but never candidate PR links, candidate\n provenance, or raw private content.\n - Do not use labels or prewritten maintainer copy as eligibility authority;\n Herald owns the bounded editorial judgment described below.\n\n Editorial voice:\n - Write every bullet as one complete, benefit-led sentence in present tense:\n name the surface a user recognizes and state the outcome, not the\n implementation. Concrete user impact is the register; vague reassurance is\n not.\n - Headlines are specific and thematic when the existing changelog format uses\n them. Keep every headline distinct and write it in outcome language.\n - Prefer substantive updates of roughly three to five entries. Never pad\n with ineligible or trivial work to reach a count; a thin window ships a\n short update or none at all.\n - When the repository\'s changelog house style requires it, avoid digits,\n apostrophes, and quotation marks in headlines and bullets. Treat this as\n editorial guidance, not a claim that provenance validation rejects all such\n characters.\n - Avoid internal codenames and engineering jargon. If a change cannot be\n described without internal context, it is not ready for the public\n changelog.\n\n Scan and selection:\n - The scan window is exactly {{ $scanWindowDays }} days ending at the\n heartbeat\'s `scheduledAt` timestamp. Use explicit inclusive ISO boundaries\n and retain the overlap on every run so late merges are discovered.\n - Search all merged PRs in that window, follow pagination to completion, and\n fetch enough PR, file, diff, merge, review, and comment data to evaluate\n every PR. If any page or required field is missing, truncated, stale, or\n ambiguous, fail the run closed: do not edit, push, open a PR, or post raw\n content. Report the incomplete surface and counts in the session output.\n - Evaluate every merged PR in the window. No label or maintainer-supplied\n public copy is required. Include a PR when the evidence supports a concrete,\n externally observable outcome that is valuable to users: a new or improved\n capability, a meaningful user-facing fix, better reliability, performance,\n or accessibility, or materially less workflow friction.\n - Exclude internal agent/process work, CI- or test-only changes, refactors,\n dependency or maintenance work, and any change with no evidenced\n user-visible outcome. Do not infer value from the PR title, files touched,\n diff size, or author alone. For mixed PRs, include only the evidence-backed\n user-facing outcome.\n - Exclude private tenant details. Include a security-related change only when\n a high-level user benefit is directly verifiable and can be stated without\n vulnerability, exploit, tenant, or internal-defense details. When truth or\n safety is uncertain, exclude the candidate and record the private reason;\n never infer or publish a sensitive claim.\n - Human wording or inclusion feedback in the Herald Slack thread or PR review\n is steering input, not an eligibility prerequisite. Requests for more\n inclusion mean re-evaluate excluded PRs against the same evidence and safety\n rubric; requests for less inclusion mean remove or defer candidates. Human\n steering never overrides completeness, provenance, or sensitive-content\n safeguards.\n - Count every scanned, included, and excluded PR. Keep exclusion reasons in\n the private session summary, not in public copy or Slack.\n\n Changelog update:\n - Treat the complete existing contents of `{{ $changelogPath }}` as the\n idempotency and deduplication state. Before writing, compare every proposed\n user-facing outcome with every existing entry. If the file already describes\n the same outcome, do not add it again. An overlapping rerun with no new or\n corrected outcome is a no-op.\n - A human-requested correction in PR review or the Herald Slack thread updates\n the matching existing changelog entry; it never appends a duplicate. If the\n intended entry cannot be identified confidently from the file contents and\n review context, fail closed and ask for clarification.\n - Add at most one new changelog section or release group per run when the\n existing file format uses groups. Follow the file\'s established ordering and\n date/version conventions. Group newly included outcomes together; corrections\n may update older entries in the same focused PR.\n - If there are no additions or corrections, open nothing. Report the exact\n window, scanned count, included count, excluded count, and validation\n result in the session output, then archive the session.\n\n Pull-request workflow:\n - Work from current `main` on `{{ $branchPrefix }}<YYYY-MM-DD>`. Search for an\n existing open Herald changelog PR before creating one. Update that one\n focused PR when it exists; otherwise create exactly one. Never create a\n second PR for the same run and never enable auto-merge.\n - Change only `{{ $changelogPath }}` and directly related tests or rendering\n code unless a minimal\n compatibility fix is required. Preserve the public presentation.\n - Run the configured validation command set exactly as provided:\n {{ $validationCommandSet }}\n - Inspect the full literal diff and any rendered public output. Verify no\n internal provenance appears in the changelog or rendered markup.\n - After opening or updating the PR, confirm its attributed held\n `github.pull_request` binding exists. Keep the branch and PR current,\n address CI/review feedback with normal follow-up commits, repair merge\n conflicts, and wait for green aggregate CI plus an exact-head `pr-review`\n thumbs-up. Never merge.\n - Post exactly one concise Slack message in `{{ $slackChannel }}` after the\n PR exists. Tag {{ $trustedApprovalMentionIds }} for explicit public-copy\n wording and merge approval. Include the PR link, inclusive\n {{ $scanWindowDays }}-day window, included and excluded counts, and\n validation summary. Invite replies in that thread to request more or less\n inclusion. Do not include raw candidate, private, tenant, security, or\n provenance content.\n - While a PR is open, do not archive the session. On PR close, report the\n final status and end the turn without self-archiving. The event router\n releases the held binding only after the close delivery settles; the\n configured inactivity policy may archive the unbound session later.\n\ninitialPrompt: |\n Run the scheduled Herald changelog curation at {{heartbeat.scheduledAt}}.\n Scan the inclusive {{ $scanWindowDays }}-day merged-PR window, apply the\n fail-closed selection and changelog-file idempotency and deduplication\n contract, and either prepare one human-reviewed PR or report an empty run\n without opening anything.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n commitAuthor:\n name: auto-dot-sh[bot]\n email: 292914954+auto-dot-sh[bot]@users.noreply.github.com\n capabilities:\n contents: write\n pullRequests: write\n issues: read\n checks: read\n actions: read\n workflows: none\n secrets: none\n merge: none\nworkingDirectory: /workspace/repo\nbindings:\n github.pull_request:\n lifecycle: held\n bind: onAttributedEvent\n continuity: agent\n context:\n role: implementer\n workflow: herald\n phase: implementation\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connection\n provider: slack\n connection: "{{ $slackConnection }}"\n github:\n kind: github\n tools:\n - search_pull_requests\n - pull_request_read\n - get_file_contents\n - list_commits\n - actions_list\n - actions_get\n - get_job_logs\n - create_pull_request\n - update_pull_request\n - upsert_issue_comment\n - add_reply_to_pull_request_comment\n - pull_request_review_write\ntriggers:\n - name: changelog-heartbeat\n kind: heartbeat\n cron: "{{ $heartbeatCron }}"\n timezone: "{{ $heartbeatTimezone }}"\n message: |\n Herald run scheduled at {{heartbeat.scheduledAt}}. Scan the inclusive\n {{ $scanWindowDays }}-day window, then prepare one focused changelog PR\n or report an empty run without opening anything.\n routing:\n kind: spawn\n - name: check-failed\n event: github.check_run.completed\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.checkRun.conclusion: failure\n $.github.checkRun.name:\n notIn:\n - All checks\n $.github.checkRun.headIsCurrent:\n notIn:\n - false\n message: |\n Check {{github.checkRun.name}} failed on Herald PR\n #{{github.pullRequest.number}}. Confirm it belongs to the current head,\n diagnose it, and push a normal focused fix without enabling auto-merge.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n - name: aggregate-ci-passed\n event: github.check_run.completed\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.checkRun.conclusion: success\n $.github.checkRun.name: All checks\n $.github.checkRun.headIsCurrent:\n notIn:\n - false\n message: |\n Aggregate CI passed on Herald PR #{{github.pullRequest.number}}. Inspect\n the exact-head pr-review result and address any remaining feedback before\n reporting the PR ready for human wording and merge review.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n - name: pr-conversation\n events:\n - github.issue_comment.created\n - github.issue_comment.edited\n - github.pull_request_review.submitted\n - github.pull_request_review.edited\n - github.pull_request_review_comment.created\n - github.pull_request_review_comment.edited\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.externalBot: false\n message: |\n A review or conversation update arrived on Herald PR\n #{{github.pullRequest.number}}. Address wording or correctness feedback\n on the existing branch, preserving the public/provenance boundary.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n - name: slack-inclusion-steering\n event: chat.message.subscribed\n connection: "{{ $slackConnection }}"\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} replied in Herald\'s changelog approval thread:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Treat this as human steering on wording or inclusion. A request for more\n inclusion means re-evaluate excluded PRs against the same evidence and\n safety rubric; a request for less inclusion means remove or defer the\n named candidates. Never relax scan completeness, private/tenant/security\n safeguards, or the public provenance ban. Update the same focused PR,\n rerun validation, and reply concisely in the thread with the outcome.\n routing:\n kind: deliver\n routeBy:\n kind: attributedSessions\n onUnmatched: drop\n - name: merge-conflict\n event: github.pull_request.merge_conflict\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n message: |\n Herald PR #{{github.pullRequest.number}} has a merge conflict. Fetch the\n latest main, resolve it minimally, and rerun affected validation.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n - name: pr-closed\n event: github.pull_request.closed\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n message: |\n Herald PR #{{github.pullRequest.number}} closed\n (merged={{github.pullRequest.merged}}). Report final status and end the\n turn without self-archiving. This trigger releases the held binding only\n after delivery settles; inactivity archival can happen later.\n routing:\n kind: bind\n target: github.pull_request\n onUnmatched: drop\n release: true\n'
|
|
34208
|
+
},
|
|
34209
|
+
{
|
|
34210
|
+
path: "fragments/environments/agent-runtime.yaml",
|
|
34211
|
+
content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/herald/1.0.0/fragments/environments/agent-runtime.yaml\nharness: codex\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
|
|
34212
|
+
}
|
|
34213
|
+
]
|
|
34214
|
+
}
|
|
34215
|
+
],
|
|
34182
34216
|
"@auto/incident-response": [
|
|
34183
34217
|
{
|
|
34184
34218
|
version: "1.0.0",
|
|
@@ -53012,6 +53046,7 @@ var init_hardcoded = __esm({
|
|
|
53012
53046
|
"@auto/default": "Auto's minimum general-purpose runtime contract, implicitly imported by the permanent Default agent in every project.",
|
|
53013
53047
|
"@auto/engineering-tier": "An engineering-tier fleet: senior and junior engineers with PR ownership, a live-iteration designer, and a session introspector.",
|
|
53014
53048
|
"@auto/handoff": "A handoff coder that takes ownership of delegated PRs or coding tasks and reports back when ready.",
|
|
53049
|
+
"@auto/herald": "A scheduled changelog curator that judges merged work for user-facing value and prepares one provenance-free, human-reviewed public changelog PR per run.",
|
|
53015
53050
|
"@auto/incident-response": "A first responder for production alerts: investigates, delivers an evidence-based triage report, and opens a draft fix PR when the cause is clear; -slack entrypoint for channel triage.",
|
|
53016
53051
|
"@auto/inspector": "A root-cause investigator that reproduces unusual behavior, bisects it, and produces a case file before anyone changes the code.",
|
|
53017
53052
|
"@auto/intern": "A low-cost GLM 5.2 generalist for quick questions and bounded fixes, with calibrated escalation when work exceeds the intern lane.",
|
|
@@ -57665,7 +57700,7 @@ var init_package = __esm({
|
|
|
57665
57700
|
"package.json"() {
|
|
57666
57701
|
package_default = {
|
|
57667
57702
|
name: "@autohq/cli",
|
|
57668
|
-
version: "0.1.
|
|
57703
|
+
version: "0.1.478",
|
|
57669
57704
|
license: "SEE LICENSE IN README.md",
|
|
57670
57705
|
publishConfig: {
|
|
57671
57706
|
access: "public"
|