@corenel/harness 0.1.0 → 0.2.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 (87) hide show
  1. package/dist/conversation.d.ts +0 -11
  2. package/dist/conversation.d.ts.map +1 -1
  3. package/dist/conversation.js +1 -24
  4. package/dist/conversation.js.map +1 -1
  5. package/dist/core/budget.d.ts +40 -0
  6. package/dist/core/budget.d.ts.map +1 -0
  7. package/dist/core/budget.js +62 -0
  8. package/dist/core/budget.js.map +1 -0
  9. package/dist/core/loop.d.ts +9 -0
  10. package/dist/core/loop.d.ts.map +1 -1
  11. package/dist/core/loop.js +88 -20
  12. package/dist/core/loop.js.map +1 -1
  13. package/dist/core/pricing.d.ts +8 -0
  14. package/dist/core/pricing.d.ts.map +1 -0
  15. package/dist/core/pricing.js +12 -0
  16. package/dist/core/pricing.js.map +1 -0
  17. package/dist/core/recovery.d.ts +60 -0
  18. package/dist/core/recovery.d.ts.map +1 -0
  19. package/dist/core/recovery.js +128 -0
  20. package/dist/core/recovery.js.map +1 -0
  21. package/dist/guardrail/builtins.js +6 -6
  22. package/dist/guardrail/builtins.js.map +1 -1
  23. package/dist/guardrail/permission-service.js +1 -1
  24. package/dist/guardrail/permission-service.js.map +1 -1
  25. package/dist/guardrail/serialize.d.ts.map +1 -1
  26. package/dist/guardrail/serialize.js +6 -0
  27. package/dist/guardrail/serialize.js.map +1 -1
  28. package/dist/guardrail/validate.d.ts.map +1 -1
  29. package/dist/guardrail/validate.js +13 -0
  30. package/dist/guardrail/validate.js.map +1 -1
  31. package/dist/prompts/index.d.ts +6 -0
  32. package/dist/prompts/index.d.ts.map +1 -1
  33. package/dist/prompts/index.js +12 -6
  34. package/dist/prompts/index.js.map +1 -1
  35. package/dist/prompts/library/defaults.generated.d.ts.map +1 -1
  36. package/dist/prompts/library/defaults.generated.js +22 -4
  37. package/dist/prompts/library/defaults.generated.js.map +1 -1
  38. package/dist/prompts/toolsMarker.d.ts +13 -0
  39. package/dist/prompts/toolsMarker.d.ts.map +1 -0
  40. package/dist/prompts/toolsMarker.js +21 -0
  41. package/dist/prompts/toolsMarker.js.map +1 -0
  42. package/dist/providers/gateway.d.ts +16 -1
  43. package/dist/providers/gateway.d.ts.map +1 -1
  44. package/dist/providers/gateway.js +30 -4
  45. package/dist/providers/gateway.js.map +1 -1
  46. package/dist/services.d.ts +13 -0
  47. package/dist/services.d.ts.map +1 -1
  48. package/dist/services.js +2 -0
  49. package/dist/services.js.map +1 -1
  50. package/dist/sessions/fileRecallStore.d.ts +33 -0
  51. package/dist/sessions/fileRecallStore.d.ts.map +1 -0
  52. package/dist/sessions/fileRecallStore.js +112 -0
  53. package/dist/sessions/fileRecallStore.js.map +1 -0
  54. package/dist/sessions/fileSessionStore.d.ts +20 -0
  55. package/dist/sessions/fileSessionStore.d.ts.map +1 -0
  56. package/dist/sessions/fileSessionStore.js +151 -0
  57. package/dist/sessions/fileSessionStore.js.map +1 -0
  58. package/dist/sessions/jsonl.d.ts +23 -0
  59. package/dist/sessions/jsonl.d.ts.map +1 -0
  60. package/dist/sessions/jsonl.js +52 -0
  61. package/dist/sessions/jsonl.js.map +1 -0
  62. package/dist/sessions/testFs.d.ts +5 -0
  63. package/dist/sessions/testFs.d.ts.map +1 -0
  64. package/dist/sessions/testFs.js +85 -0
  65. package/dist/sessions/testFs.js.map +1 -0
  66. package/dist/sidecar/host.d.ts +64 -2
  67. package/dist/sidecar/host.d.ts.map +1 -1
  68. package/dist/sidecar/host.js +135 -1
  69. package/dist/sidecar/host.js.map +1 -1
  70. package/dist/sidecar/server.d.ts +95 -2
  71. package/dist/sidecar/server.d.ts.map +1 -1
  72. package/dist/sidecar/server.js +229 -3
  73. package/dist/sidecar/server.js.map +1 -1
  74. package/dist/skills.d.ts +8 -3
  75. package/dist/skills.d.ts.map +1 -1
  76. package/dist/skills.js +71 -35
  77. package/dist/skills.js.map +1 -1
  78. package/dist/tools/builtins.d.ts +1 -0
  79. package/dist/tools/builtins.d.ts.map +1 -1
  80. package/dist/tools/builtins.js +89 -3
  81. package/dist/tools/builtins.js.map +1 -1
  82. package/dist/tools/files.d.ts.map +1 -1
  83. package/dist/tools/files.js +13 -0
  84. package/dist/tools/files.js.map +1 -1
  85. package/dist/tools/http.d.ts.map +1 -1
  86. package/dist/tools/http.js.map +1 -1
  87. package/package.json +22 -34
