@viewportai/daemon 0.8.0 → 0.9.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 (45) hide show
  1. package/dist/cli/context-command.d.ts.map +1 -1
  2. package/dist/cli/context-command.js +6 -1
  3. package/dist/cli/context-command.js.map +1 -1
  4. package/dist/cli/context-github-use-command.d.ts +2 -0
  5. package/dist/cli/context-github-use-command.d.ts.map +1 -0
  6. package/dist/cli/context-github-use-command.js +68 -0
  7. package/dist/cli/context-github-use-command.js.map +1 -0
  8. package/dist/cli/context-provider-command.d.ts.map +1 -1
  9. package/dist/cli/context-provider-command.js +14 -5
  10. package/dist/cli/context-provider-command.js.map +1 -1
  11. package/dist/cli/context-provider-propose.d.ts +6 -1
  12. package/dist/cli/context-provider-propose.d.ts.map +1 -1
  13. package/dist/cli/context-provider-propose.js +6 -1
  14. package/dist/cli/context-provider-propose.js.map +1 -1
  15. package/dist/cli/lifecycle-commands.d.ts.map +1 -1
  16. package/dist/cli/lifecycle-commands.js +1 -0
  17. package/dist/cli/lifecycle-commands.js.map +1 -1
  18. package/dist/config-resolution/config-writer.d.ts +29 -0
  19. package/dist/config-resolution/config-writer.d.ts.map +1 -1
  20. package/dist/config-resolution/config-writer.js +51 -0
  21. package/dist/config-resolution/config-writer.js.map +1 -1
  22. package/dist/config-resolution/provider-defaults.d.ts +4 -0
  23. package/dist/config-resolution/provider-defaults.d.ts.map +1 -0
  24. package/dist/config-resolution/provider-defaults.js +23 -0
  25. package/dist/config-resolution/provider-defaults.js.map +1 -0
  26. package/dist/config-resolution/resolver.d.ts.map +1 -1
  27. package/dist/config-resolution/resolver.js +5 -18
  28. package/dist/config-resolution/resolver.js.map +1 -1
  29. package/dist/config-resolution/schema.d.ts +5 -0
  30. package/dist/config-resolution/schema.d.ts.map +1 -1
  31. package/dist/config-resolution/schema.js +5 -0
  32. package/dist/config-resolution/schema.js.map +1 -1
  33. package/dist/config-resolution/types.d.ts +5 -1
  34. package/dist/config-resolution/types.d.ts.map +1 -1
  35. package/dist/context-providers/github-repo-provider.d.ts +3 -0
  36. package/dist/context-providers/github-repo-provider.d.ts.map +1 -0
  37. package/dist/context-providers/github-repo-provider.js +313 -0
  38. package/dist/context-providers/github-repo-provider.js.map +1 -0
  39. package/dist/context-providers/registry.d.ts.map +1 -1
  40. package/dist/context-providers/registry.js +2 -1
  41. package/dist/context-providers/registry.js.map +1 -1
  42. package/dist/context-providers/types.d.ts +4 -0
  43. package/dist/context-providers/types.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/schemas/viewport-config-v1.schema.json +5 -1
