@agentxm/extension-model 0.36.0 → 0.37.3

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.
Files changed (142) hide show
  1. package/dist/src/unstable/agent-capabilities/catalog.d.ts +19377 -5019
  2. package/dist/src/unstable/agent-capabilities/data/agents/adal.d.ts +31 -3
  3. package/dist/src/unstable/agent-capabilities/data/agents/adal.js +27 -3
  4. package/dist/src/unstable/agent-capabilities/data/agents/aider-desk.d.ts +19 -2
  5. package/dist/src/unstable/agent-capabilities/data/agents/aider-desk.js +17 -2
  6. package/dist/src/unstable/agent-capabilities/data/agents/amp.d.ts +57 -5
  7. package/dist/src/unstable/agent-capabilities/data/agents/amp.js +53 -5
  8. package/dist/src/unstable/agent-capabilities/data/agents/antigravity-cli.d.ts +68 -6
  9. package/dist/src/unstable/agent-capabilities/data/agents/antigravity-cli.js +61 -6
  10. package/dist/src/unstable/agent-capabilities/data/agents/antigravity.d.ts +179 -53
  11. package/dist/src/unstable/agent-capabilities/data/agents/antigravity.js +152 -42
  12. package/dist/src/unstable/agent-capabilities/data/agents/augment.d.ts +176 -64
  13. package/dist/src/unstable/agent-capabilities/data/agents/augment.js +162 -64
  14. package/dist/src/unstable/agent-capabilities/data/agents/chatgpt.d.ts +3 -1
  15. package/dist/src/unstable/agent-capabilities/data/agents/chatgpt.js +3 -1
  16. package/dist/src/unstable/agent-capabilities/data/agents/claude-ai.d.ts +2 -0
  17. package/dist/src/unstable/agent-capabilities/data/agents/claude-ai.js +2 -0
  18. package/dist/src/unstable/agent-capabilities/data/agents/claude-code.d.ts +238 -75
  19. package/dist/src/unstable/agent-capabilities/data/agents/claude-code.js +222 -78
  20. package/dist/src/unstable/agent-capabilities/data/agents/cline.d.ts +115 -55
  21. package/dist/src/unstable/agent-capabilities/data/agents/cline.js +100 -47
  22. package/dist/src/unstable/agent-capabilities/data/agents/codearts-agent.d.ts +140 -63
  23. package/dist/src/unstable/agent-capabilities/data/agents/codearts-agent.js +123 -52
  24. package/dist/src/unstable/agent-capabilities/data/agents/codebuddy.d.ts +211 -76
  25. package/dist/src/unstable/agent-capabilities/data/agents/codebuddy.js +197 -79
  26. package/dist/src/unstable/agent-capabilities/data/agents/codestudio.d.ts +46 -4
  27. package/dist/src/unstable/agent-capabilities/data/agents/codestudio.js +40 -4
  28. package/dist/src/unstable/agent-capabilities/data/agents/codex.d.ts +242 -68
  29. package/dist/src/unstable/agent-capabilities/data/agents/codex.js +213 -59
  30. package/dist/src/unstable/agent-capabilities/data/agents/command-code.d.ts +171 -70
  31. package/dist/src/unstable/agent-capabilities/data/agents/command-code.js +158 -66
  32. package/dist/src/unstable/agent-capabilities/data/agents/continue.d.ts +79 -7
  33. package/dist/src/unstable/agent-capabilities/data/agents/continue.js +75 -7
  34. package/dist/src/unstable/agent-capabilities/data/agents/cortex.d.ts +116 -9
  35. package/dist/src/unstable/agent-capabilities/data/agents/cortex.js +110 -9
  36. package/dist/src/unstable/agent-capabilities/data/agents/cowork.d.ts +4 -0
  37. package/dist/src/unstable/agent-capabilities/data/agents/cowork.js +4 -0
  38. package/dist/src/unstable/agent-capabilities/data/agents/crush.d.ts +165 -60
  39. package/dist/src/unstable/agent-capabilities/data/agents/crush.js +151 -54
  40. package/dist/src/unstable/agent-capabilities/data/agents/cursor.d.ts +230 -55
  41. package/dist/src/unstable/agent-capabilities/data/agents/cursor.js +205 -51
  42. package/dist/src/unstable/agent-capabilities/data/agents/deepagents.d.ts +100 -5
  43. package/dist/src/unstable/agent-capabilities/data/agents/deepagents.js +86 -5
  44. package/dist/src/unstable/agent-capabilities/data/agents/devin.d.ts +224 -77
  45. package/dist/src/unstable/agent-capabilities/data/agents/devin.js +203 -70
  46. package/dist/src/unstable/agent-capabilities/data/agents/dexto.d.ts +28 -2
  47. package/dist/src/unstable/agent-capabilities/data/agents/dexto.js +26 -2
  48. package/dist/src/unstable/agent-capabilities/data/agents/droid.d.ts +93 -8
  49. package/dist/src/unstable/agent-capabilities/data/agents/droid.js +87 -8
  50. package/dist/src/unstable/agent-capabilities/data/agents/firebender.d.ts +119 -8
  51. package/dist/src/unstable/agent-capabilities/data/agents/firebender.js +112 -13
  52. package/dist/src/unstable/agent-capabilities/data/agents/forgecode.d.ts +94 -6
  53. package/dist/src/unstable/agent-capabilities/data/agents/forgecode.js +82 -6
  54. package/dist/src/unstable/agent-capabilities/data/agents/gemini-app.d.ts +2 -0
  55. package/dist/src/unstable/agent-capabilities/data/agents/gemini-app.js +2 -0
  56. package/dist/src/unstable/agent-capabilities/data/agents/gemini-cli.d.ts +218 -56
  57. package/dist/src/unstable/agent-capabilities/data/agents/gemini-cli.js +193 -55
  58. package/dist/src/unstable/agent-capabilities/data/agents/github-copilot-cli.d.ts +201 -66
  59. package/dist/src/unstable/agent-capabilities/data/agents/github-copilot-cli.js +188 -69
  60. package/dist/src/unstable/agent-capabilities/data/agents/goose.d.ts +37 -3
  61. package/dist/src/unstable/agent-capabilities/data/agents/goose.js +34 -5
  62. package/dist/src/unstable/agent-capabilities/data/agents/grok-cli.d.ts +98 -6
  63. package/dist/src/unstable/agent-capabilities/data/agents/grok-cli.js +83 -6
  64. package/dist/src/unstable/agent-capabilities/data/agents/hermes.d.ts +105 -42
  65. package/dist/src/unstable/agent-capabilities/data/agents/hermes.js +87 -28
  66. package/dist/src/unstable/agent-capabilities/data/agents/ibm-bob.d.ts +173 -61
  67. package/dist/src/unstable/agent-capabilities/data/agents/ibm-bob.js +152 -52
  68. package/dist/src/unstable/agent-capabilities/data/agents/iflow-cli.d.ts +47 -5
  69. package/dist/src/unstable/agent-capabilities/data/agents/iflow-cli.js +41 -5
  70. package/dist/src/unstable/agent-capabilities/data/agents/junie.d.ts +130 -42
  71. package/dist/src/unstable/agent-capabilities/data/agents/junie.js +121 -39
  72. package/dist/src/unstable/agent-capabilities/data/agents/kilo.d.ts +187 -65
  73. package/dist/src/unstable/agent-capabilities/data/agents/kilo.js +169 -62
  74. package/dist/src/unstable/agent-capabilities/data/agents/kimi-cli.d.ts +147 -60
  75. package/dist/src/unstable/agent-capabilities/data/agents/kimi-cli.js +134 -53
  76. package/dist/src/unstable/agent-capabilities/data/agents/kiro-cli.d.ts +138 -50
  77. package/dist/src/unstable/agent-capabilities/data/agents/kiro-cli.js +121 -39
  78. package/dist/src/unstable/agent-capabilities/data/agents/kode.d.ts +45 -5
  79. package/dist/src/unstable/agent-capabilities/data/agents/kode.js +39 -5
  80. package/dist/src/unstable/agent-capabilities/data/agents/lingma.d.ts +19 -2
  81. package/dist/src/unstable/agent-capabilities/data/agents/lingma.js +17 -2
  82. package/dist/src/unstable/agent-capabilities/data/agents/mcpjam.d.ts +16 -1
  83. package/dist/src/unstable/agent-capabilities/data/agents/mcpjam.js +14 -1
  84. package/dist/src/unstable/agent-capabilities/data/agents/mistral-vibe.d.ts +93 -8
  85. package/dist/src/unstable/agent-capabilities/data/agents/mistral-vibe.js +87 -8
  86. package/dist/src/unstable/agent-capabilities/data/agents/mux.d.ts +46 -4
  87. package/dist/src/unstable/agent-capabilities/data/agents/mux.js +40 -4
  88. package/dist/src/unstable/agent-capabilities/data/agents/neovate.d.ts +111 -59
  89. package/dist/src/unstable/agent-capabilities/data/agents/neovate.js +97 -50
  90. package/dist/src/unstable/agent-capabilities/data/agents/ona.d.ts +41 -4
  91. package/dist/src/unstable/agent-capabilities/data/agents/ona.js +37 -4
  92. package/dist/src/unstable/agent-capabilities/data/agents/openclaw.d.ts +14 -1
  93. package/dist/src/unstable/agent-capabilities/data/agents/openclaw.js +12 -1
  94. package/dist/src/unstable/agent-capabilities/data/agents/opencode.d.ts +338 -20
  95. package/dist/src/unstable/agent-capabilities/data/agents/opencode.js +289 -22
  96. package/dist/src/unstable/agent-capabilities/data/agents/openhands.d.ts +53 -4
  97. package/dist/src/unstable/agent-capabilities/data/agents/openhands.js +49 -4
  98. package/dist/src/unstable/agent-capabilities/data/agents/pi.d.ts +69 -2
  99. package/dist/src/unstable/agent-capabilities/data/agents/pi.js +56 -2
  100. package/dist/src/unstable/agent-capabilities/data/agents/pochi.d.ts +96 -44
  101. package/dist/src/unstable/agent-capabilities/data/agents/pochi.js +81 -33
  102. package/dist/src/unstable/agent-capabilities/data/agents/qoder-cn.d.ts +70 -6
  103. package/dist/src/unstable/agent-capabilities/data/agents/qoder-cn.js +75 -7
  104. package/dist/src/unstable/agent-capabilities/data/agents/qoder.d.ts +201 -77
  105. package/dist/src/unstable/agent-capabilities/data/agents/qoder.js +186 -75
  106. package/dist/src/unstable/agent-capabilities/data/agents/qwen-code.d.ts +169 -57
  107. package/dist/src/unstable/agent-capabilities/data/agents/qwen-code.js +154 -56
  108. package/dist/src/unstable/agent-capabilities/data/agents/replit.d.ts +16 -1
  109. package/dist/src/unstable/agent-capabilities/data/agents/replit.js +14 -1
  110. package/dist/src/unstable/agent-capabilities/data/agents/roo.d.ts +60 -7
  111. package/dist/src/unstable/agent-capabilities/data/agents/roo.js +51 -7
  112. package/dist/src/unstable/agent-capabilities/data/agents/rovodev.d.ts +70 -6
  113. package/dist/src/unstable/agent-capabilities/data/agents/rovodev.js +64 -6
  114. package/dist/src/unstable/agent-capabilities/data/agents/tabnine-cli.d.ts +92 -7
  115. package/dist/src/unstable/agent-capabilities/data/agents/tabnine-cli.js +85 -7
  116. package/dist/src/unstable/agent-capabilities/data/agents/trae-cn.d.ts +72 -33
  117. package/dist/src/unstable/agent-capabilities/data/agents/trae-cn.js +64 -29
  118. package/dist/src/unstable/agent-capabilities/data/agents/trae.d.ts +72 -33
  119. package/dist/src/unstable/agent-capabilities/data/agents/trae.js +64 -29
  120. package/dist/src/unstable/agent-capabilities/data/agents/warp.d.ts +31 -3
  121. package/dist/src/unstable/agent-capabilities/data/agents/warp.js +27 -3
  122. package/dist/src/unstable/agent-capabilities/data/agents/windsurf.d.ts +126 -41
  123. package/dist/src/unstable/agent-capabilities/data/agents/windsurf.js +110 -39
  124. package/dist/src/unstable/agent-capabilities/data/agents/zed.d.ts +31 -3
  125. package/dist/src/unstable/agent-capabilities/data/agents/zed.js +27 -3
  126. package/dist/src/unstable/agent-capabilities/data/agents/zencoder.d.ts +41 -5
  127. package/dist/src/unstable/agent-capabilities/data/agents/zencoder.js +37 -5
  128. package/dist/src/unstable/agent-capabilities/data/agents/zenflow.d.ts +34 -2
  129. package/dist/src/unstable/agent-capabilities/data/agents/zenflow.js +31 -4
  130. package/dist/src/unstable/agent-capabilities/derive.js +36 -57
  131. package/dist/src/unstable/agent-capabilities/index.d.ts +1 -1
  132. package/dist/src/unstable/agent-capabilities/index.js +1 -1
  133. package/dist/src/unstable/agent-capabilities/schema.d.ts +775 -767
  134. package/dist/src/unstable/agent-capabilities/schema.js +192 -103
  135. package/dist/src/unstable/agents/registry.d.ts +1 -1
  136. package/dist/src/unstable/agents/registry.js +1 -13
  137. package/dist/src/unstable/agents/types.d.ts +16 -48
  138. package/dist/src/unstable/agents/types.js +2 -2
  139. package/dist/src/unstable/extensions/common.d.ts +1 -2
  140. package/dist/src/unstable/extensions/common.js +1 -2
  141. package/dist/src/unstable/sources/printer.js +7 -1
  142. package/package.json +3 -3
