@skill-map/spec 0.39.0 → 0.40.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +37 -2315
  2. package/README.md +2 -2
  3. package/architecture.md +6 -11
  4. package/cli-contract.md +2 -0
  5. package/conformance/README.md +1 -1
  6. package/conformance/cases/extractor-emits-signal.json +1 -1
  7. package/conformance/cases/kernel-empty-boot.json +1 -1
  8. package/conformance/cases/no-global-scope.json +1 -1
  9. package/conformance/cases/orphan-markdown-fallback.json +1 -1
  10. package/conformance/cases/plugin-missing-ui-rejected.json +1 -1
  11. package/conformance/cases/sidecar-end-to-end.json +1 -1
  12. package/conformance/cases/signal-collision-detection.json +1 -1
  13. package/conformance/fixtures/sidecar-example/agent-example.sm +3 -3
  14. package/db-schema.md +19 -5
  15. package/index.json +54 -54
  16. package/package.json +2 -2
  17. package/schemas/annotations.schema.json +2 -2
  18. package/schemas/api/rest-envelope.schema.json +1 -1
  19. package/schemas/bump-report.schema.json +1 -1
  20. package/schemas/conformance-case.schema.json +1 -1
  21. package/schemas/conformance-result.schema.json +1 -1
  22. package/schemas/execution-record.schema.json +1 -1
  23. package/schemas/extensions/action.schema.json +1 -1
  24. package/schemas/extensions/analyzer.schema.json +1 -1
  25. package/schemas/extensions/base.schema.json +1 -1
  26. package/schemas/extensions/extractor.schema.json +1 -1
  27. package/schemas/extensions/formatter.schema.json +1 -1
  28. package/schemas/extensions/hook.schema.json +1 -1
  29. package/schemas/extensions/provider-kind.schema.json +1 -1
  30. package/schemas/extensions/provider.schema.json +1 -1
  31. package/schemas/frontmatter/base.schema.json +2 -7
  32. package/schemas/history-stats.schema.json +1 -1
  33. package/schemas/input-types.schema.json +1 -1
  34. package/schemas/issue.schema.json +1 -1
  35. package/schemas/job.schema.json +1 -1
  36. package/schemas/link.schema.json +1 -1
  37. package/schemas/node.schema.json +1 -1
  38. package/schemas/plugins-doctor.schema.json +1 -1
  39. package/schemas/plugins-registry.schema.json +1 -1
  40. package/schemas/project-config.schema.json +1 -1
  41. package/schemas/refresh-report.schema.json +1 -1
  42. package/schemas/report-base-deterministic.schema.json +1 -1
  43. package/schemas/report-base.schema.json +1 -1
  44. package/schemas/scan-result.schema.json +1 -1
  45. package/schemas/sidecar.schema.json +1 -1
  46. package/schemas/signal.schema.json +1 -1
  47. package/schemas/summaries/agent.schema.json +1 -1
  48. package/schemas/summaries/command.schema.json +1 -1
  49. package/schemas/summaries/hook.schema.json +1 -1
  50. package/schemas/summaries/markdown.schema.json +1 -1
  51. package/schemas/summaries/skill.schema.json +1 -1
  52. package/schemas/user-settings.schema.json +1 -1
  53. package/schemas/view-slots.schema.json +1 -1
  54. package/versioning.md +2 -2
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/input-types.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/input-types.schema.json",
4
4
  "title": "InputTypes",
5
5
  "description": "Closed catalog of input-types for plugin settings. The plugin author declares each user-configurable setting in the manifest's `settings` map by picking an `input-type` from this catalog; the kernel knows the schema for each type, the UI ships a generated form per type, and the CLI's `sm plugins config <id>` command exposes the same surface. Plugin authors NEVER write JSON Schema for settings, they pick a type by name and supply per-type parameters (label, default, min/max, options for enums, etc.). Closed catalog by design: every new input-type requires spec + UI form + CLI prompter + tests. Versioned via the manifest field `catalogCompat` (semver against the catalog as a whole). For the rationale and open issues, see ROADMAP.md §UI contribution system.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/issue.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/issue.schema.json",
4
4
  "title": "Issue",
5
5
  "description": "Deterministic finding emitted by a analyzer when evaluating the graph. Not to be confused with `Finding`, which is probabilistic (LLM-produced).",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/job.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/job.schema.json",
4
4
  "title": "Job",
5
5
  "description": "Row in `state_jobs`. Non-terminal state until it reaches `completed` or `failed`, at which point an `ExecutionRecord` is also written.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/link.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/link.schema.json",
4
4
  "title": "Link",
5
5
  "description": "Directed relation between two nodes, produced by one or more extractors during a scan.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/node.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/node.schema.json",
4
4
  "title": "Node",
