@deepseekharness-mobile/companion 0.0.0-stage → 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.
Files changed (131) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -2
  3. package/cordis.patch.yml +20 -0
  4. package/dist/core/devices.d.ts +35 -0
  5. package/dist/core/devices.d.ts.map +1 -0
  6. package/dist/core/devices.js +90 -0
  7. package/dist/core/devices.js.map +1 -0
  8. package/dist/core/pairing.d.ts +21 -0
  9. package/dist/core/pairing.d.ts.map +1 -0
  10. package/dist/core/pairing.js +74 -0
  11. package/dist/core/pairing.js.map +1 -0
  12. package/dist/dsh/errors.d.ts +3 -0
  13. package/dist/dsh/errors.d.ts.map +1 -0
  14. package/dist/dsh/errors.js +15 -0
  15. package/dist/dsh/errors.js.map +1 -0
  16. package/dist/dsh/lifecycle.d.ts +37 -0
  17. package/dist/dsh/lifecycle.d.ts.map +1 -0
  18. package/dist/dsh/lifecycle.js +95 -0
  19. package/dist/dsh/lifecycle.js.map +1 -0
  20. package/dist/dsh/models.d.ts +39 -0
  21. package/dist/dsh/models.d.ts.map +1 -0
  22. package/dist/dsh/models.js +171 -0
  23. package/dist/dsh/models.js.map +1 -0
  24. package/dist/dsh/prompt.d.ts +8 -0
  25. package/dist/dsh/prompt.d.ts.map +1 -0
  26. package/dist/dsh/prompt.js +25 -0
  27. package/dist/dsh/prompt.js.map +1 -0
  28. package/dist/dsh/providers.d.ts +25 -0
  29. package/dist/dsh/providers.d.ts.map +1 -0
  30. package/dist/dsh/providers.js +315 -0
  31. package/dist/dsh/providers.js.map +1 -0
  32. package/dist/dsh/question-bridge.d.ts +25 -0
  33. package/dist/dsh/question-bridge.d.ts.map +1 -0
  34. package/dist/dsh/question-bridge.js +140 -0
  35. package/dist/dsh/question-bridge.js.map +1 -0
  36. package/dist/dsh/questions.d.ts +15 -0
  37. package/dist/dsh/questions.d.ts.map +1 -0
  38. package/dist/dsh/questions.js +126 -0
  39. package/dist/dsh/questions.js.map +1 -0
  40. package/dist/dsh/session-activity.d.ts +5 -0
  41. package/dist/dsh/session-activity.d.ts.map +1 -0
  42. package/dist/dsh/session-activity.js +100 -0
  43. package/dist/dsh/session-activity.js.map +1 -0
  44. package/dist/dsh/session-source.d.ts +19 -0
  45. package/dist/dsh/session-source.d.ts.map +1 -0
  46. package/dist/dsh/session-source.js +104 -0
  47. package/dist/dsh/session-source.js.map +1 -0
  48. package/dist/dsh/sessions.d.ts +10 -0
  49. package/dist/dsh/sessions.d.ts.map +1 -0
  50. package/dist/dsh/sessions.js +51 -0
  51. package/dist/dsh/sessions.js.map +1 -0
  52. package/dist/dsh/slash-commands.d.ts +15 -0
  53. package/dist/dsh/slash-commands.d.ts.map +1 -0
  54. package/dist/dsh/slash-commands.js +60 -0
  55. package/dist/dsh/slash-commands.js.map +1 -0
  56. package/dist/dsh/transcript.d.ts +28 -0
  57. package/dist/dsh/transcript.d.ts.map +1 -0
  58. package/dist/dsh/transcript.js +211 -0
  59. package/dist/dsh/transcript.js.map +1 -0
  60. package/dist/dsh/workspaces.d.ts +20 -0
  61. package/dist/dsh/workspaces.d.ts.map +1 -0
  62. package/dist/dsh/workspaces.js +123 -0
  63. package/dist/dsh/workspaces.js.map +1 -0
  64. package/dist/host-api.d.ts +148 -0
  65. package/dist/host-api.d.ts.map +1 -0
  66. package/dist/host-api.js +54 -0
  67. package/dist/host-api.js.map +1 -0
  68. package/dist/index.d.ts +5 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +268 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/log.d.ts +5 -0
  73. package/dist/log.d.ts.map +1 -0
  74. package/dist/log.js +40 -0
  75. package/dist/log.js.map +1 -0
  76. package/dist/open-browser.d.ts +3 -0
  77. package/dist/open-browser.d.ts.map +1 -0
  78. package/dist/open-browser.js +46 -0
  79. package/dist/open-browser.js.map +1 -0
  80. package/dist/pairing-message.d.ts +16 -0
  81. package/dist/pairing-message.d.ts.map +1 -0
  82. package/dist/pairing-message.js +38 -0
  83. package/dist/pairing-message.js.map +1 -0
  84. package/dist/persist/devices-file.d.ts +8 -0
  85. package/dist/persist/devices-file.d.ts.map +1 -0
  86. package/dist/persist/devices-file.js +47 -0
  87. package/dist/persist/devices-file.js.map +1 -0
  88. package/dist/probe.d.ts +25 -0
  89. package/dist/probe.d.ts.map +1 -0
  90. package/dist/probe.js +143 -0
  91. package/dist/probe.js.map +1 -0
  92. package/dist/public-origin.d.ts +11 -0
  93. package/dist/public-origin.d.ts.map +1 -0
  94. package/dist/public-origin.js +79 -0
  95. package/dist/public-origin.js.map +1 -0
  96. package/dist/qr-text.d.ts +2 -0
  97. package/dist/qr-text.d.ts.map +1 -0
  98. package/dist/qr-text.js +31 -0
  99. package/dist/qr-text.js.map +1 -0
  100. package/dist/routes/origin.d.ts +17 -0
  101. package/dist/routes/origin.d.ts.map +1 -0
  102. package/dist/routes/origin.js +85 -0
  103. package/dist/routes/origin.js.map +1 -0
  104. package/dist/routes/static.d.ts +9 -0
  105. package/dist/routes/static.d.ts.map +1 -0
  106. package/dist/routes/static.js +129 -0
  107. package/dist/routes/static.js.map +1 -0
  108. package/dist/routes/web-root.d.ts +2 -0
  109. package/dist/routes/web-root.d.ts.map +1 -0
  110. package/dist/routes/web-root.js +21 -0
  111. package/dist/routes/web-root.js.map +1 -0
  112. package/dist/server.d.ts +140 -0
  113. package/dist/server.d.ts.map +1 -0
  114. package/dist/server.js +829 -0
  115. package/dist/server.js.map +1 -0
  116. package/dist/web/apple-touch-icon-precomposed.png +0 -0
  117. package/dist/web/apple-touch-icon.png +0 -0
  118. package/dist/web/assets/index-NOGXMIsS.js +65 -0
  119. package/dist/web/assets/index-NOGXMIsS.js.map +1 -0
  120. package/dist/web/assets/index-s7zoNGmx.css +1 -0
  121. package/dist/web/fonts/Montserrat-OFL.txt +93 -0
  122. package/dist/web/fonts/montserrat-medium.woff2 +0 -0
  123. package/dist/web/fonts/montserrat-regular.woff2 +0 -0
  124. package/dist/web/icon-192.png +0 -0
  125. package/dist/web/icon-512.png +0 -0
  126. package/dist/web/icon-maskable-512.png +0 -0
  127. package/dist/web/icon-maskable.svg +15 -0
  128. package/dist/web/icon.svg +6 -0
  129. package/dist/web/index.html +25 -0
  130. package/dist/web/manifest.webmanifest +37 -0
  131. package/package.json +60 -3
