@tacuchi/agent-workflow-cli 14.3.0 → 14.5.0
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/dist/adapters/node-file-system.d.ts +2 -0
- package/dist/adapters/node-file-system.d.ts.map +1 -1
- package/dist/adapters/node-file-system.js +7 -2
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/adapters/node-process.d.ts +3 -0
- package/dist/adapters/node-process.d.ts.map +1 -1
- package/dist/adapters/node-process.js +19 -0
- package/dist/adapters/node-process.js.map +1 -1
- package/dist/application/dev-only-services.d.ts.map +1 -1
- package/dist/application/dev-only-services.js +13 -12
- package/dist/application/dev-only-services.js.map +1 -1
- package/dist/application/logging/log-events.d.ts +12 -0
- package/dist/application/logging/log-events.d.ts.map +1 -0
- package/dist/application/logging/log-events.js +30 -0
- package/dist/application/logging/log-events.js.map +1 -0
- package/dist/application/logging/logger.d.ts +32 -0
- package/dist/application/logging/logger.d.ts.map +1 -0
- package/dist/application/logging/logger.js +45 -0
- package/dist/application/logging/logger.js.map +1 -0
- package/dist/application/mcp-host-writer.d.ts.map +1 -1
- package/dist/application/mcp-host-writer.js +102 -2
- package/dist/application/mcp-host-writer.js.map +1 -1
- package/dist/application/open-external.d.ts +21 -0
- package/dist/application/open-external.d.ts.map +1 -0
- package/dist/application/open-external.js +26 -0
- package/dist/application/open-external.js.map +1 -0
- package/dist/application/paths-service.d.ts +7 -0
- package/dist/application/paths-service.d.ts.map +1 -1
- package/dist/application/paths-service.js +12 -0
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/self/clean-legacy.d.ts.map +1 -1
- package/dist/application/self/clean-legacy.js +14 -0
- package/dist/application/self/clean-legacy.js.map +1 -1
- package/dist/application/self/detect-hosts.d.ts.map +1 -1
- package/dist/application/self/detect-hosts.js +19 -3
- package/dist/application/self/detect-hosts.js.map +1 -1
- package/dist/application/self/install-skill.d.ts +2 -1
- package/dist/application/self/install-skill.d.ts.map +1 -1
- package/dist/application/self/install-skill.js +28 -1
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/uninstall.d.ts.map +1 -1
- package/dist/application/self/uninstall.js +16 -1
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/cli/main.js +8 -0
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/tui/app.js +6 -6
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/logs-section.d.ts +21 -0
- package/dist/cli/tui/components/logs-section.d.ts.map +1 -0
- package/dist/cli/tui/components/logs-section.js +80 -0
- package/dist/cli/tui/components/logs-section.js.map +1 -0
- package/dist/cli/tui/data/logs.d.ts +20 -0
- package/dist/cli/tui/data/logs.d.ts.map +1 -0
- package/dist/cli/tui/data/logs.js +39 -0
- package/dist/cli/tui/data/logs.js.map +1 -0
- package/dist/cli/tui/hosts.js +7 -7
- package/dist/cli/tui/hosts.js.map +1 -1
- package/dist/cli/tui/tabs/status-tab.d.ts +8 -4
- package/dist/cli/tui/tabs/status-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/status-tab.js +33 -8
- package/dist/cli/tui/tabs/status-tab.js.map +1 -1
- package/dist/cli/tui/tui-prefs.d.ts +2 -0
- package/dist/cli/tui/tui-prefs.d.ts.map +1 -1
- package/dist/cli/tui/tui-prefs.js +1 -0
- package/dist/cli/tui/tui-prefs.js.map +1 -1
- package/dist/domain/harnesses.d.ts +2 -2
- package/dist/domain/harnesses.d.ts.map +1 -1
- package/dist/domain/harnesses.js +63 -2
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/mcp-entry.d.ts +1 -1
- package/dist/domain/mcp-entry.d.ts.map +1 -1
- package/dist/ports/file-system.d.ts +2 -0
- package/dist/ports/file-system.d.ts.map +1 -1
- package/dist/ports/process.d.ts +9 -0
- package/dist/ports/process.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/w/harness/SKILL.md +16 -15
package/dist/domain/harnesses.js
CHANGED
|
@@ -25,8 +25,14 @@ export const HARNESSES = [
|
|
|
25
25
|
},
|
|
26
26
|
projectMcpPath: ".codex/config.toml",
|
|
27
27
|
pluginManifest: ".codex-plugin/plugin.json",
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
// Codex plugin bundles ship hooks at `hooks/hooks.json` in the plugin root
|
|
29
|
+
// (env PLUGIN_ROOT), same layout as Claude's `hooks/`. Verified 2026-07 vs
|
|
30
|
+
// developers.openai.com/codex/hooks.
|
|
31
|
+
pluginHooksDir: "hooks",
|
|
32
|
+
// Codex loads Agent Skills from `.agents/skills` (the open-standard dir,
|
|
33
|
+
// ~/.agents/skills global) — this is primary. `.codex/skills` kept as a
|
|
34
|
+
// secondary for older builds. Verified vs developers.openai.com/codex/skills.
|
|
35
|
+
skillsDirs: [".agents/skills", ".codex/skills"],
|
|
30
36
|
installTarget: "codex",
|
|
31
37
|
},
|
|
32
38
|
{
|
|
@@ -70,6 +76,61 @@ export const HARNESSES = [
|
|
|
70
76
|
skillsDirs: [".warp/skills", ".agents/skills", ".claude/skills", ".codex/skills"],
|
|
71
77
|
installTarget: "warp",
|
|
72
78
|
},
|
|
79
|
+
{
|
|
80
|
+
// Gemini CLI + Antigravity CLI (successor; reuses ~/.gemini/). envMarkers are
|
|
81
|
+
// best-effort (detection also keys off the ~/.gemini config dir); Antigravity
|
|
82
|
+
// markers are treated as a Gemini alias. MCP in settings.json (mcpServers,
|
|
83
|
+
// Claude-compatible shape). Skills = open agentskills standard.
|
|
84
|
+
id: "gemini",
|
|
85
|
+
envMarkers: ["GEMINI_CLI", "GEMINI_SANDBOX", "ANTIGRAVITY", "ANTIGRAVITY_CLI"],
|
|
86
|
+
mcpHostId: "gemini",
|
|
87
|
+
globalMcpPaths: {
|
|
88
|
+
darwin: { stable: "~/.gemini/settings.json" },
|
|
89
|
+
linux: { stable: "~/.gemini/settings.json" },
|
|
90
|
+
win32: { stable: "~/.gemini/settings.json" },
|
|
91
|
+
},
|
|
92
|
+
projectMcpPath: ".gemini/settings.json",
|
|
93
|
+
pluginManifest: null, // Gemini uses Extensions (gemini-extension.json) — Phase 2
|
|
94
|
+
pluginHooksDir: null, // Extension-bundled hooks (BeforeTool) — Phase 2
|
|
95
|
+
skillsDirs: [".agents/skills", ".gemini/skills"],
|
|
96
|
+
installTarget: "gemini",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
// OpenCode (sst/opencode). Config `opencode.json` ($schema); MCP under `mcp`
|
|
100
|
+
// (type "local", command as array, `environment`). Reads .claude/skills and
|
|
101
|
+
// .agents/skills directly. Enforcement via JS plugins (tool.execute.before) — Phase 2.
|
|
102
|
+
id: "opencode",
|
|
103
|
+
envMarkers: ["OPENCODE", "OPENCODE_BIN", "OPENCODE_CONFIG"],
|
|
104
|
+
mcpHostId: "opencode",
|
|
105
|
+
globalMcpPaths: {
|
|
106
|
+
darwin: { stable: "~/.config/opencode/opencode.json" },
|
|
107
|
+
linux: { stable: "~/.config/opencode/opencode.json" },
|
|
108
|
+
win32: { stable: "~/.config/opencode/opencode.json" },
|
|
109
|
+
},
|
|
110
|
+
projectMcpPath: "opencode.json",
|
|
111
|
+
pluginManifest: null, // JS/TS plugins in .opencode/plugin — Phase 2
|
|
112
|
+
pluginHooksDir: null,
|
|
113
|
+
skillsDirs: [".opencode/skills", ".agents/skills", ".claude/skills"],
|
|
114
|
+
installTarget: "opencode",
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
// Crush (charmbracelet/crush). Config `crush.json` ($schema charm.land/crush.json);
|
|
118
|
+
// MCP under `mcp` (type "stdio"). Reads .agents/skills + .claude/skills. Hooks are
|
|
119
|
+
// preliminary; enforcement via `allowed_tools` allowlist — Phase 3.
|
|
120
|
+
id: "crush",
|
|
121
|
+
envMarkers: ["CRUSH", "CRUSH_CONFIG"],
|
|
122
|
+
mcpHostId: "crush",
|
|
123
|
+
globalMcpPaths: {
|
|
124
|
+
darwin: { stable: "~/.config/crush/crush.json" },
|
|
125
|
+
linux: { stable: "~/.config/crush/crush.json" },
|
|
126
|
+
win32: { stable: "~/.config/crush/crush.json" },
|
|
127
|
+
},
|
|
128
|
+
projectMcpPath: "crush.json",
|
|
129
|
+
pluginManifest: null,
|
|
130
|
+
pluginHooksDir: null,
|
|
131
|
+
skillsDirs: [".agents/skills", ".crush/skills", ".claude/skills"],
|
|
132
|
+
installTarget: "crush",
|
|
133
|
+
},
|
|
73
134
|
];
|
|
74
135
|
/**
|
|
75
136
|
* Resolves the global MCP config path for a harness spec.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/domain/harnesses.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"harnesses.js","sourceRoot":"","sources":["../../src/domain/harnesses.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type McpHost = "claude" | "codex" | "warp";
|
|
1
|
+
export type McpHost = "claude" | "codex" | "warp" | "gemini" | "opencode" | "crush";
|
|
2
2
|
export type McpInstance = string;
|
|
3
3
|
export type McpEntryName = string;
|
|
4
4
|
export declare const DEFAULT_MCP_INSTANCES: readonly ["cert", "prod"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-entry.d.ts","sourceRoot":"","sources":["../../src/domain/mcp-entry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-entry.d.ts","sourceRoot":"","sources":["../../src/domain/mcp-entry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEpF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,eAAO,MAAM,qBAAqB,2BAA4B,CAAC;AAE/D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,oBAAoB,GAAG,SAAS,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,aAAa,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;AAEnG,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACtE,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC1D,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAK/D;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,GACZ;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAejE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,YAAY,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,GACZ;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAY5D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAgB9E"}
|
|
@@ -12,6 +12,8 @@ export interface FileStat {
|
|
|
12
12
|
export interface FileSystemPort {
|
|
13
13
|
readText(path: string): Promise<string>;
|
|
14
14
|
writeText(path: string, content: string): Promise<void>;
|
|
15
|
+
/** Append `content` to `path`, creating the file and its parent dirs if absent. */
|
|
16
|
+
appendText(path: string, content: string): Promise<void>;
|
|
15
17
|
/**
|
|
16
18
|
* Atomically create file with content. Returns `{ created: true }` on success
|
|
17
19
|
* or `{ created: false }` if path already exists. Used by lock-service to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/ports/file-system.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACjF,iGAAiG;IACjG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvC"}
|
|
1
|
+
{"version":3,"file":"file-system.d.ts","sourceRoot":"","sources":["../../src/ports/file-system.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,IAAI,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,mFAAmF;IACnF,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD;;;;;OAKG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACjF,iGAAiG;IACjG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvC"}
|
package/dist/ports/process.d.ts
CHANGED
|
@@ -52,6 +52,15 @@ export interface ProcessPort {
|
|
|
52
52
|
* pid on Windows; `mode` says which path was taken.
|
|
53
53
|
*/
|
|
54
54
|
spawnInTerminal(cmd: string, args: string[], opts: SpawnInTerminalOptions): Promise<SpawnInTerminalResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Open a file in an EXTERNAL application — the OS default text editor, or
|
|
57
|
+
* `opts.app` when given — spawned detached so it never captures the TUI's TTY.
|
|
58
|
+
* Best-effort: resolves even if the opener can't be launched (the caller
|
|
59
|
+
* surfaces failure, e.g. checks the file exists first).
|
|
60
|
+
*/
|
|
61
|
+
openPath(path: string, opts?: {
|
|
62
|
+
app?: string;
|
|
63
|
+
}): Promise<void>;
|
|
55
64
|
/**
|
|
56
65
|
* Terminate a process and its whole tree/group. Best-effort: resolves even if
|
|
57
66
|
* the process is already gone.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/ports/process.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,2HAA2H;IAC3H,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,gJAAgJ;IAChJ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yGAAyG;IACzG,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,iIAAiI;IACjI,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACxE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAChD;;;;OAIG;IACH,aAAa,CACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,eAAe,CACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,6EAA6E;IAC7E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC"}
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/ports/process.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,2HAA2H;IAC3H,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,gJAAgJ;IAChJ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,yGAAyG;IACzG,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,iIAAiI;IACjI,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACxE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAChD;;;;OAIG;IACH,aAAa,CACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC;;;;;;;OAOG;IACH,eAAe,CACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,6EAA6E;IAC7E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tacuchi/agent-workflow-cli",
|
|
3
|
-
"version": "14.
|
|
3
|
+
"version": "14.5.0",
|
|
4
4
|
"description": "Agnostic runtime CLI for AI development workflows — a stages + loops + artifacts harness. Bundles the universal `w` skill set under `skills/w/` (slash commands `/w:*`: spec-new/spec-refine, plan-new/plan-exec, quick, workspace-init, export-*); `self install --target <host>` copies SKILL + commands + hooks into the host. Pluggable capability skills via `.workflow/skills.toml`. Multi-empresa parametrization via `profile.json` cascade. Namespace auto-detected from any `.<ns>/sessions/` dir in CWD; default `workflow`.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -3,7 +3,7 @@ name: harness
|
|
|
3
3
|
description: >-
|
|
4
4
|
Harness-agnostic capability layer for agent-workflow. Read-and-follow doc (no es
|
|
5
5
|
invocable por nombre): define el contrato que mantiene a la herramienta agnóstica al
|
|
6
|
-
arnés (Claude Code, Codex,
|
|
6
|
+
arnés (Claude Code, Codex, Gemini/Antigravity, OpenCode, Crush, Warp, genérico) sin renunciar a las
|
|
7
7
|
capacidades ricas de cada uno. Cataloga las capacidades de las que depende el
|
|
8
8
|
workflow, las liga al mecanismo concreto de cada arnés (binding matrix), y fija los
|
|
9
9
|
dos principios (capacidad-no-tool · progressive-enhancement). Referenciado desde
|
|
@@ -44,20 +44,21 @@ Las capacidades de las que depende el harness, con su fallback universal (lo que
|
|
|
44
44
|
|
|
45
45
|
## Harness binding matrix
|
|
46
46
|
|
|
47
|
-
Mecanismo concreto por arnés (
|
|
47
|
+
Mecanismo concreto por arnés (**jul-2026**, verificado contra docs oficiales; `~` parcial). Antigravity CLI reusa las superficies de Gemini (`~/.gemini/`).
|
|
48
48
|
|
|
49
|
-
| Capability | Claude Code | Codex
|
|
50
|
-
|
|
51
|
-
| command-invocation | `.claude/commands/` (slash) |
|
|
52
|
-
| procedure-loading | skills `SKILL.md` |
|
|
53
|
-
| structured-choice | `AskUserQuestion` (**solo main-agent**) | — | — | — | markdown numerado |
|
|
54
|
-
| compaction | `/compact` |
|
|
55
|
-
| subagent-dispatch | `Task` (paralelo) | agents (
|
|
56
|
-
| persistent-context | `CLAUDE.md` (**no** lee AGENTS.md → symlink) | `AGENTS.md` | `AGENTS.md` | `AGENTS.md
|
|
57
|
-
| external-data |
|
|
58
|
-
|
|
|
49
|
+
| Capability | Claude Code | Codex | Gemini / Antigravity | OpenCode | Crush | Warp | Genérico |
|
|
50
|
+
|---|---|---|---|---|---|---|---|
|
|
51
|
+
| command-invocation | `.claude/commands/` (slash) | slash + skills | `.gemini/commands/*.toml` | `.opencode/command/` | skills user-invocable | Workflows (Drive) | texto |
|
|
52
|
+
| procedure-loading (skills) | `SKILL.md` `.claude/skills` | `SKILL.md` `.agents/skills` | `SKILL.md` (agentskills) | `SKILL.md` `.opencode`+`.claude`+`.agents` | `SKILL.md` `.agents`+`.crush`+`.claude` | `SKILL.md` `.agents`+`.warp`+`.claude` | read-and-follow `.md` |
|
|
53
|
+
| structured-choice | `AskUserQuestion` (**solo main-agent**) | — | — | — | — | — | markdown numerado |
|
|
54
|
+
| compaction | `/compact` | Pre/PostCompact hooks | ~ | `session.compacted` | ~ | ~ | CHECKPOINT + resume |
|
|
55
|
+
| subagent-dispatch | `Task` (paralelo) | `SubagentStart` / agents | agents (`.gemini/agents`) | `.opencode/agent/*.md` | ~ | ~ (cloud agents) | inline |
|
|
56
|
+
| persistent-context | `CLAUDE.md` (**no** lee AGENTS.md → symlink) | `AGENTS.md` | `GEMINI.md` + `AGENTS.md` | `AGENTS.md` | `CRUSH.md` + `AGENTS.md` | `AGENTS.md` (auto) | `AGENTS.md` |
|
|
57
|
+
| external-data (MCP) | `.mcp.json` | `.codex/config.toml` `[mcp_servers]` | `settings.json` `mcpServers` | `opencode.json` `mcp` | `crush.json` `mcp` | `.warp/.mcp.json` (+autodescubre `.mcp.json`) | — |
|
|
58
|
+
| **enforcement (deny tool)** | `PreToolUse` → `permissionDecision:deny` / exit 2 | `PreToolUse` (**≈mismo protocolo**) | `BeforeTool` → `decision:deny` / exit 2 | plugin `tool.execute.before` (`throw`) | `allowed_tools` (+ hooks preliminares) | allow/deny lists (**grueso**) | doctrina (git-safe #5) |
|
|
59
|
+
| plugin / dist | `.claude-plugin` + marketplace | `.codex-plugin` + `/plugins` marketplace | Extension `gemini-extension.json` | plugin JS/TS (npm) | MCP + skills + config | Warp Drive | — |
|
|
59
60
|
|
|
60
|
-
> **Notas (investigación de campo
|
|
61
|
+
> **Notas (investigación de campo jul-2026):** las **skills `SKILL.md`** son la unidad portable **universal** — **los seis** arneses las soportan (Codex las agregó Dic-2025; **`.agents/skills` es el ancla cross-host**, leída por Codex/OpenCode/Crush/Warp). La **elección estructurada** (`AskUserQuestion`) sigue siendo **solo Claude Code / main-agent** → en el resto `structured-choice` degrada a markdown numerado. La **capa de enforcement** (fila nueva) ya **NO es exclusiva de Claude**: Codex + Gemini usan un protocolo casi idéntico (`permissionDecision:deny` / exit 2) y OpenCode bloquea vía `throw` en un plugin JS; Crush/Warp solo ofrecen allow/deny **grueso** (sin lógica custom por comando) → en ellos las convenciones quedan **advisory** + listas allow/deny. El **plan mode** enforced no se confía para safety; el git-safe (invariante #5) es propio. **MCP** es universal (cada host su archivo/clave). El **piso garantizado** (última columna) corre el modelo completo.
|
|
61
62
|
|
|
62
63
|
## Leverage installed skills
|
|
63
64
|
|
|
@@ -78,8 +79,8 @@ Patrón probado (Spec Kit, 30+ agentes): **una fuente canónica** + generar/syml
|
|
|
78
79
|
|
|
79
80
|
## Command packaging (harness-specific)
|
|
80
81
|
|
|
81
|
-
El **contrato** de cada comando (Flow, Trigger, Input, Mode, …) es agnóstico. El **archivo** que el arnés ejecuta envuelve ese contrato en su formato nativo: Claude Code = slash-command con frontmatter (`description`, `argument-hint`, `allowed-tools`) + cuerpo que invoca la skill o el `aw` CLI; Codex = skill
|
|
82
|
+
El **contrato** de cada comando (Flow, Trigger, Input, Mode, …) es agnóstico. El **archivo** que el arnés ejecuta envuelve ese contrato en su formato nativo: Claude Code = slash-command con frontmatter (`description`, `argument-hint`, `allowed-tools`) + cuerpo que invoca la skill o el `aw` CLI; Codex = slash-command o skill; Gemini/Antigravity = `.gemini/commands/*.toml`; OpenCode = `.opencode/command/*.md`; Crush/Warp = la **skill misma** invocable. El **fallback universal** es *skill-as-command*: como los seis arneses cargan skills, la doctrina siempre corre aunque el host no tenga comandos nativos. El contrato no cambia; el envoltorio sí (otra columna).
|
|
82
83
|
|
|
83
84
|
## Status
|
|
84
85
|
|
|
85
|
-
Modelo de capacidades + matriz de binding **definidos** y **validados** con investigación de campo (
|
|
86
|
+
Modelo de capacidades + matriz de binding **definidos** y **validados** con investigación de campo (**jul-2026**, contra docs oficiales). Cobertura **6 arneses reales**: Claude Code, Codex, Gemini/Antigravity, OpenCode, Crush, Warp — todos soportan `SKILL.md` (ancla `.agents/skills`) + MCP + `AGENTS.md`; enforcement determinista en Claude/Codex/Gemini/OpenCode, advisory + allow/deny grueso en Crush/Warp. El CLI (`aw`) implementa el registro (`domain/harnesses.ts`), los writers MCP por-host, `detect-hosts` e `install-skill --target <host>`. El piso universal (`AGENTS.md` + texto + archivos + skills) corre el modelo completo hoy.
|