@@ -0,0 +1,313 @@
1
+ import crypto from 'node:crypto';
2
+ import { execFile } from 'node:child_process';
3
+ import fs from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ import { configDir } from '../core/config.js';
6
+ const DEFAULT_SIZE_BUDGET_BYTES = 100 * 1024;
7
+ const MAX_DOCS_PER_PROVIDER = 50;
8
+ const MAX_SEARCH_SNIPPET_BYTES = 8 * 1024;
9
+ export const githubRepoProviderAdapter = {
10
+ kind: 'github-repo',
11
+ async search(input) {
12
+ const repo = await ensureSyncedRepo(input);
13
+ const items = await resolveGitHubContextItems(input, repo);
14
+ return items.map((item) => resultForItem(input.provider.id, item, input.query));
15
+ },
16
+ async get(input) {
17
+ const repo = await ensureSyncedRepo(input);
18
+ const items = await resolveGitHubContextItems(input, repo);
19
+ return items
20
+ .map((item) => resultForItem(input.provider.id, item))
21
+ .find((item) => item.id === input.entryId);
22
+ },
23
+ async propose(input) {
24
+ const repo = await ensureSyncedRepo(input);
25
+ const branch = await createProposalBranch(input, repo);
26
+ const filePath = await writeProposalFile(input, repo);
27
+ await ensureGitIdentity(repo);
28
+ await runGit(['add', filePath], repo);
29
+ await runGit(['commit', '-m', `docs(context): ${singleLine(input.title).slice(0, 72)}`], repo);
30
+ await runGit(['push', '-u', 'origin', branch], repo);
31
+ const pr = await tryCreatePullRequest(input, repo);
32
+ const bodyDigest = `sha256:${crypto.createHash('sha256').update(input.body).digest('hex')}`;
33
+ return {
34
+ candidate_id: pr.url ?? `github-pr:${input.provider.id}:${branch}`,
35
+ payload_digest: bodyDigest,
36
+ status: pr.url ? 'pull_request_opened' : 'branch_pushed',
37
+ pull_request_url: pr.url,
38
+ branch,
39
+ source: `github-repo://${input.provider.repo}/${filePath}`,
40
+ };
41
+ },
42
+ };
43
+ async function resolveGitHubContextItems(input, repoRoot) {
44
+ const budget = input.sizeBudgetBytes ?? DEFAULT_SIZE_BUDGET_BYTES;
45
+ const patterns = input.provider.paths?.length
46
+ ? input.provider.paths
47
+ : ['context/**/*.md', '**/*.md'];
48
+ const files = await discoverProviderFiles(repoRoot, patterns);
49
+ const ranked = rankFiles(files, input.query);
50
+ const items = [];
51
+ let usedBytes = 0;
52
+ for (const filePath of ranked) {
53
+ if (items.length >= MAX_DOCS_PER_PROVIDER)
54
+ break;
55
+ const stat = await safeStat(filePath);
56
+ if (!stat || stat.size <= 0 || stat.size > budget || usedBytes + stat.size > budget)
57
+ continue;
58
+ const raw = await fs.readFile(filePath, 'utf8');
59
+ usedBytes += Buffer.byteLength(raw, 'utf8');
60
+ const relative = relativePath(repoRoot, filePath);
61
+ items.push({
62
+ id: `${input.provider.id}:${relative}`,
63
+ title: relative,
64
+ body: raw.trim(),
65
+ sourcePath: filePath,
66
+ digest: `sha256:${crypto.createHash('sha256').update(raw).digest('hex')}`,
67
+ });
68
+ }
69
+ return items;
70
+ }
71
+ async function ensureSyncedRepo(input) {
72
+ const provider = input.provider;
73
+ const remote = provider.remote ?? repoToRemote(provider.repo);
74
+ if (!remote)
75
+ throw new Error(`github-repo provider ${provider.id} requires repo or remote`);
76
+ const cachePath = providerCachePath(input.home, remote);
77
+ const exists = await safeStat(path.join(cachePath, '.git'));
78
+ if (!exists) {
79
+ await fs.mkdir(path.dirname(cachePath), { recursive: true });
80
+ await runGit(['clone', remote, cachePath], undefined);
81
+ }
82
+ await runGit(['fetch', '--prune', 'origin'], cachePath);
83
+ const ref = provider.ref ?? provider.branch ?? 'main';
84
+ await runGit(['checkout', ref], cachePath);
85
+ await runGit(['pull', '--ff-only', 'origin', ref], cachePath).catch(() => undefined);
86
+ return cachePath;
87
+ }
88
+ async function createProposalBranch(input, repoRoot) {
89
+ const base = input.provider.branch ?? input.provider.ref ?? 'main';
90
+ await runGit(['checkout', base], repoRoot);
91
+ const branch = `viewport/context/${slugify(input.title)}-${Date.now().toString(36)}`;
92
+ await runGit(['checkout', '-b', branch], repoRoot);
93
+ return branch;
94
+ }
95
+ async function writeProposalFile(input, repoRoot) {
96
+ const directory = path.join(repoRoot, 'context', 'proposals');
97
+ await fs.mkdir(directory, { recursive: true });
98
+ const fileName = `${new Date().toISOString().slice(0, 10)}-${slugify(input.title)}.md`;
99
+ const filePath = path.join(directory, fileName);
100
+ const content = [
101
+ '---',
102
+ `title: ${JSON.stringify(input.title)}`,
103
+ `source_kind: ${JSON.stringify(input.sourceKind)}`,
104
+ `source: ${JSON.stringify(input.source ?? '')}`,
105
+ `proposed_by: ${JSON.stringify(input.actorName)}`,
106
+ `manifest_digest: ${JSON.stringify(input.manifestDigest)}`,
107
+ '---',
108
+ '',
109
+ input.body.trim(),
110
+ '',
111
+ ].join('\n');
112
+ await fs.writeFile(filePath, content, 'utf8');
113
+ return relativePath(repoRoot, filePath);
114
+ }
115
+ async function tryCreatePullRequest(input, repoRoot) {
116
+ const body = [
117
+ input.body.trim(),
118
+ '',
119
+ '---',
120
+ `Viewport provider: \`${input.provider.id}\``,
121
+ `Source kind: \`${input.sourceKind}\``,
122
+ `Source: \`${input.source ?? 'not provided'}\``,
123
+ `Manifest: \`${input.manifestDigest}\``,
124
+ ].join('\n');
125
+ try {
126
+ const result = await runCommand('gh', ['pr', 'create', '--fill', '--title', input.title, '--body', body], repoRoot);
127
+ const url = result.stdout
128
+ .split(/\r?\n/)
129
+ .map((line) => line.trim())
130
+ .find((line) => /^https:\/\/github\.com\/.+\/pull\/\d+/.test(line));
131
+ return url ? { url } : {};
132
+ }
133
+ catch {
134
+ return {};
135
+ }
136
+ }
137
+ async function ensureGitIdentity(repoRoot) {
138
+ const name = await runGit(['config', '--get', 'user.name'], repoRoot).catch(() => null);
139
+ if (!name?.stdout.trim()) {
140
+ await runGit(['config', 'user.name', 'Viewport Context'], repoRoot);
141
+ }
142
+ const email = await runGit(['config', '--get', 'user.email'], repoRoot).catch(() => null);
143
+ if (!email?.stdout.trim()) {
144
+ await runGit(['config', 'user.email', 'context@getviewport.local'], repoRoot);
145
+ }
146
+ }
147
+ function resultForItem(providerId, item, query) {
148
+ return {
149
+ id: item.id,
150
+ provider_id: providerId,
151
+ provider: 'github-repo',
152
+ privacy: 'third_party_terms',
153
+ title: item.title,
154
+ body: query ? searchSnippet(item.body, query) : item.body,
155
+ digest: item.digest,
156
+ source: item.sourcePath,
157
+ };
158
+ }
159
+ function repoToRemote(repo) {
160
+ const trimmed = repo?.trim();
161
+ if (!trimmed)
162
+ return undefined;
163
+ if (/^(https?:|git@|ssh:|file:)/.test(trimmed))
164
+ return trimmed;
165
+ return `git@github.com:${trimmed}.git`;
166
+ }
167
+ function providerCachePath(home, remote) {
168
+ const root = home ? path.resolve(home) : configDir();
169
+ const digest = crypto.createHash('sha256').update(remote).digest('hex').slice(0, 16);
170
+ return path.join(root, 'context', 'github-repos', digest);
171
+ }
172
+ async function discoverProviderFiles(baseDirectory, patterns) {
173
+ const files = new Set();
174
+ for (const pattern of patterns) {
175
+ const matches = await discoverPattern(baseDirectory, pattern);
176
+ for (const filePath of matches)
177
+ files.add(filePath);
178
+ }
179
+ return [...files].sort();
180
+ }
181
+ async function discoverPattern(baseDirectory, pattern) {
182
+ const normalized = pattern.replaceAll('\\', '/');
183
+ if (!normalized.includes('*')) {
184
+ const filePath = path.resolve(baseDirectory, normalized);
185
+ return isSafeChild(baseDirectory, filePath) && (await isReadableFile(filePath))
186
+ ? [filePath]
187
+ : [];
188
+ }
189
+ const root = path.resolve(baseDirectory, literalPrefix(normalized));
190
+ if (!isSafeChild(baseDirectory, root))
191
+ return [];
192
+ const candidates = await walkFiles(root);
193
+ return candidates.filter((filePath) => matchesSimpleGlob(baseDirectory, filePath, normalized));
194
+ }
195
+ function literalPrefix(pattern) {
196
+ const index = pattern.search(/[*]/);
197
+ const prefix = index === -1 ? pattern : pattern.slice(0, index);
198
+ const slash = prefix.lastIndexOf('/');
199
+ return slash === -1 ? '.' : prefix.slice(0, slash);
200
+ }
201
+ async function walkFiles(root) {
202
+ const stat = await safeStat(root);
203
+ if (!stat)
204
+ return [];
205
+ if (stat.isFile())
206
+ return [root];
207
+ if (!stat.isDirectory())
208
+ return [];
209
+ const results = [];
210
+ const entries = await fs.readdir(root, { withFileTypes: true });
211
+ for (const entry of entries) {
212
+ if (entry.isSymbolicLink() || entry.name === '.git')
213
+ continue;
214
+ const entryPath = path.join(root, entry.name);
215
+ if (entry.isDirectory()) {
216
+ results.push(...(await walkFiles(entryPath)));
217
+ continue;
218
+ }
219
+ if (entry.isFile())
220
+ results.push(entryPath);
221
+ }
222
+ return results;
223
+ }
224
+ function matchesSimpleGlob(baseDirectory, filePath, pattern) {
225
+ const relative = relativePath(baseDirectory, filePath);
226
+ if (pattern.endsWith('/**/*.md')) {
227
+ const prefix = pattern.slice(0, -'/**/*.md'.length);
228
+ return relative.startsWith(`${prefix}/`) && relative.endsWith('.md');
229
+ }
230
+ if (pattern.endsWith('/**')) {
231
+ const prefix = pattern.slice(0, -'/**'.length);
232
+ return relative.startsWith(`${prefix}/`);
233
+ }
234
+ if (pattern === '**/*.md')
235
+ return relative.endsWith('.md');
236
+ if (pattern.endsWith('/*')) {
237
+ const prefix = pattern.slice(0, -'/*'.length);
238
+ return relative.startsWith(`${prefix}/`) && !relative.slice(prefix.length + 1).includes('/');
239
+ }
240
+ return relative === pattern;
241
+ }
242
+ function rankFiles(files, query) {
243
+ const normalized = query?.trim().toLowerCase();
244
+ if (!normalized)
245
+ return files;
246
+ return [...files].sort((left, right) => {
247
+ const leftScore = left.toLowerCase().includes(normalized) ? 0 : 1;
248
+ const rightScore = right.toLowerCase().includes(normalized) ? 0 : 1;
249
+ return leftScore - rightScore || left.localeCompare(right);
250
+ });
251
+ }
252
+ async function isReadableFile(filePath) {
253
+ const stat = await safeStat(filePath);
254
+ return Boolean(stat?.isFile());
255
+ }
256
+ async function safeStat(filePath) {
257
+ try {
258
+ return await fs.lstat(filePath);
259
+ }
260
+ catch {
261
+ return null;
262
+ }
263
+ }
264
+ function isSafeChild(baseDirectory, candidate) {
265
+ const relative = path.relative(baseDirectory, candidate);
266
+ return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));
267
+ }
268
+ function relativePath(baseDirectory, filePath) {
269
+ return path.relative(baseDirectory, filePath).split(path.sep).join('/');
270
+ }
271
+ function searchSnippet(body, query) {
272
+ if (Buffer.byteLength(body, 'utf8') <= MAX_SEARCH_SNIPPET_BYTES)
273
+ return body;
274
+ const normalizedQuery = query.trim().toLowerCase();
275
+ const normalizedBody = body.toLowerCase();
276
+ const matchIndex = normalizedQuery ? normalizedBody.indexOf(normalizedQuery) : -1;
277
+ const center = matchIndex >= 0 ? matchIndex : 0;
278
+ const radius = Math.floor(MAX_SEARCH_SNIPPET_BYTES / 2);
279
+ const start = Math.max(0, center - radius);
280
+ const end = Math.min(body.length, start + MAX_SEARCH_SNIPPET_BYTES);
281
+ const prefix = start > 0 ? '...\n' : '';
282
+ const suffix = end < body.length ? '\n...' : '';
283
+ let snippet = `${prefix}${body.slice(start, end).trim()}${suffix}`;
284
+ while (Buffer.byteLength(snippet, 'utf8') > MAX_SEARCH_SNIPPET_BYTES && snippet.length > 0) {
285
+ snippet = snippet.slice(0, -1);
286
+ }
287
+ return snippet;
288
+ }
289
+ function runGit(args, cwd) {
290
+ return runCommand('git', args, cwd);
291
+ }
292
+ function runCommand(command, args, cwd) {
293
+ return new Promise((resolve, reject) => {
294
+ execFile(command, args, { cwd }, (error, stdout, stderr) => {
295
+ if (error) {
296
+ reject(new Error(`${command} ${args.join(' ')} failed\n${stderr || stdout}`.trim()));
297
+ return;
298
+ }
299
+ resolve({ stdout, stderr });
300
+ });
301
+ });
302
+ }
303
+ function slugify(value) {
304
+ return (value
305
+ .toLowerCase()
306
+ .replace(/[^a-z0-9]+/g, '-')
307
+ .replace(/^-+|-+$/g, '')
308
+ .slice(0, 60) || 'context-update');
309
+ }
310
+ function singleLine(value) {
311
+ return value.replace(/\s+/g, ' ').trim();
312
+ }
313
+ //# sourceMappingURL=github-repo-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-repo-provider.js","sourceRoot":"","sources":["../../src/context-providers/github-repo-provider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/context-providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAEpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAOzD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,8BAA8B,GACvC,sBAAsB,GAAG,SAAS,CAEpC;AAED,wBAAgB,6BAA6B,IAAI,MAAM,EAAE,CAExD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/context-providers/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAGpF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AASzD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,8BAA8B,GACvC,sBAAsB,GAAG,SAAS,CAEpC;AAED,wBAAgB,6BAA6B,IAAI,MAAM,EAAE,CAExD"}
@@ -1,6 +1,7 @@
1
+ import { githubRepoProviderAdapter } from './github-repo-provider.js';
1
2
  import { repoDocsProviderAdapter } from './repo-docs-provider.js';