@@ -0,0 +1,15 @@
1
+ import type { CommandInfo, CommandResult } from '@deepseekharness-mobile/protocol';
2
+ import { type HostContext } from '../host-api.js';
3
+ export declare function commandsAvailable(ctx: HostContext): boolean;
4
+ export declare function listCommands(ctx: HostContext, sessionId: string): CommandInfo[];
5
+ export interface RunCommandOutcome {
6
+ ok: boolean;
7
+ code?: 'not-found' | 'bad-request' | 'internal';
8
+ message?: string;
9
+ result?: CommandResult;
10
+ }
11
+ export declare function runCommand(ctx: HostContext, input: {
12
+ sessionId: string;
13
+ line: string;
14
+ }): Promise<RunCommandOutcome>;
15
+ //# sourceMappingURL=slash-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slash-commands.d.ts","sourceRoot":"","sources":["../../src/dsh/slash-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACnF,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,gBAAgB,CAAC;AAExB,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAK3D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAgB/E;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,WAAW,GAAG,aAAa,GAAG,UAAU,CAAC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,wBAAsB,UAAU,CAC9B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,iBAAiB,CAAC,CA2C5B"}
@@ -0,0 +1,60 @@
1
+ import { service, } from '../host-api.js';
2
+ export function commandsAvailable(ctx) {
3
+ return (Boolean(service(ctx, 'commands')) &&
4
+ Boolean(service(ctx, 'agents')));
5
+ }
6
+ export function listCommands(ctx, sessionId) {
7
+ const commands = service(ctx, 'commands');
8
+ if (!commands)
9
+ return [];
10
+ const agent = service(ctx, 'agents')?.get(sessionId);
11
+ if (!agent)
12
+ return [];
13
+ try {
14
+ return commands.list(agent).map((command) => ({
15
+ name: command.name,
16
+ description: command.description,
17
+ ...(command.input?.hint ? { hint: command.input.hint } : {}),
18
+ }));
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ }
24
+ export async function runCommand(ctx, input) {
25
+ const commands = service(ctx, 'commands');
26
+ if (!commands) {
27
+ return { ok: false, code: 'bad-request', message: 'This host does not expose commands.' };
28
+ }
29
+ const agent = service(ctx, 'agents')?.get(input.sessionId);
30
+ if (!agent) {
31
+ return {
32
+ ok: false,
33
+ code: 'not-found',
34
+ message: 'The session is not loaded on the host. Open it on the desktop and try again.',
35
+ };
36
+ }
37
+ try {
38
+ const execution = await commands.execute(agent, input.line, undefined, new AbortController().signal);
39
+ if (!execution) {
40
+ return {
41
+ ok: true,
42
+ result: { kind: 'error', text: 'Unknown command or invalid syntax.' },
43
+ };
44
+ }
45
+ return {
46
+ ok: true,
47
+ result: {
48
+ kind: execution.result.kind,
49
+ ...(execution.result.text !== undefined ? { text: execution.result.text } : {}),
50
+ },
51
+ };
52
+ }
53
+ catch (error) {
54
+ return {
55
+ ok: true,
56
+ result: { kind: 'error', text: error instanceof Error ? error.message : String(error) },
57
+ };
58
+ }
59
+ }
60
+ //# sourceMappingURL=slash-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/dsh/slash-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { HistoryEntry, TranscriptEvent } from '@deepseekharness-mobile/protocol';
2
+ import { type HostContext } from '../host-api.js';
3
+ interface WireEvent {
4
+ type?: unknown;
5
+ seq?: unknown;
6
+ time?: unknown;
7
+ data?: unknown;
8
+ }
9
+ export declare function toTranscriptEvent(wire: WireEvent): TranscriptEvent | undefined;
10
+ export interface HistoryPage {
11
+ entries: HistoryEntry[];
12
+ hasMore: boolean;
13
+ }
14
+ export declare function readHistory(ctx: HostContext, sessionId: string, options?: {
15
+ before?: number;
16
+ limit?: number;
17
+ }): Promise<HistoryPage>;
18
+ export interface Subscription {
19
+ stop(): void;
20
+ }
21
+ export declare function subscribeSession(ctx: HostContext, sessionId: string, options: {
22
+ since?: number;
23
+ onEvent: (entry: HistoryEntry) => void;
24
+ onEnd?: () => void;
25
+ }): Subscription;
26
+ export declare function cancelRun(ctx: HostContext, sessionId: string): boolean;
27
+ export {};
28
+ //# sourceMappingURL=transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/dsh/transcript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAgB,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACpG,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE3D,UAAU,SAAS;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAwID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,eAAe,GAAG,SAAS,CA4C9E;AAcD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,WAAW,CAAC,CAyBtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,IAAI,CAAC;CACd;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,GACtF,YAAY,CAgCd;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQtE"}
@@ -0,0 +1,211 @@
1
+ import { service } from '../host-api.js';
2
+ function controller(ctx) {
3
+ return service(ctx, 'sessionController');
4
+ }
5
+ function address(sessionId) {
6
+ return { kind: 'session', sessionId };
7
+ }
8
+ function firstText(value, depth = 0) {
9
+ if (depth > 4 || value === undefined || value === null)
10
+ return undefined;
11
+ if (typeof value === 'string')
12
+ return value;
13
+ if (Array.isArray(value)) {
14
+ const parts = value.map((item) => firstText(item, depth + 1)).filter(Boolean);
15
+ return parts.length > 0 ? parts.join('') : undefined;
16
+ }
17
+ if (typeof value === 'object') {
18
+ const record = value;
19
+ if (typeof record['text'] === 'string')
20
+ return record['text'];
21
+ for (const key of ['content', 'message', 'delta', 'value']) {
22
+ const found = firstText(record[key], depth + 1);
23
+ if (found)
24
+ return found;
25
+ }
26
+ }
27
+ return undefined;
28
+ }
29
+ function asRecord(value) {
30
+ return typeof value === 'object' && value !== null
31
+ ? value
32
+ : undefined;
33
+ }
34
+ function partsOf(data) {
35
+ const record = asRecord(data);
36
+ if (!record)
37
+ return [];
38
+ const message = asRecord(record['message']);
39
+ const content = message ? message['content'] : record['content'];
40
+ if (!Array.isArray(content))
41
+ return [];
42
+ return content
43
+ .map(asRecord)
44
+ .filter((part) => part !== undefined);
45
+ }
46
+ function textOf(part) {
47
+ return typeof part['text'] === 'string' ? part['text'] : '';
48
+ }
49
+ function bodyOf(data) {
50
+ const parts = partsOf(data);
51
+ if (parts.length === 0) {
52
+ return { text: firstText(data)?.trim() ?? '' };
53
+ }
54
+ const text = parts
55
+ .filter((part) => part['type'] === 'text')
56
+ .map(textOf)
57
+ .join('')
58
+ .trim();
59
+ const reasoning = parts
60
+ .filter((part) => part['type'] === 'reasoning' || part['type'] === 'thinking')
61
+ .map(textOf)
62
+ .map((part) => part.trim())
63
+ .filter(Boolean)
64
+ .join('\n\n');
65
+ return { text, ...(reasoning ? { reasoning } : {}) };
66
+ }
67
+ const INTERNAL_USER_SOURCES = new Set([
68
+ 'time-context',
69
+ 'runtime-context',
70
+ 'agent-instructions',
71
+ 'skill-catalog',
72
+ 'tool-jobs',
73
+ 'user-approval',
74
+ 'session-title',
75
+ 'compaction',
76
+ 'goal',
77
+ 'job',
78
+ 'jobs',
79
+ ]);
80
+ function isInternalUserMessage(data) {
81
+ const source = asRecord(asRecord(data)?.['source']);
82
+ const kind = source?.['kind'];
83
+ return typeof kind === 'string' && INTERNAL_USER_SOURCES.has(kind);
84
+ }
85
+ function stateOf(type) {
86
+ switch (type) {
87
+ case 'turn/start':
88
+ case 'step/start':
89
+ return 'working';
90
+ case 'turn/end':
91
+ return 'idle';
92
+ default:
93
+ return undefined;
94
+ }
95
+ }
96
+ export function toTranscriptEvent(wire) {
97
+ const type = typeof wire.type === 'string' ? wire.type : '';
98
+ const data = wire.data;
99
+ if (type === 'user/message' || type === 'user-rpc') {
100
+ if (type === 'user/message' && isInternalUserMessage(data))
101
+ return undefined;
102
+ const { text } = bodyOf(data);
103
+ return text ? { kind: 'message', role: 'user', text } : undefined;
104
+ }
105
+ if (type === 'assistant/message') {
106
+ const { text, reasoning } = bodyOf(data);
107
+ if (!text)
108
+ return undefined;
109
+ return {
110
+ kind: 'message',
111
+ role: 'assistant',
112
+ text,
113
+ ...(reasoning ? { reasoning } : {}),
114
+ };
115
+ }
116
+ if (type === 'tool/call') {
117
+ const record = (data ?? {});
118
+ const name = typeof record['name'] === 'string' ? record['name'] : 'herramienta';
119
+ const summary = firstText(record['input']) ?? firstText(record['args']) ?? '';
120
+ return { kind: 'tool', name, summary: summary.slice(0, 200), status: 'running' };
121
+ }
122
+ if (type === 'tool/result') {
123
+ const record = (data ?? {});
124
+ const isError = record['error'] !== undefined || record['isError'] === true;
125
+ const name = typeof record['name'] === 'string' ? record['name'] : 'herramienta';
126
+ return {
127
+ kind: 'tool',
128
+ name,
129
+ summary: (firstText(record['output']) ?? '').slice(0, 200),
130
+ status: isError ? 'error' : 'ok',
131
+ };
132
+ }
133
+ const state = stateOf(type);
134
+ return state ? { kind: 'state', state } : undefined;
135
+ }
136
+ function toEntry(record) {
137
+ const wire = record.event;
138
+ if (!wire)
139
+ return undefined;
140
+ const seq = typeof wire.seq === 'number' ? wire.seq : 0;
141
+ const at = typeof wire.time === 'number' ? wire.time : 0;
142
+ const event = toTranscriptEvent(wire);
143
+ if (!event)
144
+ return undefined;
145
+ return { seq, at, event };
146
+ }
147
+ export async function readHistory(ctx, sessionId, options = {}) {
148
+ const api = controller(ctx);
149
+ if (!api)
150
+ return { entries: [], hasMore: false };
151
+ const request = { address: address(sessionId) };
152
+ if (options.before !== undefined)
153
+ request.beforeSeq = options.before;
154
+ request.maxMessages = options.limit ?? 40;
155
+ try {
156
+ const page = await api.page(request, new AbortController().signal);
157
+ const records = page.records ?? [];
158
+ const entries = records
159
+ .map(toEntry)
160
+ .filter((entry) => entry !== undefined);
161
+ return { entries, hasMore: page.hasMore === true };
162
+ }
163
+ catch {
164
+ return { entries: [], hasMore: false };
165
+ }
166
+ }
167
+ export function subscribeSession(ctx, sessionId, options) {
168
+ const api = controller(ctx);
169
+ const abort = new AbortController();
170
+ if (!api) {
171
+ options.onEnd?.();
172
+ return { stop: () => undefined };
173
+ }
174
+ void (async () => {
175
+ try {
176
+ const stream = api.observeEvent({ address: address(sessionId) }, abort.signal);
177
+ for await (const frame of stream) {
178
+ if (abort.signal.aborted)
179
+ return;
180
+ const entry = toEntry(frame);
181
+ if (!entry)
182
+ continue;
183
+ if (options.since !== undefined && entry.seq <= options.since)
184
+ continue;
185
+ options.onEvent(entry);
186
+ }
187
+ }
188
+ catch {
189
+ }
190
+ finally {
191
+ options.onEnd?.();
192
+ }
193
+ })();
194
+ return {
195
+ stop() {
196
+ abort.abort();
197
+ },
198
+ };
199
+ }
200
+ export function cancelRun(ctx, sessionId) {
201
+ const api = controller(ctx);
202
+ if (!api)
203
+ return false;
204
+ try {
205
+ return api.cancel({ sessionId }).accepted === true;
206
+ }
207
+ catch {
208
+ return false;
209
+ }
210
+ }
211
+ //# sourceMappingURL=transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/dsh/transcript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type HostContext } from '../host-api.js';
2
+ import type { Workspace } from '@deepseekharness-mobile/protocol';
3
+ export interface WorkspaceController {
4
+ list?: () => unknown;
5
+ follow?: (signal: AbortSignal) => AsyncIterable<unknown>;
6
+ archiveSession?: (request: {
7
+ sessionId: string;
8
+ stopActivity?: boolean;
9
+ }) => Promise<unknown>;
10
+ unarchiveSession?: (request: {
11
+ sessionId: string;
12
+ }) => Promise<unknown>;
13
+ }
14
+ export declare function toWorkspace(row: unknown): Workspace | undefined;
15
+ export declare function rowsOf(payload: unknown): unknown[];
16
+ export declare function listArchivedSessions(ctx: HostContext): Promise<Set<string>>;
17
+ export declare function toWorkspaces(payload: unknown): Workspace[];
18
+ export declare function listWorkspaces(ctx: HostContext): Promise<Workspace[]>;
19
+ export declare function hasWorkspaces(ctx: HostContext): boolean;
20
+ //# sourceMappingURL=workspaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/dsh/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAelE,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9F,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACzE;AAaD,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAc/D;AAgBD,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,CAElD;AAeD,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAejF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAI1D;AA6BD,wBAAsB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAe3E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAQvD"}
@@ -0,0 +1,123 @@
1
+ import { service } from '../host-api.js';
2
+ const FOLLOW_TIMEOUT_MS = 1500;
3
+ function text(value) {
4
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
5
+ }
6
+ function sessionIds(value) {
7
+ if (!Array.isArray(value))
8
+ return [];
9
+ return value.filter((id) => typeof id === 'string' && id.length > 0);
10
+ }
11
+ export function toWorkspace(row) {
12
+ if (typeof row !== 'object' || row === null)
13
+ return undefined;
14
+ const source = row;
15
+ const id = text(source.workspaceId);
16
+ const directory = text(source.path);
17
+ if (!id || !directory)
18
+ return undefined;
19
+ return {
20
+ id,
21
+ title: typeof source.title === 'string' ? source.title : '',
22
+ directory,
23
+ sessionIds: sessionIds(source.sessionIds),
24
+ };
25
+ }
26
+ function rowsFrom(node, depth = 0) {
27
+ if (depth > 3)
28
+ return [];
29
+ if (Array.isArray(node))
30
+ return node;
31
+ if (typeof node !== 'object' || node === null)
32
+ return [];
33
+ const record = node;
34
+ if (Array.isArray(record.items))
35
+ return record.items;
36
+ if ('value' in record)
37
+ return rowsFrom(record.value, depth + 1);
38
+ return [];
39
+ }
40
+ export function rowsOf(payload) {
41
+ return rowsFrom(payload);
42
+ }
43
+ function archivedFrom(node, depth = 0) {
44
+ if (depth > 3 || typeof node !== 'object' || node === null)
45
+ return [];
46
+ const record = node;
47
+ if (Array.isArray(record.archivedSessionIds)) {
48
+ return record.archivedSessionIds.filter((id) => typeof id === 'string' && id.length > 0);
49
+ }
50
+ return 'value' in record ? archivedFrom(record.value, depth + 1) : [];
51
+ }
52
+ export async function listArchivedSessions(ctx) {
53
+ const controller = service(ctx, 'workspaceController');
54
+ if (!controller)
55
+ return new Set();
56
+ try {
57
+ if (typeof controller.list === 'function') {
58
+ return new Set(archivedFrom(await controller.list()));
59
+ }
60
+ if (typeof controller.follow === 'function') {
61
+ return new Set(archivedFrom(await firstFrame(controller.follow.bind(controller))));
62
+ }
63
+ }
64
+ catch { }
65
+ return new Set();
66
+ }
67
+ export function toWorkspaces(payload) {
68
+ return rowsOf(payload)
69
+ .map(toWorkspace)
70
+ .filter((workspace) => workspace !== undefined);
71
+ }
72
+ async function firstFrame(follow) {
73
+ const controller = new AbortController();
74
+ let timer;
75
+ const deadline = new Promise((resolve) => {
76
+ timer = setTimeout(() => resolve(undefined), FOLLOW_TIMEOUT_MS);
77
+ });
78
+ const reading = (async () => {
79
+ for await (const frame of follow(controller.signal)) {
80
+ const tipo = frame.type;
81
+ if (tipo === 'baseline')
82
+ return frame;
83
+ if (rowsOf(frame).length > 0 || archivedFrom(frame).length > 0)
84
+ return frame;
85
+ }
86
+ return undefined;
87
+ })().catch(() => undefined);
88
+ try {
89
+ return await Promise.race([reading, deadline]);
90
+ }
91
+ finally {
92
+ if (timer)
93
+ clearTimeout(timer);
94
+ controller.abort();
95
+ }
96
+ }
97
+ export async function listWorkspaces(ctx) {
98
+ const controller = service(ctx, 'workspaceController');
99
+ if (!controller)
100
+ return [];
101
+ try {
102
+ if (typeof controller.list === 'function') {
103
+ return toWorkspaces(await controller.list());
104
+ }
105
+ if (typeof controller.follow === 'function') {
106
+ return toWorkspaces(await firstFrame(controller.follow.bind(controller)));
107
+ }
108
+ }
109
+ catch { }
110
+ return [];
111
+ }
112
+ export function hasWorkspaces(ctx) {
113
+ try {
114
+ const controller = service(ctx, 'workspaceController');
115
+ if (!controller)
116
+ return false;
117
+ return typeof controller.list === 'function' || typeof controller.follow === 'function';
118
+ }
119
+ catch {
120
+ return false;
121
+ }
122
+ }
123
+ //# sourceMappingURL=workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/dsh/workspaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ export interface HostSession {
2
+ readonly id: string;
3
+ deriveMessages?(): readonly unknown[];
4
+ }
5
+ export interface SessionsService {
6
+ list(): readonly HostSession[];
7
+ get(id: string): HostSession | undefined;
8
+ }
9
+ export interface ProjectionSnapshot {
10
+ asOfSeq: number;
11
+ values: Record<string, unknown>;
12
+ }
13
+ export interface ProjectionsService {
14
+ snapshot(session: HostSession, keys?: unknown): ProjectionSnapshot;
15
+ }
16
+ export interface CommandInvocation {
17
+ rawInput?: string;
18
+ agent?: {
19
+ ctx?: unknown;
20
+ };
21
+ }
22
+ export interface CommandDefinition {
23
+ name: string;
24
+ description: string;
25
+ input?: {
26
+ hint?: string;
27
+ };
28
+ handler: (invocation: CommandInvocation) => {
29
+ kind: string;
30
+ text: string;
31
+ };
32
+ }
33
+ export interface CommandDescriptor {
34
+ name: string;
35
+ description: string;
36
+ input?: {
37
+ hint?: string;
38
+ };
39
+ }
40
+ export interface CommandResult {
41
+ kind: 'success' | 'error';
42
+ text?: string;
43
+ }
44
+ export interface CommandExecution {
45
+ commandId: string;
46
+ result: CommandResult;
47
+ }
48
+ export interface CommandsService {
49
+ register(definition: CommandDefinition): () => void;
50
+ list(agent: unknown): readonly CommandDescriptor[];
51
+ execute(agent: unknown, line: string, attachments: unknown, signal: AbortSignal): Promise<CommandExecution | undefined>;
52
+ }
53
+ export interface AgentRegistry {
54
+ get(sessionId: string): unknown;
55
+ }
56
+ export interface SubagentEntry {
57
+ id: string;
58
+ kind: 'child' | 'diagnostic';
59
+ label?: string;
60
+ mode?: string;
61
+ activity?: 'running' | 'inactive';
62
+ depth?: number;
63
+ hasChildren?: boolean;
64
+ reason?: string;
65
+ }
66
+ export interface SubagentsService {
67
+ listDescendants(rootSessionId: string, signal?: AbortSignal): Promise<readonly SubagentEntry[]>;
68
+ }
69
+ export interface SettingsDescriptor {
70
+ ns: string;
71
+ revision: number;
72
+ value: unknown;
73
+ }
74
+ export interface SettingsService {
75
+ describe(options?: {
76
+ redactSecrets?: boolean;
77
+ }): readonly SettingsDescriptor[];
78
+ update(ns: string, patch: unknown, expectedRevision?: number): Promise<void>;
79
+ }
80
+ export interface CredentialDescription {
81
+ configured: boolean;
82
+ source?: 'file' | 'env' | 'project-env' | 'user-env';
83
+ writable?: boolean;
84
+ }
85
+ export interface CredentialsService {
86
+ describe(ref: string): Promise<CredentialDescription>;
87
+ set(ref: string, value: string): Promise<void>;
88
+ unset(ref: string): Promise<void>;
89
+ }
90
+ export interface LlmProvider {
91
+ id: string;
92
+ name?: string;
93
+ }
94
+ export interface ConfigurableProvider {
95
+ provider: string;
96
+ displayName: string;
97
+ settingsNs: string;
98
+ settingsPath: readonly string[];
99
+ declared?: boolean;
100
+ defaultBaseURL?: string;
101
+ nativeAuth?: unknown;
102
+ }
103
+ export interface DiscoveredModel {
104
+ id: string;
105
+ }
106
+ export interface LlmService {
107
+ listProviders(): readonly LlmProvider[];
108
+ listConfigurableProviders(): readonly ConfigurableProvider[];
109
+ discoverModels(settingsNs: string, request: {
110
+ provider?: string;
111
+ baseURL?: string;
112
+ api?: string;
113
+ apiKey?: string;
114
+ }, signal?: AbortSignal): Promise<readonly DiscoveredModel[]>;
115
+ }
116
+ export interface SessionPromptRequest {
117
+ requestId: string;
118
+ sessionId: string;
119
+ mode: 'queue' | 'steer';
120
+ content: ReadonlyArray<{
121
+ readonly type: 'text';
122
+ readonly text: string;
123
+ }>;
124
+ }
125
+ export interface SessionController {
126
+ prompt(request: SessionPromptRequest, signal: AbortSignal): Promise<{
127
+ accepted: boolean;
128
+ }>;
129
+ }
130
+ export interface HostContext {
131
+ sessions?: SessionsService;
132
+ sessionProjections?: ProjectionsService;
133
+ commands?: CommandsService;
134
+ subagents?: SubagentsService;
135
+ llm?: LlmService;
136
+ settings?: SettingsService;
137
+ credentials?: CredentialsService;
138
+ effect?(factory: () => Generator<unknown, void, unknown>, label?: string): void;
139
+ get?(name: string): unknown;
140
+ reflect?: {
141
+ store?: Record<string, unknown>;
142
+ };
143
+ [key: string]: unknown;
144
+ }
145
+ export declare function service<T>(ctx: HostContext, key: string): T | undefined;
146
+ export declare function serviceNames(ctx: HostContext): string[];
147
+ export declare function methodNames(value: unknown, limit?: number): string[];
148
+ //# sourceMappingURL=host-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-api.d.ts","sourceRoot":"","sources":["../src/host-api.ts"],"names":[],"mappings":"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"}