@@ -0,0 +1,52 @@
1
+ export function encodeLine(line) {
2
+ return JSON.stringify(line) + '\n';
3
+ }
4
+ /** Fold a SESSION.jsonl text into an AgentSession, or null when no valid meta
5
+ * line exists (empty/foreign file). */
6
+ export function foldSession(text) {
7
+ let meta = null;
8
+ const turns = [];
9
+ let title = '';
10
+ let titleLocked;
11
+ let updatedAt = 0;
12
+ for (const raw of text.split('\n')) {
13
+ const s = raw.trim();
14
+ if (!s)
15
+ continue;
16
+ let line;
17
+ try {
18
+ line = JSON.parse(s);
19
+ }
20
+ catch {
21
+ continue;
22
+ }
23
+ if (line.k === 'meta' && !meta && typeof line.id === 'string' && typeof line.createdAt === 'number') {
24
+ meta = line;
25
+ title = typeof line.title === 'string' ? line.title : '';
26
+ updatedAt = Math.max(updatedAt, line.createdAt);
27
+ }
28
+ else if (line.k === 'meta-update' && typeof line.at === 'number') {
29
+ if (typeof line.title === 'string')
30
+ title = line.title;
31
+ if (typeof line.titleLocked === 'boolean')
32
+ titleLocked = line.titleLocked;
33
+ updatedAt = Math.max(updatedAt, line.at);
34
+ }
35
+ else if (line.k === 'turn' && Number.isInteger(line.i) && line.i >= 0 && typeof line.at === 'number') {
36
+ turns[line.i] = line.m;
37
+ updatedAt = Math.max(updatedAt, line.at);
38
+ }
39
+ }
40
+ if (!meta)
41
+ return null;
42
+ return {
43
+ id: meta.id,
44
+ title,
45
+ createdAt: meta.createdAt,
46
+ updatedAt: updatedAt || meta.createdAt,
47
+ messages: turns.filter((t) => t !== undefined),
48
+ ...(meta.surface ? { surface: meta.surface } : {}),
49
+ ...(titleLocked !== undefined ? { titleLocked } : {}),
50
+ };
51
+ }
52
+ //# sourceMappingURL=jsonl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../sessions/jsonl.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,UAAU,CAAC,IAAiB;IAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACrC,CAAC;AAED;uCACuC;AACvC,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,IAAI,GAA+C,IAAI,CAAC;IAC5D,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,WAAgC,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,IAAiB,CAAC;QACtB,IAAI,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAgB,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QAChE,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACpG,IAAI,GAAG,IAAI,CAAC;YACZ,KAAK,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,KAAK,aAAa,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACnE,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;gBAAE,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACvD,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1E,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACvG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACvB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS;QACtC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;QAC9C,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { FileService } from '@corenel/protocol';
2
+ export declare function makeTestFs(): FileService & {
3
+ files: Map<string, string>;
4
+ };
5
+ //# sourceMappingURL=testFs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testFs.d.ts","sourceRoot":"","sources":["../../sessions/testFs.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,mBAAmB,CAAC;AAGzE,wBAAgB,UAAU,IAAI,WAAW,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAyEzE"}
@@ -0,0 +1,85 @@
1
+ import { normalizeFilePath, extOf } from '@corenel/protocol';
2
+ export function makeTestFs() {
3
+ const files = new Map();
4
+ function list(dir) {
5
+ const baseN = dir ? normalizeFilePath(dir) : '';
6
+ const prefix = baseN ? baseN + '/' : '';
7
+ const roots = [];
8
+ const dirNodes = new Map();
9
+ const ensureDir = (dirPath) => {
10
+ if (!dirPath)
11
+ return null;
12
+ const existing = dirNodes.get(dirPath);
13
+ if (existing)
14
+ return existing;
15
+ const parts = dirPath.split('/');
16
+ const node = { name: parts[parts.length - 1], path: dirPath, kind: 'directory', children: [] };
17
+ dirNodes.set(dirPath, node);
18
+ const parent = ensureDir(parts.slice(0, -1).join('/'));
19
+ (parent ? parent.children : roots).push(node);
20
+ return node;
21
+ };
22
+ for (const [path, content] of files) {
23
+ if (prefix && !path.startsWith(prefix))
24
+ continue;
25
+ const parts = path.split('/').filter(Boolean);
26
+ if (!parts.length)
27
+ continue;
28
+ const name = parts[parts.length - 1];
29
+ const parent = parts.length > 1 ? ensureDir(parts.slice(0, -1).join('/')) : null;
30
+ (parent ? parent.children : roots).push({ name, path, kind: 'file', size: content.length, ext: extOf(name) });
31
+ }
32
+ return roots;
33
+ }
34
+ return {
35
+ kind: 'memory',
36
+ label: 'test',
37
+ isLocalDisk: false,
38
+ writable: true,
39
+ files,
40
+ list: async (dir) => list(dir),
41
+ read: async (path) => {
42
+ const v = files.get(normalizeFilePath(path));
43
+ if (v === undefined)
44
+ throw new Error(`not found: ${path}`);
45
+ return v;
46
+ },
47
+ stat: async (path) => {
48
+ const n = normalizeFilePath(path);
49
+ if (files.has(n))
50
+ return { path: n, kind: 'file', size: files.get(n).length, ext: extOf(n) };
51
+ for (const key of files.keys())
52
+ if (key.startsWith(n + '/'))
53
+ return { path: n, kind: 'directory', size: 0 };
54
+ return null;
55
+ },
56
+ write: async (path, content) => {
57
+ files.set(normalizeFilePath(path), content);
58
+ },
59
+ create: async (path, content) => {
60
+ const n = normalizeFilePath(path);
61
+ if (files.has(n))
62
+ throw new Error(`exists: ${path}`);
63
+ files.set(n, content ?? '');
64
+ },
65
+ remove: async (path) => {
66
+ const n = normalizeFilePath(path);
67
+ files.delete(n);
68
+ for (const key of [...files.keys()])
69
+ if (key.startsWith(n + '/'))
70
+ files.delete(key);
71
+ },
72
+ rename: async (from, to) => {
73
+ const f = normalizeFilePath(from);
74
+ const t = normalizeFilePath(to);
75
+ const v = files.get(f);
76
+ if (v !== undefined) {
77
+ files.delete(f);
78
+ files.set(t, v);
79
+ }
80
+ },
81
+ search: async () => [],
82
+ onChange: () => () => { },
83
+ };
84
+ }
85
+ //# sourceMappingURL=testFs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testFs.js","sourceRoot":"","sources":["../../sessions/testFs.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import type { AgentTool, IMemoryProvider, IKeyValueStore, ISearchProvider, ISessionStore, PermissionRequest, AskQuestion, AskAnswers } from '@corenel/protocol';
1
+ import type { AgentTool, IMemoryProvider, IKeyValueStore, ISearchProvider, ISessionStore, PermissionRequest, AskQuestion, AskAnswers, AgentEvent, PermissionDecision } from '@corenel/protocol';
2
2
  import type { FileService } from '@corenel/protocol';