2
3
  import { viewportVaultProviderAdapter } from './viewport-vault-provider.js';
3
- const ADAPTERS = new Map([repoDocsProviderAdapter, viewportVaultProviderAdapter].map((adapter) => [adapter.kind, adapter]));
4
+ const ADAPTERS = new Map([repoDocsProviderAdapter, viewportVaultProviderAdapter, githubRepoProviderAdapter].map((adapter) => [adapter.kind, adapter]));
4
5
  export function contextProviderAdapterFor(provider) {
5
6
  return ADAPTERS.get(provider.provider);
6
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/context-providers/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,CAAC,uBAAuB,EAAE,4BAA4B,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAClG,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,QAAwC;IAExC,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/context-providers/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,QAAQ,GAAG,IAAI,GAAG,CACtB,CAAC,uBAAuB,EAAE,4BAA4B,EAAE,yBAAyB,CAAC,CAAC,GAAG,CACpF,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CACrC,CACF,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,QAAwC;IAExC,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC"}
@@ -43,6 +43,10 @@ export type ContextProviderProposeInput = {
43
43
  export type ContextProviderProposeResult = {
44
44
  candidate_id: string;
45
45
  payload_digest: string;
46
+ status?: string;
47
+ pull_request_url?: string;
48
+ branch?: string;
49
+ source?: string;
46
50
  };
47
51
  export interface ContextProviderAdapter {
48
52
  kind: SessionContextProviderManifest['provider'];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context-providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAEpF,MAAM,MAAM,0BAA0B,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,CAAC;AAE7E,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,8BAA8B,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAAG;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,8BAA8B,CAAC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,0BAA0B,CAAC;IACvC,WAAW,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,8BAA8B,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,8BAA8B,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACjF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IACrF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,OAAO,CAAC,4BAA4B,CAAC,CAAC;CACzF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/context-providers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAEpF,MAAM,MAAM,0BAA0B,GAAG,UAAU,GAAG,MAAM,GAAG,aAAa,CAAC;AAE7E,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,EAAE,8BAA8B,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAAG;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,8BAA8B,CAAC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,0BAA0B,CAAC;IACvC,WAAW,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,8BAA8B,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,8BAA8B,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACjF,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC;IACrF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,OAAO,CAAC,4BAA4B,CAAC,CAAC;CACzF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viewportai/daemon",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Viewport daemon — supervision and orchestration layer for AI coding agents",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -104,7 +104,7 @@
104
104
  "properties": {
105
105
  "id": { "type": "string", "minLength": 1, "maxLength": 128 },
106
106
  "provider": {
107
- "enum": ["repo-docs", "viewport-vault", "notebooklm", "glean", "custom-cli", "custom-mcp"]
107
+ "enum": ["repo-docs", "viewport-vault", "github-repo", "notebooklm", "glean", "custom-cli", "custom-mcp"]
108
108
  },
109
109
  "required": { "type": "boolean" },
110
110
  "privacy": {
@@ -123,6 +123,10 @@
123
123
  "items": { "type": "string", "minLength": 1, "maxLength": 512 }
124
124
  },
125
125
  "vault": { "type": "string", "minLength": 1, "maxLength": 256 },
126
+ "repo": { "type": "string", "minLength": 1, "maxLength": 512 },
127
+ "remote": { "type": "string", "minLength": 1, "maxLength": 512 },
128
+ "ref": { "type": "string", "minLength": 1, "maxLength": 128 },
129
+ "branch": { "type": "string", "minLength": 1, "maxLength": 128 },
126
130
  "notebook": { "type": "string", "minLength": 1, "maxLength": 256 },
127
131
  "command": { "type": "string", "minLength": 1, "maxLength": 512 }
128
132
  },