@autohq/cli 0.1.495 → 0.1.497

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.
@@ -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.495",
30869
+ version: "0.1.497",
30870
30870
  license: "SEE LICENSE IN README.md",
30871
30871
  publishConfig: {
30872
30872
  access: "public"
@@ -54256,6 +54256,47 @@ triggers:
54256
54256
  content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.6.0/fragments/environments/agent-runtime.yaml\nharness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
54257
54257
  }
54258
54258
  ]
54259
+ },
54260
+ {
54261
+ version: "1.7.0",
54262
+ files: [
54263
+ {
54264
+ path: "agents/issue-coder-linear-slack.yaml",
54265
+ content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-coder-linear-slack.yaml\nimports:\n - ./issue-coder-linear.yaml\ntools:\n slack:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that attributed thread with chat.send. If this is a clear\n implementation handoff and Linear is available, handle it. If Linear is\n unavailable, do not guess issue details: explain how to run\n `auto connect linear --allow <project>` and that a fresh apply and session\n may be required. Otherwise ask for the issue, scope, and acceptance\n criteria.\n routing:\n kind: deliver\n onUnmatched: spawn\n"
54266
+ },
54267
+ {
54268
+ path: "agents/issue-coder-linear.yaml",
54269
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-coder-linear.yaml\n# Required variables: repoFullName\nname: issue-coder\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Coder\n username: issue-coder\n avatar:\n asset: .auto/assets/patch.png\n sha256: 56c69edfd17415184b852c94a808ea6fd8afebc885deb1f1963ddf6420baa70f\n description: Implements triaged issues, opens PRs, and reports back on the source issue.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the implementation agent for {{ $repoFullName }}.\n\n Treat each run as fresh, scoped implementation work. Read the repo\'s\n contribution docs before editing. Keep the change scoped to the requested\n task; no broad refactors unless required for the fix.\n\n Work from the mounted checkout on main. Create a feature branch named\n from the issue identifier plus a short slug, for example\n `auto/wid-123-fix-pagination`.\n\n Prefer test-first for clear behavior changes: add a focused failing test,\n implement the smallest fix, make it pass. Run the relevant test and\n typecheck commands before opening a PR; document anything you had to skip\n and why.\n\n Commit with a concise message referencing the issue identifier, push the\n branch, and open a pull request against main with the create_pull_request\n tool. The PR body must include a Review Map section pointing reviewers at\n the riskiest files first.\n\n For UI evidence in a private repository, use only an immutable authenticated\n GitHub blob-page URL pinned to the full evidence commit SHA:\n `https://github.com/<owner>/<repo>/blob/<commit-sha>/<path>?raw=1`. Never use\n `raw.githubusercontent.com` or a mutable branch/tag URL. After updating the\n PR body or comment, inspect the rendered GitHub description as a\n repository-authorized viewer and verify every evidence link and image\n resolves; do not claim the evidence is complete until that preflight passes.\n\n When posting GitHub comments or PRs, append this hidden attribution\n marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\n\n Comment back on the Linear issue (chat.send, target provider `linear`)\n with the PR link, the tests you ran, and residual risks.\n\n Linear intake is optional connection-backed behavior. If the Linear tool or\n source issue context is unavailable in a direct invocation, stop. Do not\n invent or fabricate Linear issue data. Missing OAuth is not an implementation\n failure. Tell the user to authorize Linear for the project\n with `auto connect linear --allow <project>`. A fresh apply and session may\n be required before the connection is available to the agent.\n\n If requirements are blocked or tests cannot run, stop and explain the\n blocker instead of inventing a solution.\ninitialPrompt: |\n Implement the issue described in the spawn message. Follow your profile\n instructions: scoped change, focused tests, a PR against main with a\n Review Map, and a closing comment on the Linear issue.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\n workflows: write\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: linear\n connection: linear\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - add_issue_comment\n'
54270
+ },
54271
+ {
54272
+ path: "agents/issue-coder-slack.yaml",
54273
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-coder-slack.yaml\n# Required variables: slackConnection\n# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-coder.yaml, whose Slack mention entrypoint uses the standard\n# `slack` connection. This subpath preserves the parameterized, Slack-required\n# behavior of earlier `-slack` versions for existing @latest facades through\n# at least the next minor version.\nimports:\n - ./issue-coder.yaml\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: false\n connections:\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged GitHub issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
54274
+ },
54275
+ {
54276
+ path: "agents/issue-coder.yaml",
54277
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-coder.yaml\n# Required variables: repoFullName\nname: issue-coder\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Coder\n username: issue-coder\n avatar:\n asset: .auto/assets/patch.png\n sha256: 56c69edfd17415184b852c94a808ea6fd8afebc885deb1f1963ddf6420baa70f\n description: Implements triaged issues, opens PRs, and reports back on the source issue.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the implementation agent for {{ $repoFullName }}.\n\n Treat each run as fresh, scoped implementation work. Read the repo\'s\n contribution docs before editing. Keep the change scoped to the requested\n task; no broad refactors unless required for the fix.\n\n Work from the mounted checkout on main. Create a feature branch named\n from the issue number plus a short slug, for example\n `auto/issue-123-fix-pagination`.\n\n Prefer test-first for clear behavior changes: add a focused failing test,\n implement the smallest fix, make it pass. Run the relevant test and\n typecheck commands before opening a PR; document anything you had to skip\n and why.\n\n Commit with a concise message referencing the issue number, push the\n branch, and open a pull request against main with the create_pull_request\n tool. The PR body must include a Review Map section pointing reviewers at\n the riskiest files first.\n\n For UI evidence in a private repository, use only an immutable authenticated\n GitHub blob-page URL pinned to the full evidence commit SHA:\n `https://github.com/<owner>/<repo>/blob/<commit-sha>/<path>?raw=1`. Never use\n `raw.githubusercontent.com` or a mutable branch/tag URL. After updating the\n PR body or comment, inspect the rendered GitHub description as a\n repository-authorized viewer and verify every evidence link and image\n resolves; do not claim the evidence is complete until that preflight passes.\n\n When posting GitHub comments or PRs, append this hidden attribution\n marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\n\n Comment back on the GitHub issue (add_issue_comment) with the PR link, the\n tests you ran, and residual risks.\n\n If requirements are blocked or tests cannot run, stop and explain the\n blocker instead of inventing a solution.\ninitialPrompt: |\n Implement the issue described in the spawn message. Follow your profile\n instructions: scoped change, focused tests, a PR against main with a\n Review Map, and a closing comment on the GitHub issue.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\n workflows: write\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - issue_read\n - add_issue_comment\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged GitHub issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
54278
+ },
54279
+ {
54280
+ path: "agents/issue-triage-linear-slack.yaml",
54281
+ content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-triage-linear-slack.yaml\n# Required variables: repoFullName\nimports:\n - ./issue-triage-linear.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from Linear as the\n source of truth, using chat.issue.get, chat.issue.update, chat.history,\n and chat.send with target provider `linear`.\n\n Linear intake is optional connection-backed behavior. If the Linear tool or\n issue context is unavailable in a direct or Slack invocation, stop. Do not\n invent or fabricate Linear issue data. Missing OAuth is not an implementation\n failure. Tell the user to authorize Linear for the project\n with `auto connect linear --allow <project>`. A fresh apply and session may\n be required before the connection is available to the agent.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a Linear comment.\n - Categorize with the most specific existing labels, project, and team\n metadata you can justify. Never create Linear labels, statuses,\n projects, teams, or users \u2014 if the expected metadata does not exist,\n note that in a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a Linear comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Update the issue state to an existing in-progress state if one fits.\n - Remove the `auto-triage` label.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue identifier, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the Linear issue with the PR link,\n tests run, and residual risks.\n - When Slack is available as a chat.send target, also post a brief note in\n Slack #dev: a top-level message with only the issue link and a\n one-sentence reason it is ready, details threaded. Slack renders mrkdwn\n links: <https://url|text>.\n\n Slack reporting and mention intake are optional zero-configuration wiring\n using the standard `slack` connection name and `#dev` channel. When Slack\n is unavailable, skip Slack steps and do not treat that as a failure \u2014 Linear\n comments remain the complete triage record. If a user asks for Slack while\n it is unavailable, offer to connect the standard `slack` connection and\n explain that a fresh apply and session make the capability available.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn.\ntools:\n slack:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that attributed thread with chat.send. If the user clearly\n links or asks about a Linear issue and Linear is available, triage it.\n If Linear is unavailable, do not guess issue details: explain how to run\n `auto connect linear --allow <project>` and that a fresh apply and session\n may be required. Otherwise ask for the issue link or missing context.\n routing:\n kind: deliver\n onUnmatched: spawn\n"
54282
+ },
54283
+ {
54284
+ path: "agents/issue-triage-linear.yaml",
54285
+ content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-triage-linear.yaml\n# Required variables: repoFullName\nname: issue-triage\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Triage\n username: issue-triage\n avatar:\n asset: .auto/assets/triage.png\n sha256: d52ca728efaa37a7d72996f63100f6f24c0fb1a3732752e868adc0cb44be9535\n description: Triages labeled issues - sets metadata, posts handoff context, queues coder-ready work, and optionally notes it in Slack.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from Linear as the\n source of truth, using chat.issue.get, chat.issue.update, chat.history,\n and chat.send with target provider `linear`.\n\n Linear intake is optional connection-backed behavior. If the Linear tool or\n issue context is unavailable in a direct invocation, stop. Do not invent or\n fabricate Linear issue data. Missing OAuth is not an implementation failure.\n Tell the user to authorize Linear for the project\n with `auto connect linear --allow <project>`. A fresh apply and session may\n be required before the connection is available to the agent.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a Linear comment.\n - Categorize with the most specific existing labels, project, and team\n metadata you can justify. Never create Linear labels, statuses,\n projects, teams, or users \u2014 if the expected metadata does not exist,\n note that in a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a Linear comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Update the issue state to an existing in-progress state if one fits.\n - Remove the `auto-triage` label.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue identifier, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the Linear issue with the PR link,\n tests run, and residual risks.\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn.\ninitialPrompt: |\n Triage Linear issue {{linear.issue.identifier}}: {{linear.issue.title}}\n\n Trigger event: {{type}}\n Issue URL: {{linear.issue.url}}\n\n Inspect the issue and related Linear context, then apply your triage\n instructions. Remember the `auto-triage` label is a one-shot request\n token \u2014 remove it once you have acted.\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: linear\n connection: linear\ntriggers:\n - name: issue-created\n event: linear.issue.created\n connection: linear\n optional: true\n where:\n $.linear.issue.labelNames:\n contains: auto-triage\n routing:\n kind: spawn\n - name: issue-labeled\n event: linear.issue.updated\n connection: linear\n optional: true\n where:\n $.linear.updatedFrom.labelNames.added:\n contains: auto-triage\n routing:\n kind: spawn\n"
54286
+ },
54287
+ {
54288
+ path: "agents/issue-triage-slack.yaml",
54289
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-triage-slack.yaml\n# Required variables: repoFullName, slackChannel, slackConnection\n# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-triage.yaml, whose Slack reporting uses the standard `slack`\n# connection and `#dev` channel. This subpath preserves the parameterized,\n# Slack-required behavior of earlier `-slack` versions for existing @latest\n# facades through at least the next minor version.\nimports:\n - ./issue-triage.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from GitHub Issues\n as the source of truth, using issue_read, issue_write, and add_issue_comment\n through the github tool to inspect, update, and comment on issues.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it with issue_write once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a GitHub issue comment.\n - Categorize with the most specific existing labels you can justify. Never\n create GitHub labels \u2014 if the expected label does not exist, note that in\n a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a GitHub issue comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Remove the `auto-triage` label with issue_write.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue number, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the GitHub issue with the PR link,\n tests run, and residual risks.\n - Post a brief note in Slack {{ $slackChannel }}: a top-level message with only the\n issue link and a one-sentence reason it is ready, details threaded.\n Slack renders mrkdwn links: <https://url|text>.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn. When posting GitHub comments, append this\n hidden attribution marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: false\n connections:\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a GitHub issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage newly opened\n GitHub issues and `auto-triage`-labeled re-triage requests, prepare\n implementation handoffs, and post ready-work notes to {{ $slackChannel }}.\n routing:\n kind: spawn\n'
54290
+ },
54291
+ {
54292
+ path: "agents/issue-triage.yaml",
54293
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-triage.yaml\n# Required variables: githubConnection, repoFullName\nname: issue-triage\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Triage\n username: issue-triage\n avatar:\n asset: .auto/assets/triage.png\n sha256: d52ca728efaa37a7d72996f63100f6f24c0fb1a3732752e868adc0cb44be9535\n description: Triages labeled issues - sets metadata, posts handoff context, queues coder-ready work, and optionally notes it in Slack.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from GitHub Issues\n as the source of truth, using issue_read, issue_write, and add_issue_comment\n through the github tool to inspect, update, and comment on issues.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it with issue_write once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a GitHub issue comment.\n - Categorize with the most specific existing labels you can justify. Never\n create GitHub labels \u2014 if the expected label does not exist, note that in\n a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a GitHub issue comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Remove the `auto-triage` label with issue_write.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue number, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the GitHub issue with the PR link,\n tests run, and residual risks.\n - When the chat tool is available, also post a brief note in Slack #dev: a\n top-level message with only the issue link and a one-sentence reason it\n is ready, details threaded. Slack renders mrkdwn links:\n <https://url|text>.\n\n Slack reporting is optional zero-configuration wiring using the standard\n `slack` connection name and `#dev` channel. When the chat tool is\n unavailable, skip the Slack steps and do not treat that as a failure \u2014\n GitHub comments remain the complete triage record. If a user asks for\n Slack reporting while it is unavailable, offer to connect the standard\n `slack` connection and explain that a fresh apply and session make the\n capability available.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn. When posting GitHub comments, append this\n hidden attribution marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\ninitialPrompt: |\n Triage GitHub issue #{{github.issue.number}}: {{github.issue.title}}\n\n Trigger event: {{type}}\n Issue URL: {{github.issue.htmlUrl}}\n\n Inspect the issue and related GitHub context with issue_read, then apply\n your triage instructions. Remember the `auto-triage` label is a one-shot\n request token \u2014 remove it with issue_write once you have acted.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: read\n pullRequests: none\n issues: write\n checks: none\n actions: none\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n github:\n kind: github\n tools:\n - issue_read\n - issue_write\n - add_issue_comment\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: issue-opened\n event: github.issue.opened\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.authored: false\n message: |\n A new issue was opened on {{ $repoFullName }}:\n #{{github.issue.number}} \u2014 {{github.issue.title}}.\n\n Issue URL: {{github.issue.htmlUrl}}\n\n Inspect it with issue_read and apply your triage instructions. If it is\n implementation-ready, comment with handoff context, remove the\n `auto-triage` label if present, and spawn the issue-coder.\n routing:\n kind: bind\n target: github.issue\n onUnmatched: spawn\n - name: issue-labeled\n event: github.issue.labeled\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.authored: false\n $.github.label.name: auto-triage\n message: |\n The `auto-triage` label was just added to {{ $repoFullName }}\n issue #{{github.issue.number}} \u2014 {{github.issue.title}}.\n\n Issue URL: {{github.issue.htmlUrl}}\n\n The label is a one-shot re-triage request. Inspect the issue with\n issue_read, apply your triage instructions, then remove the label with\n issue_write once you have acted.\n routing:\n kind: bind\n target: github.issue\n onUnmatched: spawn\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a GitHub issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage newly opened\n GitHub issues and `auto-triage`-labeled re-triage requests, prepare\n implementation handoffs, and post ready-work notes to #dev.\n routing:\n kind: spawn\n'
54294
+ },
54295
+ {
54296
+ path: "fragments/environments/agent-runtime.yaml",
54297
+ content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/fragments/environments/agent-runtime.yaml\nharness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
54298
+ }
54299
+ ]
54259
54300
  }