3
- import { type SidecarChannel } from '@corenel/protocol';
3
+ import { type SidecarChannel, type SidecarInfo } from '@corenel/protocol';
4
4
  /** The host's live capabilities a connected sidecar may proxy into. Only the ones
5
5
  * provided are reachable; a proxy call to a missing one is rejected. */
6
6
  export interface HostProviders {
@@ -20,6 +20,14 @@ export interface SidecarHostOptions {
20
20
  /** Pairing token presented to the sidecar (surface B — authenticates the
21
21
  * connection; does NOT grant policy authority, which stays with the host). */
22
22
  token: string;
23
+ /** The host's dot-dir name (e.g. '.corenel', '.prompd'), sent informationally in
24
+ * `hello` so the sidecar knows it for future workspace-state features. */
25
+ stateDir?: string;
26
+ /** This client's durable identity, sent in `hello` so the sidecar can record
27
+ * who connected (routing Slice-2 sync). Additive: omitting them just means the
28
+ * sidecar records no host entry for this connection. */
29
+ clientId?: string;
30
+ clientName?: string;
23
31
  /** The host's live stores. Only the ones provided are reachable; a proxy call
24
32
  * to a missing provider is rejected. */
25
33
  providers: HostProviders;
@@ -27,6 +35,25 @@ export interface SidecarHostOptions {
27
35
  registerTool: (tool: AgentTool) => void;
28
36
  /** Remove a proxy tool on disconnect (wire to `unregisterTool`). */
29
37
  unregisterTool?: (name: string) => void;
38
+ /** The daemon relayed a permission ask from its attendance registry — surface it
39
+ * to the app so it can prompt the user. */
40
+ onPermissionAsk?: (ask: {
41
+ id: number;
42
+ runId: string;
43
+ agent: string;
44
+ tool: string;
45
+ input: unknown;
46
+ deadline: number;
47
+ }) => void;
48
+ /** The daemon resolved an outstanding ask — server-driven, so this fires
49
+ * whether THIS client answered, another connected client answered first, or the
50
+ * daemon timed/unattended it out. The app must drop the prompt on this event,
51
+ * not on its own click. */
52
+ onPermissionResolved?: (e: {
53
+ id: number;
54
+ decision: PermissionDecision;
55
+ by: 'client' | 'timeout' | 'unattended';
56
+ }) => void;
30
57
  }
31
58
  export declare class SidecarHost {
32
59
  private readonly ch;
@@ -35,7 +62,12 @@ export declare class SidecarHost {
35
62
  private readonly invokePending;
36
63
  private httpSeq;
37
64
  private readonly httpPending;
65
+ private runSeq;
66
+ private readonly runPending;
67
+ private syncSeq;
68
+ private readonly syncPending;
38
69
  private features;
70
+ private info;
39
71
  private readonly imported;
40
72
  private welcome;
41
73
  constructor(opts: SidecarHostOptions);
@@ -47,6 +79,13 @@ export declare class SidecarHost {
47
79
  private onMessage;
48
80
  /** Whether the connected sidecar advertised the loopback HTTP proxy. */
49
81
  supportsHttpProxy(): boolean;
82
+ /** Whether the connected sidecar advertised a wired crew runner — i.e. it can
83
+ * actually fire daemon-tier triggers (schedule/continuous/self-directed) on its
84
+ * own clock, not just serve tools. */
85
+ supportsRunner(): boolean;
86
+ /** The sidecar's advertised self-description (root/platform), or {} if it sent
87
+ * none. Valid only after connect() resolves. */
88
+ sidecarInfo(): SidecarInfo;
50
89
  /** Fetch a (loopback) URL THROUGH the sidecar — a server-side fetch on the user's
51
90
  * machine, so the browser dodges CORS. Returns a streaming Response: it resolves
52
91
  * as soon as headers arrive (http-res) and the body streams in via http-chunk. */
@@ -56,6 +95,29 @@ export declare class SidecarHost {
56
95
  headers: Record<string, string>;
57
96
  body?: string;
58
97
  }): Promise<Response>;
98
+ /** Command the sidecar to run a crew agent, streaming its lifecycle events to
99
+ * `onEvent` as they arrive. Resolves once the run completes (`run-done`) with
100
+ * the daemon-assigned runId, final text, and stop reason; rejects on
101
+ * `run-error` or if the connection drops while the run is in flight. */
102
+ run(agent: string, input: string, onEvent: (e: AgentEvent) => void): Promise<{
103
+ runId: string;
104
+ text: string;
105
+ stopReason: string;
106
+ }>;
107
+ /** Answer an outstanding permission ask. Fire-and-forget over the wire — the
108
+ * actual drop of the prompt is driven by the server's `permission-resolved`
109
+ * broadcast (`onPermissionResolved`), not by this call returning. */
110
+ answerPermission(id: number, decision: PermissionDecision): void;
111
+ /** Push one definition file's content to the daemon, to be persisted under
112
+ * this client's own `<stateDir>/hosts/<dirName>/` (Slice 2 host sync).
113
+ * Resolves on `host-sync-result { ok: true }`; rejects with the daemon's
114
+ * error, or on disconnect while in flight. */
115
+ hostSyncPut(path: string, content: string): Promise<void>;
116
+ /** Delete one definition file on the daemon side (reconcile). Same
117
+ * resolve/reject contract as `hostSyncPut`. Callers are responsible for
118
+ * confining `path` to definition, non-state paths BEFORE calling this --
119
+ * this method has no opinion on what `path` is. */
120
+ hostSyncDelete(path: string): Promise<void>;
59
121
  private invoke;
60
122
  /** Answer a sidecar's proxy-provider call from the host's live store. The
61
123
  * allowlist (HOST_METHODS) is the least-privilege boundary — a sidecar can
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../sidecar/host.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAC1E,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAC3C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAE3B;wEACwE;AACxE,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,mEAAmE;IACnE,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,0CAA0C;IAC1C,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB;kFAC8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd;4CACwC;IACxC,SAAS,EAAE,aAAa,CAAC;IACzB,2EAA2E;IAC3E,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACxC,oEAAoE;IACpE,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAkBD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkC;IAC9D,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,OAAO,CAAmF;gBAEtF,IAAI,EAAE,kBAAkB;IAMpC;gEAC4D;IAC5D,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAO5B,kFAAkF;IAClF,UAAU,CAAC,MAAM,SAAiB,GAAG,IAAI;IAYzC,OAAO,CAAC,SAAS;IAsCjB,wEAAwE;IACxE,iBAAiB,IAAI,OAAO;IAE5B;;sFAEkF;IAClF,SAAS,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoBlH,OAAO,CAAC,MAAM;IAQd;;+EAE2E;YAC7D,aAAa;IAe3B;;8CAE0C;IAC1C,OAAO,CAAC,eAAe;CAWxB"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../sidecar/host.ts"],"names":[],"mappings":"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"}
@@ -45,12 +45,42 @@ export class SidecarHost {
45
45
  writable: true,
46
46
  value: new Map()
47
47
  });
48
+ Object.defineProperty(this, "runSeq", {
49
+ enumerable: true,
50
+ configurable: true,
51
+ writable: true,
52
+ value: 0
53
+ });
54
+ Object.defineProperty(this, "runPending", {
55
+ enumerable: true,
56
+ configurable: true,
57
+ writable: true,
58
+ value: new Map()
59
+ });
60
+ Object.defineProperty(this, "syncSeq", {
61
+ enumerable: true,
62
+ configurable: true,
63
+ writable: true,
64
+ value: 0
65
+ });
66
+ Object.defineProperty(this, "syncPending", {
67
+ enumerable: true,
68
+ configurable: true,
69
+ writable: true,
70
+ value: new Map()
71
+ });
48
72
  Object.defineProperty(this, "features", {
49
73
  enumerable: true,
50
74
  configurable: true,
51
75
  writable: true,
52
76
  value: []
53
77
  });
78
+ Object.defineProperty(this, "info", {
79
+ enumerable: true,
80
+ configurable: true,
81
+ writable: true,
82
+ value: {}
83
+ });
54
84
  Object.defineProperty(this, "imported", {
55
85
  enumerable: true,
56
86
  configurable: true,
@@ -72,7 +102,12 @@ export class SidecarHost {
72
102
  connect() {
73
103
  return new Promise((resolve, reject) => {
74
104
  this.welcome = { resolve, reject };
75
- this.ch.send({ t: 'hello', protocol: SIDECAR_PROTOCOL, token: this.opts.token });
105
+ this.ch.send({
106
+ t: 'hello', protocol: SIDECAR_PROTOCOL, token: this.opts.token,
107
+ ...(this.opts.stateDir ? { stateDir: this.opts.stateDir } : {}),
108
+ ...(this.opts.clientId ? { clientId: this.opts.clientId } : {}),
109
+ ...(this.opts.clientName ? { clientName: this.opts.clientName } : {}),
110
+ });
76
111
  });
77
112
  }
78
113
  /** Drop the connection: unregister imported tools and fail anything in flight. */
@@ -86,6 +121,12 @@ export class SidecarHost {
86
121
  for (const p of this.httpPending.values())
87
122
  p.onErr(reason);
88
123
  this.httpPending.clear();
124
+ for (const p of this.runPending.values())
125
+ p.reject(new Error(reason));
126
+ this.runPending.clear();
127
+ for (const p of this.syncPending.values())
128
+ p.reject(new Error(reason));
129
+ this.syncPending.clear();
89
130
  this.welcome?.reject(new Error(reason));
90
131
  this.welcome = null;
91
132
  this.ch.close();
@@ -94,6 +135,7 @@ export class SidecarHost {
94
135
  switch (m.t) {
95
136
  case 'welcome': {
96
137
  this.features = m.features ?? [];
138
+ this.info = m.info ?? {};
97
139
  for (const decl of m.tools) {
98
140
  const tool = { ...decl, run: (args) => this.invoke(decl.name, args) };
99
141
  this.opts.registerTool(tool);
@@ -138,12 +180,65 @@ export class SidecarHost {
138
180
  this.httpPending.get(m.id)?.onErr(m.error);
139
181
  return;
140
182
  }
183
+ case 'run-accepted': {
184
+ const p = this.runPending.get(m.id);
185
+ if (p)
186
+ p.runId = m.runId;
187
+ return;
188
+ }
189
+ case 'event': {
190
+ this.runPending.get(m.id)?.onEvent(m.event);
191
+ return;
192
+ }
193
+ case 'run-done': {
194
+ const p = this.runPending.get(m.id);
195
+ if (!p)
196
+ return;
197
+ this.runPending.delete(m.id);
198
+ p.resolve({ runId: m.runId, text: m.text, stopReason: m.stopReason });
199
+ return;
200
+ }
201
+ case 'run-error': {
202
+ const p = this.runPending.get(m.id);
203
+ if (!p)
204
+ return;
205
+ this.runPending.delete(m.id);
206
+ p.reject(new Error(m.error || 'run failed'));
207
+ return;
208
+ }
209
+ case 'host-sync-result': {
210
+ const p = this.syncPending.get(m.id);
211
+ if (!p)
212
+ return;
213
+ this.syncPending.delete(m.id);
214
+ if (m.ok)
215
+ p.resolve();
216
+ else
217
+ p.reject(new Error(m.error || 'host sync failed'));
218
+ return;
219
+ }
220
+ case 'permission-ask': {
221
+ const { t: _t, ...ask } = m;
222
+ this.opts.onPermissionAsk?.(ask);
223
+ return;
224
+ }
225
+ case 'permission-resolved': {
226
+ this.opts.onPermissionResolved?.({ id: m.id, decision: m.decision, by: m.by });
227
+ return;
228
+ }
141
229
  default:
142
230
  return; // hello / invoke / host-call-result are handled on the sidecar side
143
231
  }
144
232
  }
145
233
  /** Whether the connected sidecar advertised the loopback HTTP proxy. */
146
234
  supportsHttpProxy() { return this.features.includes('http-proxy'); }
235
+ /** Whether the connected sidecar advertised a wired crew runner — i.e. it can
236
+ * actually fire daemon-tier triggers (schedule/continuous/self-directed) on its
237
+ * own clock, not just serve tools. */
238
+ supportsRunner() { return this.features.includes('runner'); }
239
+ /** The sidecar's advertised self-description (root/platform), or {} if it sent
240
+ * none. Valid only after connect() resolves. */
241
+ sidecarInfo() { return this.info; }
147
242
  /** Fetch a (loopback) URL THROUGH the sidecar — a server-side fetch on the user's
148
243
  * machine, so the browser dodges CORS. Returns a streaming Response: it resolves
149
244
  * as soon as headers arrive (http-res) and the body streams in via http-chunk. */
@@ -177,6 +272,45 @@ export class SidecarHost {
177
272
  this.ch.send({ t: 'http-req', id, method: req.method, url: req.url, headers: req.headers, body: req.body });
178
273
  });
179
274
  }
275
+ /** Command the sidecar to run a crew agent, streaming its lifecycle events to
276
+ * `onEvent` as they arrive. Resolves once the run completes (`run-done`) with
277
+ * the daemon-assigned runId, final text, and stop reason; rejects on
278
+ * `run-error` or if the connection drops while the run is in flight. */
279
+ run(agent, input, onEvent) {
280
+ const id = ++this.runSeq;
281
+ return new Promise((resolve, reject) => {
282
+ this.runPending.set(id, { resolve, reject, onEvent });
283
+ this.ch.send({ t: 'run', id, agent, input });
284
+ });
285
+ }
286
+ /** Answer an outstanding permission ask. Fire-and-forget over the wire — the
287
+ * actual drop of the prompt is driven by the server's `permission-resolved`
288
+ * broadcast (`onPermissionResolved`), not by this call returning. */
289
+ answerPermission(id, decision) {
290
+ this.ch.send({ t: 'permission-answer', id, decision });
291
+ }
292
+ /** Push one definition file's content to the daemon, to be persisted under
293
+ * this client's own `<stateDir>/hosts/<dirName>/` (Slice 2 host sync).
294
+ * Resolves on `host-sync-result { ok: true }`; rejects with the daemon's
295
+ * error, or on disconnect while in flight. */
296
+ hostSyncPut(path, content) {
297
+ const id = ++this.syncSeq;
298
+ return new Promise((resolve, reject) => {
299
+ this.syncPending.set(id, { resolve, reject });
300
+ this.ch.send({ t: 'host-sync-put', id, path, content });
301
+ });
302
+ }
303
+ /** Delete one definition file on the daemon side (reconcile). Same
304
+ * resolve/reject contract as `hostSyncPut`. Callers are responsible for
305
+ * confining `path` to definition, non-state paths BEFORE calling this --
306
+ * this method has no opinion on what `path` is. */
307
+ hostSyncDelete(path) {
308
+ const id = ++this.syncSeq;
309
+ return new Promise((resolve, reject) => {
310
+ this.syncPending.set(id, { resolve, reject });
311
+ this.ch.send({ t: 'host-sync-delete', id, path });
312
+ });
313
+ }
180
314
  invoke(name, args) {
181
315
  const id = ++this.invokeSeq;
182
316
  return new Promise((resolve, reject) => {
@@ -1 +1 @@
1
- {"version":3,"file":"host.js","sourceRoot":"","sources":["../../sidecar/host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../sidecar/host.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,68 @@
1
- import type { AgentTool } from '@corenel/protocol';
2
- import { type SidecarChannel } from '@corenel/protocol';
1
+ import type { AgentTool, PermissionDecision } from '@corenel/protocol';
2
+ import { type SidecarChannel, type SidecarMsg, type SidecarInfo, type SidecarRunner, type SidecarHostSync } from '@corenel/protocol';
3
+ /** The payload of a `permission-ask` message, minus its `t` discriminant — derived
4
+ * from the wire protocol so this stays in lockstep with it automatically. */
5
+ export type PermissionAsk = Omit<Extract<SidecarMsg, {
6
+ t: 'permission-ask';
7
+ }>, 't'>;
8
+ /** The minimal shape SidecarServer needs from a permission-attendance registry.
9
+ * Declared HERE (harness-side), not imported from `@corenel/sidecar`, so the
10
+ * dependency direction stays correct: `packages/sidecar` depends on
11
+ * `packages/harness`, never the reverse. The sidecar daemon's concrete
12
+ * `AttendanceRegistry` (packages/sidecar/src/runner/attendance.ts) has strictly
13
+ * MORE members than this (isAttended, outstanding, broadcastAsk, settle, nextId)
14
+ * and is structurally assignable here without either package importing the other. */
15
+ export interface SidecarAttendanceRegistry {
16
+ /** Attach a client to receive asks/resolutions; returns a detach function. */
17
+ attach(client: {
18
+ send(ask: PermissionAsk): void;
19
+ resolved(id: number, decision: PermissionDecision, by: 'client' | 'timeout' | 'unattended'): void;
20
+ }): () => void;
21
+ /** Record this connection's answer to an outstanding ask. Ignored for an
22
+ * unknown/already-resolved id. */
23
+ answer(id: number, decision: PermissionDecision): void;
24
+ }
3
25
  export interface SidecarServerOptions {
4
26
  channel: SidecarChannel;
5
27
  /** The pairing token a connecting host must present. */
6
28
  token: string;
7
29
  /** The tools this sidecar exposes — real implementations. */
8
30
  tools: AgentTool[];
31
+ /** Self-description advertised in the welcome (e.g. the confined root). Optional;
32
+ * a sidecar that omits it just isn't browsable-with-a-working-directory. */
33
+ info?: SidecarInfo;
34
+ /** Server-side activity logger — invoked on pairing and on each tool invoke so the
35
+ * node sidecar can print what's happening to its terminal. Optional (tests omit it). */
36
+ log?: (line: string) => void;
37
+ /** Runs a crew agent in response to a `run` message. Optional — a sidecar that
38
+ * only serves tools (no crew runner wired) reports `run-error` for `run`. */
39
+ runner?: SidecarRunner;
40
+ /** The daemon's permission-attendance registry. Optional — a sidecar that omits
41
+ * it never attaches a client and drops `permission-answer` (there is nothing to
42
+ * forward it to). When present, an authenticated connection attaches on `hello`
43
+ * and detaches when its channel closes. */
44
+ attendance?: SidecarAttendanceRegistry;
45
+ /** Invoked after an authenticated `hello` that carries a `clientId`, so the
46
+ * daemon can record who connected (Slice 2 routes sync to hosts/<dir>/). The
47
+ * harness stays storage-agnostic -- the node daemon supplies the persistence.
48
+ * Not called for an older client that sends no `clientId`.
49
+ *
50
+ * Fire-and-forget: it is never awaited, so it cannot delay `welcome`, and its
51
+ * failures -- a synchronous throw OR a rejected promise (the daemon's consumer
52
+ * is expected to be async, e.g. writing a manifest file) -- are caught and
53
+ * logged through `log?.()`, never allowed to affect the handshake or escape as
54
+ * an unhandled rejection. Do not rely on it having completed by the time
55
+ * `welcome` is sent. */
56
+ onClient?: (identity: {
57
+ clientId: string;
58
+ name: string;
59
+ }) => void;
60
+ /** The daemon's host-sync persistence port (Slice 2). Optional — a sidecar that
61
+ * omits it rejects every `host-sync-put`/`host-sync-delete` with `ok: false`
62
+ * rather than throwing or dropping the connection. Never imported from
63
+ * `@corenel/sidecar` here -- the harness stays ignorant of the manifest and the
64
+ * filesystem; only the shape from `@corenel/protocol` is known. */
65
+ hostSync?: SidecarHostSync;
9
66
  }
10
67
  export declare class SidecarServer {
11
68
  private readonly ch;
@@ -14,6 +71,22 @@ export declare class SidecarServer {
14
71
  private authed;
15
72
  private hostSeq;
16
73
  private readonly hostPending;
74
+ /** The connected host's dot-dir name, from `hello.stateDir` (informational —
75
+ * doesn't change any sidecar behavior yet; reserved for future workspace-state
76
+ * features that need to know the host's dir name). */
77
+ private hostStateDir;
78
+ /** The authenticated connection's `clientId`, retained here (from `hello`) so
79
+ * later `host-sync-*` messages can be attributed to their owner without
80
+ * trusting anything the client sends per-call. Set only when the `hello`
81
+ * passed BOTH the token check AND the identity `typeof` gate below --
82
+ * `undefined` means either "not authenticated yet" or "authenticated, but this
83
+ * connection carries no identity to attribute files to" (an older client).
84
+ * Either way, host-sync must be rejected; see `requireHostSyncIdentity`. */
85
+ private clientId?;
86
+ /** Detach function for this connection's attendance attachment, set on a
87
+ * successful `hello` when `opts.attendance` is wired. Called once, on channel
88
+ * close, so a dead connection stops receiving/counting toward asks. */
89
+ private attendedDetach?;
17
90
  constructor(opts: SidecarServerOptions);
18
91
  private onMessage;
19
92
  private onHello;
@@ -22,6 +95,26 @@ export declare class SidecarServer {
22
95
  * response streams back (http-res -> http-chunk* -> http-end). */
23
96
  private onHttpReq;
24
97
  private onInvoke;
98
+ /** Runs a crew agent via the configured `runner` and streams its lifecycle back
99
+ * to the host: `run-accepted` (with the daemon-assigned runId) once the runner
100
+ * has started, one `event` per `onEvent` callback, then exactly one of
101
+ * `run-done` (final text + stop reason) or `run-error`.
102
+ *
103
+ * `runner.run` returns the runId asynchronously, but a runner is free to call
104
+ * `onEvent` synchronously before that promise settles (e.g. an immediate first
105
+ * turn). Events that arrive before we know the runId are buffered and flushed
106
+ * right after `run-accepted`, so they still carry the correct runId and never
107
+ * race ahead of it on the wire. */
108
+ private onRun;
109
+ /** The identity to attribute a host-sync write to. Returns either the
110
+ * authenticated `clientId`, or an error string explaining why there is none --
111
+ * either this connection is not authenticated yet, or it authenticated with no
112
+ * `clientId` (an older client). The latter is NOT an auth failure (the pairing
113
+ * token already authenticated the connection); it is a "no owner to attribute
114
+ * files to" rule -- a write with no owner must never reach the port. */
115
+ private requireHostSyncIdentity;
116
+ private onHostSyncPut;
117
+ private onHostSyncDelete;
25
118
  /** A ToolContext whose capabilities proxy back to the host (persist-nothing).
26
119
  * The stores, the host's file workspace, and the user prompts (confirm/ask) all
27
120
  * round-trip over the channel. confirm/ask default to allow/dismiss when the
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../sidecar/server.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,SAAS,EAGV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,cAAc,CAAC;IACxB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAuBD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAiB;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAE9C,IAAI,EAAE,oBAAoB;IAOtC,OAAO,CAAC,SAAS;IA6BjB,OAAO,CAAC,OAAO;IAgBf;;sEAEkE;YACpD,SAAS;YAwBT,QAAQ;IActB;;;;oEAIgE;IAChE,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKrB;IAEF,OAAO,CAAC,QAAQ,CAAC,EAAE,CAKjB;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAErB;IAEF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAOvB;IAEF;mFAC+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAcpB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAC2D;IAEnF,OAAO,CAAC,QAAQ,CAAC,GAAG,CACuE;CAC5F"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../sidecar/server.ts"],"names":[],"mappings":"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"}