@playola-radio/slipstream 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +132 -0
- package/SKILL.md +63 -0
- package/THIRD-PARTY-NOTICES.md +36 -0
- package/contracts/interface/v2/schema.json +480 -0
- package/dist/answer-forwarder.js +58 -0
- package/dist/attribution-engine.js +164 -0
- package/dist/attribution-producer.js +153 -0
- package/dist/attribution-scoring.js +86 -0
- package/dist/attribution.js +120 -0
- package/dist/blob-source.js +100 -0
- package/dist/boundary-registry.js +47 -0
- package/dist/cas.js +99 -0
- package/dist/change-view.js +201 -0
- package/dist/claude-root-transcript.js +110 -0
- package/dist/cli.js +629 -0
- package/dist/clip-blob-reader.js +104 -0
- package/dist/clip-function-parser.js +83 -0
- package/dist/clip-language.js +15 -0
- package/dist/clip-projection-service.js +240 -0
- package/dist/clip-projection-worker.js +18 -0
- package/dist/clip-projection.js +585 -0
- package/dist/clip-worker-pool.js +118 -0
- package/dist/config.js +154 -0
- package/dist/control-client.js +98 -0
- package/dist/control-protocol.js +72 -0
- package/dist/daemon-location.js +33 -0
- package/dist/daemon.js +951 -0
- package/dist/display-fold.js +332 -0
- package/dist/engine.js +112 -0
- package/dist/entrypoint.js +17 -0
- package/dist/event.js +79 -0
- package/dist/evidence-ingest.js +60 -0
- package/dist/harness-context/claude.js +42 -0
- package/dist/harness-context/codex.js +49 -0
- package/dist/harness-context.js +49 -0
- package/dist/health.js +65 -0
- package/dist/http-reader.js +655 -0
- package/dist/http-security.js +50 -0
- package/dist/interface-projection.js +243 -0
- package/dist/interface-range-resolver.js +230 -0
- package/dist/interface-service.js +509 -0
- package/dist/interface-ts-pool.js +111 -0
- package/dist/interface-ts-worker.js +35 -0
- package/dist/interface-v2-comparison.js +135 -0
- package/dist/interface-v2-core.js +123 -0
- package/dist/interface-v2-typescript.js +448 -0
- package/dist/lock.js +197 -0
- package/dist/log-reader.js +148 -0
- package/dist/log.js +59 -0
- package/dist/maintenance.js +255 -0
- package/dist/mcp-forwarder.js +161 -0
- package/dist/mcp-protocol.js +92 -0
- package/dist/platform.js +21 -0
- package/dist/projection-admission.js +296 -0
- package/dist/projection-trace.js +17 -0
- package/dist/public-events.js +27 -0
- package/dist/question-hook.js +110 -0
- package/dist/questions.js +167 -0
- package/dist/reader-runtime.js +38 -0
- package/dist/reader.js +93 -0
- package/dist/recovery.js +303 -0
- package/dist/schema.js +108 -0
- package/dist/session.js +866 -0
- package/dist/sibling-module.js +10 -0
- package/dist/snapshot.js +15 -0
- package/dist/storage.js +111 -0
- package/dist/store-reader.js +185 -0
- package/dist/swift-grammar.js +268 -0
- package/dist/swift-interface-extract.js +344 -0
- package/dist/swift-interface.js +62 -0
- package/dist/swift-parse-host.js +174 -0
- package/dist/swift-parse-worker.js +34 -0
- package/dist/swift-parse.js +134 -0
- package/dist/swift-spans.js +62 -0
- package/dist/task-forwarder.js +152 -0
- package/dist/transcript/claude.js +199 -0
- package/dist/transcript/codex.js +132 -0
- package/dist/transcript/discovery.js +365 -0
- package/dist/transcript/file-reader.js +128 -0
- package/dist/transcript/fs-io.js +287 -0
- package/dist/transcript/runner.js +62 -0
- package/dist/transcript/steppers.js +30 -0
- package/dist/transcript/types.js +30 -0
- package/dist/transcript/watcher.js +133 -0
- package/dist/tui.js +168 -0
- package/package.json +60 -0
- package/schemas/projections/clip.v1.json +195 -0
- package/schemas/projections/clip.v2.json +212 -0
- package/schemas/projections/clip.v3.json +212 -0
- package/schemas/slipstream.capture.baseline.completed.v1.json +62 -0
- package/schemas/slipstream.capture.gap.v1.json +112 -0
- package/schemas/slipstream.change.attribution.v1.json +115 -0
- package/schemas/slipstream.enrichment.configured.v1.json +77 -0
- package/schemas/slipstream.enrichment.coverage.v1.json +95 -0
- package/schemas/slipstream.file.baselined.v1.json +122 -0
- package/schemas/slipstream.file.changed.v1.json +179 -0
- package/schemas/slipstream.harness.evidence.v1.json +145 -0
- package/schemas/slipstream.question.answered.v1.json +29 -0
- package/schemas/slipstream.question.dispatch_attempted.v1.json +28 -0
- package/schemas/slipstream.question.queued.v1.json +55 -0
- package/schemas/slipstream.session.resumed.v1.json +70 -0
- package/schemas/slipstream.session.started.v1.json +69 -0
- package/schemas/slipstream.task.started.v1.json +72 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://slipstream.dev/schemas/projections/clip.v3.json",
|
|
4
|
+
"title": "clip.v3",
|
|
5
|
+
"$comment": "Reader-derived projection over immutable blobs and a closed language token. No log event, seq or policy_seq is appended. Spans cover raw UTF-8 bytes on whole-line boundaries. Pairing follows LCS diff correspondence, not semantic identity or move detection. Successful results are deterministic for pinned grammar versions; transient timing/availability outcomes are never cached.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"change_seq",
|
|
9
|
+
"projection_version",
|
|
10
|
+
"status",
|
|
11
|
+
"clips"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"change_seq": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"pattern": "^[1-9][0-9]*$",
|
|
17
|
+
"$comment": "The `seq` of the file.changed event this projection is derived from. Stamped on the response; never part of the cache key."
|
|
18
|
+
},
|
|
19
|
+
"projection_version": {
|
|
20
|
+
"const": "clip.v3",
|
|
21
|
+
"$comment": "Names the complete extraction algorithm and is the cache key. A dropped cache recomputes an identical result under the same version."
|
|
22
|
+
},
|
|
23
|
+
"status": {
|
|
24
|
+
"enum": [
|
|
25
|
+
"ready",
|
|
26
|
+
"fallback",
|
|
27
|
+
"skipped",
|
|
28
|
+
"unavailable"
|
|
29
|
+
],
|
|
30
|
+
"$comment": "ready: every changed segment is function-derived or a corresponding null side; fallback: at least one segment is not reliably enclosed by a function, parsing failed, or a soft timeout retained bounded ranges. Inspect per-side methods/reasons and truncated independently."
|
|
31
|
+
},
|
|
32
|
+
"fallback_reason": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"$comment": "Required unless ready: unsupported-language, no-enclosing-function, parse-error-in-enclosing-scope, extraction-budget-exhausted, timeout, and B1 availability/budget reasons. timeout is transient even with fallback clips."
|
|
35
|
+
},
|
|
36
|
+
"clips": {
|
|
37
|
+
"type": "array",
|
|
38
|
+
"items": {
|
|
39
|
+
"$ref": "#/$defs/clip"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"if": {
|
|
44
|
+
"properties": {
|
|
45
|
+
"status": {
|
|
46
|
+
"const": "ready"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"then": {},
|
|
51
|
+
"else": {
|
|
52
|
+
"required": [
|
|
53
|
+
"fallback_reason"
|
|
54
|
+
]
|
|
55
|
+
},
|
|
56
|
+
"$defs": {
|
|
57
|
+
"clip": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"required": [
|
|
60
|
+
"before",
|
|
61
|
+
"after"
|
|
62
|
+
],
|
|
63
|
+
"properties": {
|
|
64
|
+
"before": {
|
|
65
|
+
"$ref": "#/$defs/side"
|
|
66
|
+
},
|
|
67
|
+
"after": {
|
|
68
|
+
"$ref": "#/$defs/side"
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"side": {
|
|
73
|
+
"type": "object",
|
|
74
|
+
"required": [
|
|
75
|
+
"span",
|
|
76
|
+
"method"
|
|
77
|
+
],
|
|
78
|
+
"properties": {
|
|
79
|
+
"span": {
|
|
80
|
+
"oneOf": [
|
|
81
|
+
{
|
|
82
|
+
"type": "null"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"$ref": "#/$defs/span"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"$comment": "null means NO corresponding span on this side (created/deleted content), never unreadable content."
|
|
89
|
+
},
|
|
90
|
+
"method": {
|
|
91
|
+
"enum": [
|
|
92
|
+
"function",
|
|
93
|
+
"changed-range",
|
|
94
|
+
"whole-file",
|
|
95
|
+
"absent",
|
|
96
|
+
"unavailable"
|
|
97
|
+
],
|
|
98
|
+
"$comment": "function: enclosing function rounded out to whole lines; changed-range: bounded diff range (null for no corresponding range); whole-file: no bounded diff; absent/unavailable: B1 dispositions."
|
|
99
|
+
},
|
|
100
|
+
"reason": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"$comment": "Present when the method needs one (e.g. `unavailable` carries the blob/snapshot reason)."
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"allOf": [
|
|
106
|
+
{
|
|
107
|
+
"if": {
|
|
108
|
+
"properties": {
|
|
109
|
+
"method": {
|
|
110
|
+
"const": "unavailable"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
"then": {
|
|
115
|
+
"properties": {
|
|
116
|
+
"span": {
|
|
117
|
+
"type": "null"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"required": [
|
|
121
|
+
"reason"
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"if": {
|
|
127
|
+
"properties": {
|
|
128
|
+
"method": {
|
|
129
|
+
"const": "absent"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
"then": {
|
|
134
|
+
"properties": {
|
|
135
|
+
"span": {
|
|
136
|
+
"type": "null"
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"if": {
|
|
143
|
+
"properties": {
|
|
144
|
+
"method": {
|
|
145
|
+
"const": "whole-file"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"then": {
|
|
150
|
+
"properties": {
|
|
151
|
+
"span": {
|
|
152
|
+
"$ref": "#/$defs/span"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"if": {
|
|
159
|
+
"properties": {
|
|
160
|
+
"method": {
|
|
161
|
+
"const": "function"
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"then": {
|
|
166
|
+
"properties": {
|
|
167
|
+
"span": {
|
|
168
|
+
"$ref": "#/$defs/span"
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
},
|
|
175
|
+
"span": {
|
|
176
|
+
"type": "object",
|
|
177
|
+
"required": [
|
|
178
|
+
"byte_start",
|
|
179
|
+
"byte_end",
|
|
180
|
+
"line_start",
|
|
181
|
+
"line_end",
|
|
182
|
+
"truncated"
|
|
183
|
+
],
|
|
184
|
+
"properties": {
|
|
185
|
+
"byte_start": {
|
|
186
|
+
"type": "integer",
|
|
187
|
+
"minimum": 0,
|
|
188
|
+
"$comment": "Zero-based inclusive start byte offset into the raw blob."
|
|
189
|
+
},
|
|
190
|
+
"byte_end": {
|
|
191
|
+
"type": "integer",
|
|
192
|
+
"minimum": 0,
|
|
193
|
+
"$comment": "Zero-based exclusive end byte offset; the span is [byte_start, byte_end). Always lands on a UTF-8 boundary."
|
|
194
|
+
},
|
|
195
|
+
"line_start": {
|
|
196
|
+
"type": "integer",
|
|
197
|
+
"minimum": 1,
|
|
198
|
+
"$comment": "1-based inclusive first line covered."
|
|
199
|
+
},
|
|
200
|
+
"line_end": {
|
|
201
|
+
"type": "integer",
|
|
202
|
+
"minimum": 1,
|
|
203
|
+
"$comment": "1-based inclusive last line covered. Lines split on \\n (0x0a); a preceding \\r stays in the line (CRLF preserved); a trailing newline does not create a phantom last line."
|
|
204
|
+
},
|
|
205
|
+
"truncated": {
|
|
206
|
+
"type": "boolean",
|
|
207
|
+
"$comment": "True when the per-side line/byte budget clipped this span short of the full changed range."
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://slipstream.dev/schemas/slipstream.capture.baseline.completed.v1.json",
|
|
4
|
+
"title": "slipstream.capture.baseline.completed.v1",
|
|
5
|
+
"$comment": "Marks the initial baseline enumeration as finished. Self-contained; unknown fields permitted for forward compatibility.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"specversion",
|
|
9
|
+
"id",
|
|
10
|
+
"source",
|
|
11
|
+
"type",
|
|
12
|
+
"datacontenttype",
|
|
13
|
+
"seq",
|
|
14
|
+
"time",
|
|
15
|
+
"data"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"specversion": {
|
|
19
|
+
"const": "1.0"
|
|
20
|
+
},
|
|
21
|
+
"id": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^[1-9][0-9]*$"
|
|
24
|
+
},
|
|
25
|
+
"source": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^urn:slipstream:session:"
|
|
28
|
+
},
|
|
29
|
+
"type": {
|
|
30
|
+
"const": "slipstream.capture.baseline.completed.v1"
|
|
31
|
+
},
|
|
32
|
+
"datacontenttype": {
|
|
33
|
+
"const": "application/json"
|
|
34
|
+
},
|
|
35
|
+
"seq": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"pattern": "^[1-9][0-9]*$"
|
|
38
|
+
},
|
|
39
|
+
"time": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"format": "date-time"
|
|
42
|
+
},
|
|
43
|
+
"data": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": [
|
|
46
|
+
"session_id",
|
|
47
|
+
"unknown_scopes"
|
|
48
|
+
],
|
|
49
|
+
"properties": {
|
|
50
|
+
"session_id": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"unknown_scopes": {
|
|
54
|
+
"type": "array",
|
|
55
|
+
"items": {
|
|
56
|
+
"type": "string"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://slipstream.dev/schemas/slipstream.capture.gap.v1.json",
|
|
4
|
+
"title": "slipstream.capture.gap.v1",
|
|
5
|
+
"$comment": "An explicit coverage gap: a scope over which observed states may be incomplete. Self-contained; unknown fields permitted for forward compatibility.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"specversion",
|
|
9
|
+
"id",
|
|
10
|
+
"source",
|
|
11
|
+
"type",
|
|
12
|
+
"datacontenttype",
|
|
13
|
+
"seq",
|
|
14
|
+
"time",
|
|
15
|
+
"data"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"specversion": {
|
|
19
|
+
"const": "1.0"
|
|
20
|
+
},
|
|
21
|
+
"id": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^[1-9][0-9]*$"
|
|
24
|
+
},
|
|
25
|
+
"source": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^urn:slipstream:session:"
|
|
28
|
+
},
|
|
29
|
+
"type": {
|
|
30
|
+
"const": "slipstream.capture.gap.v1"
|
|
31
|
+
},
|
|
32
|
+
"datacontenttype": {
|
|
33
|
+
"const": "application/json"
|
|
34
|
+
},
|
|
35
|
+
"seq": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"pattern": "^[1-9][0-9]*$"
|
|
38
|
+
},
|
|
39
|
+
"time": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"format": "date-time"
|
|
42
|
+
},
|
|
43
|
+
"data": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": [
|
|
46
|
+
"session_id",
|
|
47
|
+
"scope",
|
|
48
|
+
"reason",
|
|
49
|
+
"observed_at_ms"
|
|
50
|
+
],
|
|
51
|
+
"properties": {
|
|
52
|
+
"session_id": {
|
|
53
|
+
"type": "string"
|
|
54
|
+
},
|
|
55
|
+
"scope": {
|
|
56
|
+
"$ref": "#/$defs/scope"
|
|
57
|
+
},
|
|
58
|
+
"reason": {
|
|
59
|
+
"enum": [
|
|
60
|
+
"coalesced",
|
|
61
|
+
"baseline-unreadable",
|
|
62
|
+
"watcher-error",
|
|
63
|
+
"restart",
|
|
64
|
+
"storage"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"episode_id": {
|
|
68
|
+
"type": "string"
|
|
69
|
+
},
|
|
70
|
+
"observed_at_ms": {
|
|
71
|
+
"type": "integer",
|
|
72
|
+
"minimum": 0
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"$defs": {
|
|
78
|
+
"scope": {
|
|
79
|
+
"oneOf": [
|
|
80
|
+
{
|
|
81
|
+
"type": "object",
|
|
82
|
+
"required": [
|
|
83
|
+
"kind"
|
|
84
|
+
],
|
|
85
|
+
"properties": {
|
|
86
|
+
"kind": {
|
|
87
|
+
"const": "session"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"type": "object",
|
|
93
|
+
"required": [
|
|
94
|
+
"kind",
|
|
95
|
+
"path"
|
|
96
|
+
],
|
|
97
|
+
"properties": {
|
|
98
|
+
"kind": {
|
|
99
|
+
"enum": [
|
|
100
|
+
"directory",
|
|
101
|
+
"path"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"path": {
|
|
105
|
+
"type": "string"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://slipstream.dev/schemas/slipstream.change.attribution.v1.json",
|
|
4
|
+
"title": "slipstream.change.attribution.v1",
|
|
5
|
+
"$comment": "A full-replacement attribution result for one file.changed change, targeted by change_seq within this event's own source. Revisable inference, never verified authorship: the highest-seq attribution for a change_seq wins. policy_seq binds the result to the effective policy that preceded the change, so revisions score under the change's original policy. Self-contained; unknown fields permitted for forward compatibility.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"specversion",
|
|
9
|
+
"id",
|
|
10
|
+
"source",
|
|
11
|
+
"type",
|
|
12
|
+
"datacontenttype",
|
|
13
|
+
"seq",
|
|
14
|
+
"time",
|
|
15
|
+
"data"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"specversion": {
|
|
19
|
+
"const": "1.0"
|
|
20
|
+
},
|
|
21
|
+
"id": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^[1-9][0-9]*$"
|
|
24
|
+
},
|
|
25
|
+
"source": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^urn:slipstream:session:"
|
|
28
|
+
},
|
|
29
|
+
"type": {
|
|
30
|
+
"const": "slipstream.change.attribution.v1"
|
|
31
|
+
},
|
|
32
|
+
"datacontenttype": {
|
|
33
|
+
"const": "application/json"
|
|
34
|
+
},
|
|
35
|
+
"seq": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"pattern": "^[1-9][0-9]*$"
|
|
38
|
+
},
|
|
39
|
+
"time": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"format": "date-time"
|
|
42
|
+
},
|
|
43
|
+
"data": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": [
|
|
46
|
+
"session_id",
|
|
47
|
+
"change_seq",
|
|
48
|
+
"policy_seq",
|
|
49
|
+
"status",
|
|
50
|
+
"reason",
|
|
51
|
+
"evidence_seqs"
|
|
52
|
+
],
|
|
53
|
+
"properties": {
|
|
54
|
+
"session_id": {
|
|
55
|
+
"type": "string"
|
|
56
|
+
},
|
|
57
|
+
"change_seq": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"pattern": "^[1-9][0-9]*$"
|
|
60
|
+
},
|
|
61
|
+
"policy_seq": {
|
|
62
|
+
"type": "string",
|
|
63
|
+
"pattern": "^[1-9][0-9]*$"
|
|
64
|
+
},
|
|
65
|
+
"status": {
|
|
66
|
+
"enum": [
|
|
67
|
+
"heuristic",
|
|
68
|
+
"ambiguous",
|
|
69
|
+
"unknown"
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
"reason": {
|
|
73
|
+
"enum": [
|
|
74
|
+
"single-candidate",
|
|
75
|
+
"multiple-candidates",
|
|
76
|
+
"no-matching-evidence",
|
|
77
|
+
"observation-interval-unavailable"
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"evidence_seqs": {
|
|
81
|
+
"type": "array",
|
|
82
|
+
"items": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"pattern": "^[1-9][0-9]*$"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"excluded_conflicts": {
|
|
88
|
+
"type": "array",
|
|
89
|
+
"items": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"required": [
|
|
92
|
+
"harness",
|
|
93
|
+
"harness_session_id",
|
|
94
|
+
"record_id"
|
|
95
|
+
],
|
|
96
|
+
"properties": {
|
|
97
|
+
"harness": {
|
|
98
|
+
"enum": [
|
|
99
|
+
"claude-code",
|
|
100
|
+
"codex"
|
|
101
|
+
]
|
|
102
|
+
},
|
|
103
|
+
"harness_session_id": {
|
|
104
|
+
"type": "string"
|
|
105
|
+
},
|
|
106
|
+
"record_id": {
|
|
107
|
+
"type": "string"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://slipstream.dev/schemas/slipstream.enrichment.configured.v1.json",
|
|
4
|
+
"title": "slipstream.enrichment.configured.v1",
|
|
5
|
+
"$comment": "The resolved effective attribution policy. Committed before the changes it governs and bound to each change by sequence, so a later revision scores under the policy in force when the change occurred. sources declares per-harness coverage; A1 wires no real adapters, so real sources are 'unconfigured'. Self-contained; unknown fields permitted for forward compatibility.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"specversion",
|
|
9
|
+
"id",
|
|
10
|
+
"source",
|
|
11
|
+
"type",
|
|
12
|
+
"datacontenttype",
|
|
13
|
+
"seq",
|
|
14
|
+
"time",
|
|
15
|
+
"data"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"specversion": {
|
|
19
|
+
"const": "1.0"
|
|
20
|
+
},
|
|
21
|
+
"id": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^[1-9][0-9]*$"
|
|
24
|
+
},
|
|
25
|
+
"source": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^urn:slipstream:session:"
|
|
28
|
+
},
|
|
29
|
+
"type": {
|
|
30
|
+
"const": "slipstream.enrichment.configured.v1"
|
|
31
|
+
},
|
|
32
|
+
"datacontenttype": {
|
|
33
|
+
"const": "application/json"
|
|
34
|
+
},
|
|
35
|
+
"seq": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"pattern": "^[1-9][0-9]*$"
|
|
38
|
+
},
|
|
39
|
+
"time": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"format": "date-time"
|
|
42
|
+
},
|
|
43
|
+
"data": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": [
|
|
46
|
+
"session_id",
|
|
47
|
+
"policy"
|
|
48
|
+
],
|
|
49
|
+
"properties": {
|
|
50
|
+
"session_id": {
|
|
51
|
+
"type": "string"
|
|
52
|
+
},
|
|
53
|
+
"policy": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"required": [
|
|
56
|
+
"window_ms",
|
|
57
|
+
"grace_ms",
|
|
58
|
+
"sources"
|
|
59
|
+
],
|
|
60
|
+
"properties": {
|
|
61
|
+
"window_ms": {
|
|
62
|
+
"type": "integer",
|
|
63
|
+
"minimum": 0
|
|
64
|
+
},
|
|
65
|
+
"grace_ms": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"minimum": 0
|
|
68
|
+
},
|
|
69
|
+
"sources": {
|
|
70
|
+
"type": "object"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://slipstream.dev/schemas/slipstream.enrichment.coverage.v1.json",
|
|
4
|
+
"title": "slipstream.enrichment.coverage.v1",
|
|
5
|
+
"$comment": "Observed transcript-reading health for one harness source, so a client can distinguish 'read the scope and matched nothing' from 'could not read the scope'. Runtime health, NOT policy: folded highest-seq-wins per harness, independent of policy_seq. Absence of any coverage event means health is unknown, never a successful read. Never authorship, never a change. Unknown fields permitted for forward compatibility.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"specversion",
|
|
9
|
+
"id",
|
|
10
|
+
"source",
|
|
11
|
+
"type",
|
|
12
|
+
"datacontenttype",
|
|
13
|
+
"seq",
|
|
14
|
+
"time",
|
|
15
|
+
"data"
|
|
16
|
+
],
|
|
17
|
+
"properties": {
|
|
18
|
+
"specversion": {
|
|
19
|
+
"const": "1.0"
|
|
20
|
+
},
|
|
21
|
+
"id": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^[1-9][0-9]*$"
|
|
24
|
+
},
|
|
25
|
+
"source": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"pattern": "^urn:slipstream:session:"
|
|
28
|
+
},
|
|
29
|
+
"type": {
|
|
30
|
+
"const": "slipstream.enrichment.coverage.v1"
|
|
31
|
+
},
|
|
32
|
+
"datacontenttype": {
|
|
33
|
+
"const": "application/json"
|
|
34
|
+
},
|
|
35
|
+
"seq": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"pattern": "^[1-9][0-9]*$"
|
|
38
|
+
},
|
|
39
|
+
"time": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"format": "date-time"
|
|
42
|
+
},
|
|
43
|
+
"data": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": [
|
|
46
|
+
"session_id",
|
|
47
|
+
"harness",
|
|
48
|
+
"state"
|
|
49
|
+
],
|
|
50
|
+
"properties": {
|
|
51
|
+
"session_id": {
|
|
52
|
+
"type": "string"
|
|
53
|
+
},
|
|
54
|
+
"harness": {
|
|
55
|
+
"enum": [
|
|
56
|
+
"claude-code",
|
|
57
|
+
"codex"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"state": {
|
|
61
|
+
"enum": [
|
|
62
|
+
"pending",
|
|
63
|
+
"readable",
|
|
64
|
+
"degraded",
|
|
65
|
+
"unavailable"
|
|
66
|
+
]
|
|
67
|
+
},
|
|
68
|
+
"issues": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"items": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"required": [
|
|
73
|
+
"kind",
|
|
74
|
+
"detail"
|
|
75
|
+
],
|
|
76
|
+
"properties": {
|
|
77
|
+
"kind": {
|
|
78
|
+
"enum": [
|
|
79
|
+
"missing",
|
|
80
|
+
"inaccessible",
|
|
81
|
+
"malformed",
|
|
82
|
+
"unsupported",
|
|
83
|
+
"discovery-limited"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"detail": {
|
|
87
|
+
"type": "string"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|