Shipped agent.md frontmatter hooks block is dead code: relative script paths, never scaffolded, not executed by any current host

未关闭 适合新手
#25 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
68/100
Issue 类型
重构
描述清晰度
基本清楚
活跃度
活跃
技术栈
github, powershell, shell
领域
cli, tooling

调研方向

从 plugins/modernize-java/com.github.copilot/agents/modernize-java.agent.md 开始,并结合 issue 中描述的 plugin payload 检查 hooks frontmatter。确认是否有任何随附的 hook carrier 或 script 提供这些命令;完成的标准是:定义不再宣传无效的 hooks,或者被引用的 scripts 已打包并使用有效的 install-root 路径。

由索引模型根据 Issue 内容生成。

描述

The hooks: frontmatter block in plugins/modernize-java/com.github.copilot/agents/modernize-java.agent.md is inherited from the VS Code extension era of this tooling. In the current plugin distribution it is dead code on every host, and the scripts it references are not provisioned anywhere.

What ships today (verbatim frontmatter block)

hooks:
  UserPromptSubmit:
    - type: command
      command: APPMOD_AGENT=modernize-java-upgrade bash "$APPMOD_HOOK_SCRIPTS_DIR/sendTelemetry.sh"
      windows: "powershell -ExecutionPolicy Bypass -NonInteractive -Command \"& (Join-Path $env:APPMOD_HOOK_SCRIPTS_DIR 'sendTelemetry.ps1') -AgentName modernize-java-upgrade\""
  SubagentStart:
    - type: command
      command: APPMOD_AGENT=modernize-java-upgrade bash "$APPMOD_HOOK_SCRIPTS_DIR/sendTelemetry.sh"
      windows: "powershell -ExecutionPolicy Bypass -NonInteractive -Command \"& (Join-Path $env:APPMOD_HOOK_SCRIPTS_DIR 'sendTelemetry.ps1') -AgentName modernize-java-upgrade\""
  SubagentStop:
    - type: command
      command: APPMOD_AGENT=modernize-java-upgrade bash "$APPMOD_HOOK_SCRIPTS_DIR/sendTelemetry.sh"
      windows: "powershell -ExecutionPolicy Bypass -NonInteractive -Command \"& (Join-Path $env:APPMOD_HOOK_SCRIPTS_DIR 'sendTelemetry.ps1') -AgentName modernize-java-upgrade\""
  ErrorOccurred:
    - type: command
      command: APPMOD_AGENT=modernize-java-upgrade bash "$APPMOD_HOOK_SCRIPTS_DIR/sendTelemetry.sh"
      windows: "powershell -ExecutionPolicy Bypass -NonInteractive -Command \"& (Join-Path $env:APPMOD_HOOK_SCRIPTS_DIR 'sendTelemetry.ps1') -AgentName modernize-java-upgrade\""
  PostToolUse:
    - type: command
      command: "bash .github/modernize/java-upgrade/hooks/scripts/recordToolUse.sh"
      windows: "powershell -NonInteractive -File .github/modernize/java-upgrade/hooks/scripts/recordToolUse.ps1"

Why the block is dead

  1. The Copilot CLI does not read it. The CLI's documented hook carriers are settings hooks.*, repo-level .github/hooks/*.json, user-level ~/.copilot/hooks/*.json, and plugin-level hooks/hooks.json — and this plugin ships no hooks/hooks.json. The frontmatter schema the CLI's runtime (checked against the shipped bytes of 1.0.83 and 1.0.86) parses for these definition files has no hooks field; unknown frontmatter fields are ignored.
  2. The referenced scripts do not exist. The plugin payload is three files — plugin.json, mcp.json, and the .md itself. Nothing in the repo, the plugin install, or the MCP package ever creates .github/modernize/java-upgrade/hooks/scripts/ in the workspace: in @microsoft/github-copilot-app-modernization-mcp-server@1.24.0, recordToolUse and the hook path occur only inside the package's own .agent.md templates, with no writer.
  3. The telemetry legs' variable is never set here. $APPMOD_HOOK_SCRIPTS_DIR is provided by the VS Code extension's hook environment, which is not part of this distribution, so the four sendTelemetry commands cannot resolve their scripts either.

Observed behavior

  • Plugin modernize-java@modernize-java v1.24.0, installed from this repo's marketplace (copilot plugin marketplace add microsoft/modernize-java, then copilot plugin install modernize-java@modernize-java): running a read+edit with a marker script planted at the exact hook path (both the .sh and the .ps1 leg) produced zero executions across 3 runs, while user-level hooks (~/.copilot/hooks/*.json) fired in the very same runs — session debug logs confirm the plugin's instructions were loaded and at least 3 tool uses completed per run (invoked with --agent modernize-java:modernize-java). A repo-level .github/hooks/postToolUse.json also executed once its documented opt-in was set. The hooks engine is fully live on the documented carriers; the frontmatter block is simply not one of them.
  • The shipped PostToolUse command run verbatim in a clean workspace exits 127 with no visible diagnostic anywhere: bash: .github/modernize/java-upgrade/hooks/scripts/recordToolUse.sh: No such file or directory.

Why this is worth cleaning up

  • Five hook events silently ignore-or-fail on every session; the block reads as if tool-usage telemetry were configured, but it has never recorded anything in this distribution.
  • If any host adds frontmatter hooks support, the shipped commands become live immediately — and they resolve their scripts relative to the session's working directory (the opened workspace), not the plugin's install root. A file committed to a repository at .github/modernize/java-upgrade/hooks/scripts/recordToolUse.sh would then be executed by the hook machinery on every tool use (the shipped command demonstrably executes a file planted at that relative path when run as-is; a copy placed only on PATH does not resolve). VS Code's experimental hooks support for custom chat participants already reads this exact frontmatter shape today, gated behind preview flags and workspace trust — so the gap between "ignored" and "live workspace-relative execution" is one host-side change.

Related: github/copilot-cli#3659 ("CLI cannot execute hooks shipped with plugins") covers the relative-path resolution problem on the documented JSON carrier; this issue is about the dead block shipped in this repo.

Suggested fix

Either of:

  • strip the hooks: block from the definition file (nothing in this distribution provisions the scripts it names), or
  • ship the hook scripts inside the plugin and reference them from the install root (${PLUGIN_ROOT}-style) instead of a workspace-relative path.

Environment: Windows 11, Copilot CLI 1.0.83 (runtime source checked at 1.0.83 and 1.0.86), plugin v1.24.0, repo at b02350da (2026-09-20).

主要语言
没有语言数据
星标
3
派生
0
平均合并
1 天 18 小时
30 天内合并 PR
1

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

microsoft/modernize-java 的其他 Issue

查看 microsoft/modernize-java 的全部 Issue

相似的 Issue

更多 CLI Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。