5
5
  "description": "A single entity in the graph. Typically a file on disk (a markdown skill, an agent, a TOML sub-agent definition, a plain-markdown note), but MAY also be a **virtual / derived** entity that lives only in memory and is reconstructed from one or more source files on every scan (e.g. an MCP server node derived from `settings.json` / `mcp.json` / `config.toml`). Virtual nodes carry `virtual: true` and use a synthetic `path` scheme (`mcp://<name>`, etc.). The `kind` is whatever the classifying Provider declares, open by design; the **built-in Claude Provider** emits `skill` / `agent` / `command` / `markdown` today, but external Providers (Cursor, Obsidian, …) MAY emit their own. Format-named kinds (`markdown`, future `toml`, future `json`) are reserved for the generic fallback only, when a file matches a specific role (agent / command / skill) that classification prevails over format naming.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/plugins-doctor.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/plugins-doctor.schema.json",
4
4
  "title": "PluginsDoctorReport",
5
5
  "description": "Machine-readable output of `sm plugins doctor --json`. Aggregates per-status counts across built-in and drop-in plugins plus the structured issue / warning lists the human renderer produces. The `elapsedMs` top-level field is the command's own wall-clock (see `cli-contract.md` §Elapsed time).",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/plugins-registry.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/plugins-registry.schema.json",
4
4
  "title": "PluginsRegistry",
5
5
  "description": "Two shapes in one file: (1) the per-plugin manifest that authors ship as `plugin.json` (see `$defs/PluginManifest`); (2) the aggregate registry the implementation produces on disk (`<cwd>/.skill-map/plugins.json`), which lists all discovered plugins with their compat status. Both shapes are normative. camelCase keys throughout.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/project-config.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/project-config.schema.json",
4
4
  "title": "ProjectConfig",
5
5
  "description": "Shape of `.skill-map/settings.json` (and its `.skill-map/settings.local.json` partner) inside a scope. Loaded by the layered config hierarchy (library defaults → user → user-local → project → project-local → env/flags) and deep-merged per key. All fields optional; defaults apply when absent. camelCase keys throughout, consistent with the rest of the spec.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/refresh-report.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/refresh-report.schema.json",
4
4
  "title": "RefreshReport",
5
5
  "description": "Machine-readable output of `sm refresh <node.path> --json` and `sm refresh --stale --json`. Reports the count of enrichment rows persisted across the targeted node set (universal enrichment layer per `architecture.md` §A.8). The `elapsedMs` top-level field is the command's own wall-clock (see `cli-contract.md` §Elapsed time).",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/report-base-deterministic.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/report-base-deterministic.schema.json",
4
4
  "title": "ReportBaseDeterministic",
5
5
  "description": "Universal base for deterministic Action reports. Every deterministic Action's report MUST extend this base via `allOf` + `$ref`. Symmetric with `report-base.schema.json` (the probabilistic / LLM base, which carries `confidence` + `safety`); deterministic vs probabilistic is the orthogonal axis declared by the Action manifest's `mode` field. Fields: `ok` (boolean, did the Action complete its logical work?), plus action-specific keys via `additionalProperties: true`. Action-specific shapes (e.g. bump's `version` / `noop` / `reason`) ride on the open extension.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/report-base.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/report-base.schema.json",
4
4
  "title": "ReportBase",
5
5
  "description": "Base shape for any probabilistic report produced by an LLM-backed action (summarizers, `sm what`, `sm cluster-triggers`, etc.). All per-kind summary schemas under `summaries/` extend this. Kernel validates the `confidence` and `safety` fields regardless of action-specific extensions.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/scan-result.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/scan-result.schema.json",
4
4
  "title": "ScanResult",
5
5
  "description": "Canonical output of `sm scan --json` (and the data shape sent over WebSocket scan events). Self-describing and versioned; consumers MUST check `schemaVersion` before parsing.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/sidecar.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/sidecar.schema.json",
4
4
  "title": "Sidecar",
5
5
  "description": "Root shape of a co-located YAML sidecar (`<basename>.sm` next to `<basename>.md`). The `.sm` file IS the annotations file, every key under it is, conceptually, an annotation on the node. The YAML root organizes those annotations into structural blocks: `identity` (anchor + drift-detection hashes), `annotations` (the curated catalog of conventional fields), `audit` (timestamps), `settings` (reserved), and arbitrary `<plugin-id>:` namespaces for plugin-contributed data. Vendor file (`<basename>.md`) stays untouched. Schema is `additionalProperties: true` so plugins can add namespaces without coordination; the built-in `unknown-field` analyzer warns on truly unrecognized root keys (typo guard). Format is YAML, comments via `#`, multiline strings via `|` / `>`, permissive types per the YAML 1.2 spec. See `architecture.md` §Annotation system and ROADMAP §Step 9.6 for the design rationale.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/signal.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/signal.schema.json",
