Skip to content

AGT Studio: package + CI scaffold + CODEOWNERS #2789

@Ricky-G

Description

@Ricky-G

Tracker: #2729
Epic: 1a (Studio package + ownership + CI scaffold)
ADR reference: docs/adr/0028-agt-studio-unified-ui.md
Template: Feature request

Filing metadata — Title: AGT Studio: package + CI scaffold + CODEOWNERS. Milestone: AGT Studio. Labels: enhancement, agent-governance, architecture, ci/cd. (Note: there is no existing label for the new agent-governance-studio package. Either reuse agent-governance or coordinate with maintainers to add a dedicated label when this issue is filed; the umbrella does not mandate a specific label here.)

Summary

Stand up the new top-level agent-governance-studio/ package: directory layout, package manifests (Python and npm), empty subdirs for cli/, server/, web/, CI scaffold (lint/test/build per language), CODEOWNERS entries, and MIT license headers throughout. No functional UI yet. This issue exists so Epics 1b (sidecar implementation), 1c (SPA shell), and 1d (end-to-end slice) have a real home to land into without each PR having to set up the package from scratch.

Per the umbrella's "Locked-in decisions" table (row 2), the canonical names are:

  • Directory: agent-governance-studio/
  • PyPI: agent-governance-studio
  • Python import: agent_governance_studio
  • npm: @microsoft/agent-governance-studio

Scope

