chore: sync from agents-private#3157
Conversation
These three files duplicated agents-private's root-level workflows: public/agents/.github/workflows/vercel-production.yml public/agents/.github/workflows/preview-environments.yml public/agents/.github/workflows/preview-janitor.yml Vercel projects (agents-api, agents-manage-ui, agents-docs) are owned and deployed from agents-private. Running duplicate workflows on the copybara-mirrored inkeep/agents repo means every sync fires BOTH repos' workflows against the same Vercel projects — wasted CI minutes at best, race-condition deploys at worst (both repos carry VERCEL_PROJECT_ID secrets targeting the same projects). The agents-private root-level replacements are: .github/workflows/public-agents-vercel-production.yml .github/workflows/public-agents-preview-environments.yml .github/workflows/public-agents-preview-janitor.yml Under the new release-split architecture (PR #144), the public mirror's only CI responsibility is the npm publish step in release.yml. Deleting these three keeps that scope clean. Copybara will propagate the deletions to inkeep/agents on next sync — the origin_files glob covers public/agents/** with no exclude for these filenames, so their disappearance from the source will delete them from the destination. GitOrigin-RevId: 2fa1f228c728dadf17bedbae88d776a11a8e127b
* Fix Public Mirror Sync: auto-approve sync PRs + handle stuck PRs
Problem observed today: every push to main for the last ~18 hours failed
the Public Mirror Sync workflow with
Failed to push to inkeep/agents [HEAD:refs/heads/copybara/sync],
because local/origin history is behind destination
Root cause is two-part:
1. inkeep/agents `main` branch protection was tightened to require one
approval on every PR (require_last_push_approval=true). Sync PRs
authored by the inkeep-oss-sync app are never approved, so they sit
BLOCKED with auto-merge enabled but no approver. Bypass actor status
on the ruleset does NOT propagate through GitHub's auto-merge path.
2. Once one sync PR is stuck open, copybara on every subsequent agents-
private push tries to push new commits to `copybara/sync` but the
branch has diverging history from our local generation, so the push
is rejected. The existing cleanup step explicitly leaves the branch
alone while a sync PR is open, so the workflow wedges indefinitely.
Fix:
- Add `public/agents/.github/workflows/auto-approve-sync.yml`. Copybara
mirrors files under `public/agents/**` into inkeep/agents, so this
workflow ends up at `.github/workflows/auto-approve-sync.yml` on the
public repo. It listens on pull_request_target for PRs authored by
inkeep-oss-sync[bot] against the copybara/sync head ref and posts an
approving review from github-actions[bot]. Handles the synchronize
event too so the approval is refreshed after every copybara push
(require_last_push_approval dismisses prior approvals on new commits).
- Rework the "Clean up stale copybara/sync branch" step into a proper
reconciliation step. Three cases now handled:
(a) previous sync PR merged (squashed) — delete the stale branch
(b) open sync PR older than STALE_PR_HOURS (default 2h) — close
the PR and delete the branch so this run opens a fresh one
with all accumulated changes
(c) open sync PR recent — leave as-is; copybara appends commits
Staff-engineer framing: (1) fixes the approval gap at the source
(inkeep/agents) so no human is in the loop for routine syncs, while
(2) ensures the agents-private sync workflow self-heals if the approval
path ever breaks again (bot outage, policy tightening, etc.) instead
of silently wedging.
Bootstrap: PR #3150 (the currently-stuck sync PR) was manually approved
and enqueued to unblock today. Once this PR merges to agents-private
and the next sync lands the auto-approve workflow on inkeep/agents,
subsequent syncs will no longer need manual approval.
* Address review: harden reconcile error handling, elevate warnings, add timeout
Pullfrog + Claude bot review on #150:
- Separate "gh pr list failed" from "no open PR found" in the reconcile
step. A silent API failure previously fell through to the branch-
existence block and could delete the branch of a live PR. Now we exit
early with ::warning:: and skip reconciliation for this run (Copybara
may still succeed if the branch state is clean).
- Remove the `exit 0` after closing a stale PR so execution falls through
to the branch-existence fallback. If the DELETE of copybara/sync fails
on the primary path, the fallback block gets a second attempt.
- Elevate all cleanup/failure `|| echo` fallbacks to ::warning::
annotations so operators see them in the workflow summary instead of
buried in stdout.
- Replace stale comment on the `gh pr merge` call. The oss-sync app's
bypass-actor status does NOT propagate through auto-merge (that's the
whole reason auto-approve-sync.yml now exists). Document the real
mechanism.
- Add `timeout-minutes: 5` to the approve job in auto-approve-sync.yml.
GitOrigin-RevId: 9dcc4f2f123f531a6c303cb8f43a4d096384c736
…n env var (#140) Same class of bug as #137 (chat-to-edit postinstall), but shipped in the customer-facing template. Every downstream user who scaffolds this template and deploys to Vercel hits the same ambient postinstall landmine. Background: create-agents-template/scripts/postinstall.ts ran if (process.env.VERCEL === '1' && !skip) { execSync('inkeep dev --export --output-dir ./apps/manage-ui', ...) execSync('pnpm -C apps/manage-ui install ...', ...) } The gate `VERCEL === '1'` is true on every Vercel build anywhere. Today the template only has one Vercel target (apps/agents-api), so the gate happened to correlate with the intended context. But: 1. Any customer who adds a second Vercel project targeting a different app (e.g. apps/mcp) silently fires the export, which assumes ./apps/manage-ui exists and `inkeep` is on PATH - neither is guaranteed for non-agents-api deploys. 2. Any Vercel deploy that installs with --production skips devDeps. `@inkeep/agents-cli` (which provides the `inkeep` CLI) is a devDep, so the postinstall would crash. 3. Replicates the exact failure mode that broke inkeep-cloud-mcp production in the main monorepo (#137). Fix: narrow to an explicit opt-in env var INKEEP_QUICKSTART_EXPORT=1 set only by the apps/agents-api vercel.json installCommand. The postinstall requires BOTH VERCEL=1 AND INKEEP_QUICKSTART_EXPORT=1 before running. Files: - scripts/postinstall.ts: require INKEEP_QUICKSTART_EXPORT=1 gate - apps/agents-api/vercel.json: prepend INKEEP_QUICKSTART_EXPORT=1 to existing installCommand Backward-compat impact: existing Vercel projects customers created from prior template versions will skip the export on their next deploy until they update their vercel.json (or re-scaffold from the template). They have two paths: - Pull in this template change (agents-api/vercel.json now carries the var) - Manually add INKEEP_QUICKSTART_EXPORT=1 to their installCommand Both recover cleanly. Existing apps/manage-ui exports from prior deploys remain on disk; the only loss is the refresh on the next deploy, which is repaired by either of the above actions. GitOrigin-RevId: a5fc5646e7fb2ae2c6f81cdc34453ed89d8191f9
* chore(ci): clean up stale monorepo-migration artifacts - Delete public/agents/.github/workflows/coverage.yml.disabled. The workflow references package paths (execution-api, management-api, agent-builder) that no longer exist post-monorepo-migration, so it couldn't be re-enabled as-is. Also delete the companion doc public/agents/agents-docs/CI_SETUP.md, which was framed entirely around this workflow. Drop the stale row in public/agents/.agents/skills/internal-surface-areas/SKILL.md. - Add *.disabled to the copybara manifest exclude list so any future dead workflow files don't silently leak into the public mirror. Regenerated public-agents.bara.sky from the manifest. - Remove the dead chat-to-edit branch trigger from both public/agents/.github/workflows/release.yml and .github/workflows/public-agents-version-packages.yml. The branch returns 404 on both inkeep/agents-private and inkeep/agents. Out of scope (investigated, confirmed load-bearing): the agents-cli/** and agents-api/** path filters on public release.yml stay - both exist as top-level dirs on the public inkeep/agents repo (hoisted layout) and removing them would skip npm publishes for CLI/API-only changes. * Revert chat-to-edit branch removal (load-bearing) chat-to-edit branch on public inkeep/agents drives a dedicated snapshot publish step at public/agents/.github/workflows/release.yml lines 109-117 (pnpm changeset version --snapshot chat-to-edit). The branch returning 404 on both repos just means nobody has pushed to it right now; it's created on-demand for dev snapshot publishes. Keep the trigger in both release.yml and public-agents-version-packages.yml. GitOrigin-RevId: 5de85ee7359c4033fa2d3b7cd69910c57e1070ac
* fix(preview): wire SigNoz to PR preview environments Preview PR deployments had broken tracing: the manage-ui /api/traces proxy dropped the bypass secret so SigNoz health checks 401'd, and neither the Vercel projects nor agents-api had SIGNOZ_URL / otel exporter config. Adds a shared-observability Railway stack (signoz + otel-collector + clickhouse) and injects the endpoints + JWT-format API key at preview env provisioning time. - upsert-vercel-preview-env.sh: accept PREVIEW_SIGNOZ_URL / PREVIEW_SIGNOZ_API_KEY / PREVIEW_SIGNOZ_INGESTION_KEY / PREVIEW_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT and upsert into both Vercel projects when set. - public-agents-preview-environments.yml: forward the new secrets into the upsert step. - agents-api signoz.ts: support JWT-format SIGNOZ_API_KEY via Authorization: Bearer (the shared preview instance exposes a rotating refresh token, not a PAT). Production PATs still go through the SIGNOZ-API-KEY header. - agents-manage-ui /api/traces: forward the manage-api bypass secret so SigNoz proxy calls authenticate through to agents-api. * fix(preview): export OTLP traces without requiring ingestion key Self-hosted SigNoz collector accepts unauthenticated OTLP, so gating OTEL_EXPORTER_OTLP_TRACES_ENDPOINT on PREVIEW_SIGNOZ_INGESTION_KEY was skipping trace export entirely. Split the guards, also wire OTLP env vars on the manage-ui project (which emits traces too) and add OTEL_RESOURCE_ATTRIBUTES so preview spans are filterable by PR branch. * refactor: address PR review polish items - signoz.ts: document why the 'eyJ' prefix safely discriminates JWT refresh tokens from SigNoz PATs (preview-stack workaround for broken v0.119 enterprise PAT endpoint). - traces/route.ts GET handler: reuse extractRequestContext instead of duplicating cookie + bypass-secret header construction. GitOrigin-RevId: 942b6298a47afca1c49c3ae06fb10bce04f4f27f
* Move entitlement lock query to DAL, remove /auth/ exclusion from boundary check * style: auto-format with biome --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> GitOrigin-RevId: 6afc2828e2b2bd136280daece631469d44fafe39
* feat(apps): add quick actions editor to support_copilot config Adds quickActions schema to agents-core, persists the field through the apps PATCH route, and introduces a drag-and-drop quick actions section in the support_copilot app form. * style: auto-format with biome * fix(apps): address review feedback on support_copilot quick actions - Add max length constraints (label: 100, prompt: 4000, group: 100) in both the agents-core schema and the manage-ui form validation. - Disable the "Add group" button when the last group has no name, so users can't stack empty groups. - Add screen-reader announcements to both the group-level and action-level DndContexts. - Fix pre-existing a11y lint errors (noLabelWithoutControl, noStaticElementInteractions) by switching the action popover to FormLabel and moving keyboard shortcuts onto the inputs themselves. * chore: sync public/agents lockfile for @dnd-kit deps The initial commit only regenerated the root pnpm-lock.yaml. Vercel builds from public/agents/ which uses its own lockfile, so the @dnd-kit/* deps added to agents-manage-ui/package.json must be present there too or Vercel fails with ERR_PNPM_OUTDATED_LOCKFILE. * chore(apps): drop unused SupportCopilotQuickActionFormInput type Only the group-level type is consumed (app-update-form.tsx). The single-action form type was exported but never imported, flagged by knip in CI. * test(api): regenerate openapi snapshot for SupportCopilotQuickAction schemas Adds the new SupportCopilotQuickAction and SupportCopilotQuickActionGroup schema entries (with min/max length constraints) and the quickActions field on SupportCopilotConfig that were introduced for the quick-actions editor in agents-manage-ui. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> GitOrigin-RevId: 32bce4fd36e8dd4ae12a8ab2ac3607ea29fdd2f1
🦋 Changeset detectedLatest commit: 6b22a72 The changes in this PR will be included in the next version bump. This PR includes changesets to release 10 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
|
Auto-closed by public-mirror-sync: PR was open for 4h and blocking new syncs. A fresh PR will be opened with accumulated changes from agents-private. |
…#171) * fix: approve sync PRs from source side, drop target-repo auto-approve Moves copybara sync PR approval into public-mirror-sync.yml on agents-private using the INTERNAL_CI_APP token. Deletes the target-repo auto-approve-sync.yml workflow it replaces. Background PR #150 introduced auto-approve-sync.yml on the public tree to satisfy the required-approval rule that blocks copybara sync PRs on inkeep/agents. That design has a bootstrap problem: pull_request_target evaluates workflows from the target branch, so the very PR that first mirrors auto-approve-sync.yml to inkeep/agents/main cannot auto-approve itself. inkeep/agents PR #3157 is stuck in exactly that state, and because copybara/sync is blocked by that stuck PR, subsequent mirror runs on agents-private are failing at "Run agents mirror". Fix Approve from the source side instead. After public-mirror-sync.yml creates or updates the sync PR and enables auto-merge, a new step mints a second app token from INTERNAL_CI_APP (a different identity from inkeep-oss-sync, since GitHub blocks self-approval) and posts an approving review. The approval is scoped to the current head SHA and re-runs on every sync, which satisfies require_last_push_approval=true. - .github/workflows/public-mirror-sync.yml Adds Generate approver token step and Approve sync PR step. Skips re-approval when an approval already stands on the current head SHA. - public/agents/.github/workflows/auto-approve-sync.yml Deleted; replaced by the source-side step above. Prereq to verify once: INTERNAL_CI_APP is installed on inkeep/agents with Pull requests: Read and write. The app already powers Version Packages and release-handler paths that write to inkeep/agents, so the install is almost certainly already in place. * docs: update CI.md and runbook to reflect source-side sync approval Review feedback on #171: CI.md and CI_RUNBOOK.md still pointed at the deleted public/agents/.github/workflows/auto-approve-sync.yml. - CI.md: drop the row for auto-approve-sync.yml in the public workflows table; in the public/private parity table, replace the old row with one explaining approval now comes from public-mirror-sync.yml on the source side; update the OSS_SYNC_APP secrets row to drop "auto-approve sync" and add Copybara sync PR approval to INTERNAL_CI_APP usage. - CI_RUNBOOK.md: rewrite the "Sync PR on public repo is stuck open" entry to point operators at the Approve sync PR step and INTERNAL_CI_APP app installation instead of the deleted workflow. GitOrigin-RevId: 51edfa6a3a1e0863ba99d8498efad88c5dec1f06
* Delete duplicate Vercel workflows from public/agents (inkeep#152) These three files duplicated agents-private's root-level workflows: public/agents/.github/workflows/vercel-production.yml public/agents/.github/workflows/preview-environments.yml public/agents/.github/workflows/preview-janitor.yml Vercel projects (agents-api, agents-manage-ui, agents-docs) are owned and deployed from agents-private. Running duplicate workflows on the copybara-mirrored inkeep/agents repo means every sync fires BOTH repos' workflows against the same Vercel projects — wasted CI minutes at best, race-condition deploys at worst (both repos carry VERCEL_PROJECT_ID secrets targeting the same projects). The agents-private root-level replacements are: .github/workflows/public-agents-vercel-production.yml .github/workflows/public-agents-preview-environments.yml .github/workflows/public-agents-preview-janitor.yml Under the new release-split architecture (PR inkeep#144), the public mirror's only CI responsibility is the npm publish step in release.yml. Deleting these three keeps that scope clean. Copybara will propagate the deletions to inkeep/agents on next sync — the origin_files glob covers public/agents/** with no exclude for these filenames, so their disappearance from the source will delete them from the destination. GitOrigin-RevId: 2fa1f228c728dadf17bedbae88d776a11a8e127b * Fix Public Mirror Sync: auto-approve sync PRs + handle stuck PRs (inkeep#150) * Fix Public Mirror Sync: auto-approve sync PRs + handle stuck PRs Problem observed today: every push to main for the last ~18 hours failed the Public Mirror Sync workflow with Failed to push to inkeep/agents [HEAD:refs/heads/copybara/sync], because local/origin history is behind destination Root cause is two-part: 1. inkeep/agents `main` branch protection was tightened to require one approval on every PR (require_last_push_approval=true). Sync PRs authored by the inkeep-oss-sync app are never approved, so they sit BLOCKED with auto-merge enabled but no approver. Bypass actor status on the ruleset does NOT propagate through GitHub's auto-merge path. 2. Once one sync PR is stuck open, copybara on every subsequent agents- private push tries to push new commits to `copybara/sync` but the branch has diverging history from our local generation, so the push is rejected. The existing cleanup step explicitly leaves the branch alone while a sync PR is open, so the workflow wedges indefinitely. Fix: - Add `public/agents/.github/workflows/auto-approve-sync.yml`. Copybara mirrors files under `public/agents/**` into inkeep/agents, so this workflow ends up at `.github/workflows/auto-approve-sync.yml` on the public repo. It listens on pull_request_target for PRs authored by inkeep-oss-sync[bot] against the copybara/sync head ref and posts an approving review from github-actions[bot]. Handles the synchronize event too so the approval is refreshed after every copybara push (require_last_push_approval dismisses prior approvals on new commits). - Rework the "Clean up stale copybara/sync branch" step into a proper reconciliation step. Three cases now handled: (a) previous sync PR merged (squashed) — delete the stale branch (b) open sync PR older than STALE_PR_HOURS (default 2h) — close the PR and delete the branch so this run opens a fresh one with all accumulated changes (c) open sync PR recent — leave as-is; copybara appends commits Staff-engineer framing: (1) fixes the approval gap at the source (inkeep/agents) so no human is in the loop for routine syncs, while (2) ensures the agents-private sync workflow self-heals if the approval path ever breaks again (bot outage, policy tightening, etc.) instead of silently wedging. Bootstrap: PR inkeep#3150 (the currently-stuck sync PR) was manually approved and enqueued to unblock today. Once this PR merges to agents-private and the next sync lands the auto-approve workflow on inkeep/agents, subsequent syncs will no longer need manual approval. * Address review: harden reconcile error handling, elevate warnings, add timeout Pullfrog + Claude bot review on inkeep#150: - Separate "gh pr list failed" from "no open PR found" in the reconcile step. A silent API failure previously fell through to the branch- existence block and could delete the branch of a live PR. Now we exit early with ::warning:: and skip reconciliation for this run (Copybara may still succeed if the branch state is clean). - Remove the `exit 0` after closing a stale PR so execution falls through to the branch-existence fallback. If the DELETE of copybara/sync fails on the primary path, the fallback block gets a second attempt. - Elevate all cleanup/failure `|| echo` fallbacks to ::warning:: annotations so operators see them in the workflow summary instead of buried in stdout. - Replace stale comment on the `gh pr merge` call. The oss-sync app's bypass-actor status does NOT propagate through auto-merge (that's the whole reason auto-approve-sync.yml now exists). Document the real mechanism. - Add `timeout-minutes: 5` to the approve job in auto-approve-sync.yml. GitOrigin-RevId: 9dcc4f2f123f531a6c303cb8f43a4d096384c736 * fix(create-agents-template): narrow postinstall VERCEL guard to opt-in env var (inkeep#140) Same class of bug as inkeep#137 (chat-to-edit postinstall), but shipped in the customer-facing template. Every downstream user who scaffolds this template and deploys to Vercel hits the same ambient postinstall landmine. Background: create-agents-template/scripts/postinstall.ts ran if (process.env.VERCEL === '1' && !skip) { execSync('inkeep dev --export --output-dir ./apps/manage-ui', ...) execSync('pnpm -C apps/manage-ui install ...', ...) } The gate `VERCEL === '1'` is true on every Vercel build anywhere. Today the template only has one Vercel target (apps/agents-api), so the gate happened to correlate with the intended context. But: 1. Any customer who adds a second Vercel project targeting a different app (e.g. apps/mcp) silently fires the export, which assumes ./apps/manage-ui exists and `inkeep` is on PATH - neither is guaranteed for non-agents-api deploys. 2. Any Vercel deploy that installs with --production skips devDeps. `@inkeep/agents-cli` (which provides the `inkeep` CLI) is a devDep, so the postinstall would crash. 3. Replicates the exact failure mode that broke inkeep-cloud-mcp production in the main monorepo (inkeep#137). Fix: narrow to an explicit opt-in env var INKEEP_QUICKSTART_EXPORT=1 set only by the apps/agents-api vercel.json installCommand. The postinstall requires BOTH VERCEL=1 AND INKEEP_QUICKSTART_EXPORT=1 before running. Files: - scripts/postinstall.ts: require INKEEP_QUICKSTART_EXPORT=1 gate - apps/agents-api/vercel.json: prepend INKEEP_QUICKSTART_EXPORT=1 to existing installCommand Backward-compat impact: existing Vercel projects customers created from prior template versions will skip the export on their next deploy until they update their vercel.json (or re-scaffold from the template). They have two paths: - Pull in this template change (agents-api/vercel.json now carries the var) - Manually add INKEEP_QUICKSTART_EXPORT=1 to their installCommand Both recover cleanly. Existing apps/manage-ui exports from prior deploys remain on disk; the only loss is the refresh on the next deploy, which is repaired by either of the above actions. GitOrigin-RevId: a5fc5646e7fb2ae2c6f81cdc34453ed89d8191f9 * chore(ci): clean up stale monorepo-migration artifacts (inkeep#157) * chore(ci): clean up stale monorepo-migration artifacts - Delete public/agents/.github/workflows/coverage.yml.disabled. The workflow references package paths (execution-api, management-api, agent-builder) that no longer exist post-monorepo-migration, so it couldn't be re-enabled as-is. Also delete the companion doc public/agents/agents-docs/CI_SETUP.md, which was framed entirely around this workflow. Drop the stale row in public/agents/.agents/skills/internal-surface-areas/SKILL.md. - Add *.disabled to the copybara manifest exclude list so any future dead workflow files don't silently leak into the public mirror. Regenerated public-agents.bara.sky from the manifest. - Remove the dead chat-to-edit branch trigger from both public/agents/.github/workflows/release.yml and .github/workflows/public-agents-version-packages.yml. The branch returns 404 on both inkeep/agents-private and inkeep/agents. Out of scope (investigated, confirmed load-bearing): the agents-cli/** and agents-api/** path filters on public release.yml stay - both exist as top-level dirs on the public inkeep/agents repo (hoisted layout) and removing them would skip npm publishes for CLI/API-only changes. * Revert chat-to-edit branch removal (load-bearing) chat-to-edit branch on public inkeep/agents drives a dedicated snapshot publish step at public/agents/.github/workflows/release.yml lines 109-117 (pnpm changeset version --snapshot chat-to-edit). The branch returning 404 on both repos just means nobody has pushed to it right now; it's created on-demand for dev snapshot publishes. Keep the trigger in both release.yml and public-agents-version-packages.yml. GitOrigin-RevId: 5de85ee7359c4033fa2d3b7cd69910c57e1070ac * fix(preview): wire SigNoz to PR preview environments (inkeep#158) * fix(preview): wire SigNoz to PR preview environments Preview PR deployments had broken tracing: the manage-ui /api/traces proxy dropped the bypass secret so SigNoz health checks 401'd, and neither the Vercel projects nor agents-api had SIGNOZ_URL / otel exporter config. Adds a shared-observability Railway stack (signoz + otel-collector + clickhouse) and injects the endpoints + JWT-format API key at preview env provisioning time. - upsert-vercel-preview-env.sh: accept PREVIEW_SIGNOZ_URL / PREVIEW_SIGNOZ_API_KEY / PREVIEW_SIGNOZ_INGESTION_KEY / PREVIEW_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT and upsert into both Vercel projects when set. - public-agents-preview-environments.yml: forward the new secrets into the upsert step. - agents-api signoz.ts: support JWT-format SIGNOZ_API_KEY via Authorization: Bearer (the shared preview instance exposes a rotating refresh token, not a PAT). Production PATs still go through the SIGNOZ-API-KEY header. - agents-manage-ui /api/traces: forward the manage-api bypass secret so SigNoz proxy calls authenticate through to agents-api. * fix(preview): export OTLP traces without requiring ingestion key Self-hosted SigNoz collector accepts unauthenticated OTLP, so gating OTEL_EXPORTER_OTLP_TRACES_ENDPOINT on PREVIEW_SIGNOZ_INGESTION_KEY was skipping trace export entirely. Split the guards, also wire OTLP env vars on the manage-ui project (which emits traces too) and add OTEL_RESOURCE_ATTRIBUTES so preview spans are filterable by PR branch. * refactor: address PR review polish items - signoz.ts: document why the 'eyJ' prefix safely discriminates JWT refresh tokens from SigNoz PATs (preview-stack workaround for broken v0.119 enterprise PAT endpoint). - traces/route.ts GET handler: reuse extractRequestContext instead of duplicating cookie + bypass-secret header construction. GitOrigin-RevId: 942b6298a47afca1c49c3ae06fb10bce04f4f27f * Move entitlement lock query to DAL layer (inkeep#113) * Move entitlement lock query to DAL, remove /auth/ exclusion from boundary check * style: auto-format with biome --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> GitOrigin-RevId: 6afc2828e2b2bd136280daece631469d44fafe39 * feat(apps): add quick actions editor to support_copilot config (inkeep#164) * feat(apps): add quick actions editor to support_copilot config Adds quickActions schema to agents-core, persists the field through the apps PATCH route, and introduces a drag-and-drop quick actions section in the support_copilot app form. * style: auto-format with biome * fix(apps): address review feedback on support_copilot quick actions - Add max length constraints (label: 100, prompt: 4000, group: 100) in both the agents-core schema and the manage-ui form validation. - Disable the "Add group" button when the last group has no name, so users can't stack empty groups. - Add screen-reader announcements to both the group-level and action-level DndContexts. - Fix pre-existing a11y lint errors (noLabelWithoutControl, noStaticElementInteractions) by switching the action popover to FormLabel and moving keyboard shortcuts onto the inputs themselves. * chore: sync public/agents lockfile for @dnd-kit deps The initial commit only regenerated the root pnpm-lock.yaml. Vercel builds from public/agents/ which uses its own lockfile, so the @dnd-kit/* deps added to agents-manage-ui/package.json must be present there too or Vercel fails with ERR_PNPM_OUTDATED_LOCKFILE. * chore(apps): drop unused SupportCopilotQuickActionFormInput type Only the group-level type is consumed (app-update-form.tsx). The single-action form type was exported but never imported, flagged by knip in CI. * test(api): regenerate openapi snapshot for SupportCopilotQuickAction schemas Adds the new SupportCopilotQuickAction and SupportCopilotQuickActionGroup schema entries (with min/max length constraints) and the quickActions field on SupportCopilotConfig that were introduced for the quick-actions editor in agents-manage-ui. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> GitOrigin-RevId: 32bce4fd36e8dd4ae12a8ab2ac3607ea29fdd2f1 * Agent conversation self-reference ({{$conversation.id}}) (inkeep#141) * spec: agent conversation self-reference Add SPEC.md with β-pure design (template-variable-only) for exposing {{$conversation.id}} as a prompt template variable. Includes evidence files (render-site inventory, A2A propagation trace, prior-art analysis, downstream-surfaces analysis, template-engine details), audit + design-challenge findings, and full changelog capturing the β→α→β-pure pivot history with rationale. Implementation follows in subsequent commits per tmp/ship/spec.json (US-001 through US-009). Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> * [US-001] Add TemplateEngine.renderPrompt() with PromptRenderOptions New static method resolves $-prefixed paths from runtime-provided builtins via dotted-path walk, falling through to the existing built-in dispatch on miss. render() signature and behavior are preserved byte-exact — only renderPrompt() accepts runtimeBuiltins, structurally enforcing the scope invariant that non-prompt render sites cannot opt into runtime builtins. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * [US-002] Wire {{$conversation.id}} resolution in buildSystemPrompt Switch both agent-prompt render sites in buildSystemPrompt from TemplateEngine.render() to TemplateEngine.renderPrompt() and narrow the contextConfigId guard so agents without contextConfig and without {{$conversation.*}} in their prompt see zero behavior change (G4). - Extend runtimeContext type literal to include metadata.taskId - Compute runtimeBuiltins from runtimeContext.metadata.conversationId, treating the 'default' sentinel and undefined as empty - Narrow !resolvedContext path: only render when prompt contains {{$conversation., with preserveUnresolved=true so non-$conversation literals are preserved - Add 6 integration tests covering contextConfig present/absent, G4 zero-drift regression, and 'default'/undefined sentinel cases Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * [US-003] A2A delegation propagation test — child resolves {{$conversation.id}} to parent's conversationId Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * [US-004] Negative-path tests — {{$conversation.id}} does not resolve at non-prompt render sites (D6) Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * [US-005] Recognize {{\$conversation.id}} in Monaco prompt editor lint + autocomplete Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * [US-006] Preserve \$-prefixed template variables through pull-v4 round-trip Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * [US-007] Customer-support cookbook demonstrates {{\$conversation.id}} in Zendesk write-back Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * [US-008] Docs: central template-variable reference page Adds public/agents/agents-docs/content/typescript-sdk/prompt-template-variables.mdx documenting all four prompt template variables: contextVariable.*, headers.*, $env.*, and $conversation.id. Registers the new page in typescript-sdk/meta.json navigation. Per SPEC §6 (Must) and §13 Deployment considerations — first centralization of this vocabulary. Promotes $env.* (currently undocumented) alongside the new $conversation.id variable so D3's "mirrors $env.* convention" rationale is grounded in published docs rather than invisible convention. Spec: public/agents/specs/2026-04-16-agent-conversation-self-reference/SPEC.md Co-Authored-By: Claude Opus 4.6 <[email protected]> * [US-009] Changesets: minor bumps for {{\$conversation.id}} Adds four changesets per SPEC §13 / §16 SCOPE: - agents-core: new TemplateEngine.renderPrompt() + PromptRenderOptions - agents-api: resolves {{\$conversation.id}} in agent prompts; A2A propagation - agents-cli: preserves \$-prefixed template variables through pull-v4 round-trip - agents-manage-ui: Monaco prompt editor lint + autocomplete recognition All four bump minor. Changeset config version-locks @inkeep/* packages together via "fixed" rule. agents-docs and cookbook-templates are in the ignore list; no changeset needed for them. Spec: public/agents/specs/2026-04-16-agent-conversation-self-reference/SPEC.md Co-Authored-By: Claude Opus 4.6 <[email protected]> * docs: trim prompt-template-variables.mdx to customer-facing variables only Drops the {{\$env.*}} section from the new reference page and shortens the overall page from 150 → ~65 lines. Page now covers three variables: contextVariable.*, headers.*, and \$conversation.*, linking out to the existing context-fetchers.mdx and headers.mdx pages for the first two and fully documenting {{\$conversation.id}} inline. Rationale — \$env.* has no traceable spec, PRD, or introducing PR: it shipped in the root commit of inkeep/agents (c39fdd0, 2025-09-05, initial squash) as pre-public scaffolding and was preserved without explanation by inkeep#818 (2025-10-24) when the other builtins were removed. Zero cookbook templates use it; zero customer-facing docs ever mentioned it. The draft docs page would have been the first act of promoting it to a customer feature — without the security/privacy review that warrants. Rendered env values are visible to the LLM and can flow through to tool arguments, assistant output, and traces. Keep the undocumented-but-functional status quo; address \$env.* product surface in a separate spec if warranted. Spec updates: - §6 Functional — "Must: docs page" rewritten: three variables, justification restated as single discovery surface + primary home for {{\$conversation.id}} - §9 Proposed solution — Docs bullet rewritten to match - §10 Decision log — adds D8 (LOCKED): intentional omission of \$env.* with full git-archaeology rationale - §16 SCOPE — agents-docs entry names exact file path and meta.json nav step - meta/_changelog.md — appends post-approval pivot entry explaining the trigger (PR inkeep#141 review), evidence, decision, and surgical edits D3 remains LOCKED on its own merits — dollar-prefix still prevents syntactic collision with user-defined contextVariable names regardless of whether \$env.* is a documented convention. Co-Authored-By: Claude Opus 4.6 <[email protected]> --------- Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]> GitOrigin-RevId: 52d0831b4f6e0c7790597c979f1711a5b1a4cd9c * Version Packages (agents) (inkeep#138) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> GitOrigin-RevId: 967594b0c065f561e566bc905512e45385cf7080 * fix: approve sync PRs from source side, drop target-repo auto-approve (inkeep#171) * fix: approve sync PRs from source side, drop target-repo auto-approve Moves copybara sync PR approval into public-mirror-sync.yml on agents-private using the INTERNAL_CI_APP token. Deletes the target-repo auto-approve-sync.yml workflow it replaces. Background PR inkeep#150 introduced auto-approve-sync.yml on the public tree to satisfy the required-approval rule that blocks copybara sync PRs on inkeep/agents. That design has a bootstrap problem: pull_request_target evaluates workflows from the target branch, so the very PR that first mirrors auto-approve-sync.yml to inkeep/agents/main cannot auto-approve itself. inkeep/agents PR inkeep#3157 is stuck in exactly that state, and because copybara/sync is blocked by that stuck PR, subsequent mirror runs on agents-private are failing at "Run agents mirror". Fix Approve from the source side instead. After public-mirror-sync.yml creates or updates the sync PR and enables auto-merge, a new step mints a second app token from INTERNAL_CI_APP (a different identity from inkeep-oss-sync, since GitHub blocks self-approval) and posts an approving review. The approval is scoped to the current head SHA and re-runs on every sync, which satisfies require_last_push_approval=true. - .github/workflows/public-mirror-sync.yml Adds Generate approver token step and Approve sync PR step. Skips re-approval when an approval already stands on the current head SHA. - public/agents/.github/workflows/auto-approve-sync.yml Deleted; replaced by the source-side step above. Prereq to verify once: INTERNAL_CI_APP is installed on inkeep/agents with Pull requests: Read and write. The app already powers Version Packages and release-handler paths that write to inkeep/agents, so the install is almost certainly already in place. * docs: update CI.md and runbook to reflect source-side sync approval Review feedback on inkeep#171: CI.md and CI_RUNBOOK.md still pointed at the deleted public/agents/.github/workflows/auto-approve-sync.yml. - CI.md: drop the row for auto-approve-sync.yml in the public workflows table; in the public/private parity table, replace the old row with one explaining approval now comes from public-mirror-sync.yml on the source side; update the OSS_SYNC_APP secrets row to drop "auto-approve sync" and add Copybara sync PR approval to INTERNAL_CI_APP usage. - CI_RUNBOOK.md: rewrite the "Sync PR on public repo is stuck open" entry to point operators at the Approve sync PR step and INTERNAL_CI_APP app installation instead of the deleted workflow. GitOrigin-RevId: 51edfa6a3a1e0863ba99d8498efad88c5dec1f06 --------- Co-authored-by: Varun Varahabhotla <[email protected]> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: omar-inkeep <[email protected]> Co-authored-by: tim-inkeep <[email protected]> Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]> Co-authored-by: inkeep-internal-ci[bot] <259778081+inkeep-internal-ci[bot]@users.noreply.github.com>
Automated sync from agents-private via Copybara mirror.