@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
package/LICENSE
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
|
|
2
|
+
Apache License
|
|
3
|
+
Version 2.0, January 2004
|
|
4
|
+
http://www.apache.org/licenses/
|
|
5
|
+
|
|
6
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
7
|
+
|
|
8
|
+
1. Definitions.
|
|
9
|
+
|
|
10
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
11
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
12
|
+
|
|
13
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
14
|
+
the copyright owner that is granting the License.
|
|
15
|
+
|
|
16
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
17
|
+
other entities that control, are controlled by, or are under common
|
|
18
|
+
control with that entity. For the purposes of this definition,
|
|
19
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
20
|
+
direction or management of such entity, whether by contract or
|
|
21
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
22
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
23
|
+
|
|
24
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
25
|
+
exercising permissions granted by this License.
|
|
26
|
+
|
|
27
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
28
|
+
including but not limited to software source code, documentation
|
|
29
|
+
source, and configuration files.
|
|
30
|
+
|
|
31
|
+
"Object" form shall mean any form resulting from mechanical
|
|
32
|
+
transformation or translation of a Source form, including but
|
|
33
|
+
not limited to compiled object code, generated documentation,
|
|
34
|
+
and conversions to other media types.
|
|
35
|
+
|
|
36
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
37
|
+
Object form, made available under the License, as indicated by a
|
|
38
|
+
copyright notice that is included in or attached to the work
|
|
39
|
+
(an example is provided in the Appendix below).
|
|
40
|
+
|
|
41
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
42
|
+
form, that is based on (or derived from) the Work and for which the
|
|
43
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
44
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
45
|
+
of this License, Derivative Works shall not include works that remain
|
|
46
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
47
|
+
the Work and Derivative Works thereof.
|
|
48
|
+
|
|
49
|
+
"Contribution" shall mean any work of authorship, including
|
|
50
|
+
the original version of the Work and any modifications or additions
|
|
51
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
52
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
53
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
54
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
55
|
+
means any form of electronic, verbal, or written communication sent
|
|
56
|
+
to the Licensor or its representatives, including but not limited to
|
|
57
|
+
communication on electronic mailing lists, source code control systems,
|
|
58
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
59
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
60
|
+
excluding communication that is conspicuously marked or otherwise
|
|
61
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
62
|
+
|
|
63
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
64
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
65
|
+
subsequently incorporated within the Work.
|
|
66
|
+
|
|
67
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
68
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
69
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
70
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
71
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
72
|
+
Work and such Derivative Works in Source or Object form.
|
|
73
|
+
|
|
74
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
75
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
76
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
77
|
+
(except as stated in this section) patent license to make, have made,
|
|
78
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
79
|
+
where such license applies only to those patent claims licensable
|
|
80
|
+
by such Contributor that are necessarily infringed by their
|
|
81
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
82
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
83
|
+
institute patent litigation against any entity (including a
|
|
84
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
85
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
86
|
+
or contributory patent infringement, then any patent licenses
|
|
87
|
+
granted to You under this License for that Work shall terminate
|
|
88
|
+
as of the date such litigation is filed.
|
|
89
|
+
|
|
90
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
91
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
92
|
+
modifications, and in Source or Object form, provided that You
|
|
93
|
+
meet the following conditions:
|
|
94
|
+
|
|
95
|
+
(a) You must give any other recipients of the Work or
|
|
96
|
+
Derivative Works a copy of this License; and
|
|
97
|
+
|
|
98
|
+
(b) You must cause any modified files to carry prominent notices
|
|
99
|
+
stating that You changed the files; and
|
|
100
|
+
|
|
101
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
102
|
+
that You distribute, all copyright, patent, trademark, and
|
|
103
|
+
attribution notices from the Source form of the Work,
|
|
104
|
+
excluding those notices that do not pertain to any part of
|
|
105
|
+
the Derivative Works; and
|
|
106
|
+
|
|
107
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
108
|
+
distribution, then any Derivative Works that You distribute must
|
|
109
|
+
include a readable copy of the attribution notices contained
|
|
110
|
+
within such NOTICE file, excluding those notices that do not
|
|
111
|
+
pertain to any part of the Derivative Works, in at least one
|
|
112
|
+
of the following places: within a NOTICE text file distributed
|
|
113
|
+
as part of the Derivative Works; within the Source form or
|
|
114
|
+
documentation, if provided along with the Derivative Works; or,
|
|
115
|
+
within a display generated by the Derivative Works, if and
|
|
116
|
+
wherever such third-party notices normally appear. The contents
|
|
117
|
+
of the NOTICE file are for informational purposes only and
|
|
118
|
+
do not modify the License. You may add Your own attribution
|
|
119
|
+
notices within Derivative Works that You distribute, alongside
|
|
120
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
121
|
+
that such additional attribution notices cannot be construed
|
|
122
|
+
as modifying the License.
|
|
123
|
+
|
|
124
|
+
You may add Your own copyright statement to Your modifications and
|
|
125
|
+
may provide additional or different license terms and conditions
|
|
126
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
127
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
128
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
129
|
+
the conditions stated in this License.
|
|
130
|
+
|
|
131
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
132
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
133
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
134
|
+
this License, without any additional terms or conditions.
|
|
135
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
136
|
+
the terms of any separate license agreement you may have executed
|
|
137
|
+
with Licensor regarding such Contributions.
|
|
138
|
+
|
|
139
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
140
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
141
|
+
except as required for reasonable and customary use in describing the
|
|
142
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
143
|
+
|
|
144
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
145
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
146
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
147
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
148
|
+
implied, including, without limitation, any warranties or conditions
|
|
149
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
150
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
151
|
+
appropriateness of using or redistributing the Work and assume any
|
|
152
|
+
risks associated with Your exercise of permissions under this License.
|
|
153
|
+
|
|
154
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
155
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
156
|
+
unless required by applicable law (such as deliberate and grossly
|
|
157
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
158
|
+
liable to You for damages, including any direct, indirect, special,
|
|
159
|
+
incidental, or consequential damages of any character arising as a
|
|
160
|
+
result of this License or out of the use or inability to use the
|
|
161
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
162
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
163
|
+
other commercial damages or losses), even if such Contributor
|
|
164
|
+
has been advised of the possibility of such damages.
|
|
165
|
+
|
|
166
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
167
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
168
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
169
|
+
or other liability obligations and/or rights consistent with this
|
|
170
|
+
License. However, in accepting such obligations, You may act only
|
|
171
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
172
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
173
|
+
defend, and hold each Contributor harmless for any liability
|
|
174
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
175
|
+
of your accepting any such warranty or additional liability.
|
|
176
|
+
|
|
177
|
+
END OF TERMS AND CONDITIONS
|
|
178
|
+
|
|
179
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
180
|
+
|
|
181
|
+
To apply the Apache License to your work, attach the following
|
|
182
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
183
|
+
replaced with your own identifying information. (Don't include
|
|
184
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
185
|
+
comment syntax for the file format. We also recommend that a
|
|
186
|
+
file or class name and description of purpose be included on the
|
|
187
|
+
same "printed page" as the copyright notice for easier
|
|
188
|
+
identification within third-party archives.
|
|
189
|
+
|
|
190
|
+
Copyright [yyyy] [name of copyright owner]
|
|
191
|
+
|
|
192
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
193
|
+
you may not use this file except in compliance with the License.
|
|
194
|
+
You may obtain a copy of the License at
|
|
195
|
+
|
|
196
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
197
|
+
|
|
198
|
+
Unless required by applicable law or agreed to in writing, software
|
|
199
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
200
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
201
|
+
See the License for the specific language governing permissions and
|
|
202
|
+
limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Slipstream
|
|
2
|
+
|
|
3
|
+
**Review your coding agent's work as it happens, instead of facing a pile of
|
|
4
|
+
files at the end.**
|
|
5
|
+
|
|
6
|
+
Slipstream streams the changes an AI coding agent makes to your code, live, so
|
|
7
|
+
you can follow along and review in near-real-time while the agent works. The name
|
|
8
|
+
is the thesis: a slipstream is the low-pressure pocket behind a fast-moving
|
|
9
|
+
object, and riding in it makes following far cheaper than leading.
|
|
10
|
+
|
|
11
|
+
Status: **pre-implementation.** The architecture is settled and the MVP plan is
|
|
12
|
+
written. No code yet.
|
|
13
|
+
|
|
14
|
+
- [`IMPLEMENTATION_PLAN.md`](IMPLEMENTATION_PLAN.md) — the five-stage MVP plan
|
|
15
|
+
- [`NOTES-architecture.md`](NOTES-architecture.md) — decision record, verified
|
|
16
|
+
findings, and the Codex adversarial review
|
|
17
|
+
|
|
18
|
+
## Install
|
|
19
|
+
|
|
20
|
+
```sh
|
|
21
|
+
npm install -g @playola-radio/slipstream
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Node.js 24 or newer is required. The published package ships compiled
|
|
25
|
+
JavaScript; developing in this repo still runs the TypeScript sources directly
|
|
26
|
+
(`npm run slipstream`, `npm test`) with no build step. To put a clone on your
|
|
27
|
+
PATH with `npm link`, run `npm run build` first, and again after pulling: the
|
|
28
|
+
linked command runs the compiled `dist/`, not the sources.
|
|
29
|
+
|
|
30
|
+
## License
|
|
31
|
+
|
|
32
|
+
Apache-2.0. Copyright Playola Radio, Incorporated. See [`LICENSE`](LICENSE).
|
|
33
|
+
|
|
34
|
+
## What it promises — and does not
|
|
35
|
+
|
|
36
|
+
> Slipstream streams **a live history of observed filesystem states, with
|
|
37
|
+
> explicit coverage gaps.** It does not claim to be a complete record of every
|
|
38
|
+
> write.
|
|
39
|
+
|
|
40
|
+
Capture is watcher-primary, so it observes states rather than writes. If a file
|
|
41
|
+
goes `A → B → C` faster than it can be read, Slipstream reports `A → C`; an
|
|
42
|
+
`A → B → A` cycle can be invisible entirely. Those gaps are disclosed in the
|
|
43
|
+
event schema and surfaced in the UI rather than papered over.
|
|
44
|
+
|
|
45
|
+
Similarly, attribution is revisable inference with an explicit status
|
|
46
|
+
(`pending` / `heuristic` / `ambiguous` / `unknown`), never a verified claim of
|
|
47
|
+
authorship. A timestamp near an agent's tool call is evidence, not proof.
|
|
48
|
+
|
|
49
|
+
## Design constraints
|
|
50
|
+
|
|
51
|
+
- **The event schema is the public interface.** The on-disk JSONL log plus
|
|
52
|
+
content-addressed blobs are the source of truth; the HTTP/SSE reader is a thin
|
|
53
|
+
view over them; the bundled UI is one client among possible many. You must be
|
|
54
|
+
able to delete the front-end and replace it.
|
|
55
|
+
- **Slipstream does not launch agents.** Conductor stays the launcher.
|
|
56
|
+
Slipstream rides in through user-level MCP and skill configuration.
|
|
57
|
+
- **Claude Code and Codex CLI from day one**, via a capture path that does not
|
|
58
|
+
depend on either.
|
|
59
|
+
|
|
60
|
+
## Architecture
|
|
61
|
+
|
|
62
|
+
A headless local daemon (TypeScript/Node) captures bytes and writes an
|
|
63
|
+
append-only event log; a browser client (React + Monaco) renders the feed. The
|
|
64
|
+
MCP server is a thin stdio forwarder per agent session — verified necessary,
|
|
65
|
+
since each session spawns its own server process — and the daemon owns the store.
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## Queue a question about a captured change
|
|
69
|
+
|
|
70
|
+
With the shared daemon running (`slipstream start`) and explicitly attached to a
|
|
71
|
+
Claude Code or Codex session, an independent local client can queue a question:
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
slipstream ask --store /path/to/store --session <capture-uuid> \
|
|
75
|
+
--request-id <caller-generated-lowercase-uuid> --input question.json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`question.json` contains the question and immutable after-snapshot identity read
|
|
79
|
+
from the public events API (sequence numbers are decimal strings):
|
|
80
|
+
|
|
81
|
+
```json
|
|
82
|
+
{
|
|
83
|
+
"text": "Why is this check needed?",
|
|
84
|
+
"context": {
|
|
85
|
+
"change_seq": "42",
|
|
86
|
+
"path": "src/example.ts",
|
|
87
|
+
"snapshot_sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
|
88
|
+
"line_start": 3,
|
|
89
|
+
"line_end": 5
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
A follow-up adds `"reply_to_question_id"` naming the earlier question; its
|
|
95
|
+
`context` must be identical. The example hash is a placeholder: use the actual change's `after.sha256`. The
|
|
96
|
+
daemon validates the durable event and original blob, derives the selected text,
|
|
97
|
+
and copies the explicit attach target. It never reads the current working file
|
|
98
|
+
or accepts client-supplied authorship. Only after-content up to 1 MiB is eligible;
|
|
99
|
+
select at most 200 lines / 16 KiB. Questions are trimmed and capped at 8192 UTF-8
|
|
100
|
+
bytes. `serve` has no attach/control path and does not support `ask`.
|
|
101
|
+
|
|
102
|
+
Success prints JSON `{v:1,ok:true,session_id,request_id,question_id,seq,
|
|
103
|
+
queued_at_ms,expires_at_ms,duplicate}`. It means **durably queued**, not delivered
|
|
104
|
+
to an agent or answered. Read `slipstream.question.queued.v1` through the existing
|
|
105
|
+
authenticated `GET /v1/sessions/<id>/events` endpoint; its self-contained schema is
|
|
106
|
+
available at `GET /v1/schemas/slipstream.question.queued.v1`.
|
|
107
|
+
|
|
108
|
+
Codex and Claude Code delivery require an explicit root transcript binding at
|
|
109
|
+
`attach` and a `PostToolUse` hook configured before the chat starts. See
|
|
110
|
+
[the delivery contract](docs/ask-agent/contract.md#delivery-through-posttooluse)
|
|
111
|
+
for the control fields and setup. The public
|
|
112
|
+
`slipstream.question.dispatch_attempted.v1` event means the daemon committed an
|
|
113
|
+
attempt before answering the hook; it does not confirm receipt or an answer.
|
|
114
|
+
Attach Claude shortly after its first root tool call, and keep the chat's
|
|
115
|
+
current directory at the attached worktree when claiming a question.
|
|
116
|
+
|
|
117
|
+
Retry with the **same request ID, capture ID and input**. Same-ID/body retries
|
|
118
|
+
return the original result without extending the 30-minute TTL. A changed body
|
|
119
|
+
returns `REQUEST_CONFLICT`; more than 16 unexpired questions returns
|
|
120
|
+
`QUESTION_LIMIT`. Other domain errors are `INVALID_QUESTION`, `INVALID_CONTEXT`,
|
|
121
|
+
`SESSION_NOT_SELECTED`, `CAPTURE_NOT_READY`, and `STORAGE_UNAVAILABLE`. Errors
|
|
122
|
+
print structured JSON on stderr (exit 1); local file/syntax errors exit 2.
|
|
123
|
+
`STORAGE_UNAVAILABLE`, or a lost/malformed response after transmission, exits 3:
|
|
124
|
+
the outcome is unknown and the record may already be committed. Preserve the same
|
|
125
|
+
request ID, capture ID and input when retrying. A new capture never resumes an old queue; inspect
|
|
126
|
+
the old public log by `request_id` rather than retargeting a retry.
|
|
127
|
+
|
|
128
|
+
The control wire request is `{v:1,verb:"ask",session_id,request_id,text,context}`
|
|
129
|
+
over the owner-only `<store>/control.sock` using existing NDJSON framing. No
|
|
130
|
+
harness identity is required from the client. Full details, limits and lifecycle:
|
|
131
|
+
[queue contract](docs/ask-agent/contract.md). Receiving-answer UI remains
|
|
132
|
+
separate work.
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slipstream-begin-task
|
|
3
|
+
description: Use when you start a distinct new task or piece of work in a session — before you begin making the file changes for it — to group those upcoming changes under a titled task in the Slipstream feed. Applies in any harness (Claude Code, Codex, or another) that has the Slipstream MCP server configured.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Declaring a task to Slipstream
|
|
7
|
+
|
|
8
|
+
Slipstream shows a human a live feed of the file changes happening in this
|
|
9
|
+
worktree. On its own it sees *states of files*, grouped only by time. When you
|
|
10
|
+
tell it what you are about to work on, it can group the changes you then make
|
|
11
|
+
under that task — which makes the feed legible instead of an undifferentiated
|
|
12
|
+
stream of edits.
|
|
13
|
+
|
|
14
|
+
## When to use this
|
|
15
|
+
|
|
16
|
+
Call the `slipstream_begin_task` tool **once, right before you start a distinct
|
|
17
|
+
piece of work** — a bug fix, a feature, a refactor, answering a specific
|
|
18
|
+
request. Declare the task *before* you make its file changes, not after.
|
|
19
|
+
|
|
20
|
+
Start a **new** declaration whenever you move on to a genuinely different task.
|
|
21
|
+
Each declaration marks the start of its own group; a second task is never a
|
|
22
|
+
retry of the first.
|
|
23
|
+
|
|
24
|
+
Do **not** call it for every individual edit, and do not re-call it to "resume"
|
|
25
|
+
a task you already declared — one declaration per task is enough.
|
|
26
|
+
|
|
27
|
+
## How to use it
|
|
28
|
+
|
|
29
|
+
Call the tool with a short, human-readable title describing the work:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
slipstream_begin_task(title: "Fix the off-by-one in the pagination cursor")
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
A good title is the kind of one-line summary you would put in a commit subject:
|
|
36
|
+
concrete and specific ("Add retry to the upload client"), not vague ("changes"
|
|
37
|
+
or "work"). Then do the work as usual — the changes you make are grouped under
|
|
38
|
+
the task automatically; you do not call anything again to "end" it.
|
|
39
|
+
|
|
40
|
+
## Reading the result
|
|
41
|
+
|
|
42
|
+
On success the tool returns identifiers for the task it recorded
|
|
43
|
+
(`session_id`, `task_id`, `event_id`, `seq`). You do not need to act on these;
|
|
44
|
+
they confirm the declaration was committed.
|
|
45
|
+
|
|
46
|
+
If the tool returns an **error**, read it — it is telling you the truth about
|
|
47
|
+
what happened, and each case wants a different response:
|
|
48
|
+
|
|
49
|
+
- **`DAEMON_UNAVAILABLE`** — Slipstream is not running for this worktree. This is
|
|
50
|
+
not a failure of your work; just proceed. Declaring a task is best-effort
|
|
51
|
+
grouping, never a prerequisite for doing the work.
|
|
52
|
+
- **`SESSION_NOT_SELECTED`** — Slipstream is running but is not currently
|
|
53
|
+
watching this worktree, so it cannot attribute the task here. Proceed with the
|
|
54
|
+
work; a human controls which worktree is being watched.
|
|
55
|
+
- **`INVALID_TITLE`** — the title was empty or unusable. Retry once with a real,
|
|
56
|
+
descriptive title.
|
|
57
|
+
- **`OUTCOME_UNKNOWN`** — the declaration reached Slipstream but its outcome
|
|
58
|
+
could not be confirmed. **Do not call the tool again for this same task.** A
|
|
59
|
+
fresh call would create a *second* task, not retry the first. Just continue
|
|
60
|
+
the work.
|
|
61
|
+
|
|
62
|
+
In every case: a task declaration is an aid to the human watching the feed. It
|
|
63
|
+
never blocks, gates, or changes the actual work you do.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
Third-party components bundled or loaded at runtime, with their licenses kept
|
|
4
|
+
distinct. Slipstream is not itself relicensed by anything here.
|
|
5
|
+
|
|
6
|
+
## Swift grammar feasibility (T5a.3)
|
|
7
|
+
|
|
8
|
+
Three separate components, three separate licenses. They are **not** the same
|
|
9
|
+
project and are not conflated:
|
|
10
|
+
|
|
11
|
+
### tree-sitter-swift (the grammar)
|
|
12
|
+
|
|
13
|
+
- Project: [`alex-pinkus/tree-sitter-swift`](https://github.com/alex-pinkus/tree-sitter-swift)
|
|
14
|
+
- The grammar compiled into `tree-sitter-swift.wasm`.
|
|
15
|
+
- Declared version range: `^0.4.0`. The exact revision baked into the WASM is
|
|
16
|
+
not recoverable from the artifact; the sha256 is the real pin (see
|
|
17
|
+
`SWIFT-GRAMMAR.md`).
|
|
18
|
+
- **License: MIT.**
|
|
19
|
+
|
|
20
|
+
### tree-sitter-wasms (the wrapper that ships the .wasm)
|
|
21
|
+
|
|
22
|
+
- Package: [`tree-sitter-wasms`](https://www.npmjs.com/package/tree-sitter-wasms) `@0.1.13`
|
|
23
|
+
- Ships the prebuilt `out/tree-sitter-swift.wasm` this project loads.
|
|
24
|
+
- **License: Unlicense** (public domain dedication). Full text:
|
|
25
|
+
<https://unlicense.org>.
|
|
26
|
+
|
|
27
|
+
### web-tree-sitter (the runtime)
|
|
28
|
+
|
|
29
|
+
- Package: [`web-tree-sitter`](https://www.npmjs.com/package/web-tree-sitter) `@0.25.10`
|
|
30
|
+
- The Tree-sitter WASM runtime that loads and runs the grammar. Already a
|
|
31
|
+
dependency of the clip parser; T5a.3 reuses it, adding no new runtime pin.
|
|
32
|
+
- **License: MIT.**
|
|
33
|
+
|
|
34
|
+
The MIT-licensed grammar and runtime and the Unlicense-dedicated wrapper are
|
|
35
|
+
listed apart on purpose: the wrapper's public-domain dedication does not extend
|
|
36
|
+
to the grammar it packages, and vice versa.
|