@@ -39,7 +39,6 @@
39
39
  *
40
40
  * @experimental This API is unstable and may change without notice.
41
41
  */
42
- import * as Effect from "effect/Effect";
43
42
  import * as Schema from "effect/Schema";
44
43
  import { DocLinkSchema, LeafExtensionTypeSchema, UrlSchema, } from "../extension-types/schema.js";
45
44
  import {} from "../extensions/common.js";
@@ -76,31 +75,62 @@ export const ConventionSchema = Schema.Literals(["universal", "vendor", "hosted"
76
75
  examples: ["universal", "vendor", "hosted"],
77
76
  });
78
77
  /** @experimental This API is unstable and may change without notice. */
79
- export const SkillReadPathStatusSchema = Schema.Literals([
80
- "canonical",
81
- "compat",
82
- "deprecated",
83
- ]).annotate({
84
- identifier: "SkillReadPathStatus",
85
- title: "Skill Read Path Status",
86
- description: "How an additional native Skill directory relates to the agent's primary path.",
87
- });
88
- /** @experimental This API is unstable and may change without notice. */
89
- export const SkillReadPathSchema = Schema.Struct({
90
- path: Schema.NonEmptyString,
91
- status: SkillReadPathStatusSchema,
92
- }).annotate({
93
- identifier: "SkillReadPath",
94
- title: "Skill Read Path",
95
- description: "An additional directory an agent reads for Skill discovery but AXM never writes.",
96
- });
97
- /** @experimental This API is unstable and may change without notice. */
98
78
  export const ScopeSchema = Schema.Literals(["user", "project"]).annotate({
99
79
  identifier: "Scope",
100
80
  title: "Scope",
101
81
  description: "Where a capability can be configured.",
102
82
  examples: ["user", "project"],
103
83
  });