4
4
  "title": "Signal",
5
5
  "description": "Intermediate Representation (IR) emitted by extractors during a scan. A Signal is a *candidate* detection: zero, one, or many interpretations of the same piece of source text or structured data. The kernel's resolver phase consumes `Signal[]` and produces final `Link[]` by selecting a winning candidate per Signal (or rejecting all and emitting none) using the active Provider's resolution rules. Opt-in for plugin authors: an extractor MAY emit `Signal`s via `ctx.emitSignal()` when the detection carries genuine ambiguity (multiple plausible kinds, multiple plausible targets, byte-range awareness for collision detection), OR continue calling `ctx.emitLink()` directly when its detection is unambiguous. The two paths coexist; resolved Link rows look identical regardless of origin. Stability: experimental.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/summaries/agent.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/summaries/agent.schema.json",
4
4
  "title": "SummaryAgent",
5
5
  "description": "Report produced by `agent-summarizer` for a single `agent` node. Extends `report-base.schema.json`. Stability: experimental.",
6
6
  "allOf": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/summaries/command.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/summaries/command.schema.json",
4
4
  "title": "SummaryCommand",
5
5
  "description": "Report produced by `command-summarizer` for a single `command` node. Extends `report-base.schema.json`. Stability: experimental.",
6
6
  "allOf": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/summaries/hook.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/summaries/hook.schema.json",
4
4
  "title": "SummaryHook",
5
5
  "description": "Report produced by `hook-summarizer` for a single `hook` node. Extends `report-base.schema.json`. Stability: experimental.",
6
6
  "allOf": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/summaries/markdown.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/summaries/markdown.schema.json",
4
4
  "title": "SummaryMarkdown",
5
5
  "description": "Report produced by `markdown-summarizer` for a single `markdown` node (the format-named generic fallback owned by the built-in `core/markdown` Provider, see `architecture.md` §Provider · dispatch order). Extends `report-base.schema.json`. Stability: experimental.",
6
6
  "allOf": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/summaries/skill.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/summaries/skill.schema.json",
4
4
  "title": "SummarySkill",
5
5
  "description": "Report produced by `skill-summarizer` for a single `skill` node. Extends `report-base.schema.json`. Stability: experimental, field set may tighten as real summarizer output stabilizes.",
6
6
  "allOf": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/user-settings.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/user-settings.schema.json",
4
4
  "title": "UserSettings",
5
5
  "description": "Per-user, per-machine settings file persisted at `~/.skill-map/settings.json`. Holds the small set of preferences that genuinely belong to the operator (not to a project) plus the bookkeeping each one needs. The file is NOT part of the project config layer system (no merge, no PROJECT_LOCAL_ONLY_KEYS interaction); it is read directly by the few modules that own a user-scope feature. See `spec/cli-contract.md` §Scope is always project-local for the broader principle: skill-map never reads `$HOME` by default, this file is the narrow, documented exception. There is intentionally no `.local` partner; values here are already per-machine, so the project / project-local split would have no meaning.",
6
6
  "type": "object",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://skill-map.dev/spec/v0/view-slots.schema.json",
3
+ "$id": "https://skill-map.ai/spec/v0/view-slots.schema.json",
4
4
  "title": "ViewSlots",
5
5
  "description": "Closed catalog of view slots. A view slot is a kernel-published handle that names a visual surface in the UI, fixes the renderer that draws there, and fixes the payload shape the plugin emits. The plugin author picks ONE slot per view contribution; the kernel validates `ctx.emitContribution(id, payload)` against that slot's payload schema in `$defs.payloads`. There is no separate notion of a 'contract', the slot IS the contract. Closed catalog by design: every new slot requires a spec change + UI renderer mount + scaffolder support + conformance fixtures + tests. Compounds catalog evolution cost; see ROADMAP.md §UI contribution system → 'Known limitations carried forward'. Slots are versioned via the manifest field `catalogCompat` (semver against the catalog as a whole), not per-slot.",
6
6
  "type": "object",
package/versioning.md CHANGED
@@ -87,8 +87,8 @@ The first stable commitment is `spec-v1.0.0`. In the current reference roadmap,
87
87
  Once the domain is live, schemas resolve at stable URLs:
88
88
 
89
89
  ```
90
- https://skill-map.dev/spec/v1/node.schema.json
91
- https://skill-map.dev/spec/v1.2/node.schema.json
90
+ https://skill-map.ai/spec/v1/node.schema.json
91
+ https://skill-map.ai/spec/v1.2/node.schema.json
92
92
  ```
93
93
 
94
94
  Major version is always present in the path. Implementations MUST NOT rely on `latest`.