In scope

  • New top-level directory agent-governance-studio/ with:
    • cli/ (Python entry-point plugin: registers agt ui and agt serve via the agt.commands entry-point group; no functional commands in this PR, just registration stubs that print "not yet implemented" until Epic 1b and 1d land).
    • server/ (Python sidecar; empty per-Epic 1b).
    • web/ (TypeScript SPA; empty per-Epic 1c).
    • pyproject.toml with project.name = "agent-governance-studio" and source layout under src/agent_governance_studio/, per umbrella decision Adding Microsoft SECURITY.MD #2 (PyPI agent-governance-studio, Python import agent_governance_studio). Existing in-repo precedent is mixed (some packages use the hyphenated project.name, some use the underscored one); follow the umbrella verbatim and let the maintainer reconcile if there is a stronger AGENTS.md guidance to follow. License uses license = {text = "MIT"} table form per repo AGENTS.md.
    • web/package.json for @microsoft/agent-governance-studio (npm scope @microsoft per repo conventions).
    • web/tsconfig.json, web/.eslintrc (or flat config), web/vite.config.ts. Per the umbrella decision This repo is missing a LICENSE file #1: React 18 + TypeScript + Vite + TanStack Query + Tailwind. Stub index.html + a one-component "Hello, Studio" page so vite build produces something. No routing, no data fetching.
    • README.md describing the package, the Epic 1a scope (scaffold only), and where the implementation lives (link back to umbrella and ADR 0028).
    • MIT license headers on every new source file per repo AGENTS.md (Python # Copyright, TS/JS // Copyright, shell # Copyright).
  • CODEOWNERS entries:
  • CI scaffold:
    • Python: lint (ruff check --select E,F,W --ignore E501) + test (pytest) + build (python -m build). Path-filtered to agent-governance-studio/** per repo CI optimization rule.
    • TypeScript: lint (eslint) + test (vitest or jest, match repo norms) + build (vite build). Path-filtered to agent-governance-studio/web/**.
    • Both jobs use SHA-pinned actions, exact-version pip install / npm install, top-level permissions: contents: read per repo AGENTS.md security rules.
  • Dependency pinning per repo "Supply Chain Security" rules:
    • Python: pin in pyproject.toml with >=x.y.z,<x.y+1.0; CI scripts use ==.
    • TypeScript: exact versions in package.json (no ^ or ~); commit package-lock.json.
  • .gitignore additions for web/node_modules, web/dist, Python build artifacts.

Out of scope

  • Any functional CLI command beyond stub registration → Epics 1b and 1d.
  • The agt serve sidecar implementation → Epic 1b.
  • The Engine API client generation from OpenAPI → Epic 1c.
  • The transport abstraction (HTTP + postMessage) → Epic 1c.
  • The actual SPA routes, pages, data fetching → Epic 1c and Epic 2 onwards.
  • The read-only invariant CI test → Epic 1d (needs the generated client to exist).
  • The publishing pipeline → out of scope for this scaffold; published via the existing ESRP pipeline once the package has shippable content.
  • Telemetry, theming, i18n — all explicitly out of scope per ADR 0028.

Background / codebase grounding

  • CLI host already exists: agent-governance-python/agent-compliance/src/agent_compliance/cli/agt.py defines AgtGroup (Click) with entry-point group agt.commands. The Studio CLI plugin must register against this group.
  • Layout precedent: other top-level packages live under agent-governance-python/ (e.g. agent-mesh, agent-os, agent-hypervisor). The umbrella decision Adding Microsoft SECURITY.MD #2 places Studio as a new top-level agent-governance-studio/ directly under the repo root (matching the standalone language SDK convention in repo AGENTS.md), not under agent-governance-python/. Confirm with maintainers if this differs from prior PEP-625-compliant package layout; the umbrella's wording is the binding decision.
  • npm precedent: other TS packages use the @microsoft scope (e.g. @microsoft/agent-governance-sdk).
  • CODEOWNERS file is at the repo root.

Dependencies

Deliverables

  • New directory tree as described above.
  • pyproject.toml, package.json, tsconfig.json, vite.config.ts, lint configs, test configs.
  • CI workflow file (new or extension of the existing repo CI matrix).
  • CODEOWNERS entry.
  • README.md linking back to umbrella + ADR 0028.
  • A passing initial CI run: lint clean, pytest runs (even if no tests yet, must not error), vite build produces a dist/ with the stub page.

Acceptance criteria

  • Directory and file layout matches the umbrella's package layout decision (row 2 of "Locked-in decisions").
  • pip install -e agent-governance-studio/ works in a fresh venv and registers agt ui and agt serve (stubs printing "not yet implemented").
  • npm install + vite build inside agent-governance-studio/web/ produces a working dist with the stub page.
  • CI jobs pass on a sample PR. Path filters prevent unrelated changes from triggering Studio CI.
  • All security rules from repo AGENTS.md met: SHA-pinned actions, top-level contents: read, no inline secrets, MIT license headers, file encoding="utf-8" on any text reads, trailing newlines on all source files.
  • CODEOWNERS block landed and validated.
  • README accurately describes "scaffold only, no functional UI" and links to umbrella + ADR 0028 + the threat-model doc placeholder.
  • Working agreements satisfied: linked from umbrella, milestone, labels, --body-file, rendered-description verification.

Notes for picking this up

  • This is intentionally a small, mechanical PR. Resist the temptation to bundle Epic 1b or 1c content into it — that violates the umbrella's sliced-epics principle (separate functional-UI risk from new-package and new-CI risk).
  • Get the package names exactly right on first try; renaming a published Python or npm package after the fact is painful. Cross-check against umbrella decision Adding Microsoft SECURITY.MD #2 verbatim.
  • The CODEOWNERS entry is the one place where you must coordinate with maintainers before the PR opens. Umbrella decision This repo is missing important files #3 says the names are filled in by this PR; do not invent owners.
  • The CI scaffold is the most security-reviewed part of this PR. Apply every rule from repo AGENTS.md "Code Scanning Prevention" section, especially: SHA-pinning of every action, permissions: contents: read at workflow top level, exact version pins on every pip install and npm install call inside CI.
  • Per the umbrella's "Supply chain security" alignment: use exact-version dependency pinning in the manifests, commit lockfiles, and respect the 7-day rule for any new transitive dep.
  • Working agreements for child issues apply: see umbrella section "Working agreements for issues filed under this tracker".

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent-governanceagent-governance packagearchitectureArchitecture and package boundary changesci/cdCI/CD and workflowsenhancementNew feature or requestneeds-review:MEDIUMContributor check flagged MEDIUM risk

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions