@gmickel/gno 1.18.0 → 1.19.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 (129) hide show
  1. package/README.md +5 -3
  2. package/assets/skill/SKILL.md +27 -0
  3. package/package.json +2 -1
  4. package/spec/AGENTS.md +83 -0
  5. package/spec/CLAUDE.md +83 -0
  6. package/spec/bench-fixture.schema.json +137 -0
  7. package/spec/cli.md +2894 -0
  8. package/spec/db/schema.sql +442 -0
  9. package/spec/evals-agentic.md +510 -0
  10. package/spec/evals.md +1106 -0
  11. package/spec/mcp.md +2229 -0
  12. package/spec/output-schemas/activation-verification.schema.json +515 -0
  13. package/spec/output-schemas/ask.schema.json +366 -0
  14. package/spec/output-schemas/backlinks.schema.json +131 -0
  15. package/spec/output-schemas/bench-result.schema.json +120 -0
  16. package/spec/output-schemas/capture-receipt.schema.json +143 -0
  17. package/spec/output-schemas/collection-list.schema.json +45 -0
  18. package/spec/output-schemas/context-capsule-v1.schema.json +691 -0
  19. package/spec/output-schemas/context-capsule-verification.schema.json +1338 -0
  20. package/spec/output-schemas/context-list.schema.json +21 -0
  21. package/spec/output-schemas/doctor.schema.json +313 -0
  22. package/spec/output-schemas/error.schema.json +30 -0
  23. package/spec/output-schemas/expansion.schema.json +37 -0
  24. package/spec/output-schemas/get.schema.json +140 -0
  25. package/spec/output-schemas/graph-query.schema.json +99 -0
  26. package/spec/output-schemas/graph.schema.json +371 -0
  27. package/spec/output-schemas/links-list.schema.json +186 -0
  28. package/spec/output-schemas/mcp-add-collection-result.schema.json +23 -0
  29. package/spec/output-schemas/mcp-capture-result.schema.json +152 -0
  30. package/spec/output-schemas/mcp-http-error.schema.json +30 -0
  31. package/spec/output-schemas/mcp-job-list.schema.json +58 -0
  32. package/spec/output-schemas/mcp-job-status.schema.json +224 -0
  33. package/spec/output-schemas/mcp-remove-result.schema.json +39 -0
  34. package/spec/output-schemas/mcp-sync-result.schema.json +41 -0
  35. package/spec/output-schemas/mcp-tag-result.schema.json +33 -0
  36. package/spec/output-schemas/models-list.schema.json +93 -0
  37. package/spec/output-schemas/multi-get.schema.json +103 -0
  38. package/spec/output-schemas/process-status.schema.json +119 -0
  39. package/spec/output-schemas/query-diagnose.schema.json +123 -0
  40. package/spec/output-schemas/resident-status.schema.json +154 -0
  41. package/spec/output-schemas/retrieval-trace-common.schema.json +492 -0
  42. package/spec/output-schemas/retrieval-trace-delete.schema.json +16 -0
  43. package/spec/output-schemas/retrieval-trace-export.schema.json +61 -0
  44. package/spec/output-schemas/retrieval-trace-filters.schema.json +139 -0
  45. package/spec/output-schemas/retrieval-trace-judgment.schema.json +15 -0
  46. package/spec/output-schemas/retrieval-trace-list.schema.json +18 -0
  47. package/spec/output-schemas/retrieval-trace-payloads.schema.json +178 -0
  48. package/spec/output-schemas/retrieval-trace-purge.schema.json +31 -0
  49. package/spec/output-schemas/retrieval-trace-qrels.schema.json +303 -0
  50. package/spec/output-schemas/retrieval-trace-replay.schema.json +286 -0
  51. package/spec/output-schemas/retrieval-trace-show.schema.json +69 -0
  52. package/spec/output-schemas/retrieval-trace-summary.schema.json +65 -0
  53. package/spec/output-schemas/search-result.schema.json +154 -0
  54. package/spec/output-schemas/search-results.schema.json +338 -0
  55. package/spec/output-schemas/similar.schema.json +84 -0
  56. package/spec/output-schemas/status.schema.json +676 -0
  57. package/spec/output-schemas/tags-list.schema.json +48 -0
  58. package/src/app/context-runtime-types.ts +3 -0
  59. package/src/app/context-runtime.ts +15 -1
  60. package/src/cli/commands/ask.ts +106 -36
  61. package/src/cli/commands/context-build.ts +56 -9
  62. package/src/cli/commands/get.ts +64 -3
  63. package/src/cli/commands/query.ts +62 -23
  64. package/src/cli/commands/replay.ts +140 -0
  65. package/src/cli/commands/search.ts +48 -3
  66. package/src/cli/commands/shared.ts +3 -1
  67. package/src/cli/commands/trace.ts +200 -0
  68. package/src/cli/commands/vsearch.ts +75 -53
  69. package/src/cli/program.ts +255 -0
  70. package/src/config/index.ts +9 -0
  71. package/src/config/retrieval-traces.ts +56 -0
  72. package/src/config/types.ts +4 -0
  73. package/src/core/context-compiler.ts +11 -4
  74. package/src/core/retrieval-qrels.ts +405 -0
  75. package/src/core/retrieval-replay-candidate.ts +368 -0
  76. package/src/core/retrieval-replay-types.ts +109 -0
  77. package/src/core/retrieval-replay-validation.ts +89 -0
  78. package/src/core/retrieval-replay.ts +441 -0
  79. package/src/core/retrieval-trace-evidence-origin.ts +175 -0
  80. package/src/core/retrieval-trace-export.ts +113 -0
  81. package/src/core/retrieval-trace-filter-normalization.ts +27 -0
  82. package/src/core/retrieval-trace-filters.ts +19 -0
  83. package/src/core/retrieval-trace-management-helpers.ts +247 -0
  84. package/src/core/retrieval-trace-management-types.ts +132 -0
  85. package/src/core/retrieval-trace-management.ts +422 -0
  86. package/src/core/retrieval-trace-request.ts +141 -0
  87. package/src/core/retrieval-trace-session.ts +494 -0
  88. package/src/core/retrieval-trace.ts +472 -0
  89. package/src/mcp/tools/context.ts +59 -8
  90. package/src/mcp/tools/get.ts +35 -1
  91. package/src/mcp/tools/index.ts +74 -0
  92. package/src/mcp/tools/query.ts +95 -64
  93. package/src/mcp/tools/search.ts +36 -13
  94. package/src/mcp/tools/trace.ts +143 -0
  95. package/src/mcp/tools/vsearch.ts +71 -38
  96. package/src/pipeline/answer.ts +167 -26
  97. package/src/pipeline/graph-retrieval.ts +15 -1
  98. package/src/pipeline/hybrid.ts +151 -43
  99. package/src/pipeline/search.ts +36 -3
  100. package/src/pipeline/trace-metadata.ts +47 -0
  101. package/src/pipeline/types.ts +43 -0
  102. package/src/pipeline/vsearch.ts +101 -38
  103. package/src/sdk/client.ts +380 -71
  104. package/src/sdk/documents.ts +48 -1
  105. package/src/sdk/index.ts +17 -0
  106. package/src/sdk/types.ts +28 -0
  107. package/src/serve/context-capsule.ts +67 -8
  108. package/src/serve/public/app.tsx +12 -1
  109. package/src/serve/public/globals.built.css +1 -1
  110. package/src/serve/public/lib/workspace-tabs.ts +2 -0
  111. package/src/serve/public/pages/Dashboard.tsx +10 -0
  112. package/src/serve/public/pages/TraceHistory.tsx +478 -0
  113. package/src/serve/public/pages/trace-history-detail.tsx +224 -0
  114. package/src/serve/retrieval-trace.ts +28 -0
  115. package/src/serve/routes/api.ts +366 -72
  116. package/src/serve/routes/traces.ts +156 -0
  117. package/src/serve/server.ts +87 -2
  118. package/src/store/index.ts +31 -0
  119. package/src/store/migrations/014-retrieval-traces.ts +303 -0
  120. package/src/store/migrations/index.ts +2 -0
  121. package/src/store/retrieval-trace-codec.ts +384 -0
  122. package/src/store/sqlite/adapter.ts +153 -1
  123. package/src/store/sqlite/retrieval-trace-management-store.ts +341 -0
  124. package/src/store/sqlite/retrieval-trace-retention.ts +349 -0
  125. package/src/store/sqlite/retrieval-trace-rows.ts +267 -0
  126. package/src/store/sqlite/retrieval-trace-store.ts +515 -0
  127. package/src/store/types.ts +297 -0
  128. package/src/store/vector/sqlite-vec.ts +76 -1
  129. package/src/store/vector/types.ts +1 -1
@@ -0,0 +1,103 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gno://schemas/multi-get@1.0",
4
+ "title": "GNO Multi-Get Response",
5
+ "description": "Response from gno multi-get command",
6
+ "type": "object",
7
+ "required": ["documents", "meta"],
8
+ "properties": {
9
+ "documents": {
10
+ "type": "array",
11
+ "description": "Retrieved documents",
12
+ "items": {
13
+ "type": "object",
14
+ "required": ["docid", "uri", "content", "source"],
15
+ "properties": {
16
+ "docid": {
17
+ "type": "string",
18
+ "pattern": "^#[a-f0-9]{6,8}$"
19
+ },
20
+ "uri": {
21
+ "type": "string",
22
+ "pattern": "^gno://[^/]+/.+"
23
+ },
24
+ "title": {
25
+ "type": "string"
26
+ },
27
+ "content": {
28
+ "type": "string",
29
+ "description": "Mirror content (possibly truncated)"
30
+ },
31
+ "truncated": {
32
+ "type": "boolean",
33
+ "description": "Whether content was truncated due to maxBytes"
34
+ },
35
+ "totalLines": {
36
+ "type": "integer",
37
+ "minimum": 0
38
+ },
39
+ "source": {
40
+ "type": "object",
41
+ "required": ["relPath", "mime", "ext"],
42
+ "properties": {
43
+ "absPath": { "type": "string" },
44
+ "relPath": { "type": "string" },
45
+ "mime": { "type": "string" },
46
+ "ext": { "type": "string", "pattern": "^\\.[a-zA-Z0-9]+$" }
47
+ }
48
+ }
49
+ }
50
+ }
51
+ },
52
+ "skipped": {
53
+ "type": "array",
54
+ "description": "Documents that were skipped",
55
+ "items": {
56
+ "type": "object",
57
+ "required": ["ref", "reason"],
58
+ "properties": {
59
+ "ref": {
60
+ "type": "string",
61
+ "description": "Requested reference"
62
+ },
63
+ "reason": {
64
+ "type": "string",
65
+ "description": "Reason for skipping",
66
+ "enum": [
67
+ "not_found",
68
+ "exceeds_maxBytes",
69
+ "permission_denied",
70
+ "conversion_error",
71
+ "invalid_ref"
72
+ ]
73
+ }
74
+ }
75
+ }
76
+ },
77
+ "meta": {
78
+ "type": "object",
79
+ "required": ["requested", "returned", "skipped"],
80
+ "properties": {
81
+ "requested": {
82
+ "type": "integer",
83
+ "description": "Number of documents requested",
84
+ "minimum": 0
85
+ },
86
+ "returned": {
87
+ "type": "integer",
88
+ "description": "Number of documents returned",
89
+ "minimum": 0
90
+ },
91
+ "skipped": {
92
+ "type": "integer",
93
+ "description": "Number of documents skipped",
94
+ "minimum": 0
95
+ },
96
+ "maxBytes": {
97
+ "type": "integer",
98
+ "description": "Max bytes limit used"
99
+ }
100
+ }
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,119 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gno://schemas/process-status@1.0",
4
+ "title": "GNO Process Status",
5
+ "description": "Status of a detached gno serve or daemon process, reported by --status --json",
6
+ "type": "object",
7
+ "required": [
8
+ "running",
9
+ "pid",
10
+ "port",
11
+ "cmd",
12
+ "version",
13
+ "started_at",
14
+ "uptime_seconds",
15
+ "resident",
16
+ "pid_file",
17
+ "log_file",
18
+ "log_size_bytes"
19
+ ],
20
+ "properties": {
21
+ "running": {
22
+ "type": "boolean",
23
+ "description": "Whether a live matching process was found via pid-file + liveness probe"
24
+ },
25
+ "pid": {
26
+ "type": ["integer", "null"],
27
+ "minimum": 1,
28
+ "description": "Process ID from the pid-file, or null when no pid-file exists"
29
+ },
30
+ "port": {
31
+ "type": ["integer", "null"],
32
+ "minimum": 1,
33
+ "maximum": 65535,
34
+ "description": "Resident HTTP listener port, or null when no usable live process was found."
35
+ },
36
+ "cmd": {
37
+ "type": "string",
38
+ "enum": ["serve", "daemon"],
39
+ "description": "Which command the status is reporting on"
40
+ },
41
+ "version": {
42
+ "type": ["string", "null"],
43
+ "description": "GNO version recorded when the process was started; null when no pid-file exists"
44
+ },
45
+ "started_at": {
46
+ "type": ["string", "null"],
47
+ "format": "date-time",
48
+ "description": "ISO 8601 timestamp of when the detached process was started; null when no pid-file exists"
49
+ },
50
+ "uptime_seconds": {
51
+ "type": ["integer", "null"],
52
+ "minimum": 0,
53
+ "description": "Seconds since started_at, computed at status-read time; null when not running"
54
+ },
55
+ "resident": {
56
+ "anyOf": [
57
+ { "$ref": "gno://schemas/resident-status@1.0" },
58
+ { "type": "null" }
59
+ ],
60
+ "description": "Best-effort live redacted resident lifecycle snapshot, or null when unavailable."
61
+ },
62
+ "pid_file": {
63
+ "type": "string",
64
+ "description": "Absolute path to the pid-file that was consulted"
65
+ },
66
+ "log_file": {
67
+ "type": "string",
68
+ "description": "Absolute path to the log-file the detached process writes to"
69
+ },
70
+ "log_size_bytes": {
71
+ "type": ["integer", "null"],
72
+ "minimum": 0,
73
+ "description": "Current size of the log-file in bytes, or null when the file does not exist"
74
+ }
75
+ },
76
+ "allOf": [
77
+ {
78
+ "description": "when running, pid/version/started_at/uptime_seconds must all be populated",
79
+ "if": {
80
+ "properties": { "running": { "const": true } },
81
+ "required": ["running"]
82
+ },
83
+ "then": {
84
+ "properties": {
85
+ "pid": { "type": "integer", "minimum": 1 },
86
+ "version": { "type": "string" },
87
+ "started_at": { "type": "string", "format": "date-time" },
88
+ "uptime_seconds": { "type": "integer", "minimum": 0 }
89
+ },
90
+ "required": ["pid", "version", "started_at", "uptime_seconds"]
91
+ }
92
+ },
93
+ {
94
+ "description": "when not running, uptime_seconds must be null (the process has no live uptime to report)",
95
+ "if": {
96
+ "properties": { "running": { "const": false } },
97
+ "required": ["running"]
98
+ },
99
+ "then": {
100
+ "properties": { "uptime_seconds": { "type": "null" } }
101
+ }
102
+ },
103
+ {
104
+ "description": "a live resident process must report its HTTP listening port as an integer",
105
+ "if": {
106
+ "properties": {
107
+ "running": { "const": true }
108
+ },
109
+ "required": ["running"]
110
+ },
111
+ "then": {
112
+ "properties": {
113
+ "port": { "type": "integer", "minimum": 1, "maximum": 65535 }
114
+ },
115
+ "required": ["port"]
116
+ }
117
+ }
118
+ ]
119
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gno://schemas/query-diagnose@1.0",
4
+ "title": "GNO Query Diagnose",
5
+ "type": "object",
6
+ "required": ["schemaVersion", "query", "target", "stages", "chunk", "meta"],
7
+ "properties": {
8
+ "schemaVersion": { "type": "string", "const": "1.0" },
9
+ "query": { "type": "string" },
10
+ "target": {
11
+ "type": "object",
12
+ "required": [
13
+ "ref",
14
+ "status",
15
+ "docid",
16
+ "uri",
17
+ "title",
18
+ "contentType",
19
+ "contentTypeSource",
20
+ "categories",
21
+ "graphHints",
22
+ "contentTypeRulesFingerprint",
23
+ "contentTypeFingerprintMatches",
24
+ "mirrorHash",
25
+ "chunkCount",
26
+ "filterReasons"
27
+ ],
28
+ "properties": {
29
+ "ref": { "type": "string" },
30
+ "status": {
31
+ "type": "string",
32
+ "enum": [
33
+ "not_found",
34
+ "inactive",
35
+ "no_indexed_content",
36
+ "filtered_out",
37
+ "diagnosed"
38
+ ]
39
+ },
40
+ "docid": { "type": ["string", "null"], "pattern": "^#[a-f0-9]{6,}$" },
41
+ "uri": { "type": ["string", "null"], "format": "uri" },
42
+ "title": { "type": ["string", "null"] },
43
+ "contentType": { "type": ["string", "null"] },
44
+ "contentTypeSource": { "type": ["string", "null"] },
45
+ "categories": { "type": "array", "items": { "type": "string" } },
46
+ "graphHints": { "type": "array", "items": { "type": "string" } },
47
+ "contentTypeRulesFingerprint": { "type": ["string", "null"] },
48
+ "contentTypeFingerprintMatches": { "type": ["boolean", "null"] },
49
+ "mirrorHash": { "type": ["string", "null"] },
50
+ "chunkCount": { "type": "integer", "minimum": 0 },
51
+ "filterReasons": { "type": "array", "items": { "type": "string" } }
52
+ },
53
+ "additionalProperties": false
54
+ },
55
+ "stages": {
56
+ "type": "array",
57
+ "items": {
58
+ "type": "object",
59
+ "required": [
60
+ "id",
61
+ "status",
62
+ "sourceCount",
63
+ "present",
64
+ "rank",
65
+ "score",
66
+ "survived",
67
+ "dropReason"
68
+ ],
69
+ "properties": {
70
+ "id": {
71
+ "type": "string",
72
+ "enum": ["bm25", "vector", "fusion", "graph", "rerank"]
73
+ },
74
+ "status": { "type": "string", "enum": ["active", "skipped"] },
75
+ "sourceCount": { "type": "integer", "minimum": 0 },
76
+ "present": { "type": "boolean" },
77
+ "rank": { "type": ["integer", "null"], "minimum": 1 },
78
+ "score": { "type": ["number", "null"] },
79
+ "survived": { "type": "boolean" },
80
+ "dropReason": {
81
+ "type": ["string", "null"],
82
+ "enum": ["not_in_candidate_set", "below_cutoff", "skipped", null]
83
+ },
84
+ "reason": { "type": "string" }
85
+ },
86
+ "additionalProperties": false
87
+ }
88
+ },
89
+ "chunk": {
90
+ "type": "object",
91
+ "required": ["seq", "startLine", "endLine", "language"],
92
+ "properties": {
93
+ "seq": { "type": ["integer", "null"], "minimum": 0 },
94
+ "startLine": { "type": ["integer", "null"], "minimum": 1 },
95
+ "endLine": { "type": ["integer", "null"], "minimum": 1 },
96
+ "language": { "type": ["string", "null"] }
97
+ },
98
+ "additionalProperties": false
99
+ },
100
+ "meta": {
101
+ "type": "object",
102
+ "required": ["mode", "vectorsUsed", "reranked", "totalResults"],
103
+ "properties": {
104
+ "mode": { "type": "string", "enum": ["bm25_only", "hybrid"] },
105
+ "vectorsUsed": { "type": "boolean" },
106
+ "reranked": { "type": "boolean" },
107
+ "totalResults": { "type": "integer", "minimum": 0 },
108
+ "queryModes": {
109
+ "type": "object",
110
+ "required": ["term", "intent", "hyde"],
111
+ "properties": {
112
+ "term": { "type": "integer", "minimum": 0 },
113
+ "intent": { "type": "integer", "minimum": 0 },
114
+ "hyde": { "type": "boolean" }
115
+ },
116
+ "additionalProperties": false
117
+ }
118
+ },
119
+ "additionalProperties": false
120
+ }
121
+ },
122
+ "additionalProperties": false
123
+ }
@@ -0,0 +1,154 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gno://schemas/resident-status@1.0",
4
+ "title": "GNO Resident Status",
5
+ "description": "Redacted lifecycle projection shared by resident and standalone status surfaces; excludes paths, tokens, queries, content, and caller identity",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion",
10
+ "mode",
11
+ "resident",
12
+ "uptimeSeconds",
13
+ "listenerPort",
14
+ "admission",
15
+ "shutdown",
16
+ "transport",
17
+ "readers",
18
+ "models",
19
+ "jobs",
20
+ "generations"
21
+ ],
22
+ "properties": {
23
+ "schemaVersion": { "const": "1.0" },
24
+ "mode": {
25
+ "type": "string",
26
+ "enum": ["serve", "daemon", "stdio", "direct-cli"]
27
+ },
28
+ "resident": { "type": "boolean" },
29
+ "uptimeSeconds": { "type": ["integer", "null"], "minimum": 0 },
30
+ "listenerPort": {
31
+ "type": ["integer", "null"],
32
+ "minimum": 1,
33
+ "maximum": 65535
34
+ },
35
+ "admission": {
36
+ "type": "object",
37
+ "additionalProperties": false,
38
+ "required": ["state", "activeRequests"],
39
+ "properties": {
40
+ "state": {
41
+ "type": "string",
42
+ "enum": ["accepting", "draining", "closed"]
43
+ },
44
+ "activeRequests": { "type": "integer", "minimum": 0 }
45
+ }
46
+ },
47
+ "shutdown": {
48
+ "type": "object",
49
+ "additionalProperties": false,
50
+ "required": ["state"],
51
+ "properties": {
52
+ "state": {
53
+ "type": "string",
54
+ "enum": ["none", "graceful", "deadline"]
55
+ }
56
+ }
57
+ },
58
+ "transport": {
59
+ "type": "object",
60
+ "additionalProperties": false,
61
+ "required": [
62
+ "activeRequests",
63
+ "activeSessions",
64
+ "queuedRequests",
65
+ "maxConcurrentRequests",
66
+ "maxQueuedRequests",
67
+ "maxSessions"
68
+ ],
69
+ "properties": {
70
+ "activeRequests": { "type": "integer", "minimum": 0 },
71
+ "activeSessions": { "type": "integer", "minimum": 0 },
72
+ "queuedRequests": { "type": "integer", "minimum": 0 },
73
+ "maxConcurrentRequests": { "type": "integer", "minimum": 0 },
74
+ "maxQueuedRequests": { "type": "integer", "minimum": 0 },
75
+ "maxSessions": { "type": "integer", "minimum": 0 }
76
+ }
77
+ },
78
+ "readers": {
79
+ "type": "object",
80
+ "additionalProperties": false,
81
+ "required": ["active", "queued", "limit", "maxQueued"],
82
+ "properties": {
83
+ "active": { "type": "integer", "minimum": 0 },
84
+ "queued": { "type": "integer", "minimum": 0 },
85
+ "limit": { "type": "integer", "minimum": 0 },
86
+ "maxQueued": { "type": "integer", "minimum": 0 }
87
+ }
88
+ },
89
+ "models": {
90
+ "type": "object",
91
+ "additionalProperties": false,
92
+ "required": [
93
+ "activeLeases",
94
+ "leaseAcquisitions",
95
+ "leaseReleases",
96
+ "loadedModels",
97
+ "loadAttempts",
98
+ "loadSuccesses",
99
+ "loadFailures",
100
+ "inflightLoads"
101
+ ],
102
+ "properties": {
103
+ "activeLeases": { "type": "integer", "minimum": 0 },
104
+ "leaseAcquisitions": { "type": "integer", "minimum": 0 },
105
+ "leaseReleases": { "type": "integer", "minimum": 0 },
106
+ "loadedModels": { "type": "integer", "minimum": 0 },
107
+ "loadAttempts": { "type": "integer", "minimum": 0 },
108
+ "loadSuccesses": { "type": "integer", "minimum": 0 },
109
+ "loadFailures": { "type": "integer", "minimum": 0 },
110
+ "inflightLoads": { "type": "integer", "minimum": 0 }
111
+ }
112
+ },
113
+ "jobs": {
114
+ "type": "object",
115
+ "additionalProperties": false,
116
+ "required": ["active", "recent", "failed"],
117
+ "properties": {
118
+ "active": { "type": "integer", "minimum": 0 },
119
+ "recent": { "type": "integer", "minimum": 0 },
120
+ "failed": { "type": "integer", "minimum": 0 }
121
+ }
122
+ },
123
+ "generations": {
124
+ "type": "object",
125
+ "additionalProperties": false,
126
+ "required": ["content", "index"],
127
+ "properties": {
128
+ "content": { "type": "integer", "minimum": 0 },
129
+ "index": { "type": "integer", "minimum": 0 }
130
+ }
131
+ }
132
+ },
133
+ "allOf": [
134
+ {
135
+ "if": {
136
+ "properties": { "resident": { "const": true } },
137
+ "required": ["resident"]
138
+ },
139
+ "then": {
140
+ "properties": {
141
+ "mode": { "enum": ["serve", "daemon"] },
142
+ "uptimeSeconds": { "type": "integer", "minimum": 0 }
143
+ }
144
+ },
145
+ "else": {
146
+ "properties": {
147
+ "mode": { "enum": ["stdio", "direct-cli"] },
148
+ "uptimeSeconds": { "type": "null" },
149
+ "listenerPort": { "type": "null" }
150
+ }
151
+ }
152
+ }
153
+ ]
154
+ }