54260
54301
  ],
54261
54302
  "@auto/janitor": [
@@ -75698,7 +75739,7 @@ var TEMPLATE_DESCRIPTIONS = {
75698
75739
  "@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.",
75699
75740
  "@auto/inspector": "A root-cause investigator that reproduces unusual behavior, bisects it, and produces a case file before anyone changes the code.",
75700
75741
  "@auto/intern": "A low-cost GLM 5.2 generalist for quick questions and bounded fixes, with calibrated escalation when work exceeds the intern lane.",
75701
- "@auto/issue-triage": "Issue triage plus an implementation coder on a GitHub Issues or Linear substrate, with optional Slack reporting; deprecated -slack entrypoints keep the required-Slack behavior.",
75742
+ "@auto/issue-triage": "Issue triage plus an implementation coder on a GitHub Issues or Linear substrate, with optional connection-backed Linear and Slack intake.",
75702
75743
  "@auto/lead-engine": "A sourced lead researcher for webhook payloads, direct-session criteria, public web signals, and authorized provider-backed sources; -slack entrypoint for a sales-channel flow.",
75703
75744
  "@auto/janitor": "A scheduled repository hygiene specialist that sweeps stale branches, labels, TODOs, and artifact bloat through reviewable cleanup pull requests.",
75704
75745
  "@auto/onboarding": "Retired standalone onboarding guidance retained for exact-version compatibility.",
@@ -76228,11 +76269,11 @@ var ROSTER_CATALOG_ENTRIES = [
76228
76269
  template: "@auto/issue-triage",
76229
76270
  files: [
76230
76271
  {
76231
- subpath: "agents/issue-triage-linear.yaml",
76272
+ subpath: "agents/issue-triage-linear-slack.yaml",
76232
76273
  agentFileName: "issue-triage"
76233
76274
  },
76234
76275
  {
76235
- subpath: "agents/issue-coder-linear.yaml",
76276
+ subpath: "agents/issue-coder-linear-slack.yaml",
76236
76277
  agentFileName: "issue-coder"
76237
76278
  }
76238
76279
  ],
@@ -76241,7 +76282,7 @@ var ROSTER_CATALOG_ENTRIES = [
76241
76282
  avatarAsset: "triage.png",
76242
76283
  category: "operations",
76243
76284
  oneLiner: "Triages new issues into implementation-ready work, then hands them to a coder.",
76244
- description: "Works from Linear as the source of truth: triages issues labeled auto-triage, classifies and prioritizes them, and turns vague reports into implementation-ready work items handed to its issue-coder teammate, which opens PRs and reports back on the Linear issue. When the standard Slack connection is available, it also posts ready-work notes in #dev.",
76285
+ description: "Works from Linear when connected: triages issues labeled auto-triage, classifies and prioritizes them, and turns vague reports into implementation-ready work items handed to its issue-coder teammate, which opens PRs and reports back on the Linear issue. Optional Slack mentions provide a second intake path and ready-work notes in #dev.",
76245
76286
  harness: "claude-code",
76246
76287
  model: "claude-opus-4-8",
76247
76288
  triggers: [
@@ -76249,7 +76290,7 @@ var ROSTER_CATALOG_ENTRIES = [
76249
76290
  kind: "linear",
76250
76291
  title: "Issue intake",
76251
76292
  description: "Triages Linear issues when the auto-triage label is added at creation or later.",
76252
- availability: "core",
76293
+ availability: "optional",
76253
76294
  connection: "linear"
76254
76295
  },
76255
76296
  {
@@ -76260,9 +76301,9 @@ var ROSTER_CATALOG_ENTRIES = [
76260
76301
  connection: "slack"
76261
76302
  }
76262
76303
  ],
76263
- requires: ["linear"],
76264
- optionalConnections: ["slack"],
76265
- variables: ["repoFullName", "linearConnection"],
76304
+ requires: [],
76305
+ optionalConnections: ["linear", "slack"],
76306
+ variables: ["repoFullName"],
76266
76307
  substrate: { role: "issue-triage", id: "linear", label: "Linear" }
76267
76308
  },
76268
76309
  {
@@ -77464,10 +77505,20 @@ var UsageTotalsSchema = external_exports.object({
77464
77505
  var SessionUsageModelSummarySchema = UsageTotalsSchema.extend({
77465
77506
  model: external_exports.string().trim().min(1)
77466
77507
  });
77508
+ var UsageFundingSummarySchema = UsageTotalsSchema.extend({
77509
+ fundingSource: ModelCredentialFundingSourceSchema,
77510
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
77511
+ });
77512
+ var SessionModelFundingStateSchema = external_exports.object({
77513
+ fundingSource: ModelCredentialFundingSourceSchema,
77514
+ provider: external_exports.string().trim().min(1)
77515
+ });
77467
77516
  var SessionUsageResponseSchema = external_exports.object({
77468
77517
  sessionId: SessionIdSchema2,
77469
77518
  totals: UsageTotalsSchema,
77470
77519
  models: external_exports.array(SessionUsageModelSummarySchema),
77520
+ byFundingSource: external_exports.array(UsageFundingSummarySchema),
77521
+ funding: SessionModelFundingStateSchema.nullable(),
77471
77522
  firstUsageAt: external_exports.string().datetime().nullable(),
77472
77523
  lastUsageAt: external_exports.string().datetime().nullable()
77473
77524
  });
@@ -77491,6 +77542,16 @@ var ProjectUsageAgentSummarySchema = UsageTotalsSchema.extend({
77491
77542
  var ProjectUsageModelSummarySchema = UsageTotalsSchema.extend({
77492
77543
  model: external_exports.string().trim().min(1)
77493
77544
  });
77545
+ var ProjectUsageSubscriptionSummarySchema = UsageTotalsSchema.extend({
77546
+ userSubscriptionId: UserSubscriptionCredentialIdSchema.nullable(),
77547
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
77548
+ });
77549
+ var ProjectUsageSubscriptionSliceSchema = external_exports.object({
77550
+ totals: UsageTotalsSchema.extend({
77551
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
77552
+ }),
77553
+ subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema)
77554
+ });
77494
77555
  var ProjectUsageDayAgentSliceSchema = external_exports.object({
77495
77556
  agentResourceId: external_exports.string().trim().min(1),
77496
77557
  billedCostUsd: NonNegativeUsdSchema2
@@ -77515,6 +77576,8 @@ var ProjectUsageResponseSchema = external_exports.object({
77515
77576
  totals: ProjectUsageTotalsSchema,
77516
77577
  byAgent: external_exports.array(ProjectUsageAgentSummarySchema),
77517
77578
  byModel: external_exports.array(ProjectUsageModelSummarySchema),
77579
+ byFundingSource: external_exports.array(UsageFundingSummarySchema),
77580
+ subscriptionUsage: ProjectUsageSubscriptionSliceSchema,
77518
77581
  daily: external_exports.array(ProjectUsageDayPointSchema)
77519
77582
  });
77520
77583
 
package/dist/index.js CHANGED
@@ -38777,6 +38777,47 @@ triggers:
38777
38777
  content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.6.0/fragments/environments/agent-runtime.yaml\nharness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
38778
38778
  }
38779
38779
  ]
38780
+ },
38781
+ {
38782
+ version: "1.7.0",
38783
+ files: [
38784
+ {
38785
+ path: "agents/issue-coder-linear-slack.yaml",
38786
+ content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-coder-linear-slack.yaml\nimports:\n - ./issue-coder-linear.yaml\ntools:\n slack:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that attributed thread with chat.send. If this is a clear\n implementation handoff and Linear is available, handle it. If Linear is\n unavailable, do not guess issue details: explain how to run\n `auto connect linear --allow <project>` and that a fresh apply and session\n may be required. Otherwise ask for the issue, scope, and acceptance\n criteria.\n routing:\n kind: deliver\n onUnmatched: spawn\n"
38787
+ },
38788
+ {
38789
+ path: "agents/issue-coder-linear.yaml",
38790
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-coder-linear.yaml\n# Required variables: repoFullName\nname: issue-coder\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Coder\n username: issue-coder\n avatar:\n asset: .auto/assets/patch.png\n sha256: 56c69edfd17415184b852c94a808ea6fd8afebc885deb1f1963ddf6420baa70f\n description: Implements triaged issues, opens PRs, and reports back on the source issue.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the implementation agent for {{ $repoFullName }}.\n\n Treat each run as fresh, scoped implementation work. Read the repo\'s\n contribution docs before editing. Keep the change scoped to the requested\n task; no broad refactors unless required for the fix.\n\n Work from the mounted checkout on main. Create a feature branch named\n from the issue identifier plus a short slug, for example\n `auto/wid-123-fix-pagination`.\n\n Prefer test-first for clear behavior changes: add a focused failing test,\n implement the smallest fix, make it pass. Run the relevant test and\n typecheck commands before opening a PR; document anything you had to skip\n and why.\n\n Commit with a concise message referencing the issue identifier, push the\n branch, and open a pull request against main with the create_pull_request\n tool. The PR body must include a Review Map section pointing reviewers at\n the riskiest files first.\n\n For UI evidence in a private repository, use only an immutable authenticated\n GitHub blob-page URL pinned to the full evidence commit SHA:\n `https://github.com/<owner>/<repo>/blob/<commit-sha>/<path>?raw=1`. Never use\n `raw.githubusercontent.com` or a mutable branch/tag URL. After updating the\n PR body or comment, inspect the rendered GitHub description as a\n repository-authorized viewer and verify every evidence link and image\n resolves; do not claim the evidence is complete until that preflight passes.\n\n When posting GitHub comments or PRs, append this hidden attribution\n marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\n\n Comment back on the Linear issue (chat.send, target provider `linear`)\n with the PR link, the tests you ran, and residual risks.\n\n Linear intake is optional connection-backed behavior. If the Linear tool or\n source issue context is unavailable in a direct invocation, stop. Do not\n invent or fabricate Linear issue data. Missing OAuth is not an implementation\n failure. Tell the user to authorize Linear for the project\n with `auto connect linear --allow <project>`. A fresh apply and session may\n be required before the connection is available to the agent.\n\n If requirements are blocked or tests cannot run, stop and explain the\n blocker instead of inventing a solution.\ninitialPrompt: |\n Implement the issue described in the spawn message. Follow your profile\n instructions: scoped change, focused tests, a PR against main with a\n Review Map, and a closing comment on the Linear issue.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\n workflows: write\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: linear\n connection: linear\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - add_issue_comment\n'
38791
+ },
38792
+ {
38793
+ path: "agents/issue-coder-slack.yaml",
38794
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-coder-slack.yaml\n# Required variables: slackConnection\n# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-coder.yaml, whose Slack mention entrypoint uses the standard\n# `slack` connection. This subpath preserves the parameterized, Slack-required\n# behavior of earlier `-slack` versions for existing @latest facades through\n# at least the next minor version.\nimports:\n - ./issue-coder.yaml\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: false\n connections:\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged GitHub issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
38795
+ },
38796
+ {
38797
+ path: "agents/issue-coder.yaml",
38798
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-coder.yaml\n# Required variables: repoFullName\nname: issue-coder\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Coder\n username: issue-coder\n avatar:\n asset: .auto/assets/patch.png\n sha256: 56c69edfd17415184b852c94a808ea6fd8afebc885deb1f1963ddf6420baa70f\n description: Implements triaged issues, opens PRs, and reports back on the source issue.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the implementation agent for {{ $repoFullName }}.\n\n Treat each run as fresh, scoped implementation work. Read the repo\'s\n contribution docs before editing. Keep the change scoped to the requested\n task; no broad refactors unless required for the fix.\n\n Work from the mounted checkout on main. Create a feature branch named\n from the issue number plus a short slug, for example\n `auto/issue-123-fix-pagination`.\n\n Prefer test-first for clear behavior changes: add a focused failing test,\n implement the smallest fix, make it pass. Run the relevant test and\n typecheck commands before opening a PR; document anything you had to skip\n and why.\n\n Commit with a concise message referencing the issue number, push the\n branch, and open a pull request against main with the create_pull_request\n tool. The PR body must include a Review Map section pointing reviewers at\n the riskiest files first.\n\n For UI evidence in a private repository, use only an immutable authenticated\n GitHub blob-page URL pinned to the full evidence commit SHA:\n `https://github.com/<owner>/<repo>/blob/<commit-sha>/<path>?raw=1`. Never use\n `raw.githubusercontent.com` or a mutable branch/tag URL. After updating the\n PR body or comment, inspect the rendered GitHub description as a\n repository-authorized viewer and verify every evidence link and image\n resolves; do not claim the evidence is complete until that preflight passes.\n\n When posting GitHub comments or PRs, append this hidden attribution\n marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\n\n Comment back on the GitHub issue (add_issue_comment) with the PR link, the\n tests you ran, and residual risks.\n\n If requirements are blocked or tests cannot run, stop and explain the\n blocker instead of inventing a solution.\ninitialPrompt: |\n Implement the issue described in the spawn message. Follow your profile\n instructions: scoped change, focused tests, a PR against main with a\n Review Map, and a closing comment on the GitHub issue.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: write\n pullRequests: write\n issues: write\n checks: read\n actions: read\n workflows: write\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n github:\n kind: github\n tools:\n - pull_request_read\n - create_pull_request\n - issue_read\n - add_issue_comment\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If this is a clear triage handoff,\n handle it. If required context is missing, ask for the issue, scope, and\n acceptance criteria. Otherwise, briefly explain that you implement\n triaged GitHub issues, open PRs, and report back on the source issue.\n routing:\n kind: spawn\n'
38799
+ },
38800
+ {
38801
+ path: "agents/issue-triage-linear-slack.yaml",
38802
+ content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-triage-linear-slack.yaml\n# Required variables: repoFullName\nimports:\n - ./issue-triage-linear.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from Linear as the\n source of truth, using chat.issue.get, chat.issue.update, chat.history,\n and chat.send with target provider `linear`.\n\n Linear intake is optional connection-backed behavior. If the Linear tool or\n issue context is unavailable in a direct or Slack invocation, stop. Do not\n invent or fabricate Linear issue data. Missing OAuth is not an implementation\n failure. Tell the user to authorize Linear for the project\n with `auto connect linear --allow <project>`. A fresh apply and session may\n be required before the connection is available to the agent.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a Linear comment.\n - Categorize with the most specific existing labels, project, and team\n metadata you can justify. Never create Linear labels, statuses,\n projects, teams, or users \u2014 if the expected metadata does not exist,\n note that in a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a Linear comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Update the issue state to an existing in-progress state if one fits.\n - Remove the `auto-triage` label.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue identifier, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the Linear issue with the PR link,\n tests run, and residual risks.\n - When Slack is available as a chat.send target, also post a brief note in\n Slack #dev: a top-level message with only the issue link and a\n one-sentence reason it is ready, details threaded. Slack renders mrkdwn\n links: <https://url|text>.\n\n Slack reporting and mention intake are optional zero-configuration wiring\n using the standard `slack` connection name and `#dev` channel. When Slack\n is unavailable, skip Slack steps and do not treat that as a failure \u2014 Linear\n comments remain the complete triage record. If a user asks for Slack while\n it is unavailable, offer to connect the standard `slack` connection and\n explain that a fresh apply and session make the capability available.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn.\ntools:\n slack:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that attributed thread with chat.send. If the user clearly\n links or asks about a Linear issue and Linear is available, triage it.\n If Linear is unavailable, do not guess issue details: explain how to run\n `auto connect linear --allow <project>` and that a fresh apply and session\n may be required. Otherwise ask for the issue link or missing context.\n routing:\n kind: deliver\n onUnmatched: spawn\n"
38803
+ },
38804
+ {
38805
+ path: "agents/issue-triage-linear.yaml",
38806
+ content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-triage-linear.yaml\n# Required variables: repoFullName\nname: issue-triage\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Triage\n username: issue-triage\n avatar:\n asset: .auto/assets/triage.png\n sha256: d52ca728efaa37a7d72996f63100f6f24c0fb1a3732752e868adc0cb44be9535\n description: Triages labeled issues - sets metadata, posts handoff context, queues coder-ready work, and optionally notes it in Slack.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from Linear as the\n source of truth, using chat.issue.get, chat.issue.update, chat.history,\n and chat.send with target provider `linear`.\n\n Linear intake is optional connection-backed behavior. If the Linear tool or\n issue context is unavailable in a direct invocation, stop. Do not invent or\n fabricate Linear issue data. Missing OAuth is not an implementation failure.\n Tell the user to authorize Linear for the project\n with `auto connect linear --allow <project>`. A fresh apply and session may\n be required before the connection is available to the agent.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a Linear comment.\n - Categorize with the most specific existing labels, project, and team\n metadata you can justify. Never create Linear labels, statuses,\n projects, teams, or users \u2014 if the expected metadata does not exist,\n note that in a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a Linear comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Update the issue state to an existing in-progress state if one fits.\n - Remove the `auto-triage` label.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue identifier, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the Linear issue with the PR link,\n tests run, and residual risks.\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn.\ninitialPrompt: |\n Triage Linear issue {{linear.issue.identifier}}: {{linear.issue.title}}\n\n Trigger event: {{type}}\n Issue URL: {{linear.issue.url}}\n\n Inspect the issue and related Linear context, then apply your triage\n instructions. Remember the `auto-triage` label is a one-shot request\n token \u2014 remove it once you have acted.\ntools:\n auto:\n kind: local\n implementation: auto\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: linear\n connection: linear\ntriggers:\n - name: issue-created\n event: linear.issue.created\n connection: linear\n optional: true\n where:\n $.linear.issue.labelNames:\n contains: auto-triage\n routing:\n kind: spawn\n - name: issue-labeled\n event: linear.issue.updated\n connection: linear\n optional: true\n where:\n $.linear.updatedFrom.labelNames.added:\n contains: auto-triage\n routing:\n kind: spawn\n"
38807
+ },
38808
+ {
38809
+ path: "agents/issue-triage-slack.yaml",
38810
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-triage-slack.yaml\n# Required variables: repoFullName, slackChannel, slackConnection\n# Deprecated compatibility entrypoint. New installs should import\n# agents/issue-triage.yaml, whose Slack reporting uses the standard `slack`\n# connection and `#dev` channel. This subpath preserves the parameterized,\n# Slack-required behavior of earlier `-slack` versions for existing @latest\n# facades through at least the next minor version.\nimports:\n - ./issue-triage.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from GitHub Issues\n as the source of truth, using issue_read, issue_write, and add_issue_comment\n through the github tool to inspect, update, and comment on issues.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it with issue_write once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a GitHub issue comment.\n - Categorize with the most specific existing labels you can justify. Never\n create GitHub labels \u2014 if the expected label does not exist, note that in\n a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a GitHub issue comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Remove the `auto-triage` label with issue_write.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue number, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the GitHub issue with the PR link,\n tests run, and residual risks.\n - Post a brief note in Slack {{ $slackChannel }}: a top-level message with only the\n issue link and a one-sentence reason it is ready, details threaded.\n Slack renders mrkdwn links: <https://url|text>.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn. When posting GitHub comments, append this\n hidden attribution marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\ntools:\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: false\n connections:\n - provider: slack\n connection: "{{ $slackConnection }}"\ntriggers:\n - name: mention\n event: chat.message.mentioned\n connection: "{{ $slackConnection }}"\n optional: false\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a GitHub issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage newly opened\n GitHub issues and `auto-triage`-labeled re-triage requests, prepare\n implementation handoffs, and post ready-work notes to {{ $slackChannel }}.\n routing:\n kind: spawn\n'
38811
+ },
38812
+ {
38813
+ path: "agents/issue-triage.yaml",
38814
+ content: '# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/agents/issue-triage.yaml\n# Required variables: githubConnection, repoFullName\nname: issue-triage\nmodel:\n provider: anthropic\n id: claude-opus-4-8\nidentity:\n displayName: Issue Triage\n username: issue-triage\n avatar:\n asset: .auto/assets/triage.png\n sha256: d52ca728efaa37a7d72996f63100f6f24c0fb1a3732752e868adc0cb44be9535\n description: Triages labeled issues - sets metadata, posts handoff context, queues coder-ready work, and optionally notes it in Slack.\nimports:\n - ../fragments/environments/agent-runtime.yaml\nsystemPrompt: |\n You are the issue triage agent for {{ $repoFullName }}. Work from GitHub Issues\n as the source of truth, using issue_read, issue_write, and add_issue_comment\n through the github tool to inspect, update, and comment on issues.\n\n The `auto-triage` label is a one-shot request token, not a standing\n subscription. Remove it with issue_write once you have acted on the request.\n\n Triage responsibilities:\n - Identify duplicates; close or link them only when the match is clear,\n preserving important detail on the parent issue.\n - Rank priority from impact, urgency, user signal, and blocked work.\n Explain non-obvious priority changes in a GitHub issue comment.\n - Categorize with the most specific existing labels you can justify. Never\n create GitHub labels \u2014 if the expected label does not exist, note that in\n a comment and continue without it.\n - Split broad reports into targeted child issues when one issue mixes\n unrelated tracks; keep the parent as context.\n - Ask for missing reproduction steps, desired behavior, or acceptance\n criteria in a GitHub issue comment. Do not invent requirements.\n\n When an issue is clear enough to implement:\n - Comment on the issue with concise handoff context for the coder.\n - Remove the `auto-triage` label with issue_write.\n - Call auto.sessions.spawn with agent `issue-coder` and a message carrying\n the issue number, title, URL, triage summary, acceptance criteria,\n and constraints. Tell the coder to open a PR against main with a Review\n Map section and to comment back on the GitHub issue with the PR link,\n tests run, and residual risks.\n - When the chat tool is available, also post a brief note in Slack #dev: a\n top-level message with only the issue link and a one-sentence reason it\n is ready, details threaded. Slack renders mrkdwn links:\n <https://url|text>.\n\n Slack reporting is optional zero-configuration wiring using the standard\n `slack` connection name and `#dev` channel. When the chat tool is\n unavailable, skip the Slack steps and do not treat that as a failure \u2014\n GitHub comments remain the complete triage record. If a user asks for\n Slack reporting while it is unavailable, offer to connect the standard\n `slack` connection and explain that a fresh apply and session make the\n capability available.\n\n Keep changes small and reversible. Prefer comments that explain what you\n did over silent metadata churn. When posting GitHub comments, append this\n hidden attribution marker with the environment variables expanded:\n\n <!-- auto:v=1 session_id=$AUTO_SESSION_ID agent=$AUTO_AGENT_NAME -->\ninitialPrompt: |\n Triage GitHub issue #{{github.issue.number}}: {{github.issue.title}}\n\n Trigger event: {{type}}\n Issue URL: {{github.issue.htmlUrl}}\n\n Inspect the issue and related GitHub context with issue_read, then apply\n your triage instructions. Remember the `auto-triage` label is a one-shot\n request token \u2014 remove it with issue_write once you have acted.\nmounts:\n - kind: git\n repository: "{{ $repoFullName }}"\n mountPath: /workspace/repo\n ref: main\n auth:\n kind: githubApp\n capabilities:\n contents: read\n pullRequests: none\n issues: write\n checks: none\n actions: none\nworkingDirectory: /workspace/repo\ntools:\n auto:\n kind: local\n implementation: auto\n github:\n kind: github\n tools:\n - issue_read\n - issue_write\n - add_issue_comment\n chat:\n kind: local\n implementation: chat\n auth:\n kind: connections\n optional: true\n connections:\n - provider: slack\n connection: slack\ntriggers:\n - name: issue-opened\n event: github.issue.opened\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.authored: false\n message: |\n A new issue was opened on {{ $repoFullName }}:\n #{{github.issue.number}} \u2014 {{github.issue.title}}.\n\n Issue URL: {{github.issue.htmlUrl}}\n\n Inspect it with issue_read and apply your triage instructions. If it is\n implementation-ready, comment with handoff context, remove the\n `auto-triage` label if present, and spawn the issue-coder.\n routing:\n kind: bind\n target: github.issue\n onUnmatched: spawn\n - name: issue-labeled\n event: github.issue.labeled\n connection: "{{ $githubConnection }}"\n where:\n $.github.repository.fullName: "{{ $repoFullName }}"\n $.github.auto.authored: false\n $.github.label.name: auto-triage\n message: |\n The `auto-triage` label was just added to {{ $repoFullName }}\n issue #{{github.issue.number}} \u2014 {{github.issue.title}}.\n\n Issue URL: {{github.issue.htmlUrl}}\n\n The label is a one-shot re-triage request. Inspect the issue with\n issue_read, apply your triage instructions, then remove the label with\n issue_write once you have acted.\n routing:\n kind: bind\n target: github.issue\n onUnmatched: spawn\n - name: mention\n event: chat.message.mentioned\n connection: slack\n optional: true\n where:\n $.chat.provider: slack\n $.auto.authored: false\n message: |\n {{message.author.userName}} mentioned you on Slack:\n\n {{message.text}}\n\n Channel: {{chat.channelId}}\n Thread: {{chat.threadId}}\n\n Reply in that thread with chat.send. If the user clearly links or asks\n about a GitHub issue, triage it. If required context is missing, ask for\n the issue link. Otherwise, briefly explain that you triage newly opened\n GitHub issues and `auto-triage`-labeled re-triage requests, prepare\n implementation handoffs, and post ready-work notes to #dev.\n routing:\n kind: spawn\n'
38815
+ },
38816
+ {
38817
+ path: "fragments/environments/agent-runtime.yaml",
38818
+ content: "# Source: https://www.auto.sh/api/v1/templates/%40auto/issue-triage/1.7.0/fragments/environments/agent-runtime.yaml\nharness: claude-code\nenvironment:\n name: agent-runtime\n image:\n kind: preset\n name: node24\n resources:\n memoryMB: 8192\n"
38819
+ }
38820
+ ]
38780
38821
  }
38781
38822
  ],
38782
38823
  "@auto/janitor": [
@@ -60250,7 +60291,7 @@ var init_hardcoded = __esm({
60250
60291
  "@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.",
60251
60292
  "@auto/inspector": "A root-cause investigator that reproduces unusual behavior, bisects it, and produces a case file before anyone changes the code.",
60252
60293
  "@auto/intern": "A low-cost GLM 5.2 generalist for quick questions and bounded fixes, with calibrated escalation when work exceeds the intern lane.",
60253
- "@auto/issue-triage": "Issue triage plus an implementation coder on a GitHub Issues or Linear substrate, with optional Slack reporting; deprecated -slack entrypoints keep the required-Slack behavior.",
60294
+ "@auto/issue-triage": "Issue triage plus an implementation coder on a GitHub Issues or Linear substrate, with optional connection-backed Linear and Slack intake.",
60254
60295
  "@auto/lead-engine": "A sourced lead researcher for webhook payloads, direct-session criteria, public web signals, and authorized provider-backed sources; -slack entrypoint for a sales-channel flow.",
60255
60296
  "@auto/janitor": "A scheduled repository hygiene specialist that sweeps stale branches, labels, TODOs, and artifact bloat through reviewable cleanup pull requests.",
60256
60297
  "@auto/onboarding": "Retired standalone onboarding guidance retained for exact-version compatibility.",
@@ -60826,11 +60867,11 @@ var init_catalog = __esm({
60826
60867
  template: "@auto/issue-triage",
60827
60868
  files: [
60828
60869
  {
60829
- subpath: "agents/issue-triage-linear.yaml",
60870
+ subpath: "agents/issue-triage-linear-slack.yaml",
60830
60871
  agentFileName: "issue-triage"
60831
60872
  },
60832
60873
  {
60833
- subpath: "agents/issue-coder-linear.yaml",
60874
+ subpath: "agents/issue-coder-linear-slack.yaml",
60834
60875
  agentFileName: "issue-coder"
60835
60876
  }
60836
60877
  ],
@@ -60839,7 +60880,7 @@ var init_catalog = __esm({
60839
60880
  avatarAsset: "triage.png",
60840
60881
  category: "operations",
60841
60882
  oneLiner: "Triages new issues into implementation-ready work, then hands them to a coder.",
60842
- description: "Works from Linear as the source of truth: triages issues labeled auto-triage, classifies and prioritizes them, and turns vague reports into implementation-ready work items handed to its issue-coder teammate, which opens PRs and reports back on the Linear issue. When the standard Slack connection is available, it also posts ready-work notes in #dev.",
60883
+ description: "Works from Linear when connected: triages issues labeled auto-triage, classifies and prioritizes them, and turns vague reports into implementation-ready work items handed to its issue-coder teammate, which opens PRs and reports back on the Linear issue. Optional Slack mentions provide a second intake path and ready-work notes in #dev.",
60843
60884
  harness: "claude-code",
60844
60885
  model: "claude-opus-4-8",
60845
60886
  triggers: [
@@ -60847,7 +60888,7 @@ var init_catalog = __esm({
60847
60888
  kind: "linear",
60848
60889
  title: "Issue intake",
60849
60890
  description: "Triages Linear issues when the auto-triage label is added at creation or later.",
60850
- availability: "core",
60891
+ availability: "optional",
60851
60892
  connection: "linear"
60852
60893
  },
60853
60894
  {
@@ -60858,9 +60899,9 @@ var init_catalog = __esm({
60858
60899
  connection: "slack"
60859
60900
  }
60860
60901
  ],
60861
- requires: ["linear"],
60862
- optionalConnections: ["slack"],
60863
- variables: ["repoFullName", "linearConnection"],
60902
+ requires: [],
60903
+ optionalConnections: ["linear", "slack"],
60904
+ variables: ["repoFullName"],
60864
60905
  substrate: { role: "issue-triage", id: "linear", label: "Linear" }
60865
60906
  },
60866
60907
  {
@@ -61969,7 +62010,7 @@ var init_temporal = __esm({
61969
62010
  });
61970
62011
 
61971
62012
  // ../../packages/schemas/src/usage.ts
61972
- var UsageHarnessSchema, ModelCredentialFundingSourceSchema, NonNegativeTokenCountSchema, NonNegativeUsdSchema2, UsageEventSchema, UsageEventRecordSchema, UsageTotalsSchema, SessionUsageModelSummarySchema, SessionUsageResponseSchema, PROJECT_USAGE_RANGE_KEYS, ProjectUsageRangeKeySchema, UtcDateSchema, ProjectUsageTotalsSchema, ProjectUsageAgentSummarySchema, ProjectUsageModelSummarySchema, ProjectUsageDayAgentSliceSchema, ProjectUsageDayModelSliceSchema, ProjectUsageDayPointSchema, ProjectUsageResponseSchema;
62013
+ var UsageHarnessSchema, ModelCredentialFundingSourceSchema, NonNegativeTokenCountSchema, NonNegativeUsdSchema2, UsageEventSchema, UsageEventRecordSchema, UsageTotalsSchema, SessionUsageModelSummarySchema, UsageFundingSummarySchema, SessionModelFundingStateSchema, SessionUsageResponseSchema, PROJECT_USAGE_RANGE_KEYS, ProjectUsageRangeKeySchema, UtcDateSchema, ProjectUsageTotalsSchema, ProjectUsageAgentSummarySchema, ProjectUsageModelSummarySchema, ProjectUsageSubscriptionSummarySchema, ProjectUsageSubscriptionSliceSchema, ProjectUsageDayAgentSliceSchema, ProjectUsageDayModelSliceSchema, ProjectUsageDayPointSchema, ProjectUsageResponseSchema;
61973
62014
  var init_usage = __esm({
61974
62015
  "../../packages/schemas/src/usage.ts"() {
61975
62016
  "use strict";
@@ -62041,10 +62082,20 @@ var init_usage = __esm({
62041
62082
  SessionUsageModelSummarySchema = UsageTotalsSchema.extend({
62042
62083
  model: external_exports.string().trim().min(1)
62043
62084
  });
62085
+ UsageFundingSummarySchema = UsageTotalsSchema.extend({
62086
+ fundingSource: ModelCredentialFundingSourceSchema,
62087
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
62088
+ });
62089
+ SessionModelFundingStateSchema = external_exports.object({
62090
+ fundingSource: ModelCredentialFundingSourceSchema,
62091
+ provider: external_exports.string().trim().min(1)
62092
+ });
62044
62093
  SessionUsageResponseSchema = external_exports.object({
62045
62094
  sessionId: SessionIdSchema,
62046
62095
  totals: UsageTotalsSchema,
62047
62096
  models: external_exports.array(SessionUsageModelSummarySchema),
62097
+ byFundingSource: external_exports.array(UsageFundingSummarySchema),
62098
+ funding: SessionModelFundingStateSchema.nullable(),
62048
62099
  firstUsageAt: external_exports.string().datetime().nullable(),
62049
62100
  lastUsageAt: external_exports.string().datetime().nullable()
62050
62101
  });
@@ -62068,6 +62119,16 @@ var init_usage = __esm({
62068
62119
  ProjectUsageModelSummarySchema = UsageTotalsSchema.extend({
62069
62120
  model: external_exports.string().trim().min(1)
62070
62121
  });
62122
+ ProjectUsageSubscriptionSummarySchema = UsageTotalsSchema.extend({
62123
+ userSubscriptionId: UserSubscriptionCredentialIdSchema.nullable(),
62124
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
62125
+ });
62126
+ ProjectUsageSubscriptionSliceSchema = external_exports.object({
62127
+ totals: UsageTotalsSchema.extend({
62128
+ coveredInferenceCostUsd: NonNegativeUsdSchema2
62129
+ }),
62130
+ subscriptions: external_exports.array(ProjectUsageSubscriptionSummarySchema)
62131
+ });
62071
62132
  ProjectUsageDayAgentSliceSchema = external_exports.object({
62072
62133
  agentResourceId: external_exports.string().trim().min(1),
62073
62134
  billedCostUsd: NonNegativeUsdSchema2
@@ -62092,6 +62153,8 @@ var init_usage = __esm({
62092
62153
  totals: ProjectUsageTotalsSchema,
62093
62154
  byAgent: external_exports.array(ProjectUsageAgentSummarySchema),
62094
62155
  byModel: external_exports.array(ProjectUsageModelSummarySchema),
62156
+ byFundingSource: external_exports.array(UsageFundingSummarySchema),
62157
+ subscriptionUsage: ProjectUsageSubscriptionSliceSchema,
62095
62158
  daily: external_exports.array(ProjectUsageDayPointSchema)
62096
62159
  });
62097
62160
  }
@@ -65055,7 +65118,7 @@ var init_package = __esm({
65055
65118
  "package.json"() {
65056
65119
  package_default = {
65057
65120
  name: "@autohq/cli",
65058
- version: "0.1.495",
65121
+ version: "0.1.497",
65059
65122
  license: "SEE LICENSE IN README.md",
65060
65123
  publishConfig: {
65061
65124
  access: "public"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autohq/cli",
3
- "version": "0.1.495",
3
+ "version": "0.1.497",
4
4
  "license": "SEE LICENSE IN README.md",
5
5
  "publishConfig": {
6
6
  "access": "public"