@vibe-engineer/adapter-pi 0.1.0 → 0.2.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.
@@ -0,0 +1,1591 @@
1
+ import {
2
+ GENERATED_FILE_FAMILY_IDS,
3
+ SKILL_IDS,
4
+ validateCapabilityMatrix
5
+ } from "./chunk-QEXU5LD2.js";
6
+
7
+ // src/capabilities/harness-adapter.ts
8
+ var HARNESS_ADAPTER_CONTRACT_SCHEMA_VERSION = "vibe-harness-adapter-contract/v1";
9
+ var HARNESS_GENERATED_FILE_MANIFEST_SCHEMA_VERSION = "vibe-harness-generated-file-manifest/v1";
10
+ var HARNESS_ADAPTER_REGISTRY_SCHEMA_VERSION = "vibe-harness-adapter-registry/v1";
11
+ var SUPPORTED_HARNESS_ADAPTER_IDS = ["pi", "claude-code", "codex"];
12
+ var known = (source, notes) => ({
13
+ state: "known",
14
+ source,
15
+ notes
16
+ });
17
+ var blocked = (source, notes) => ({
18
+ state: "blocked",
19
+ source,
20
+ notes
21
+ });
22
+ var capability = (support, evidence, summary, downstreamConsequence, evidenceRefs = evidenceRefsForEvidence(evidence)) => ({
23
+ support,
24
+ evidence,
25
+ evidenceRefs,
26
+ summary,
27
+ downstreamConsequence
28
+ });
29
+ var family = (familyId, pathPatterns, support, producedByLane, writer, reason, evidence, evidenceRefs = evidenceRefsForEvidence(evidence)) => ({
30
+ familyId,
31
+ pathPatterns,
32
+ support,
33
+ producedByLane,
34
+ writer,
35
+ reason,
36
+ evidence,
37
+ evidenceRefs,
38
+ noFallbackToPi: true
39
+ });
40
+ var handoffStep = (stepId, inputArtifact, outputArtifact, nativeCommand, promptInstruction, persistenceRule, handoffRule, unsupportedNativeAssetNote) => ({
41
+ stepId,
42
+ inputArtifact,
43
+ outputArtifact,
44
+ nativeCommand,
45
+ promptInstruction,
46
+ persistenceRule,
47
+ handoffRule,
48
+ unsupportedNativeAssetNote
49
+ });
50
+ var handoffInstructionsFor = (adapterId) => {
51
+ const native = (stepId) => {
52
+ if (adapterId === "pi") return `/skill:${stepId}`;
53
+ if (adapterId === "claude-code") return `/vibe-${stepId}`;
54
+ if (adapterId === "codex") return `$vibe-${stepId}`;
55
+ return null;
56
+ };
57
+ const unsupportedNote = adapterId === "codex" ? "Codex has no evidenced project-local slash-command surface; invoke the generated project-local skill in the prompt (for example, `Use $vibe-task ...`) and persist artifacts instead of inventing .pi/.claude/.codex command or prompt-template files." : null;
58
+ return [
59
+ handoffStep(
60
+ "task",
61
+ "raw-intent",
62
+ "work-brief",
63
+ native("task"),
64
+ "Normalize exactly one operator request into a Work Brief before planning.",
65
+ "Persist .vibe/work/<work-id>/raw-intent.md when needed and .vibe/work/<work-id>/work-brief.json as the durable output.",
66
+ "Hand exactly one Work Brief to plan; do not produce implementation-plan, build-result, or ship-packet in task.",
67
+ unsupportedNote
68
+ ),
69
+ handoffStep(
70
+ "plan",
71
+ "work-brief",
72
+ "implementation-plan-with-verification-delta",
73
+ native("plan"),
74
+ "Consume one Work Brief and produce one Implementation Plan with embedded Verification Delta.",
75
+ "Persist .vibe/work/<work-id>/implementation-plan.json; keep status draft until explicit operator approval.",
76
+ "Hand an approved persisted plan to build; do not execute build or ship work from plan.",
77
+ unsupportedNote
78
+ ),
79
+ handoffStep(
80
+ "build",
81
+ "approved-implementation-plan",
82
+ "build-result",
83
+ native("build"),
84
+ "Implement only the approved plan scope and record deterministic evidence references.",
85
+ "Persist .vibe/work/<work-id>/build-result.json with changed files, evidence refs, and any blockers.",
86
+ "Hand the Build Result plus evidence to ship; do not claim release readiness without the persisted packet.",
87
+ unsupportedNote
88
+ ),
89
+ handoffStep(
90
+ "ship",
91
+ "build-result",
92
+ "ship-packet",
93
+ native("ship"),
94
+ "Review Build Result evidence and prepare a release/merge handoff packet without inventing missing proofs.",
95
+ "Persist .vibe/work/<work-id>/ship-packet.json with release notes, risks, and final evidence links.",
96
+ "Stop if required evidence is missing; do not push, deploy, or open external PRs unless explicitly authorized outside create/import.",
97
+ unsupportedNote
98
+ )
99
+ ];
100
+ };
101
+ var runtimePrerequisiteDiagnostic = (binary, displayName, message) => ({
102
+ diagnosticCode: "HARNESS_RUNTIME_UNAVAILABLE",
103
+ classification: "missing_prerequisite",
104
+ binary,
105
+ versionCommand: [binary, "--version"],
106
+ authPrerequisite: "Operator-managed local CLI authentication/subscription is required before any live model/runtime invocation; create/import do not perform auth probes.",
107
+ liveProbePolicy: "not-run-by-create-import",
108
+ unavailableRuntimeBehavior: "blocked-missing-prerequisite",
109
+ message,
110
+ missingBinaryMessage: `${displayName} binary '${binary}' is required for live harness runs; install it or select a supported installed harness explicitly. No Pi fallback is allowed.`,
111
+ missingAuthMessage: `${displayName} authentication/subscription is required for live harness runs; authenticate the '${binary}' CLI before invoking a live runner. No Pi fallback is allowed.`,
112
+ noFallbackToPi: true
113
+ });
114
+ var operatorPacketEvidenceRef = {
115
+ path: ".pi/autopilot/vibe-engineer-improvements/evidence/upstream/extract-harness-cli-evidence/harness-adapter-operator-packet.md",
116
+ description: "Accepted local CLI evidence packet for Pi, Claude Code, and Codex harness surfaces."
117
+ };
118
+ var dirtyTreeFixStatusEvidenceRef = {
119
+ path: ".pi/autopilot/vibe-engineer-improvements-final/statuses/fix-architecture-runner-dirty-tree-delta.fix.attempt-1.json",
120
+ description: "Implementation status for committed/staged/unstaged/untracked architecture-runner delta evidence."
121
+ };
122
+ var dirtyTreeValidationStatusEvidenceRef = {
123
+ path: ".pi/autopilot/vibe-engineer-improvements-final/statuses/validate-architecture-runner-dirty-tree-delta.validate.attempt-1.json",
124
+ description: "Accepted validation status for dirty-tree architecture-runner facts and no-fallback diagnostics."
125
+ };
126
+ var piAdapterContractEvidenceRef = {
127
+ path: "packages/adapters/pi/src/capabilities/index.ts",
128
+ description: "Existing Pi adapter capability matrix and trust/security manifest contract."
129
+ };
130
+ var piGeneratedManifestEvidenceRef = {
131
+ path: "packages/adapters/pi/src/generated-file-manifest/index.ts",
132
+ description: "Existing Pi generated-file family manifest for context, skills, prompts, extensions, and config."
133
+ };
134
+ var piEvidenceRefs = [
135
+ operatorPacketEvidenceRef,
136
+ piAdapterContractEvidenceRef,
137
+ piGeneratedManifestEvidenceRef
138
+ ];
139
+ var claudeNativeEvidenceRef = {
140
+ path: ".pi/autopilot/vibe-engineer-improvements-final/context/implement-native-claude-code-support/claude-code-adapter-evidence.json",
141
+ description: "Authoritative Claude Code 2.1.197 native capability evidence for CLAUDE.md, .claude/commands, permissions, and JSON-schema print mode."
142
+ };
143
+ var claudeEvidenceRefs = [claudeNativeEvidenceRef];
144
+ var codexNativeEvidenceRef = {
145
+ path: ".pi/autopilot/vibe-engineer-improvements-final/context/implement-native-codex-support/codex-native-adapter-evidence.json",
146
+ description: "Authoritative Codex CLI 0.142.4 native capability evidence for AGENTS.md, project-local .codex/skills, config, exec JSON/schema output, sandbox/approval policy, and unsupported surfaces."
147
+ };
148
+ var codexOperatorPacketEvidenceRef = {
149
+ path: ".pi/autopilot/vibe-engineer-improvements-final/context/implement-native-codex-support/codex-native-operator-packet.md",
150
+ description: "Native Codex implementation packet requiring .codex/skills/vibe-* assets, conservative config, codex exec runner flags, and no Pi fallback."
151
+ };
152
+ var codexEvidenceRefs = [codexNativeEvidenceRef, codexOperatorPacketEvidenceRef];
153
+ var dirtyTreeRunnerEvidenceRefs = [
154
+ operatorPacketEvidenceRef,
155
+ dirtyTreeFixStatusEvidenceRef,
156
+ dirtyTreeValidationStatusEvidenceRef
157
+ ];
158
+ function evidenceRefsForEvidence(evidence) {
159
+ if (evidence.source.includes("Codex") || evidence.source.includes("codex")) {
160
+ return codexEvidenceRefs;
161
+ }
162
+ if (evidence.source.includes("Claude") || evidence.source.includes("claude")) {
163
+ return claudeEvidenceRefs;
164
+ }
165
+ return piEvidenceRefs;
166
+ }
167
+ var piEvidence = known(
168
+ "extract-harness-cli-evidence + existing @vibe-engineer/adapter-pi manifests",
169
+ "Pi 0.80.2 local help and the existing Pi adapter prove AGENTS.md/CLAUDE.md, .pi skills, .pi prompt templates, JSON event mode, RPC, and project-trust semantics; built-in agents and plan mode remain blocked."
170
+ );
171
+ var claudeEvidence = known(
172
+ "claude-code-adapter-evidence.json: claude --version/help/print/agents/plugin/mcp plus local binary surface extraction",
173
+ "Claude Code 2.1.197 evidence proves CLAUDE.md auto-discovery, project .claude/commands/*.md custom commands, project/user skills, agents, hooks/plugins/MCP surfaces, print mode JSON/stream-json, --json-schema, --permission-mode plan, explicit tool allow/deny flags, and trust/safe/bare-mode semantics."
174
+ );
175
+ var codexEvidence = known(
176
+ "codex-native-adapter-evidence.json: codex --version/help/exec help/debug prompt-input/package skill evidence",
177
+ "Codex CLI 0.142.4 evidence proves AGENTS.md auto-loading, project-local .codex/skills/<name>/SKILL.md discovery, trusted-project .codex/config.toml defaults, codex exec JSONL events, --output-schema, --output-last-message, sandbox/approval flags, plugin and MCP surfaces, and explicit unsupported slash-command/prompt-template/agent/plan-mode surfaces."
178
+ );
179
+ var piBlockedEvidence = blocked(
180
+ "existing Pi adapter capability matrix",
181
+ "Pi extension/package, built-in agent/subagent, and built-in plan-mode generation require separate live runtime and security proof."
182
+ );
183
+ var claudeBlockedEvidence = known(
184
+ "claude-code-adapter-evidence.json safe default policy",
185
+ "Claude Code project commands are proven and generated for the core workflow. Skills, agents, hooks, plugins, and MCP are documented ready surfaces but are not generated by default because they are optional or trust-sensitive; standalone prompt templates distinct from commands/skills are unsupported."
186
+ );
187
+ var codexBlockedEvidence = blocked(
188
+ "codex-native-adapter-evidence.json blocked Codex hook surface",
189
+ "Hooks/trust flags and plugin hook directories exist, but exact safe generated hook config schema and trust prompts remain blocked pending a focused hook-schema/trust witness."
190
+ );
191
+ var codexUnsupportedEvidence = known(
192
+ "codex-native-adapter-evidence.json unsupported Codex command/template/agent/plan surfaces",
193
+ "Current Codex CLI help and prompt-input probes do not expose project-local custom slash commands, standalone prompt templates, user-facing custom agents/subagents, or a separate plan mode; workflow entrypoints must use project-local skills invoked by prompt syntax such as $vibe-task."
194
+ );
195
+ var piCapabilities = {
196
+ schemaVersion: HARNESS_ADAPTER_CONTRACT_SCHEMA_VERSION,
197
+ adapterId: "pi",
198
+ displayName: "Pi Coding Agent",
199
+ capabilities: {
200
+ contextFiles: capability(
201
+ "ready",
202
+ piEvidence,
203
+ "Pi project context uses AGENTS.md and optional CLAUDE.md.",
204
+ "Create/import may emit the existing Pi context files."
205
+ ),
206
+ nativeSkills: capability(
207
+ "ready",
208
+ piEvidence,
209
+ "Agent Skills-compatible .pi/skills/<skill>/SKILL.md resources expose the six skills.",
210
+ "Create/import may copy validated Pi skill templates through writePiHarnessAssets."
211
+ ),
212
+ nativeCommands: capability(
213
+ "ready",
214
+ piEvidence,
215
+ "Pi exposes generated skills as /skill:<skill> slash commands from .pi/skills resources.",
216
+ "Pi command affordances may be documented only for the generated Pi skill assets."
217
+ ),
218
+ promptTemplates: capability(
219
+ "ready",
220
+ piEvidence,
221
+ ".pi/prompts/*.md prompt templates are evidenced.",
222
+ "Create/import may copy validated Pi prompt templates through writePiHarnessAssets."
223
+ ),
224
+ hooks: capability(
225
+ "blocked",
226
+ piBlockedEvidence,
227
+ ".pi/extensions hooks are executable and intentionally not generated by create/import.",
228
+ "Hook/extension generation must block until a later security/runtime lane proves it."
229
+ ),
230
+ plugins: capability(
231
+ "blocked",
232
+ piBlockedEvidence,
233
+ "Pi package/extension distribution is executable and not generated by create/import.",
234
+ "Plugin/package generation must block until trust, install/update, and runtime loading are proven."
235
+ ),
236
+ mcp: capability(
237
+ "unsupported",
238
+ piBlockedEvidence,
239
+ "No Pi MCP generated-resource surface is evidenced for this contract.",
240
+ "MCP-dependent generation must block instead of inventing a Pi fallback."
241
+ ),
242
+ agents: capability(
243
+ "blocked",
244
+ piBlockedEvidence,
245
+ "Pi has no built-in agent/subagent surface in current evidence.",
246
+ "Agent-dependent generation must block instead of falling back to prompt-only behavior silently."
247
+ ),
248
+ planMode: capability(
249
+ "blocked",
250
+ piBlockedEvidence,
251
+ "Pi has no built-in plan mode in current evidence.",
252
+ "Plan-mode behavior must be prompt/extension-built only after separate proof."
253
+ ),
254
+ invocation: capability(
255
+ "ready",
256
+ piEvidence,
257
+ "Use pi --approve --no-session --mode json -p for future non-interactive witnesses.",
258
+ "Automation must parse JSON events and fail closed on missing final evidence."
259
+ ),
260
+ structuredOutput: capability(
261
+ "ready",
262
+ piEvidence,
263
+ "Pi has JSON event/RPC carriers but no CLI JSON Schema final-response flag.",
264
+ "Structured output requires adapter-side event parsing and schema validation."
265
+ ),
266
+ verificationRunner: capability(
267
+ "pending-live",
268
+ piEvidence,
269
+ "Recommended future runner is pi --approve --no-session --mode json -p <prompt>.",
270
+ "Missing binary/auth/unparseable output must produce a blocked missing-prerequisite result with dirty-tree delta evidence included.",
271
+ dirtyTreeRunnerEvidenceRefs
272
+ ),
273
+ securityTrustPolicy: capability(
274
+ "ready",
275
+ piEvidence,
276
+ "Project trust and default-deny command policy are modeled; no OS sandbox is claimed.",
277
+ "Generated metadata must expose trust boundaries and keep executable extension/plugin families blocked."
278
+ )
279
+ }
280
+ };
281
+ var claudeCapabilities = {
282
+ schemaVersion: HARNESS_ADAPTER_CONTRACT_SCHEMA_VERSION,
283
+ adapterId: "claude-code",
284
+ displayName: "Claude Code",
285
+ capabilities: {
286
+ contextFiles: capability(
287
+ "ready",
288
+ claudeEvidence,
289
+ "Claude Code natively auto-discovers project CLAUDE.md unless --bare/--safe-mode disables project customizations.",
290
+ "Create/import emits CLAUDE.md for Claude Code without Pi fallback."
291
+ ),
292
+ nativeSkills: capability(
293
+ "ready",
294
+ claudeEvidence,
295
+ "Claude Code supports project/user .claude/skills/<name>/SKILL.md skills, but the core workflow uses commands to avoid duplicate slash surfaces.",
296
+ "Create/import documents skills as optional and does not mirror the six workflow entrypoints as skills by default."
297
+ ),
298
+ nativeCommands: capability(
299
+ "ready",
300
+ claudeEvidence,
301
+ "Claude Code supports project .claude/commands/*.md Markdown/YAML-frontmatter custom slash commands.",
302
+ "Create/import emits .claude/commands/vibe-{brainstorm,grill-me,task,plan,build,ship}.md and exposes /vibe-* entrypoints."
303
+ ),
304
+ promptTemplates: capability(
305
+ "unsupported",
306
+ claudeBlockedEvidence,
307
+ "No separate project-local prompt-template loader distinct from commands/skills is evidenced.",
308
+ "Prompt-template generation must use .claude/commands/*.md or block; no .claude/prompts tree is invented."
309
+ ),
310
+ hooks: capability(
311
+ "ready",
312
+ claudeEvidence,
313
+ "Claude Code exposes hook settings/events, but hooks are executable and trust-sensitive.",
314
+ "Create/import does not generate executing hooks by default; future hooks must be explicit opt-in with trust/security docs."
315
+ ),
316
+ plugins: capability(
317
+ "ready",
318
+ claudeEvidence,
319
+ "Claude Code plugin surfaces are evidenced, including plugin init/validate and plugin-contained commands/agents/skills/hooks/MCP.",
320
+ "Core generated workflow avoids plugins by default and uses simple project commands for deterministic native UX."
321
+ ),
322
+ mcp: capability(
323
+ "ready",
324
+ claudeEvidence,
325
+ "Claude Code MCP management and project .mcp.json approval semantics are evidenced.",
326
+ "Create/import does not generate .mcp.json by default; future MCP config requires explicit user-approved integrations."
327
+ ),
328
+ agents: capability(
329
+ "ready",
330
+ claudeEvidence,
331
+ "Claude Code exposes .claude/agents plus --agent/--agents JSON for custom/current-session agents.",
332
+ "Verification runners may use explicit --agents JSON later; create/import does not emit unconsumed agents by default."
333
+ ),
334
+ planMode: capability(
335
+ "ready",
336
+ claudeEvidence,
337
+ "Claude Code permission mode includes plan.",
338
+ "Architecture verification runners use --permission-mode plan with read-only tools."
339
+ ),
340
+ invocation: capability(
341
+ "ready",
342
+ claudeEvidence,
343
+ "Use claude -p --output-format json --json-schema with explicit permissions for non-interactive runners.",
344
+ "Automation uses explicit flags and fails closed for missing binary/auth/trust/permission/invalid JSON issues."
345
+ ),
346
+ structuredOutput: capability(
347
+ "ready",
348
+ claudeEvidence,
349
+ "Claude Code print mode supports --output-format json and --json-schema for structured final output.",
350
+ "Runners rely on native schema validation and adapter-side validation of required fields."
351
+ ),
352
+ verificationRunner: capability(
353
+ "pending-live",
354
+ claudeEvidence,
355
+ "Recommended runner is claude -p --output-format json --json-schema <schema-json> --permission-mode plan with restricted read-only tools.",
356
+ "Missing binary/auth/trust/nonzero exit/permission denial/invalid JSON/schema mismatch blocks with no Pi fallback and dirty-tree delta evidence preserved.",
357
+ dirtyTreeRunnerEvidenceRefs
358
+ ),
359
+ securityTrustPolicy: capability(
360
+ "ready",
361
+ claudeEvidence,
362
+ "Claude Code project trust, --bare/--safe-mode behavior, permission modes, tool allow/deny flags, and operator auth requirements are modeled.",
363
+ "Generated docs require trusted workspace confirmation, prohibit dangerous skip-permissions by default, and state that --bare/--safe-mode disable generated native assets."
364
+ )
365
+ }
366
+ };
367
+ var codexCapabilities = {
368
+ schemaVersion: HARNESS_ADAPTER_CONTRACT_SCHEMA_VERSION,
369
+ adapterId: "codex",
370
+ displayName: "Codex CLI",
371
+ capabilities: {
372
+ contextFiles: capability(
373
+ "ready",
374
+ codexEvidence,
375
+ "codex debug prompt-input showed cwd AGENTS.md injected as model-visible instructions.",
376
+ "Create/import may emit AGENTS.md for Codex without Pi fallback."
377
+ ),
378
+ nativeSkills: capability(
379
+ "ready",
380
+ codexEvidence,
381
+ "Codex auto-discovers project-local .codex/skills/<skill-name>/SKILL.md resources with YAML name/description frontmatter.",
382
+ "Create/import emits .codex/skills/vibe-{brainstorm,grill-me,task,plan,build,ship}/SKILL.md and uses prompt syntax such as `Use $vibe-task ...` instead of Pi fallback."
383
+ ),
384
+ nativeCommands: capability(
385
+ "unsupported",
386
+ codexUnsupportedEvidence,
387
+ "No Codex custom slash-command or native command file format is evidenced; .codex/commands sentinels were not discovered.",
388
+ "Command asset generation must block instead of guessing or falling back to Pi prompts."
389
+ ),
390
+ promptTemplates: capability(
391
+ "unsupported",
392
+ codexUnsupportedEvidence,
393
+ "No standalone Codex project-local prompt-template path is evidenced; .codex/prompts sentinels were not discovered.",
394
+ "Prompt-template generation must block instead of guessing; generated workflow entrypoints live in SKILL.md files and docs."
395
+ ),
396
+ hooks: capability(
397
+ "blocked",
398
+ codexBlockedEvidence,
399
+ "Hook trust flags and plugin hook directories exist, but safe generated hook config schema/trust behavior is not fully witnessed.",
400
+ "Hook generation must block pending a focused hook-schema/trust witness."
401
+ ),
402
+ plugins: capability(
403
+ "ready",
404
+ codexEvidence,
405
+ "Codex plugin CLI and marketplace surfaces are evidenced, but plugins require explicit install/trust and are optional for the core workflow.",
406
+ "Create/import does not generate plugins by default; future plugin use must be explicit opt-in and fail closed if absent."
407
+ ),
408
+ mcp: capability(
409
+ "ready",
410
+ codexEvidence,
411
+ "Codex MCP commands/config and plugin MCP surfaces are evidenced, but MCP servers are optional integrations.",
412
+ "Create/import does not generate MCP by default; future MCP-dependent runners must fail closed when servers are absent."
413
+ ),
414
+ agents: capability(
415
+ "unsupported",
416
+ codexUnsupportedEvidence,
417
+ "No explicit Codex custom-agent/subagent CLI or project-local agent config is evidenced.",
418
+ "Agent-dependent behavior must block."
419
+ ),
420
+ planMode: capability(
421
+ "unsupported",
422
+ codexUnsupportedEvidence,
423
+ "Planning is prompt/skill protocol-level; no separate Codex plan mode flag or command is evidenced.",
424
+ "Plan-mode-dependent behavior must block or use the generated $vibe-plan skill protocol."
425
+ ),
426
+ invocation: capability(
427
+ "ready",
428
+ codexEvidence,
429
+ "Use codex exec --json --output-schema --output-last-message with sandbox/approval flags.",
430
+ "Automation must fail closed for missing auth/runtime/git prerequisites or unparseable output."
431
+ ),
432
+ structuredOutput: capability(
433
+ "ready",
434
+ codexEvidence,
435
+ "codex exec supports --output-schema and --output-last-message.",
436
+ "Future runners should use native output schema plus adapter-side validation."
437
+ ),
438
+ verificationRunner: capability(
439
+ "pending-live",
440
+ codexEvidence,
441
+ 'Recommended future runner is codex exec -c approval_policy="never" --sandbox read-only --json --output-schema <file>.',
442
+ "Missing binary/auth/git/unparseable output must block with no Pi fallback and dirty-tree delta evidence preserved.",
443
+ dirtyTreeRunnerEvidenceRefs
444
+ ),
445
+ securityTrustPolicy: capability(
446
+ "ready",
447
+ codexEvidence,
448
+ "Sandbox, approval policy, hook trust, and operator auth requirements are modeled.",
449
+ "Generated metadata must expose trust boundaries while keeping skills/plugins/hooks/MCP assets blocked."
450
+ )
451
+ }
452
+ };
453
+ var commonConfigFamily = (adapterId) => family(
454
+ "harness-config",
455
+ [`generated harness config field: agenticHarness=${adapterId}`],
456
+ "ready",
457
+ "I-15A-create-import-cli-ux-selected-harness",
458
+ "writeGeneratedArtifacts",
459
+ "Create/import records the selected adapter id in vibe-engineer.config.json.",
460
+ adapterId === "pi" ? piEvidence : adapterId === "claude-code" ? claudeEvidence : codexEvidence
461
+ );
462
+ var commonSelectedHarnessFamilies = (adapterId) => {
463
+ const evidence = adapterId === "pi" ? piEvidence : adapterId === "claude-code" ? claudeEvidence : codexEvidence;
464
+ return [
465
+ family(
466
+ "selected-harness-metadata",
467
+ [".vibe/harness/selected-harness.json"],
468
+ "ready",
469
+ "I-15A-create-import-cli-ux-selected-harness",
470
+ "writeGeneratedArtifacts",
471
+ "Create/import emits machine-readable selected harness metadata, native/blocked asset assertions, and runtime prerequisite diagnostics.",
472
+ evidence
473
+ ),
474
+ family(
475
+ "selected-harness-guidance",
476
+ [".vibe/harness/README.md", ".vibe/harness/handoff.md"],
477
+ "ready",
478
+ "I-15A-create-import-cli-ux-selected-harness",
479
+ "writeGeneratedArtifacts",
480
+ "Create/import emits human-readable security, trust, unsupported-surface, and task/plan/build/ship handoff guidance for the selected harness.",
481
+ evidence
482
+ ),
483
+ family(
484
+ "runner-catalog-harness-metadata",
485
+ [".vibe/registry/runner-catalog.json#vibeEngineerHarness"],
486
+ "ready",
487
+ "I-15A-create-import-cli-ux-selected-harness",
488
+ "writeGeneratedArtifacts",
489
+ "Generated starter runner catalog entries carry selected-harness contract states, live invocation placeholders, dirty-tree runner expectations, and no-Pi-fallback assertions.",
490
+ evidence
491
+ ),
492
+ family(
493
+ "starter-preset-harness-metadata",
494
+ [".vibe/generated/nest-react-rn-preset/manifest.json#layout.agenticHarness"],
495
+ "ready",
496
+ "I-15A-create-import-cli-ux-selected-harness",
497
+ "writeGeneratedArtifacts",
498
+ "Generated starter preset metadata is rewritten to the selected harness instead of retaining the pi template default.",
499
+ evidence
500
+ )
501
+ ];
502
+ };
503
+ var piGeneratedManifest = {
504
+ schemaVersion: HARNESS_GENERATED_FILE_MANIFEST_SCHEMA_VERSION,
505
+ adapterId: "pi",
506
+ adapterCapabilityVersion: HARNESS_ADAPTER_CONTRACT_SCHEMA_VERSION,
507
+ noFallbackToPi: true,
508
+ families: [
509
+ commonConfigFamily("pi"),
510
+ family(
511
+ "context-files",
512
+ ["AGENTS.md", "CLAUDE.md"],
513
+ "ready",
514
+ "I-15A-create-import-cli-ux-selected-harness",
515
+ "writeGeneratedArtifacts",
516
+ "Existing Pi behavior emits both context files.",
517
+ piEvidence
518
+ ),
519
+ family(
520
+ "pi-skill-files",
521
+ [".pi/skills/<skill>/SKILL.md"],
522
+ "ready",
523
+ "I-15A-create-import-cli-ux-selected-harness",
524
+ "writePiHarnessAssets",
525
+ "Existing Pi behavior emits six validated skill files.",
526
+ piEvidence
527
+ ),
528
+ family(
529
+ "pi-prompt-templates",
530
+ [".pi/prompts/vibe-<skill>.md"],
531
+ "ready",
532
+ "I-15A-create-import-cli-ux-selected-harness",
533
+ "writePiHarnessAssets",
534
+ "Existing Pi behavior emits six validated prompt templates.",
535
+ piEvidence
536
+ ),
537
+ ...commonSelectedHarnessFamilies("pi"),
538
+ family(
539
+ "pi-extensions",
540
+ [".pi/extensions/<name>.ts"],
541
+ "blocked",
542
+ "future-adapter-lane",
543
+ "none",
544
+ "Executable Pi extensions are blocked until runtime/security proof exists.",
545
+ piBlockedEvidence
546
+ ),
547
+ family(
548
+ "pi-package-manifest",
549
+ ["package.json#pi"],
550
+ "blocked",
551
+ "future-adapter-lane",
552
+ "none",
553
+ "Pi package manifest generation is blocked for create/import.",
554
+ piBlockedEvidence
555
+ )
556
+ ]
557
+ };
558
+ var claudeGeneratedManifest = {
559
+ schemaVersion: HARNESS_GENERATED_FILE_MANIFEST_SCHEMA_VERSION,
560
+ adapterId: "claude-code",
561
+ adapterCapabilityVersion: HARNESS_ADAPTER_CONTRACT_SCHEMA_VERSION,
562
+ noFallbackToPi: true,
563
+ families: [
564
+ commonConfigFamily("claude-code"),
565
+ family(
566
+ "claude-context-file",
567
+ ["CLAUDE.md"],
568
+ "ready",
569
+ "I-15A-create-import-cli-ux-selected-harness",
570
+ "writeGeneratedArtifacts",
571
+ "CLAUDE.md auto-discovery is evidenced by Claude Code help and is the native project context file.",
572
+ claudeEvidence
573
+ ),
574
+ family(
575
+ "claude-custom-commands",
576
+ [
577
+ ".claude/commands/vibe-brainstorm.md",
578
+ ".claude/commands/vibe-grill-me.md",
579
+ ".claude/commands/vibe-task.md",
580
+ ".claude/commands/vibe-plan.md",
581
+ ".claude/commands/vibe-build.md",
582
+ ".claude/commands/vibe-ship.md"
583
+ ],
584
+ "ready",
585
+ "I-15A-create-import-cli-ux-selected-harness",
586
+ "writeGeneratedArtifacts",
587
+ "Claude Code project custom commands are evidenced and generated for the six vibe workflow entrypoints.",
588
+ claudeEvidence
589
+ ),
590
+ ...commonSelectedHarnessFamilies("claude-code"),
591
+ family(
592
+ "claude-project-skills",
593
+ [".claude/skills/<name>/SKILL.md"],
594
+ "ready",
595
+ "future-adapter-lane",
596
+ "none",
597
+ "Project skills are evidenced but the core workflow avoids duplicate slash surfaces and does not generate skills by default.",
598
+ claudeEvidence
599
+ ),
600
+ family(
601
+ "claude-hooks",
602
+ [".claude/settings.json", ".claude/settings.local.json"],
603
+ "ready",
604
+ "future-adapter-lane",
605
+ "none",
606
+ "Hook settings/events are evidenced but executing hooks are not generated by default for trust/security reasons.",
607
+ claudeEvidence
608
+ ),
609
+ family(
610
+ "claude-plugins",
611
+ ["plugin.json", "commands/", "agents/", "skills/", "hooks/", "mcp"],
612
+ "ready",
613
+ "future-adapter-lane",
614
+ "none",
615
+ "Plugins are evidenced but optional/advanced; core create/import does not require plugin packaging.",
616
+ claudeEvidence
617
+ ),
618
+ family(
619
+ "claude-mcp-config",
620
+ [".mcp.json"],
621
+ "ready",
622
+ "future-adapter-lane",
623
+ "none",
624
+ "Project MCP config is evidenced but requires explicit approval and is not generated by default.",
625
+ claudeEvidence
626
+ ),
627
+ family(
628
+ "claude-explicit-agents-json",
629
+ ["future runner-owned --agents JSON", ".claude/agents/*.md"],
630
+ "ready",
631
+ "future-adapter-lane",
632
+ "future-runner",
633
+ "Agents are evidenced; generated runners may consume explicit --agents JSON when needed, while create/import emits no unconsumed agent assets.",
634
+ claudeEvidence
635
+ ),
636
+ family(
637
+ "claude-standalone-prompt-templates",
638
+ ["unsupported .claude/prompts tree"],
639
+ "unsupported",
640
+ "future-adapter-lane",
641
+ "none",
642
+ "No standalone project prompt-template loader distinct from commands/skills is evidenced.",
643
+ claudeBlockedEvidence
644
+ )
645
+ ]
646
+ };
647
+ var codexGeneratedManifest = {
648
+ schemaVersion: HARNESS_GENERATED_FILE_MANIFEST_SCHEMA_VERSION,
649
+ adapterId: "codex",
650
+ adapterCapabilityVersion: HARNESS_ADAPTER_CONTRACT_SCHEMA_VERSION,
651
+ noFallbackToPi: true,
652
+ families: [
653
+ commonConfigFamily("codex"),
654
+ family(
655
+ "codex-context-file",
656
+ ["AGENTS.md"],
657
+ "ready",
658
+ "I-15A-create-import-cli-ux-selected-harness",
659
+ "writeGeneratedArtifacts",
660
+ "AGENTS.md injection is evidenced by codex debug prompt-input.",
661
+ codexEvidence
662
+ ),
663
+ ...commonSelectedHarnessFamilies("codex"),
664
+ family(
665
+ "codex-project-skills",
666
+ [
667
+ ".codex/skills/vibe-brainstorm/SKILL.md",
668
+ ".codex/skills/vibe-grill-me/SKILL.md",
669
+ ".codex/skills/vibe-task/SKILL.md",
670
+ ".codex/skills/vibe-plan/SKILL.md",
671
+ ".codex/skills/vibe-build/SKILL.md",
672
+ ".codex/skills/vibe-ship/SKILL.md"
673
+ ],
674
+ "ready",
675
+ "I-15A-create-import-cli-ux-selected-harness",
676
+ "writeGeneratedArtifacts",
677
+ "Codex project-local skills are evidenced and generated for the six vibe workflow entrypoints.",
678
+ codexEvidence
679
+ ),
680
+ family(
681
+ "codex-project-config",
682
+ [".codex/config.toml"],
683
+ "ready",
684
+ "I-15A-create-import-cli-ux-selected-harness",
685
+ "writeGeneratedArtifacts",
686
+ "Generate conservative documented defaults while runners still pass explicit sandbox and approval flags because project config is trust-gated.",
687
+ codexEvidence
688
+ ),
689
+ family(
690
+ "codex-native-commands",
691
+ ["unsupported .codex/commands tree"],
692
+ "unsupported",
693
+ "future-adapter-lane",
694
+ "none",
695
+ "No Codex native command file format is evidenced; command generation is unsupported.",
696
+ codexUnsupportedEvidence
697
+ ),
698
+ family(
699
+ "codex-standalone-prompt-templates",
700
+ ["unsupported .codex/prompts tree"],
701
+ "unsupported",
702
+ "future-adapter-lane",
703
+ "none",
704
+ "No standalone Codex prompt-template loader is evidenced; generated workflow prompts live in skills and docs.",
705
+ codexUnsupportedEvidence
706
+ ),
707
+ family(
708
+ "codex-hooks",
709
+ ["blocked Codex hook generated files"],
710
+ "blocked",
711
+ "future-adapter-lane",
712
+ "none",
713
+ "Codex hook generation is blocked pending a focused hook schema/trust witness.",
714
+ codexBlockedEvidence
715
+ ),
716
+ family(
717
+ "codex-plugins",
718
+ [".codex-plugin/plugin.json", "marketplace.json", "plugin skills/MCP/apps"],
719
+ "ready",
720
+ "future-adapter-lane",
721
+ "none",
722
+ "Plugins are evidenced but optional/explicit-install; create/import does not generate or auto-install plugins by default.",
723
+ codexEvidence
724
+ ),
725
+ family(
726
+ "codex-mcp-config",
727
+ ["~/.codex/config.toml#mcp_servers", "plugin MCP via .mcp.json/plugin.json"],
728
+ "ready",
729
+ "future-adapter-lane",
730
+ "none",
731
+ "MCP is evidenced but optional; create/import does not generate MCP servers by default.",
732
+ codexEvidence
733
+ ),
734
+ family(
735
+ "codex-output-schema",
736
+ [".vibe/schemas/architecture-agent-review.schema.json"],
737
+ "ready",
738
+ "I-15A-create-import-cli-ux-selected-harness",
739
+ "writeGeneratedArtifacts",
740
+ "codex exec --output-schema is evidenced and the generated architecture runner passes the schema file explicitly.",
741
+ codexEvidence
742
+ )
743
+ ]
744
+ };
745
+ var rendererExtensionPoint = (rendererId, adapterId, support, outputKind, generatedAssetFamilies, blockedAssetFamilies, summary, implementationBoundary, evidence, evidenceRefs = evidenceRefsForEvidence(evidence)) => ({
746
+ rendererId,
747
+ adapterId,
748
+ support,
749
+ outputKind,
750
+ generatedAssetFamilies,
751
+ blockedAssetFamilies,
752
+ summary,
753
+ implementationBoundary,
754
+ noFallbackToPi: true,
755
+ evidence,
756
+ evidenceRefs
757
+ });
758
+ var piRendererExtensionPoint = rendererExtensionPoint(
759
+ "renderPiSkill",
760
+ "pi",
761
+ "ready",
762
+ "pi-skill",
763
+ ["pi-skill-files", "pi-prompt-templates"],
764
+ ["pi-extensions", "pi-package-manifest", "agents", "plan-mode"],
765
+ "Renderer extension point for existing validated Pi skill/prompt template assets.",
766
+ "The renderer boundary delegates to the existing Pi template/writePiHarnessAssets path; it does not broaden executable extension support.",
767
+ piEvidence
768
+ );
769
+ var claudeRendererExtensionPoint = rendererExtensionPoint(
770
+ "renderClaudeCodeSkillOrCommand",
771
+ "claude-code",
772
+ "ready",
773
+ "claude-code-skill-or-command",
774
+ ["claude-custom-commands"],
775
+ [
776
+ "claude-project-skills",
777
+ "claude-hooks",
778
+ "claude-plugins",
779
+ "claude-mcp-config",
780
+ "claude-standalone-prompt-templates"
781
+ ],
782
+ "Renderer extension point for Claude Code native custom command assets.",
783
+ "The renderer emits CLAUDE.md plus .claude/commands/vibe-* Markdown/YAML command files; skills/hooks/plugins/MCP remain documented opt-in surfaces and do not fall back to Pi.",
784
+ claudeEvidence
785
+ );
786
+ var codexRendererExtensionPoint = rendererExtensionPoint(
787
+ "renderCodexSkillOrCommand",
788
+ "codex",
789
+ "ready",
790
+ "codex-skill-or-command",
791
+ ["codex-project-skills", "codex-project-config", "codex-output-schema"],
792
+ [
793
+ "codex-native-commands",
794
+ "codex-standalone-prompt-templates",
795
+ "codex-hooks",
796
+ "codex-plugins",
797
+ "codex-mcp-config",
798
+ "agents",
799
+ "plan-mode"
800
+ ],
801
+ "Renderer extension point for Codex native project-local skill assets.",
802
+ "The renderer emits AGENTS.md, .codex/skills/vibe-* SKILL.md files, and conservative .codex/config.toml; native slash commands, prompt templates, hooks, plugins, MCP, agents, and plan mode do not fall back to Pi.",
803
+ codexEvidence
804
+ );
805
+ var HARNESS_RENDERER_EXTENSION_POINTS = [
806
+ piRendererExtensionPoint,
807
+ claudeRendererExtensionPoint,
808
+ codexRendererExtensionPoint
809
+ ];
810
+ var renderPiSkill = () => piRendererExtensionPoint;
811
+ var renderClaudeCodeSkillOrCommand = () => claudeRendererExtensionPoint;
812
+ var renderCodexSkillOrCommand = () => codexRendererExtensionPoint;
813
+ var piAdapter = {
814
+ id: "pi",
815
+ displayName: "Pi Coding Agent",
816
+ capabilityMatrix: piCapabilities,
817
+ generatedFileManifest: piGeneratedManifest,
818
+ assetWriter: {
819
+ strategy: "pi-native-assets-and-context",
820
+ contextFiles: ["AGENTS.md", "CLAUDE.md"],
821
+ nativeAssetFamilies: ["pi-skill-files", "pi-prompt-templates"],
822
+ blockedAssetFamilies: ["pi-extensions", "pi-package-manifest", "agents", "plan-mode"],
823
+ unsupportedFeaturePolicy: "block",
824
+ noFallbackToPi: true
825
+ },
826
+ invocationModel: {
827
+ support: "ready",
828
+ binary: "pi",
829
+ nonInteractiveCommand: ["pi", "--approve", "--no-session", "--mode", "json", "-p", "<prompt>"],
830
+ interactiveCommand: ["pi"],
831
+ projectRootFlag: null,
832
+ requiresGitRepository: false,
833
+ missingRuntimeDiagnostic: "Pi CLI/auth/runtime unavailable for selected harness.",
834
+ evidence: piEvidence,
835
+ evidenceRefs: piEvidenceRefs
836
+ },
837
+ structuredOutput: {
838
+ support: "ready",
839
+ strategy: "json-event-parse-and-adapter-validation",
840
+ schemaFlag: null,
841
+ finalMessageCarrier: "JSON event stream parsed by adapter-side validator",
842
+ failClosedWhenMissing: true,
843
+ evidence: piEvidence,
844
+ evidenceRefs: piEvidenceRefs
845
+ },
846
+ verificationRunnerInvocation: {
847
+ support: "pending-live",
848
+ recommendedCommand: ["pi", "--approve", "--no-session", "--mode", "json", "-p", "<prompt>"],
849
+ defaultPermissionMode: "project trust required; default-deny tools unless explicitly allowed",
850
+ expectedStructuredOutput: "json-event-parse-and-adapter-validation",
851
+ unavailableRuntimeBehavior: "blocked-missing-prerequisite",
852
+ evidence: piEvidence,
853
+ evidenceRefs: dirtyTreeRunnerEvidenceRefs
854
+ },
855
+ securityTrustPolicy: {
856
+ support: "ready",
857
+ projectTrustRequired: true,
858
+ projectContextAutoload: ["AGENTS.md", "CLAUDE.md"],
859
+ sandbox: "not provided by Pi; use OS/container sandbox for unattended runs",
860
+ permissionModel: "--approve/--no-approve project trust plus adapter default-deny command policy",
861
+ credentials: "operator-auth-required",
862
+ destructiveOperations: "forbidden",
863
+ externalIntegrations: "disabled-by-default",
864
+ trustBoundary: "Project-local .pi resources and TypeScript extensions require project trust; create/import emits only non-executable skills/prompts/context.",
865
+ evidence: piEvidence,
866
+ evidenceRefs: piEvidenceRefs
867
+ },
868
+ rendererExtensionPoints: [piRendererExtensionPoint],
869
+ unsupportedFeatureBehavior: {
870
+ policy: "block",
871
+ diagnosticCode: "UNSUPPORTED_HARNESS_FEATURE",
872
+ message: "Unsupported Pi adapter features block instead of silently no-oping.",
873
+ blockedFamilies: ["pi-extensions", "pi-package-manifest", "agents", "plan-mode"]
874
+ },
875
+ handoffInstructions: handoffInstructionsFor("pi"),
876
+ runtimePrerequisiteDiagnostic: runtimePrerequisiteDiagnostic(
877
+ "pi",
878
+ "Pi Coding Agent",
879
+ "Pi CLI/auth/runtime unavailable for selected harness."
880
+ ),
881
+ witnessPlan: {
882
+ configWitnesses: ["config accepts agenticHarness=pi"],
883
+ createWitnesses: ["create pi preserves existing .pi skills/prompts and AGENTS.md/CLAUDE.md"],
884
+ importWitnesses: ["import pi preserves existing behavior and idempotent Pi assets"],
885
+ negativeWitnesses: ["unsupported feature families are listed as blocked"],
886
+ liveRuntimeWitness: "pending-live"
887
+ },
888
+ createImportSelectable: true
889
+ };
890
+ var claudeAdapter = {
891
+ id: "claude-code",
892
+ displayName: "Claude Code",
893
+ capabilityMatrix: claudeCapabilities,
894
+ generatedFileManifest: claudeGeneratedManifest,
895
+ assetWriter: {
896
+ strategy: "claude-native-assets-and-context",
897
+ contextFiles: ["CLAUDE.md"],
898
+ nativeAssetFamilies: ["claude-custom-commands"],
899
+ blockedAssetFamilies: [
900
+ "claude-project-skills",
901
+ "claude-hooks",
902
+ "claude-plugins",
903
+ "claude-mcp-config",
904
+ "claude-explicit-agents-json",
905
+ "claude-standalone-prompt-templates"
906
+ ],
907
+ unsupportedFeaturePolicy: "block",
908
+ noFallbackToPi: true
909
+ },
910
+ invocationModel: {
911
+ support: "ready",
912
+ binary: "claude",
913
+ nonInteractiveCommand: [
914
+ "claude",
915
+ "-p",
916
+ "--output-format",
917
+ "json",
918
+ "--json-schema",
919
+ "<schema-json>",
920
+ "--permission-mode",
921
+ "plan",
922
+ "--allowedTools",
923
+ "Read,Grep,Glob,Bash(git diff:*),Bash(git status:*),Bash(git ls-files:*)",
924
+ "--disallowedTools",
925
+ "Edit,Write",
926
+ "--no-session-persistence",
927
+ "<prompt>"
928
+ ],
929
+ interactiveCommand: ["claude"],
930
+ projectRootFlag: "--add-dir",
931
+ requiresGitRepository: false,
932
+ missingRuntimeDiagnostic: "Claude Code CLI/auth/runtime/trust unavailable for selected harness.",
933
+ evidence: claudeEvidence,
934
+ evidenceRefs: claudeEvidenceRefs
935
+ },
936
+ structuredOutput: {
937
+ support: "ready",
938
+ strategy: "native-json-schema",
939
+ schemaFlag: "--json-schema",
940
+ finalMessageCarrier: "Claude Code print-mode JSON output validated by --json-schema plus adapter-side checks",
941
+ failClosedWhenMissing: true,
942
+ evidence: claudeEvidence,
943
+ evidenceRefs: claudeEvidenceRefs
944
+ },
945
+ verificationRunnerInvocation: {
946
+ support: "pending-live",
947
+ recommendedCommand: [
948
+ "claude",
949
+ "-p",
950
+ "--output-format",
951
+ "json",
952
+ "--json-schema",
953
+ "<schema-json>",
954
+ "--permission-mode",
955
+ "plan",
956
+ "--allowedTools",
957
+ "Read,Grep,Glob,Bash(git diff:*),Bash(git status:*),Bash(git ls-files:*)",
958
+ "--disallowedTools",
959
+ "Edit,Write",
960
+ "--no-session-persistence",
961
+ "<prompt>"
962
+ ],
963
+ defaultPermissionMode: "plan with Read/Grep/Glob and read-only git Bash allowlist; Edit/Write denied",
964
+ expectedStructuredOutput: "native-json-schema",
965
+ unavailableRuntimeBehavior: "blocked-missing-prerequisite",
966
+ evidence: claudeEvidence,
967
+ evidenceRefs: dirtyTreeRunnerEvidenceRefs
968
+ },
969
+ securityTrustPolicy: {
970
+ support: "ready",
971
+ projectTrustRequired: true,
972
+ projectContextAutoload: ["CLAUDE.md"],
973
+ sandbox: "permission modes and allowed/disallowed tools; no OS sandbox claim",
974
+ permissionModel: "--permission-mode default|acceptEdits|auto|dontAsk|plan|bypassPermissions with explicit --allowedTools/--disallowedTools; dangerous skip-permissions is not generated",
975
+ credentials: "operator-auth-required",
976
+ destructiveOperations: "approval-required",
977
+ externalIntegrations: "disabled-by-default",
978
+ trustBoundary: "Create/import emits CLAUDE.md and non-executing .claude/commands/vibe-* prompt assets. Hooks, plugins, MCP, and agents remain opt-in/trust-sensitive and --bare/--safe-mode disable generated native assets.",
979
+ evidence: claudeEvidence,
980
+ evidenceRefs: claudeEvidenceRefs
981
+ },
982
+ rendererExtensionPoints: [claudeRendererExtensionPoint],
983
+ unsupportedFeatureBehavior: {
984
+ policy: "block",
985
+ diagnosticCode: "UNSUPPORTED_HARNESS_FEATURE",
986
+ message: "Unsupported Claude Code standalone prompt-template assets block instead of silently falling back to Pi assets.",
987
+ blockedFamilies: ["claude-standalone-prompt-templates"]
988
+ },
989
+ handoffInstructions: handoffInstructionsFor("claude-code"),
990
+ runtimePrerequisiteDiagnostic: runtimePrerequisiteDiagnostic(
991
+ "claude",
992
+ "Claude Code",
993
+ "Claude Code CLI/auth/trust/runtime unavailable for selected harness."
994
+ ),
995
+ witnessPlan: {
996
+ configWitnesses: ["config accepts agenticHarness=claude-code"],
997
+ createWitnesses: [
998
+ "create claude-code writes CLAUDE.md, .claude/commands/vibe-* and no .pi assets"
999
+ ],
1000
+ importWitnesses: [
1001
+ "import claude-code writes CLAUDE.md, .claude/commands/vibe-* and no .pi assets"
1002
+ ],
1003
+ negativeWitnesses: [
1004
+ "Claude standalone prompt templates are unsupported and no Pi fallback assets are generated"
1005
+ ],
1006
+ liveRuntimeWitness: "pending-live"
1007
+ },
1008
+ createImportSelectable: true
1009
+ };
1010
+ var codexAdapter = {
1011
+ id: "codex",
1012
+ displayName: "Codex CLI",
1013
+ capabilityMatrix: codexCapabilities,
1014
+ generatedFileManifest: codexGeneratedManifest,
1015
+ assetWriter: {
1016
+ strategy: "codex-native-assets-and-context",
1017
+ contextFiles: ["AGENTS.md"],
1018
+ nativeAssetFamilies: ["codex-project-skills", "codex-project-config"],
1019
+ blockedAssetFamilies: [
1020
+ "codex-native-commands",
1021
+ "codex-standalone-prompt-templates",
1022
+ "codex-hooks",
1023
+ "codex-plugins",
1024
+ "codex-mcp-config",
1025
+ "agents",
1026
+ "plan-mode"
1027
+ ],
1028
+ unsupportedFeaturePolicy: "block",
1029
+ noFallbackToPi: true
1030
+ },
1031
+ invocationModel: {
1032
+ support: "ready",
1033
+ binary: "codex",
1034
+ nonInteractiveCommand: [
1035
+ "codex",
1036
+ "exec",
1037
+ "-c",
1038
+ 'approval_policy="never"',
1039
+ "--cd",
1040
+ ".",
1041
+ "--sandbox",
1042
+ "read-only",
1043
+ "--json",
1044
+ "--output-schema",
1045
+ "<schema-file>",
1046
+ "--output-last-message",
1047
+ "<last-message-file>",
1048
+ "<prompt>"
1049
+ ],
1050
+ interactiveCommand: ["codex"],
1051
+ projectRootFlag: "--cd",
1052
+ requiresGitRepository: false,
1053
+ missingRuntimeDiagnostic: "Codex CLI/auth/runtime unavailable for selected harness.",
1054
+ evidence: codexEvidence,
1055
+ evidenceRefs: codexEvidenceRefs
1056
+ },
1057
+ structuredOutput: {
1058
+ support: "ready",
1059
+ strategy: "native-output-schema",
1060
+ schemaFlag: "--output-schema",
1061
+ finalMessageCarrier: "--output-last-message file plus JSONL events",
1062
+ failClosedWhenMissing: true,
1063
+ evidence: codexEvidence,
1064
+ evidenceRefs: codexEvidenceRefs
1065
+ },
1066
+ verificationRunnerInvocation: {
1067
+ support: "pending-live",
1068
+ recommendedCommand: [
1069
+ "codex",
1070
+ "exec",
1071
+ "-c",
1072
+ 'approval_policy="never"',
1073
+ "--cd",
1074
+ ".",
1075
+ "--sandbox",
1076
+ "read-only",
1077
+ "--json",
1078
+ "--output-schema",
1079
+ "<schema-file>",
1080
+ "--output-last-message",
1081
+ "<last-message-file>",
1082
+ "<prompt>"
1083
+ ],
1084
+ defaultPermissionMode: "read-only sandbox with approval_policy=never config override",
1085
+ expectedStructuredOutput: "native-output-schema",
1086
+ unavailableRuntimeBehavior: "blocked-missing-prerequisite",
1087
+ evidence: codexEvidence,
1088
+ evidenceRefs: dirtyTreeRunnerEvidenceRefs
1089
+ },
1090
+ securityTrustPolicy: {
1091
+ support: "ready",
1092
+ projectTrustRequired: true,
1093
+ projectContextAutoload: ["AGENTS.md"],
1094
+ sandbox: "--sandbox read-only|workspace-write|danger-full-access",
1095
+ permissionModel: "approval_policy config override plus --sandbox read-only|workspace-write|danger-full-access selection",
1096
+ credentials: "operator-auth-required",
1097
+ destructiveOperations: "approval-required",
1098
+ externalIntegrations: "disabled-by-default",
1099
+ trustBoundary: "Create/import emits AGENTS.md, non-executable .codex/skills/vibe-* SKILL.md resources, and conservative .codex/config.toml. Runners still pass explicit read-only sandbox and approval_policy=never flags; commands, hooks, plugins, MCP, agents, and plan mode remain unsupported/blocked/optional with no Pi fallback.",
1100
+ evidence: codexEvidence,
1101
+ evidenceRefs: codexEvidenceRefs
1102
+ },
1103
+ rendererExtensionPoints: [codexRendererExtensionPoint],
1104
+ unsupportedFeatureBehavior: {
1105
+ policy: "block",
1106
+ diagnosticCode: "UNSUPPORTED_HARNESS_FEATURE",
1107
+ message: "Unsupported, blocked, or optional-not-generated Codex asset families do not silently fall back to Pi assets.",
1108
+ blockedFamilies: [
1109
+ "codex-native-commands",
1110
+ "codex-standalone-prompt-templates",
1111
+ "codex-hooks",
1112
+ "codex-plugins",
1113
+ "codex-mcp-config",
1114
+ "agents",
1115
+ "plan-mode"
1116
+ ]
1117
+ },
1118
+ handoffInstructions: handoffInstructionsFor("codex"),
1119
+ runtimePrerequisiteDiagnostic: runtimePrerequisiteDiagnostic(
1120
+ "codex",
1121
+ "Codex CLI",
1122
+ "Codex CLI/auth/runtime unavailable for selected harness."
1123
+ ),
1124
+ witnessPlan: {
1125
+ configWitnesses: ["config accepts agenticHarness=codex"],
1126
+ createWitnesses: [
1127
+ "create codex writes AGENTS.md, .codex/skills/vibe-*/SKILL.md, .codex/config.toml, runner schema metadata, and no .pi assets"
1128
+ ],
1129
+ importWitnesses: [
1130
+ "import codex writes AGENTS.md, .codex/skills/vibe-*/SKILL.md, .codex/config.toml, and no .pi assets"
1131
+ ],
1132
+ negativeWitnesses: [
1133
+ "Codex native slash commands, standalone prompt templates, hooks, agents, plan mode, plugins, and MCP are unsupported/blocked/optional with no Pi fallback assets generated"
1134
+ ],
1135
+ liveRuntimeWitness: "pending-live"
1136
+ },
1137
+ createImportSelectable: true
1138
+ };
1139
+ var HARNESS_ADAPTERS = [piAdapter, claudeAdapter, codexAdapter];
1140
+ var HARNESS_ADAPTER_REGISTRY = {
1141
+ schemaVersion: HARNESS_ADAPTER_REGISTRY_SCHEMA_VERSION,
1142
+ supportedAdapterIds: SUPPORTED_HARNESS_ADAPTER_IDS,
1143
+ adapters: HARNESS_ADAPTERS,
1144
+ rendererExtensionPoints: HARNESS_RENDERER_EXTENSION_POINTS
1145
+ };
1146
+ var isSupportedHarnessAdapterId = (value) => SUPPORTED_HARNESS_ADAPTER_IDS.includes(value);
1147
+ var getHarnessAdapter = (adapterId) => HARNESS_ADAPTERS.find((adapter) => adapter.id === adapterId);
1148
+ var listHarnessAdapters = () => [...HARNESS_ADAPTERS];
1149
+ var getHarnessAdapterRegistry = () => HARNESS_ADAPTER_REGISTRY;
1150
+
1151
+ // src/capabilities/index.ts
1152
+ var PI_ADAPTER_ID = "pi";
1153
+ var PI_ADAPTER_CAPABILITY_SCHEMA_VERSION = "pi-adapter-capability-matrix/v1";
1154
+ var VIBE_ENGINEER_SKILLS = [...SKILL_IDS];
1155
+ var known2 = (source, notes) => ({
1156
+ state: "known",
1157
+ source,
1158
+ notes
1159
+ });
1160
+ var unknown = (source, notes) => ({
1161
+ state: "unknown",
1162
+ source,
1163
+ notes
1164
+ });
1165
+ var deferred = (source, notes) => ({
1166
+ state: "deferred",
1167
+ source,
1168
+ notes
1169
+ });
1170
+ var surface = (evidence, support, details, downstreamConsequence) => ({
1171
+ evidence,
1172
+ support,
1173
+ details,
1174
+ downstreamConsequence
1175
+ });
1176
+ var piSkill = (skillId) => ({
1177
+ skillId,
1178
+ nativeCommand: `/skill:${skillId}`,
1179
+ resourceFamily: "pi-skill-files",
1180
+ evidence: known2(
1181
+ "DL-03 skill protocols + DL-06 pi skills decision",
1182
+ "The six locked skills are generated as Agent Skills-compatible SKILL.md resources."
1183
+ ),
1184
+ readiness: "ready",
1185
+ protocolSource: "DL-03-skill-protocols.md"
1186
+ });
1187
+ var nonPiAdapter = (adapterId, displayName, evidence) => ({
1188
+ adapterId,
1189
+ displayName,
1190
+ evidenceStatus: evidence,
1191
+ versionCompatibility: {
1192
+ harnessName: displayName,
1193
+ harnessVersionRange: "unknown",
1194
+ resourceFormatVersion: "unknown",
1195
+ runtimeRequirements: ["future evidence-backed decision required"],
1196
+ compatibilityEvidence: evidence
1197
+ },
1198
+ skillsCommandsSurface: {
1199
+ ...surface(
1200
+ evidence,
1201
+ evidence.state === "deferred" ? "deferred" : "unknown",
1202
+ "No v1 native generated-resource contract is authorized for this harness.",
1203
+ "Any dependent selection or generation for this harness must block until a future adapter decision supplies evidence."
1204
+ ),
1205
+ nativeFormat: "unknown",
1206
+ autoloadDiscovery: ["unknown"],
1207
+ skills: []
1208
+ },
1209
+ promptTemplateSurface: surface(
1210
+ evidence,
1211
+ evidence.state === "deferred" ? "deferred" : "unknown",
1212
+ "Prompt template semantics are not evidenced for v1.",
1213
+ "Prompt generation must block for this harness."
1214
+ ),
1215
+ hookEventSupport: surface(
1216
+ evidence,
1217
+ evidence.state === "deferred" ? "deferred" : "unknown",
1218
+ "Hook/event semantics are not evidenced for v1.",
1219
+ "Hook, tool, event, UI, plan-mode, or subagent generation must block."
1220
+ ),
1221
+ subagentCapability: {
1222
+ ...surface(
1223
+ evidence,
1224
+ evidence.state === "deferred" ? "deferred" : "unknown",
1225
+ "Subagent capability is not evidenced for v1.",
1226
+ "Subagent-dependent behavior must block."
1227
+ ),
1228
+ implementationKind: "unsupported",
1229
+ requiresGeneratedExtension: false
1230
+ },
1231
+ planModeCapability: {
1232
+ ...surface(
1233
+ evidence,
1234
+ evidence.state === "deferred" ? "deferred" : "unknown",
1235
+ "Plan-mode capability is not evidenced for v1.",
1236
+ "Plan-mode-dependent behavior must block."
1237
+ ),
1238
+ implementationKind: "unsupported",
1239
+ requiresGeneratedExtension: false
1240
+ },
1241
+ contextFileConventions: surface(
1242
+ evidence,
1243
+ evidence.state === "deferred" ? "deferred" : "unknown",
1244
+ "Context-file conventions are not evidenced for v1.",
1245
+ "Context file generation must block for this harness."
1246
+ ),
1247
+ commandInvocationModel: {
1248
+ interactive: surface(
1249
+ evidence,
1250
+ "unknown",
1251
+ "Unknown invocation model.",
1252
+ "Invocation must block."
1253
+ ),
1254
+ printMode: surface(
1255
+ evidence,
1256
+ "unknown",
1257
+ "Unknown print/non-interactive model.",
1258
+ "Invocation must block."
1259
+ ),
1260
+ jsonMode: surface(
1261
+ evidence,
1262
+ "unknown",
1263
+ "Unknown machine-readable event model.",
1264
+ "Automation must block."
1265
+ ),
1266
+ rpcMode: surface(evidence, "unknown", "Unknown RPC model.", "Automation must block."),
1267
+ sdk: surface(evidence, "unknown", "Unknown SDK model.", "Automation must block."),
1268
+ shellCommandPolicy: "blocked"
1269
+ },
1270
+ generatedFiles: {
1271
+ evidence,
1272
+ manifestSchemaVersion: "pi-generated-file-manifest/v1",
1273
+ families: [],
1274
+ downstreamConsequence: "No non-pi generated files may be emitted by v1 lanes."
1275
+ },
1276
+ packageDistribution: {
1277
+ ...surface(
1278
+ evidence,
1279
+ evidence.state === "deferred" ? "deferred" : "unknown",
1280
+ "Package distribution semantics are not evidenced for v1.",
1281
+ "Package generation or install claims must block."
1282
+ ),
1283
+ distributionKinds: [],
1284
+ trustUpdatePolicy: "blocked until future adapter evidence exists"
1285
+ },
1286
+ securityTrust: {
1287
+ evidence,
1288
+ projectTrustRequired: false,
1289
+ extensionExecution: "none",
1290
+ commandPolicy: "default-deny",
1291
+ sandboxCapability: "unknown",
1292
+ credentialPolicy: "unknown-blocked",
1293
+ destructiveOperations: "forbidden",
1294
+ externalIntegration: "unknown-blocked",
1295
+ trustBoundary: "No v1 trust boundary is declared; non-pi rows are non-selectable."
1296
+ },
1297
+ capabilityFlags: {
1298
+ skills: false,
1299
+ prompts: false,
1300
+ hooks: false,
1301
+ extensions: false,
1302
+ subagents: false,
1303
+ planMode: false,
1304
+ contextFiles: false,
1305
+ rpc: false,
1306
+ sdk: false,
1307
+ jsonMode: false,
1308
+ packages: false,
1309
+ ui: false,
1310
+ unsupportedFeaturePolicy: "block"
1311
+ },
1312
+ realBoundaryWitness: {
1313
+ evidence,
1314
+ boundaryStatus: evidence.state === "deferred" ? "deferred" : "unknown",
1315
+ producer: "future adapter lane",
1316
+ carrier: "future generated-resource manifest",
1317
+ consumer: "future harness runtime/API consumer",
1318
+ evidencePath: "future evidence-backed decision required",
1319
+ runtimeExecutionClaim: "not-claimed"
1320
+ },
1321
+ selection: {
1322
+ manifestSelectable: false,
1323
+ createImportSelectable: false,
1324
+ readiness: evidence.state === "blocked" ? "blocked" : evidence.state === "deferred" ? "deferred" : "unknown",
1325
+ reason: "Non-pi harnesses are explicit future/deferred/unknown rows and are never ready or selectable in v1."
1326
+ }
1327
+ });
1328
+ var piAdapter2 = {
1329
+ adapterId: PI_ADAPTER_ID,
1330
+ displayName: "Pi Coding Agent",
1331
+ evidenceStatus: known2(
1332
+ "DL-06-agentic-harness-integrations.md",
1333
+ "Pi is the only v1 live adapter target; this row declares the typed manifest contract and does not claim live runtime execution."
1334
+ ),
1335
+ versionCompatibility: {
1336
+ harnessName: "pi",
1337
+ harnessVersionRange: "unknown until I-14B/live runtime records installed pi version",
1338
+ resourceFormatVersion: "Agent Skills standard plus pi-specific prompt/template/extension/package resource formats",
1339
+ runtimeRequirements: [
1340
+ "Node/TypeScript extension runtime",
1341
+ "project trust for project-local .pi resources",
1342
+ "DL-22 default-deny command policy"
1343
+ ],
1344
+ compatibilityEvidence: known2(
1345
+ "DL-06 pi mechanisms and explicit limitations",
1346
+ "Design evidence is known; live runtime compatibility remains I-14B pending-live."
1347
+ )
1348
+ },
1349
+ skillsCommandsSurface: {
1350
+ ...surface(
1351
+ known2("DL-03 + DL-06", "All six locked skills map to pi Agent Skills slash commands."),
1352
+ "ready",
1353
+ "Generate `.pi/skills/<skill>/SKILL.md` and/or `.agents/skills/<skill>/SKILL.md` assets exposing `/skill:<skill>`.",
1354
+ "Downstream lanes may consume the typed mapping, but I-14B owns actual file generation/runtime loading."
1355
+ ),
1356
+ nativeFormat: "Agent Skills SKILL.md",
1357
+ autoloadDiscovery: [".pi/skills/<skill>/SKILL.md", ".agents/skills/<skill>/SKILL.md"],
1358
+ skills: VIBE_ENGINEER_SKILLS.map((skillId) => piSkill(skillId))
1359
+ },
1360
+ promptTemplateSurface: surface(
1361
+ known2(
1362
+ "DL-06 pi prompt templates",
1363
+ "Pi prompt templates are `.pi/prompts/*.md` markdown files with filename-derived slash commands and frontmatter/arguments."
1364
+ ),
1365
+ "ready",
1366
+ "Reusable slash-command prompt templates may be declared in `.pi/prompts/<name>.md`.",
1367
+ "Downstream generation must validate template family metadata before writing files."
1368
+ ),
1369
+ hookEventSupport: surface(
1370
+ known2(
1371
+ "DL-06 pi extensions",
1372
+ "Pi TypeScript extensions can register commands/tools and subscribe to events; deterministic gates must not be advisory-only."
1373
+ ),
1374
+ "ready",
1375
+ "Optional `.pi/extensions/**` TypeScript extensions can provide commands, tools, hooks/events, permission gates, and dynamic resources.",
1376
+ "Executable extension files require DL-22 trust/security metadata and later runtime proof."
1377
+ ),
1378
+ subagentCapability: {
1379
+ ...surface(
1380
+ known2(
1381
+ "DL-06 explicit pi limitations",
1382
+ "Pi does not ship built-in subagents; subagent behavior is extension/package-built only."
1383
+ ),
1384
+ "blocked",
1385
+ "No built-in subagent claim is made in I-14A.",
1386
+ "Any subagent-dependent lane must wait for generated extension/package implementation and live proof."
1387
+ ),
1388
+ implementationKind: "extension-built",
1389
+ requiresGeneratedExtension: true
1390
+ },
1391
+ planModeCapability: {
1392
+ ...surface(
1393
+ known2(
1394
+ "DL-06 explicit pi limitations",
1395
+ "Pi does not ship built-in plan mode; plan-mode-like behavior is extension/package-built only."
1396
+ ),
1397
+ "blocked",
1398
+ "No built-in plan-mode claim is made in I-14A.",
1399
+ "Any plan-mode-dependent lane must wait for generated extension/package implementation and live proof."
1400
+ ),
1401
+ implementationKind: "extension-built",
1402
+ requiresGeneratedExtension: true
1403
+ },
1404
+ contextFileConventions: surface(
1405
+ known2(
1406
+ "DL-06 context files",
1407
+ "Pi loads AGENTS.md and optional CLAUDE.md context files subject to trust and load timing."
1408
+ ),
1409
+ "ready",
1410
+ "Context file families are `AGENTS.md` and optional `CLAUDE.md`, with generated content preserving project-owned instructions.",
1411
+ "Downstream writers must use the generated-file manifest and DL-22 trust fields before emitting context files."
1412
+ ),
1413
+ commandInvocationModel: {
1414
+ interactive: surface(
1415
+ known2("DL-06 CLI modes", "Interactive mode is user-facing operation."),
1416
+ "ready",
1417
+ "User operation through `pi` interactive mode.",
1418
+ "No automation may infer machine success from prose."
1419
+ ),
1420
+ printMode: surface(
1421
+ known2("DL-06 CLI modes", "`pi -p`/`--print` is available for one-shot prompts."),
1422
+ "ready",
1423
+ "One-shot prompt mode can be used by future runtime witnesses where safe.",
1424
+ "Future runtime lanes must validate machine-readable outputs where they rely on automation."
1425
+ ),
1426
+ jsonMode: surface(
1427
+ known2("DL-06 JSON mode", "`--mode json` provides event-stream observation."),
1428
+ "ready",
1429
+ "JSON mode is the preferred observation surface for event-stream runtime proof.",
1430
+ "I-14A does not execute live pi runtime; I-14B owns it."
1431
+ ),
1432
+ rpcMode: surface(
1433
+ known2("DL-06 RPC", "RPC `get_commands` can observe generated commands."),
1434
+ "ready",
1435
+ "RPC command listing is a preferred real-boundary observation point.",
1436
+ "I-14A proves manifest API consumption only; live pi RPC is pending I-14B."
1437
+ ),
1438
+ sdk: surface(
1439
+ known2("DL-06 SDK", "SDK/ResourceLoader APIs can observe generated resources."),
1440
+ "ready",
1441
+ "SDK resource loading can be used by future live witnesses.",
1442
+ "I-14A does not claim SDK runtime loading."
1443
+ ),
1444
+ shellCommandPolicy: "default-deny"
1445
+ },
1446
+ generatedFiles: {
1447
+ evidence: known2(
1448
+ "DL-06 pi generated-file families",
1449
+ "The generated-file manifest enumerates every permitted pi family and its owner/trust/version/consumer fields."
1450
+ ),
1451
+ manifestSchemaVersion: "pi-generated-file-manifest/v1",
1452
+ families: [...GENERATED_FILE_FAMILY_IDS],
1453
+ downstreamConsequence: "Downstream lanes must validate the manifest before generating pi files; malformed or missing family metadata blocks."
1454
+ },
1455
+ packageDistribution: {
1456
+ ...surface(
1457
+ known2(
1458
+ "DL-06 pi packages",
1459
+ "Pi packages may declare resources through a package.json `pi` key; trust/update behavior must be explicit."
1460
+ ),
1461
+ "ready",
1462
+ "Primary v1 generation uses project-local files; optional package distribution is declared but not generated in I-14A.",
1463
+ "Package distribution requires explicit generated-file manifest metadata and later lane implementation."
1464
+ ),
1465
+ distributionKinds: ["project-local-files", "pi-package"],
1466
+ trustUpdatePolicy: "Project-local files require project trust; package install/update/trust behavior must be explicit before use."
1467
+ },
1468
+ securityTrust: {
1469
+ evidence: known2(
1470
+ "DL-22 + DL-06",
1471
+ "Adapter declares project trust, executable extension, command policy, sandbox non-claims, credential, destructive-operation, and external-integration defaults."
1472
+ ),
1473
+ projectTrustRequired: true,
1474
+ extensionExecution: "typescript-extension",
1475
+ commandPolicy: "default-deny",
1476
+ sandboxCapability: "not_provided",
1477
+ credentialPolicy: "no-credentials-required",
1478
+ destructiveOperations: "forbidden",
1479
+ externalIntegration: "disabled-by-default",
1480
+ trustBoundary: "Project-local pi resources and TypeScript extensions run only after trust; I-14A claims no OS/network/process sandbox beyond policy declarations."
1481
+ },
1482
+ capabilityFlags: {
1483
+ skills: true,
1484
+ prompts: true,
1485
+ hooks: true,
1486
+ extensions: true,
1487
+ subagents: false,
1488
+ planMode: false,
1489
+ contextFiles: true,
1490
+ rpc: true,
1491
+ sdk: true,
1492
+ jsonMode: true,
1493
+ packages: true,
1494
+ ui: false,
1495
+ unsupportedFeaturePolicy: "block"
1496
+ },
1497
+ realBoundaryWitness: {
1498
+ evidence: known2(
1499
+ "I-14A implementer witness",
1500
+ "Actual package API is consumed by fixture generator/validator and persisted downstream summary; live pi runtime remains out of lane."
1501
+ ),
1502
+ boundaryStatus: "implemented",
1503
+ producer: "@vibe-engineer/adapter-pi subpath APIs under packages/adapters/pi/src/{capabilities,generated-file-manifest,schema}",
1504
+ carrier: "packages/adapters/pi/fixtures/manifest and examples/harness-integrations/pi/manifest-fixtures JSON carriers",
1505
+ consumer: ".vibe/work/I-14A-pi-adapter-capability-generated-file-manifest/witnesses/manifest-api-consumer.mjs",
1506
+ evidencePath: ".vibe/work/I-14A-pi-adapter-capability-generated-file-manifest/downstream-summary.json",
1507
+ runtimeExecutionClaim: "not-claimed"
1508
+ },
1509
+ selection: {
1510
+ manifestSelectable: true,
1511
+ createImportSelectable: false,
1512
+ readiness: "ready",
1513
+ reason: "Ready only as a typed manifest/API contract for downstream consumers; create/import selected-harness behavior belongs to I-15A."
1514
+ }
1515
+ };
1516
+ var PI_ADAPTER_CAPABILITY_MATRIX = {
1517
+ schemaVersion: PI_ADAPTER_CAPABILITY_SCHEMA_VERSION,
1518
+ producedByLane: "I-14A-pi-adapter-capability-generated-file-manifest",
1519
+ adapterPackage: "@vibe-engineer/adapter-pi",
1520
+ adapters: [
1521
+ piAdapter2,
1522
+ nonPiAdapter(
1523
+ "claude-code",
1524
+ "Claude Code",
1525
+ deferred(
1526
+ "DL-06 other harness disposition",
1527
+ "No local authoritative Claude Code harness generated-resource docs were provided for v1."
1528
+ )
1529
+ ),
1530
+ nonPiAdapter(
1531
+ "codex",
1532
+ "Codex",
1533
+ deferred(
1534
+ "DL-06 other harness disposition",
1535
+ "No local authoritative Codex harness generated-resource docs were provided for v1."
1536
+ )
1537
+ ),
1538
+ nonPiAdapter(
1539
+ "opencode",
1540
+ "OpenCode",
1541
+ deferred(
1542
+ "DL-06 other harness disposition",
1543
+ "Local pi docs mention OpenCode providers, not OpenCode harness asset semantics."
1544
+ )
1545
+ ),
1546
+ nonPiAdapter(
1547
+ "later-integrations",
1548
+ "Later integrations",
1549
+ unknown(
1550
+ "DL-06 future integrations",
1551
+ "Future harnesses require future evidence-backed decisions."
1552
+ )
1553
+ )
1554
+ ]
1555
+ };
1556
+ var getPiAdapterCapabilityMatrix = () => structuredClone(PI_ADAPTER_CAPABILITY_MATRIX);
1557
+ var validatePiAdapterCapabilityMatrix = (value) => validateCapabilityMatrix(value);
1558
+ var getAdapterCapabilityById = (matrix, adapterId) => matrix.adapters.find((adapter) => adapter.adapterId === adapterId);
1559
+ var isAdapterManifestSelectable = (matrix, adapterId) => {
1560
+ const validation = validateCapabilityMatrix(matrix);
1561
+ if (!validation.valid) {
1562
+ return false;
1563
+ }
1564
+ const adapter = getAdapterCapabilityById(matrix, adapterId);
1565
+ return adapter?.selection.manifestSelectable === true && adapter.selection.readiness === "ready";
1566
+ };
1567
+
1568
+ export {
1569
+ HARNESS_ADAPTER_CONTRACT_SCHEMA_VERSION,
1570
+ HARNESS_GENERATED_FILE_MANIFEST_SCHEMA_VERSION,
1571
+ HARNESS_ADAPTER_REGISTRY_SCHEMA_VERSION,
1572
+ SUPPORTED_HARNESS_ADAPTER_IDS,
1573
+ HARNESS_RENDERER_EXTENSION_POINTS,
1574
+ renderPiSkill,
1575
+ renderClaudeCodeSkillOrCommand,
1576
+ renderCodexSkillOrCommand,
1577
+ HARNESS_ADAPTERS,
1578
+ HARNESS_ADAPTER_REGISTRY,
1579
+ isSupportedHarnessAdapterId,
1580
+ getHarnessAdapter,
1581
+ listHarnessAdapters,
1582
+ getHarnessAdapterRegistry,
1583
+ PI_ADAPTER_ID,
1584
+ PI_ADAPTER_CAPABILITY_SCHEMA_VERSION,
1585
+ VIBE_ENGINEER_SKILLS,
1586
+ PI_ADAPTER_CAPABILITY_MATRIX,
1587
+ getPiAdapterCapabilityMatrix,
1588
+ validatePiAdapterCapabilityMatrix,
1589
+ getAdapterCapabilityById,
1590
+ isAdapterManifestSelectable
1591
+ };