84
+ /** A declared reader path; physical resolution and ownership belong to the workspace. */
85
+ const NativeReadLocationFields = {
86
+ scope: ScopeSchema,
87
+ root: Schema.Literals(["project", "home", "xdg-config"]),
88
+ path: Schema.NonEmptyString,
89
+ configRootRelativePath: Schema.optionalKey(Schema.NonEmptyString),
90
+ shape: Schema.Literals(["directory", "file"]),
91
+ role: Schema.Literals(["primary", "additional"]),
92
+ status: Schema.Literals(["canonical", "compat", "deprecated"]),
93
+ applicability: Schema.Union([
94
+ Schema.Struct({ kind: Schema.Literal("always") }),
95
+ Schema.Struct({ kind: Schema.Literal("conditional"), condition: Schema.NonEmptyString }),
96
+ ]),
97
+ provenance: Schema.Union([
98
+ Schema.Struct({ kind: Schema.Literal("capability-sources") }),
99
+ Schema.Struct({ kind: Schema.Literal("sources"), sources: Schema.NonEmptyArray(UrlSchema) }),
100
+ ]),
101
+ };
102
+ const nativeReadLocationCheck = Schema.makeFilter((location) => {
103
+ if (location.configRootRelativePath !== undefined &&
104
+ (location.scope !== "user" ||
105
+ /^(?:[\\/~]|[A-Za-z]:)/.test(location.configRootRelativePath) ||
106
+ location.configRootRelativePath.split(/[\\/]/).includes(".."))) {
107
+ return {
108
+ path: ["configRootRelativePath"],
109
+ issue: "Configuration-root overrides require a bounded relative path in user scope.",
110
+ };
111
+ }
112
+ if ((location.scope === "project") !== (location.root === "project")) {
113
+ return {
114
+ path: ["root"],
115
+ issue: "Project locations require the project root; user locations require home or xdg-config.",
116
+ };
117
+ }
118
+ if (/^(?:[\\/~]|[A-Za-z]:)/.test(location.path) ||
119
+ location.path.split(/[\\/]/).includes("..")) {
120
+ return {
121
+ path: ["path"],
122
+ issue: "Native locations must be relative to their declared root without parent traversal.",
123
+ };
124
+ }
125
+ return undefined;
126
+ });
127
+ export const NativeReadLocationSchema = Schema.Struct(NativeReadLocationFields)
128
+ .check(nativeReadLocationCheck)
129
+ .annotate({
130
+ identifier: "NativeReadLocation",
131
+ title: "Native Reader Location",
132
+ description: "A documented native reader path with explicit scope, root, shape, conditions, and evidence; it grants no writer ownership.",
133
+ });
104
134
  const NonEmptyScopesSchema = Schema.NonEmptyArray(ScopeSchema).pipe(Schema.check(Schema.isUnique()));
105
135
  /** @experimental This API is unstable and may change without notice. */
106
136
  export const SUPPORTED_AXM_SUPPORT = "supported";
