@akira-tl/forgerelay 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/mcp/server/workspace/runtime/workspace-open-presentation.js +2 -0
- package/dist/mcp/server/workspace/runtime/workspace-tools.js +2 -2
- package/dist/workspaces/resources/skills.js +1 -1
- package/docs/chatgpt-coding-workflow.md +12 -6
- package/docs/configuration.md +4 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,13 @@ All notable ForgeRelay changes are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.1.2] - 2026-09-11
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Clarified Capability discovery so Agents use only `open_workspace.capabilityCatalog` names with the `capability` gateway; semantic `capabilityFingerprint.capabilities` entries and Capability Guide descriptors are no longer presented as callable capability names.
|
|
12
|
+
- Changed Agent Skill collision precedence so a Project's `.agents/skills` definition wins over the same-named global `~/.agents/skills` definition, keeping Project-local workflow customizations authoritative.
|
|
13
|
+
|
|
7
14
|
## [1.1.1] - 2026-09-10
|
|
8
15
|
|
|
9
16
|
### Added
|
|
@@ -11,6 +11,7 @@ import { redactSkillDiagnosticPaths } from "../../core/schemas.js";
|
|
|
11
11
|
import { logToolCall, workspaceLogContext } from "../../core/tool-support.js";
|
|
12
12
|
import { buildExecutionShellContext } from "../../../server-instructions.js";
|
|
13
13
|
export const workspaceTaskUsageInstruction = "Use workspace.tasks proactively for work that spans multiple steps or sessions: create or update Tasks to preserve useful next steps and current state, and read its summary when resuming relevant unfinished work. Do not query it mechanically on every open_workspace call.";
|
|
14
|
+
export const capabilityDiscoveryInstruction = "For capability describe/run, use only names present in capabilityCatalog. capabilityFingerprint.capabilities is a semantic feature fingerprint, not a callable registry; capabilityGuides are documentation descriptors, not callable capabilities.";
|
|
14
15
|
export async function presentLocalWorkspaceOpen(options, input, contextData) {
|
|
15
16
|
const { config, forgerelayVersion: FORGERELAY_VERSION, workspaces, workspaceTasks, reviewCheckpoints, capabilityRegistry, subagentProviders, hooks, rememberWorkspacePanelState, } = options;
|
|
16
17
|
const { path, workspaceId, mode, baseRef, newWorktree, newWorkspace, context } = input;
|
|
@@ -98,6 +99,7 @@ export async function presentLocalWorkspaceOpen(options, input, contextData) {
|
|
|
98
99
|
const workspaceContextInstruction = "For later open_workspace calls, context=\"auto\" avoids repeating unchanged bootstrap context; use context=\"none\" when only the workspace handle/metadata is needed, or context=\"full\" to force a refresh.";
|
|
99
100
|
const workspaceManagementInstruction = [
|
|
100
101
|
"Use open_workspace(action=\"list\") for lightweight Workspace inventory. Use action=\"inspect\" with one known workspaceId for bounded read-only metadata without opening/resuming it. Explicitly open a Workspace before executing or mutating against it, and ask the user before close_workspace cleanup.",
|
|
102
|
+
capabilityDiscoveryInstruction,
|
|
101
103
|
capabilityCatalog.some((entry) => entry.name === "workspace.tasks")
|
|
102
104
|
? workspaceTaskUsageInstruction
|
|
103
105
|
: undefined,
|
|
@@ -57,14 +57,14 @@ export function registerWorkspaceAuxiliaryTools(options) {
|
|
|
57
57
|
});
|
|
58
58
|
registerAppTool(server, toolNames.capability, {
|
|
59
59
|
title: "Use optional capability",
|
|
60
|
-
description: "Describe or run one
|
|
60
|
+
description: "Describe or run one registered ForgeRelay capability. Only names present in open_workspace.capabilityCatalog are valid for describe/run. capabilityFingerprint.capabilities is a semantic feature fingerprint, not a callable registry, and capabilityGuides are documentation descriptors rather than callable capabilities. Use describe when the capability contract is unfamiliar, then read its advertised guide if needed. Run cannot invoke arbitrary shell commands, URLs, or methods.",
|
|
61
61
|
inputSchema: {
|
|
62
62
|
workspaceId: z.string().describe("Workspace identifier returned by open_workspace."),
|
|
63
63
|
member: z.string().optional().describe("Required for a Composite Workspace; explicit member name whose capability surface is used."),
|
|
64
64
|
name: z
|
|
65
65
|
.string()
|
|
66
66
|
.regex(/^[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)+$/)
|
|
67
|
-
.describe("Stable dotted capability name
|
|
67
|
+
.describe("Stable dotted capability name present in open_workspace.capabilityCatalog. Do not use semantic-only names from capabilityFingerprint.capabilities or capabilityGuides."),
|
|
68
68
|
action: z.enum(["describe", "run"]),
|
|
69
69
|
arguments: z
|
|
70
70
|
.record(z.string(), z.unknown())
|
|
@@ -7,8 +7,8 @@ import { expandHomePath, isPathInsideRoot } from "../../mcp/filesystem/roots.js"
|
|
|
7
7
|
const FRONTMATTER_DELIMITER = "---";
|
|
8
8
|
export function effectiveSkillPaths(config, cwd) {
|
|
9
9
|
const defaultPathCandidates = [
|
|
10
|
-
join(homedir(), ".agents", "skills"),
|
|
11
10
|
resolve(cwd, ".agents", "skills"),
|
|
11
|
+
join(homedir(), ".agents", "skills"),
|
|
12
12
|
config.configSkillsDir,
|
|
13
13
|
join(config.agentDir, "skills"),
|
|
14
14
|
];
|
|
@@ -201,12 +201,16 @@ gateway rather than each receiving another top-level tool schema.
|
|
|
201
201
|
`open_workspace` adds lightweight discovery surfaces:
|
|
202
202
|
|
|
203
203
|
- `capabilityFingerprint` is returned on every open/resume and includes the
|
|
204
|
-
ForgeRelay version, active tool mode, and stable semantic capability names
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
ForgeRelay version, active tool mode, and stable semantic capability names. It
|
|
205
|
+
is a feature fingerprint, not a callable registry;
|
|
206
|
+
- `capabilityCatalog` is the callable registry for the `capability` gateway and
|
|
207
|
+
lists currently available registered actions such as `hooks.check`, with
|
|
208
|
+
compact guide metadata. Only names present here are valid for
|
|
209
|
+
`capability(action="describe"|"run")`;
|
|
207
210
|
- `capabilityGuides` is returned with bootstrap context and contains compact
|
|
208
211
|
descriptors for ForgeRelay-owned, versioned guides that can be loaded with
|
|
209
|
-
the normal `read` tool.
|
|
212
|
+
the normal `read` tool. Guide names are documentation descriptors, not
|
|
213
|
+
callable capability names.
|
|
210
214
|
|
|
211
215
|
Do not preload every capability guide. Read a guide only when the current task
|
|
212
216
|
needs that domain. Built-in guides cover lifecycle Hooks, advanced managed
|
|
@@ -228,14 +232,16 @@ force the Host to discard a cached tool schema.
|
|
|
228
232
|
|
|
229
233
|
## Agent Skills
|
|
230
234
|
|
|
231
|
-
ForgeRelay discovers standard Agent Skills from:
|
|
235
|
+
ForgeRelay discovers standard Agent Skills in precedence order from:
|
|
232
236
|
|
|
233
|
-
- `~/.agents/skills`
|
|
234
237
|
- project `.agents/skills`
|
|
238
|
+
- `~/.agents/skills`
|
|
235
239
|
- the active ForgeRelay config directory's `skills` folder
|
|
236
240
|
- `FORGERELAY_AGENT_DIR/skills` (defaults to `~/.codex/skills`)
|
|
237
241
|
- paths from `FORGERELAY_SKILL_PATHS`
|
|
238
242
|
|
|
243
|
+
Same-named collisions use the first source, so project Skills override global Skills.
|
|
244
|
+
|
|
239
245
|
When a task matches an advertised skill, read its `SKILL.md` before using other
|
|
240
246
|
files in the skill directory.
|
|
241
247
|
|
package/docs/configuration.md
CHANGED
|
@@ -860,14 +860,16 @@ select a global instruction file; its `skills` child is an additional Agent Skil
|
|
|
860
860
|
| `FORGERELAY_AGENT_DIR` | Defaults to `~/.codex`; its `skills` child is included as an additional Skill source. |
|
|
861
861
|
| `FORGERELAY_SKILL_PATHS` | Optional comma-separated additional skill directories. |
|
|
862
862
|
|
|
863
|
-
Standard Agent Skills are discovered from:
|
|
863
|
+
Standard Agent Skills are discovered in precedence order from:
|
|
864
864
|
|
|
865
|
-
- `~/.agents/skills`
|
|
866
865
|
- project `.agents/skills`
|
|
866
|
+
- `~/.agents/skills`
|
|
867
867
|
- the active ForgeRelay config directory's `skills` folder
|
|
868
868
|
- `FORGERELAY_AGENT_DIR/skills`
|
|
869
869
|
- paths from `FORGERELAY_SKILL_PATHS`
|
|
870
870
|
|
|
871
|
+
When the same Skill name appears in more than one source, the first source wins. Project Skills therefore override same-named global `~/.agents/skills` entries, matching ForgeRelay's project-over-global configuration model.
|
|
872
|
+
|
|
871
873
|
When subagents are enabled, profiles are discovered from:
|
|
872
874
|
|
|
873
875
|
- the active ForgeRelay config directory's `agents/*.md`;
|