@@ -402,8 +432,7 @@ export const SkillsExtensionCapabilitySchema = Schema.Struct({
402
432
  Schema.Struct({
403
433
  ...AvailableSpecTrackedNativeCapabilityFields,
404
434
  convention: Schema.Literals(["universal", "vendor"]),
405
- directory: Schema.NonEmptyString,
406
- additionalReadPaths: Schema.Array(SkillReadPathSchema).pipe(Schema.withDecodingDefaultKey(Effect.succeed([])), Schema.optionalKey),
435
+ locations: Schema.Array(NativeReadLocationSchema),
407
436
  }),
408
437
  Schema.Struct({
409
438
  ...AvailableSpecTrackedNativeCapabilityFields,
@@ -419,14 +448,6 @@ export const SkillsExtensionCapabilitySchema = Schema.Struct({
419
448
  title: "Skills Capability",
420
449
  description: "Agent support for Agent Skills-style extensions.",
421
450
  });
422
- /** @experimental This API is unstable and may change without notice. */
423
- /** @experimental This API is unstable and may change without notice. */
424
- export const SubagentsLayoutSchema = Schema.Literals(["file", "directory"]).annotate({
425
- identifier: "SubagentsLayout",
426
- title: "Subagents Layout",
427
- description: "Whether subagents live in a directory or a single opaque file path.",
428
- examples: ["directory", "file"],
429
- });
430
451
  const PluginSubagentsNativeCapabilitySchema = Schema.Struct({
431
452
  ...AvailableNativeCapabilityBaseFields,
432
453
  availability: PluginAvailabilitySchema,
@@ -437,8 +458,7 @@ export const SubagentsExtensionCapabilitySchema = Schema.Struct({
437
458
  Schema.Struct({
438
459
  ...AvailableNativeCapabilityBaseFields,
439
460
  availability: NativeAvailabilitySchema,
440
- directory: Schema.NonEmptyString,
441
- layout: SubagentsLayoutSchema,
461
+ locations: Schema.Array(NativeReadLocationSchema),
442
462
  }),
443
463
  PluginSubagentsNativeCapabilitySchema,
444
464
  Schema.Struct(UnavailableNativeCapabilityFields),
@@ -469,39 +489,22 @@ export const RuleInstructionsImportSyntaxSchema = Schema.Literals(["at-path"]).a
469
489
  description: "Syntax an agent uses to import another instruction file.",
470
490
  examples: ["at-path"],
471
491
  });
472
- const OptionalRuleDirectoryField = {
473
- directory: Schema.optionalKey(Schema.NonEmptyString),
474
- };
475
- const AgentsMdRulesExtensionCapabilitySchema = Schema.Struct({
476
- ...AvailableSpecTrackedNativeCapabilityFields,
477
- ...OptionalRuleDirectoryField,
478
- kind: Schema.Literal("agents-md"),
479
- files: Schema.Tuple([Schema.Literal("AGENTS.md")]),
480
- nestedDiscovery: Schema.Boolean,
481
- importSyntax: Schema.NullOr(RuleInstructionsImportSyntaxSchema),
482
- });
483
- const OwnFileRulesExtensionCapabilitySchema = Schema.Struct({
492
+ const AvailableRulesExtensionCapabilitySchema = Schema.Struct({
484
493
  ...AvailableSpecTrackedNativeCapabilityFields,
485
- ...OptionalRuleDirectoryField,
486
- kind: Schema.Literal("own-file"),
487
- files: Schema.Tuple([Schema.NonEmptyString]),
494
+ kind: RuleInstructionsKindSchema,
495
+ locations: Schema.Array(NativeReadLocationSchema),
488
496
  nestedDiscovery: Schema.Boolean,
489
497
  importSyntax: Schema.NullOr(RuleInstructionsImportSyntaxSchema),
490
- });
491
- const RulesDirRulesExtensionCapabilitySchema = Schema.Struct({
492
- ...AvailableSpecTrackedNativeCapabilityFields,
493
- kind: Schema.Literal("rules-dir"),
494
- files: Schema.Array(Schema.NonEmptyString).pipe(Schema.check(Schema.isUnique())),
495
- nestedDiscovery: Schema.Boolean,
496
- importSyntax: Schema.NullOr(RuleInstructionsImportSyntaxSchema),
497
- directory: Schema.NonEmptyString,
498
- });
498
+ }).check(Schema.makeFilter((capability) => {
499
+ const shape = capability.kind === "rules-dir" ? "directory" : "file";
500
+ return capability.locations.some((location) => location.role === "primary" && location.shape !== shape)
501
+ ? { path: ["locations"], issue: `Primary instruction locations must have ${shape} shape` }
502
+ : undefined;
503
+ }));
499
504
  /** @experimental This API is unstable and may change without notice. */
500
505
  export const RulesExtensionCapabilitySchema = Schema.Struct({
501
506
  native: Schema.Union([
502
- AgentsMdRulesExtensionCapabilitySchema,
503
- OwnFileRulesExtensionCapabilitySchema,
504
- RulesDirRulesExtensionCapabilitySchema,
507
+ AvailableRulesExtensionCapabilitySchema,
505
508
  Schema.Struct(UnavailableNativeCapabilityFields),
506
509
  ]),
507
510
  axm: NoWriterAxmCapabilityStateSchema,
@@ -526,18 +529,43 @@ export const ConfigFileFormatSchema = Schema.Literals([
526
529
  description: "Serialization format used by an agent's permission config file.",
527
530
  examples: ["json", "toml", "yaml", "vscode-settings"],
528
531
  });
532
+ /** One declared native configuration reader, independently of any AXM writer. */
533
+ export const NativeConfigReadLocationSchema = Schema.Struct({
534
+ ...NativeReadLocationFields,
535
+ shape: Schema.Literal("file"),
536
+ id: Schema.NonEmptyString,
537
+ format: ConfigFileFormatSchema,
538
+ keyPath: Schema.optionalKey(Schema.NonEmptyArray(Schema.NonEmptyString)),
539
+ attribution: Schema.optionalKey(Schema.Literals(["shared", "agent"])),
540
+ gitignored: Schema.optionalKey(Schema.Boolean),
541
+ })
542
+ .check(nativeReadLocationCheck)
543
+ .annotate({
544
+ identifier: "NativeConfigReadLocation",
545
+ title: "Native Configuration Reader Location",
546
+ description: "A scoped native file with its syntax, static container path, and source evidence. Writers refer to its id; no writer support or ownership is implied.",
547
+ });
548
+ const nativeConfigReferenceIssues = (locations, references, writerPath) => {
549
+ const issues = [];
550
+ const ids = new Set(locations.map((location) => location.id));
551
+ if (ids.size !== locations.length)
552
+ issues.push({
553
+ path: ["native", "locations"],
554
+ issue: "Native config location ids must be unique within a capability.",
555
+ });
556
+ if (references.some((id) => !ids.has(id)))
557
+ issues.push({
558
+ path: [...writerPath],
559
+ issue: "AXM writers must reference declared native config location ids.",
560
+ });
561
+ return issues;
562
+ };
529
563
  /** @experimental This API is unstable and may change without notice. */
530
- export const McpServersKeySchema = Schema.Literals([
531
- "mcpServers",
532
- "servers",
533
- "mcp",
534
- "mcp_servers",
535
- "context_servers",
536
- ]).annotate({
537
- identifier: "McpServersKey",
538
- title: "MCP Servers Key",
539
- description: "Top-level key containing MCP server entries in an agent config file.",
540
- examples: ["mcpServers", "servers", "mcp"],
564
+ export const McpServersPathSchema = Schema.NonEmptyArray(Schema.NonEmptyString).annotate({
565
+ identifier: "McpServersPath",
566
+ title: "MCP Servers Path",
567
+ description: "Object key path containing MCP server entries in a native config file.",
568
+ examples: [["mcpServers"], ["mcp", "servers"]],
541
569
  });
542
570
  /** @experimental This API is unstable and may change without notice. */
543
571
  export const McpTargetAttributionSchema = Schema.Literals(["shared", "agent"]).annotate({
@@ -547,6 +575,8 @@ export const McpTargetAttributionSchema = Schema.Literals(["shared", "agent"]).a
547
575
  });
548
576
  /** @experimental This API is unstable and may change without notice. */
549
577
  export const McpConfigTargetSchema = Schema.Struct({
578
+ /** Explicit captured native root for a resolved runtime destination. */
579
+ nativeRoot: Schema.optionalKey(Schema.NonEmptyString),
550
580
  scope: ScopeSchema,
551
581
  path: Schema.NonEmptyString,
552
582
  format: ConfigFileFormatSchema,
@@ -625,6 +655,9 @@ export const McpUrlKeyMapSchema = Schema.Struct({
625
655
  });
626
656
  /** @experimental This API is unstable and may change without notice. */
627
657
  export const McpRemoteDialectSchema = Schema.Struct({
658
+ implicitTransport: Schema.optionalKey(Schema.Literal("http-or-sse")).annotate({
659
+ description: "A documented URL-only remote entry selects HTTP or SSE through the endpoint, without an explicit transport discriminator.",
660
+ }),
628
661
  typeField: McpTypeFieldSchema,
629
662
  urlKey: McpUrlKeyMapSchema,
630
663
  headersKey: Schema.NullOr(Schema.NonEmptyString),
@@ -636,20 +669,26 @@ export const McpRemoteDialectSchema = Schema.Struct({
636
669
  description: "How an agent represents remote MCP server entries.",
637
670
  });
638
671
  /** @experimental This API is unstable and may change without notice. */
639
- export const McpConfigSchema = Schema.Struct({
640
- serversKey: McpServersKeySchema,
672
+ export const McpEntryDialectSchema = Schema.Struct({
641
673
  activationField: McpActivationFieldSchema,
642
- targets: Schema.Array(McpConfigTargetSchema),
643
674
  stdio: Schema.NullOr(McpStdioDialectSchema),
644
675
  remote: Schema.NullOr(McpRemoteDialectSchema),
676
+ }).annotate({
677
+ identifier: "McpEntryDialect",
678
+ title: "Native MCP Entry Dialect",
679
+ description: "Verified native entry grammar, independent of AXM writer support.",
680
+ });
681
+ /** @experimental This API is unstable and may change without notice. */
682
+ export const McpConfigSchema = Schema.Struct({
683
+ locationIds: Schema.NonEmptyArray(Schema.NonEmptyString).check(Schema.isUnique()),
645
684
  }).annotate({
646
685
  identifier: "McpConfig",
647
- title: "MCP Config",
648
- description: "Prescriptive config writer metadata for an agent's MCP support.",
686
+ title: "MCP Writer Locations",
687
+ description: "Native configuration locations selected by the AXM writer.",
649
688
  });
650
689
  /** @experimental This API is unstable and may change without notice. */
651
690
  export const McpEnvExpansionSchema = Schema.Struct({
652
- variables: Schema.Literals(["none", "braced"]),
691
+ variables: Schema.Literals(["none", "braced", "env-tag"]),
653
692
  defaults: Schema.Boolean,
654
693
  }).annotate({
655
694
  identifier: "McpEnvExpansion",
@@ -663,6 +702,8 @@ const McpUnavailableCapabilityStruct = Schema.Struct({
663
702
  const McpNativeWithTransportsSchema = Schema.Struct({
664
703
  ...AvailableSpecTrackedNativeCapabilityFields,
665
704
  transports: NonEmptyMcpTransportsSchema,
705
+ entryDialect: Schema.NullOr(McpEntryDialectSchema),
706
+ locations: Schema.Array(NativeConfigReadLocationSchema),
666
707
  mcpEnvExpansion: Schema.optionalKey(McpEnvExpansionSchema),
667
708
  });
668
709
  const McpAvailableCapabilityStruct = Schema.Struct({
@@ -679,12 +720,39 @@ const McpExtensionCapabilitySchemaWithChecks = McpExtensionCapabilityStruct.pipe
679
720
  if (activeSourcesIssue !== undefined)
680
721
  issues.push(activeSourcesIssue);
681
722
  const writer = capability.axm.writer;
723
+ if ("locations" in capability.native) {
724
+ issues.push(...nativeConfigReferenceIssues(capability.native.locations, writer?.config.locationIds ?? [], ["axm", "writer", "config", "locationIds"]));
725
+ if (capability.native.locations.some((location) => location.keyPath === undefined))
726
+ issues.push({
727
+ path: ["native", "locations"],
728
+ issue: "MCP reader locations require an explicit servers-container keyPath.",
729
+ });
730
+ if (capability.native.locations.some((location) => location.attribution === undefined))
731
+ issues.push({
732
+ path: ["native", "locations"],
733
+ issue: "MCP reader locations require explicit attribution.",
734
+ });
735
+ const selected = new Set(writer?.config.locationIds ?? []);
736
+ if (capability.native.locations.some((location) => selected.has(location.id) && !Schema.is(McpServersPathSchema)(location.keyPath))) {
737
+ issues.push({
738
+ path: ["native", "locations"],
739
+ issue: "Writable MCP locations require a nonempty servers-container key path.",
740
+ });
741
+ }
742
+ }
682
743
  if (writer === null || !("transports" in capability.native))
683
744
  return issues;
684
- const config = writer.config;
745
+ const config = capability.native.entryDialect;
746
+ if (config === null) {
747
+ issues.push({
748
+ path: ["native", "entryDialect"],
749
+ issue: "An MCP writer requires a verified native entry dialect.",
750
+ });
751
+ return issues;
752
+ }
685
753
  if (capability.native.transports.includes("stdio") && config.stdio === null) {
686
754
  issues.push({
687
- path: ["axm", "writer", "config", "stdio"],
755
+ path: ["native", "entryDialect", "stdio"],
688
756
  issue: "MCP stdio config is required when stdio transport is supported.",
689
757
  });
690
758
  }
@@ -692,7 +760,7 @@ const McpExtensionCapabilitySchemaWithChecks = McpExtensionCapabilityStruct.pipe
692
760
  capability.native.transports.includes("sse")) &&
693
761
  config.remote === null) {
694
762
  issues.push({
695
- path: ["axm", "writer", "config", "remote"],
763
+ path: ["native", "entryDialect", "remote"],
696
764
  issue: "MCP remote config is required when http or sse transport is supported.",
697
765
  });
698
766
  }
@@ -730,17 +798,6 @@ export const PermissionGrammarStyleSchema = Schema.Literals([
730
798
  examples: ["tool-call", "prefix", "regex"],
731
799
  });
732
800
  /** @experimental This API is unstable and may change without notice. */
733
- export const ConfigFileLocationSchema = Schema.Struct({
734
- scope: ScopeSchema,
735
- path: Schema.NonEmptyString,
736
- format: ConfigFileFormatSchema,
737
- gitignored: Schema.Boolean,
738
- }).annotate({
739
- identifier: "ConfigFileLocation",
740
- title: "Config File Location",
741
- description: "A configuration file where an agent's permission rules can live.",
742
- });
743
- /** @experimental This API is unstable and may change without notice. */
744
801
  export const CANONICAL_HOOK_EVENT_IDS = [
745
802
  "session.start",
746
803
  "prompt.submit",
@@ -919,30 +976,39 @@ export const HookCommandNameSerializationSchema = Schema.Literals(["omit", "mani
919
976
  examples: ["omit", "manifest"],
920
977
  });
921
978
  /** @experimental This API is unstable and may change without notice. */
922
- export const HooksWriterSchema = Schema.Struct({
979
+ export const HookEntryDialectSchema = Schema.Struct({
923
980
  serializer: HooksSerializerSchema,
924
- configFiles: Schema.NonEmptyArray(ConfigFileLocationSchema),
925
- settingsKey: Schema.NonEmptyString,
926
- eventMap: Schema.Literal("native.events"),
927
981
  matcherKind: HookMatcherKindSchema,
928
982
  matcherSerialization: HookMatcherSerializationSchema,
929
983
  timeoutSerialization: HookTimeoutSerializationSchema,
930
984
  commandNameSerialization: HookCommandNameSerializationSchema,
985
+ }).annotate({
986
+ identifier: "HookEntryDialect",
987
+ title: "Native Hook Entry Dialect",
988
+ description: "Verified native Hook entry grammar, independent of AXM writer support.",
989
+ });
990
+ /** @experimental This API is unstable and may change without notice. */
991
+ export const HooksWriterSchema = Schema.Struct({
992
+ locationIds: Schema.NonEmptyArray(Schema.NonEmptyString).check(Schema.isUnique()),
993
+ eventMap: Schema.Literal("native.events"),
931
994
  }).annotate({
932
995
  identifier: "HooksWriter",
933
996
  title: "Hooks Writer",
934
- description: "Parameterized AXM hook writer metadata derived from native hook catalog data.",
997
+ description: "Native Hook locations and event mappings selected by the AXM writer.",
935
998
  });
936
999
  const HooksAvailableNativeCapabilitySchema = Schema.Struct({
937
1000
  ...AvailableNativeCapabilityBaseFields,
938
1001
  mechanism: NonEmptyHookMechanismFamiliesSchema,
939
- configFiles: Schema.Array(ConfigFileLocationSchema),
1002
+ entryDialect: Schema.NullOr(HookEntryDialectSchema),
1003
+ locations: Schema.Array(NativeConfigReadLocationSchema),
940
1004
  events: Schema.NonEmptyArray(HookEventMappingSchema),
941
1005
  tools: Schema.Array(HookToolMappingSchema),
942
1006
  });
943
1007
  const HooksUnmodeledNativeCapabilitySchema = Schema.Struct({
944
1008
  ...AvailableNativeCapabilityBaseFields,
945
1009
  modeling: Schema.Literal("native-unmodeled"),
1010
+ entryDialect: Schema.NullOr(HookEntryDialectSchema),
1011
+ locations: Schema.Array(NativeConfigReadLocationSchema),
946
1012
  });
947
1013
  const HooksExtensionCapabilityStruct = Schema.Struct({
948
1014
  native: Schema.Union([
@@ -955,6 +1021,22 @@ const HooksExtensionCapabilityStruct = Schema.Struct({
955
1021
  /** @experimental This API is unstable and may change without notice. */
956
1022
  export const HooksExtensionCapabilitySchema = HooksExtensionCapabilityStruct.pipe(Schema.check(Schema.makeFilter((capability) => {
957
1023
  const issues = [];
1024
+ if ("locations" in capability.native) {
1025
+ issues.push(...nativeConfigReferenceIssues(capability.native.locations, capability.axm.writer?.locationIds ?? [], ["axm", "writer", "locationIds"]));
1026
+ const selected = new Set(capability.axm.writer?.locationIds ?? []);
1027
+ if (capability.native.locations.some((location) => selected.has(location.id) && location.keyPath === undefined))
1028
+ issues.push({
1029
+ path: ["native", "locations"],
1030
+ issue: "Writable Hook reader locations require a static keyPath.",
1031
+ });
1032
+ }
1033
+ if (capability.axm.writer !== null &&
1034
+ (!("entryDialect" in capability.native) || capability.native.entryDialect === null)) {
1035
+ issues.push({
1036
+ path: ["native", "entryDialect"],
1037
+ issue: "A Hook writer requires a verified native entry dialect.",
1038
+ });
1039
+ }
958
1040
  if (capability.axm.writer !== null && capability.native.sources.length === 0) {
959
1041
  issues.push({
960
1042
  path: ["native", "sources"],
@@ -1007,7 +1089,11 @@ export const PermissionCliFlagSchema = Schema.Struct({
1007
1089
  description: "Invocation-time flag that adjusts approval or sandbox behavior.",
1008
1090
  });
1009
1091
  const PermissionGrantStruct = Schema.Struct({
1010
- target: Schema.NonEmptyString,
1092
+ destination: Schema.Union([
1093
+ Schema.Struct({ kind: Schema.Literal("location"), locationId: Schema.NonEmptyString }),
1094
+ Schema.Struct({ kind: Schema.Literal("invocation") }),
1095
+ Schema.Struct({ kind: Schema.Literal("settings-ui") }),
1096
+ ]),
1011
1097
  patch: Schema.NullOr(Schema.Unknown),
1012
1098
  template: Schema.NullOr(Schema.NonEmptyString),
1013
1099
  });
@@ -1025,7 +1111,7 @@ export const PermissionsExtensionCapabilitySchema = Schema.Struct({
1025
1111
  Schema.Struct({
1026
1112
  ...AvailableNativeCapabilityBaseFields,
1027
1113
  mechanism: NonEmptyPermissionMechanismsSchema,
1028
- configFiles: Schema.Array(ConfigFileLocationSchema),
1114
+ locations: Schema.Array(NativeConfigReadLocationSchema),
1029
1115
  grammar: Schema.NullOr(PermissionGrammarSchema),
1030
1116
  prerequisites: Schema.Array(PermissionPrerequisiteSchema),
1031
1117
  cliFlags: Schema.Array(PermissionCliFlagSchema),
@@ -1034,7 +1120,9 @@ export const PermissionsExtensionCapabilitySchema = Schema.Struct({
1034
1120
  ]),
1035
1121
  axm: axmCapabilityStateSchema(Schema.Struct({ grants: Schema.Record(Schema.String, PermissionGrantSchema) }), "PermissionsAxmState"),
1036
1122
  })
1037
- .pipe(Schema.check(Schema.makeFilter(requireSourcesForActiveAxmSupport)))
1123
+ .pipe(Schema.check(Schema.makeFilter(requireSourcesForActiveAxmSupport)), Schema.check(Schema.makeFilter((capability) => "locations" in capability.native
1124
+ ? nativeConfigReferenceIssues(capability.native.locations, Object.values(capability.axm.writer?.grants ?? {}).flatMap((grant) => grant.destination.kind === "location" ? [grant.destination.locationId] : []), ["axm", "writer", "grants"])
1125
+ : undefined)))
1038
1126
  .annotate({
1039
1127
  identifier: "PermissionsExtensionCapability",
1040
1128
  title: "Permissions Capability",
@@ -1159,9 +1247,11 @@ export const AgentSchema = AgentStruct.pipe(Schema.check(Schema.makeFilter((agen
1159
1247
  const issues = [];
1160
1248
  if ("kind" in agent.instructions.native &&
1161
1249
  agent.instructions.native.kind === "agents-md" &&
1162
- agent.instructions.native.files[0] !== "AGENTS.md") {
1250
+ agent.instructions.native.locations.some((location) => location.scope === "project" &&
1251
+ location.role === "primary" &&
1252
+ (location.shape !== "file" || location.path !== "AGENTS.md"))) {
1163
1253
  issues.push({
1164
- path: ["instructions", "native", "files"],
1254
+ path: ["instructions", "native", "locations"],
1165
1255
  issue: 'instructions.kind "agents-md" requires AGENTS.md.',
1166
1256
  });
1167
1257
  }
@@ -1198,8 +1288,7 @@ export const AgentSchema = AgentStruct.pipe(Schema.check(Schema.makeFilter((agen
1198
1288
  });
1199
1289
  }
1200
1290
  if (hostedOnly &&
1201
- capabilitySlots.some((capability) => "directory" in capability.native ||
1202
- ("configFiles" in capability.native && capability.native.configFiles.length > 0))) {
1291
+ capabilitySlots.some((capability) => "locations" in capability.native && capability.native.locations.length > 0)) {
1203
1292
  issues.push({
1204
1293
  path: ["capabilities"],
1205
1294
  issue: "Hosted-only agents cannot declare local capability paths.",
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import type { AgentRegistry } from "./types.js";
10
10
  /**
11
- * Derived descriptors for all known AI coding agents, including the synthetic universal target.
11
+ * Derived descriptors for all known configurable coding agents.
12
12
  *
13
13
  * Keys are agent IDs, values are full descriptor objects.
14
14
  * Paths are pre-expanded at module initialization.
@@ -9,19 +9,8 @@
9
9
  import * as Record from "effect/Record";
10
10
  import { CONFIGURABLE_AGENTS_BY_ID } from "../agent-capabilities/catalog.js";
11
11
  import { deriveAgentDescriptor } from "../agent-capabilities/derive.js";
12
- import { UNIVERSAL_SKILLS_DIR } from "../extensions/universal-skills-dir.js";
13
- const UNIVERSAL_AGENT_DESCRIPTOR = {
14
- id: "universal",
15
- name: "Universal",
16
- rootDir: undefined,
17
- skills: {
18
- dir: UNIVERSAL_SKILLS_DIR,
19
- additionalReadPaths: [],
20
- },
21
- detection: { project: { markers: [] }, user: { markers: [] } },
22
- };
23
12
  /**
24
- * Derived descriptors for all known AI coding agents, including the synthetic universal target.
13
+ * Derived descriptors for all known configurable coding agents.
25
14
  *
26
15
  * Keys are agent IDs, values are full descriptor objects.
27
16
  * Paths are pre-expanded at module initialization.
@@ -30,6 +19,5 @@ const UNIVERSAL_AGENT_DESCRIPTOR = {
30
19
  */
31
20
  export const AGENT_DESCRIPTORS = {
32
21
  ...Record.map(CONFIGURABLE_AGENTS_BY_ID, deriveAgentDescriptor),
33
- universal: UNIVERSAL_AGENT_DESCRIPTOR,
34
22
  };
35
23
  //# sourceMappingURL=registry.js.map
@@ -6,17 +6,16 @@
6
6
  */
7
7
  import type { Record } from "effect";
8
8
  import { CONFIGURABLE_AGENT_IDS, type ConfigurableAgentId } from "../agent-capabilities/identity.js";
9
- import type { DetectionMarker, Scope, ScopeDetection, SkillReadPath } from "../agent-capabilities/schema.js";
9
+ import type { DetectionMarker, Scope, ScopeDetection, NativeReadLocation } from "../agent-capabilities/schema.js";
10
10
  /**
11
11
  * Skills-specific configuration for an agent.
12
12
  *
13
13
  * @experimental This API is unstable and may change without notice.
14
14
  */
15
15
  export interface AgentSkillsDescriptor {
16
- /** Skills directory, relative to cwd (e.g., ".claude/skills") */
17
- readonly dir: string;
18
- /** Additional native directories read for discovery. AXM never writes to these paths. */
19
- readonly additionalReadPaths: ReadonlyArray<SkillReadPath>;
16
+ readonly locations: ReadonlyArray<NativeReadLocation>;
17
+ readonly scopes: ReadonlyArray<Scope>;
18
+ readonly writerSupported: boolean;
20
19
  }
21
20
  /**
22
21
  * Subagents-specific configuration for an agent.
@@ -24,18 +23,9 @@ export interface AgentSkillsDescriptor {
24
23
  * @experimental This API is unstable and may change without notice.
25
24
  */
26
25
  export interface AgentSubagentsDescriptor {
27
- /** Subagents directory, relative to cwd (e.g., ".claude/agents") */
28
- readonly dir: string;
29
- /**
30
- * Scopes the agent itself supports for subagents. See
31
- * The scopes the agent itself supports for subagents.
32
- */
26
+ readonly locations: ReadonlyArray<NativeReadLocation>;
33
27
  readonly scopes: ReadonlyArray<Scope>;
34
- /**
35
- * When true, the path is a single file (e.g., ".roomodes") rather than a
36
- * directory containing subagent files.
37
- */
38
- readonly isFile?: boolean;
28
+ readonly writerSupported: boolean;
39
29
  }
40
30
  /**
41
31
  * Workspace instruction-file convention for one coding agent.
@@ -48,19 +38,13 @@ export interface AgentSubagentsDescriptor {
48
38
  *
49
39
  * @experimental
50
40
  */
51
- export type AgentInstructionsDescriptor = {
52
- readonly kind: "agents-md";
53
- readonly rulesDir?: string;
54
- } | {
55
- readonly kind: "own-file";
56
- readonly file: string;
41
+ export interface AgentInstructionsDescriptor {
42
+ readonly kind: "agents-md" | "own-file" | "rules-dir";
43
+ readonly locations: ReadonlyArray<NativeReadLocation>;
44
+ readonly scopes: ReadonlyArray<Scope>;
45
+ readonly writerSupported: boolean;
57
46
  readonly importSyntax?: "at-path";
58
- readonly rulesDir?: string;
59
- } | {
60
- readonly kind: "rules-dir";
61
- readonly dir: string;
62
- readonly format: "frontmatter";
63
- };
47
+ }
64
48
  /** @experimental This API is unstable and may change without notice. */
65
49
  export type AgentDetectionMarker = DetectionMarker;
66
50
  /** @experimental This API is unstable and may change without notice. */
@@ -74,8 +58,8 @@ export interface AgentDetectionDescriptor {
74
58
  }
75
59
  /** @experimental This API is unstable and may change without notice. */
76
60
  export { CONFIGURABLE_AGENT_IDS, type ConfigurableAgentId };
77
- /** Configurable agents plus the synthetic universal materialization target. @experimental */
78
- export declare const MATERIALIZATION_TARGET_IDS: readonly ["adal", "aider-desk", "amp", "antigravity", "antigravity-cli", "augment", "claude-code", "cline", "codearts-agent", "codebuddy", "codemaker", "codestudio", "codex", "command-code", "continue", "cortex", "crush", "cursor", "deepagents", "devin", "dexto", "droid", "firebender", "forgecode", "gemini-cli", "github-copilot-cli", "goose", "grok-cli", "hermes", "ibm-bob", "iflow-cli", "junie", "lingma", "kilo", "kimi-cli", "kiro-cli", "kode", "mcpjam", "minimax-code", "mistral-vibe", "mux", "neovate", "openclaw", "opencode", "openhands", "ona", "pi", "pochi", "qoder", "qoder-cn", "qwen-code", "replit", "roo", "rovodev", "tabnine-cli", "trae-cn", "trae", "warp", "windsurf", "zencoder", "zed", "zenflow", "universal"];
61
+ /** Real agents that can participate in native materialization. @experimental */
62
+ export declare const MATERIALIZATION_TARGET_IDS: readonly ["adal", "aider-desk", "amp", "antigravity", "antigravity-cli", "augment", "claude-code", "cline", "codearts-agent", "codebuddy", "codemaker", "codestudio", "codex", "command-code", "continue", "cortex", "crush", "cursor", "deepagents", "devin", "dexto", "droid", "firebender", "forgecode", "gemini-cli", "github-copilot-cli", "goose", "grok-cli", "hermes", "ibm-bob", "iflow-cli", "junie", "lingma", "kilo", "kimi-cli", "kiro-cli", "kode", "mcpjam", "minimax-code", "mistral-vibe", "mux", "neovate", "openclaw", "opencode", "openhands", "ona", "pi", "pochi", "qoder", "qoder-cn", "qwen-code", "replit", "roo", "rovodev", "tabnine-cli", "trae-cn", "trae", "warp", "windsurf", "zencoder", "zed", "zenflow"];
79
63
  /** @experimental This API is unstable and may change without notice. */
80
64
  export type MaterializationTargetId = (typeof MATERIALIZATION_TARGET_IDS)[number];
81
65
  /**
@@ -88,25 +72,9 @@ export interface AgentDescriptor {
88
72
  readonly id: MaterializationTargetId;
89
73
  /** Human-readable display name (e.g., "Claude Code") */
90
74
  readonly name: string;
91
- /**
92
- * Per-agent native configuration root, relative to the workspace root
93
- * (e.g., `.claude` for Claude Code, `.cursor` for Cursor). The
94
- * workspace read-model scanners look for this agent's `settings.json`,
95
- * `mcp.json`, and other native config files inside this directory.
96
- *
97
- * Three states (with `exactOptionalPropertyTypes: true`):
98
- *
99
- * - `string` — use this directory as the explicit native config root.
100
- * - omitted (key not present) — fall back to the first segment of
101
- * `skills.dir` when a verified Skill surface exists, otherwise `.<id>`.
102
- * - `undefined` — explicit opt-out. Scanners SHALL NOT attempt to
103
- * discover native config for this agent. Use this when an agent's
104
- * first `skills.dir` segment collides with another agent's (e.g.,
105
- * several agents share a parent like `.agents`) and there is no
106
- * authoritative answer about the real native config root.
107
- */
75
+ /** Explicit project native configuration root. Undefined suppresses root discovery. */
108
76
  readonly rootDir?: string | undefined;
109
- /** Skills installation configuration, omitted when AXM has no verified writable surface. */
77
+ /** Native Skill reader declarations, independent of AXM writer support. */
110
78
  readonly skills?: AgentSkillsDescriptor;
111
79
  /** Subagents installation configuration (optional — not all agents support subagents) */
112
80
  readonly subagents?: AgentSubagentsDescriptor;
@@ -10,6 +10,6 @@ import { CONFIGURABLE_AGENT_IDS, } from "../agent-capabilities/identity.js";
10
10
  // -----------------------------------------------------------------------------
11
11
  /** @experimental This API is unstable and may change without notice. */
12
12
  export { CONFIGURABLE_AGENT_IDS };
13
- /** Configurable agents plus the synthetic universal materialization target. @experimental */
14
- export const MATERIALIZATION_TARGET_IDS = [...CONFIGURABLE_AGENT_IDS, "universal"];
13
+ /** Real agents that can participate in native materialization. @experimental */
14
+ export const MATERIALIZATION_TARGET_IDS = [...CONFIGURABLE_AGENT_IDS];
15
15
  //# sourceMappingURL=types.js.map
@@ -677,8 +677,7 @@ export { AgentIdSchema };
677
677
  /**
678
678
  * Agent identifiers users may persist in `axm.json`.
679
679
  *
680
- * Synthetic materialization targets such as `universal` are known agents, but
681
- * they are injected by repository code rather than configured by users.
680
+ * Shared native locations are policy, not additional agent identities.
682
681
  *
683
682
  * @experimental This API is unstable and may change without notice.
684
683
  */