@synctek/forgeos 2.0.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +386 -0
  3. package/dist/cli/commands/analyze.d.ts +14 -0
  4. package/dist/cli/commands/analyze.d.ts.map +1 -0
  5. package/dist/cli/commands/analyze.js +94 -0
  6. package/dist/cli/commands/analyze.js.map +1 -0
  7. package/dist/cli/commands/build.d.ts +11 -0
  8. package/dist/cli/commands/build.d.ts.map +1 -0
  9. package/dist/cli/commands/build.js +86 -0
  10. package/dist/cli/commands/build.js.map +1 -0
  11. package/dist/cli/commands/changeset.d.ts +13 -0
  12. package/dist/cli/commands/changeset.d.ts.map +1 -0
  13. package/dist/cli/commands/changeset.js +174 -0
  14. package/dist/cli/commands/changeset.js.map +1 -0
  15. package/dist/cli/commands/evidence.d.ts +12 -0
  16. package/dist/cli/commands/evidence.d.ts.map +1 -0
  17. package/dist/cli/commands/evidence.js +94 -0
  18. package/dist/cli/commands/evidence.js.map +1 -0
  19. package/dist/cli/commands/federation.d.ts +13 -0
  20. package/dist/cli/commands/federation.d.ts.map +1 -0
  21. package/dist/cli/commands/federation.js +127 -0
  22. package/dist/cli/commands/federation.js.map +1 -0
  23. package/dist/cli/commands/gate.d.ts +15 -0
  24. package/dist/cli/commands/gate.d.ts.map +1 -0
  25. package/dist/cli/commands/gate.js +178 -0
  26. package/dist/cli/commands/gate.js.map +1 -0
  27. package/dist/cli/commands/initiative.d.ts +13 -0
  28. package/dist/cli/commands/initiative.d.ts.map +1 -0
  29. package/dist/cli/commands/initiative.js +130 -0
  30. package/dist/cli/commands/initiative.js.map +1 -0
  31. package/dist/cli/commands/mind.d.ts +16 -0
  32. package/dist/cli/commands/mind.d.ts.map +1 -0
  33. package/dist/cli/commands/mind.js +139 -0
  34. package/dist/cli/commands/mind.js.map +1 -0
  35. package/dist/cli/commands/outcome.d.ts +12 -0
  36. package/dist/cli/commands/outcome.d.ts.map +1 -0
  37. package/dist/cli/commands/outcome.js +85 -0
  38. package/dist/cli/commands/outcome.js.map +1 -0
  39. package/dist/cli/commands/project.d.ts +13 -0
  40. package/dist/cli/commands/project.d.ts.map +1 -0
  41. package/dist/cli/commands/project.js +128 -0
  42. package/dist/cli/commands/project.js.map +1 -0
  43. package/dist/cli/commands/review.d.ts +15 -0
  44. package/dist/cli/commands/review.d.ts.map +1 -0
  45. package/dist/cli/commands/review.js +167 -0
  46. package/dist/cli/commands/review.js.map +1 -0
  47. package/dist/cli/commands/score.d.ts +17 -0
  48. package/dist/cli/commands/score.d.ts.map +1 -0
  49. package/dist/cli/commands/score.js +168 -0
  50. package/dist/cli/commands/score.js.map +1 -0
  51. package/dist/cli/commands/session.d.ts +13 -0
  52. package/dist/cli/commands/session.d.ts.map +1 -0
  53. package/dist/cli/commands/session.js +133 -0
  54. package/dist/cli/commands/session.js.map +1 -0
  55. package/dist/cli/commands/trust.d.ts +16 -0
  56. package/dist/cli/commands/trust.d.ts.map +1 -0
  57. package/dist/cli/commands/trust.js +261 -0
  58. package/dist/cli/commands/trust.js.map +1 -0
  59. package/dist/cli/index.d.ts +19 -0
  60. package/dist/cli/index.d.ts.map +1 -0
  61. package/dist/cli/index.js +99 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/cli/output.d.ts +48 -0
  64. package/dist/cli/output.d.ts.map +1 -0
  65. package/dist/cli/output.js +139 -0
  66. package/dist/cli/output.js.map +1 -0
  67. package/dist/client.d.ts +46 -0
  68. package/dist/client.d.ts.map +1 -0
  69. package/dist/client.js +146 -0
  70. package/dist/client.js.map +1 -0
  71. package/dist/handlers.d.ts +11 -0
  72. package/dist/handlers.d.ts.map +1 -0
  73. package/dist/handlers.js +424 -0
  74. package/dist/handlers.js.map +1 -0
  75. package/dist/http-server.d.ts +25 -0
  76. package/dist/http-server.d.ts.map +1 -0
  77. package/dist/http-server.js +246 -0
  78. package/dist/http-server.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +40 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/mcp/handlers.d.ts +11 -0
  84. package/dist/mcp/handlers.d.ts.map +1 -0
  85. package/dist/mcp/handlers.js +553 -0
  86. package/dist/mcp/handlers.js.map +1 -0
  87. package/dist/mcp/http-server.d.ts +25 -0
  88. package/dist/mcp/http-server.d.ts.map +1 -0
  89. package/dist/mcp/http-server.js +246 -0
  90. package/dist/mcp/http-server.js.map +1 -0
  91. package/dist/mcp/index.d.ts +3 -0
  92. package/dist/mcp/index.d.ts.map +1 -0
  93. package/dist/mcp/index.js +40 -0
  94. package/dist/mcp/index.js.map +1 -0
  95. package/dist/mcp/tools.d.ts +944 -0
  96. package/dist/mcp/tools.d.ts.map +1 -0
  97. package/dist/mcp/tools.js +531 -0
  98. package/dist/mcp/tools.js.map +1 -0
  99. package/dist/shared/client.d.ts +59 -0
  100. package/dist/shared/client.d.ts.map +1 -0
  101. package/dist/shared/client.js +171 -0
  102. package/dist/shared/client.js.map +1 -0
  103. package/dist/shared/errors.d.ts +25 -0
  104. package/dist/shared/errors.d.ts.map +1 -0
  105. package/dist/shared/errors.js +44 -0
  106. package/dist/shared/errors.js.map +1 -0
  107. package/dist/shared/types.d.ts +111 -0
  108. package/dist/shared/types.d.ts.map +1 -0
  109. package/dist/shared/types.js +10 -0
  110. package/dist/shared/types.js.map +1 -0
  111. package/dist/tools.d.ts +944 -0
  112. package/dist/tools.d.ts.map +1 -0
  113. package/dist/tools.js +513 -0
  114. package/dist/tools.js.map +1 -0
  115. package/dist/trust/chain.d.ts +86 -0
  116. package/dist/trust/chain.d.ts.map +1 -0
  117. package/dist/trust/chain.js +176 -0
  118. package/dist/trust/chain.js.map +1 -0
  119. package/dist/trust/git-binding.d.ts +61 -0
  120. package/dist/trust/git-binding.d.ts.map +1 -0
  121. package/dist/trust/git-binding.js +133 -0
  122. package/dist/trust/git-binding.js.map +1 -0
  123. package/dist/trust/index.d.ts +20 -0
  124. package/dist/trust/index.d.ts.map +1 -0
  125. package/dist/trust/index.js +17 -0
  126. package/dist/trust/index.js.map +1 -0
  127. package/dist/trust/ledger.d.ts +144 -0
  128. package/dist/trust/ledger.d.ts.map +1 -0
  129. package/dist/trust/ledger.js +351 -0
  130. package/dist/trust/ledger.js.map +1 -0
  131. package/dist/trust/signing.d.ts +134 -0
  132. package/dist/trust/signing.d.ts.map +1 -0
  133. package/dist/trust/signing.js +249 -0
  134. package/dist/trust/signing.js.map +1 -0
  135. package/dist/trust/transmission.d.ts +129 -0
  136. package/dist/trust/transmission.d.ts.map +1 -0
  137. package/dist/trust/transmission.js +390 -0
  138. package/dist/trust/transmission.js.map +1 -0
  139. package/dist/types.d.ts +183 -0
  140. package/dist/types.d.ts.map +1 -0
  141. package/dist/types.js +3 -0
  142. package/dist/types.js.map +1 -0
  143. package/package.json +61 -0
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Shareable metadata transmission for the ForgeOS Trust Ledger.
3
+ *
4
+ * Controls exactly what leaves the developer's machine.
5
+ *
6
+ * Design is fail-closed: any privacy violation raises rather than returning
7
+ * a partial payload. New fields added to the ledger schema are automatically
8
+ * excluded until explicitly added to TRANSMITTABLE_FIELDS.
9
+ *
10
+ * Binary-compatible with the Python transmission.py implementation:
11
+ * - Same TRANSMITTABLE_FIELDS allowlist
12
+ * - Same sensitive pattern regexes (adapted for JavaScript RegExp)
13
+ * - Same transmission payload structure
14
+ * - Same manifest format (both box-drawing and plain-text versions)
15
+ *
16
+ * Privacy model (architecture §7.1):
17
+ * - LOCAL_ONLY_FIELDS (signature, source_tree_hash) are NEVER transmitted.
18
+ * - TRANSMITTABLE_FIELDS is the explicit allowlist. Any field not in this
19
+ * list is stripped. New fields are automatically excluded.
20
+ * - The privacy filter validates before transmission and raises
21
+ * PrivacyViolationError on any sensitive pattern match.
22
+ *
23
+ * Transmission log:
24
+ * Every attempt (approved or rejected) is appended to
25
+ * .forgeos/transmissions.log as a JSON line.
26
+ */
27
+ import { createHash } from 'crypto';
28
+ import { existsSync, appendFileSync, readFileSync } from 'fs';
29
+ import { join } from 'path';
30
+ import { pythonJsonDumps } from './chain.js';
31
+ // ------------------------------------------------------------------
32
+ // Constants
33
+ // ------------------------------------------------------------------
34
+ /**
35
+ * Explicit allowlist: only these top-level fields may appear in a
36
+ * transmitted payload. Matches Python's TRANSMITTABLE_FIELDS exactly.
37
+ */
38
+ export const TRANSMITTABLE_FIELDS = new Set([
39
+ 'seq',
40
+ 'timestamp',
41
+ 'entry_type',
42
+ 'payload_hash',
43
+ 'chain_hash',
44
+ 'schema_version',
45
+ ]);
46
+ /**
47
+ * Fields that are local-only and must be stripped before transmission.
48
+ * Matches Python's LOCAL_ONLY_FIELDS.
49
+ */
50
+ export const LOCAL_ONLY_FIELDS = new Set(['signature', 'source_tree_hash']);
51
+ /**
52
+ * Sensitive patterns — matches Python's _SENSITIVE_PATTERNS.
53
+ *
54
+ * Python patterns adapted to JavaScript RegExp:
55
+ * r"(^|[/\\])(home|Users)[/\\]" → /(^|[/\\])(home|Users)[/\\]/i
56
+ * r"^[A-Za-z]:[/\\]" → /^[A-Za-z]:[/\\]/
57
+ * r"(password|secret|token|api[_-]?key)\s*[:=]" (case insensitive)
58
+ * r"def\s+\w+\s*\(" → /def\s+\w+\s*\(/
59
+ * r"import\s+\w+" → /import\s+\w+/
60
+ */
61
+ const SENSITIVE_PATTERNS = [
62
+ /(^|[/\\])(home|Users)[/\\]/i, // Absolute path (macOS/Linux)
63
+ /^[A-Za-z]:[/\\]/, // Windows absolute path
64
+ /(password|secret|token|api[_-]?key)\s*[:=]/i, // Credentials
65
+ /def\s+\w+\s*\(/, // Python function definition
66
+ /import\s+\w+/, // Python import statement
67
+ ];
68
+ /** Default fallback endpoint if config.toml is missing. */
69
+ const DEFAULT_ALLOWED_ENDPOINTS = [
70
+ 'https://api.forgeos.synctek.io/api/trust/submit',
71
+ ];
72
+ // ------------------------------------------------------------------
73
+ // Exceptions
74
+ // ------------------------------------------------------------------
75
+ export class TransmissionError extends Error {
76
+ constructor(message) {
77
+ super(message);
78
+ this.name = 'TransmissionError';
79
+ }
80
+ }
81
+ export class PrivacyViolationError extends TransmissionError {
82
+ constructor(message) {
83
+ super(message);
84
+ this.name = 'PrivacyViolationError';
85
+ }
86
+ }
87
+ // ------------------------------------------------------------------
88
+ // Privacy filter
89
+ // ------------------------------------------------------------------
90
+ /**
91
+ * Build a transmission payload from a list of ledger entries.
92
+ *
93
+ * Strips all LOCAL_ONLY_FIELDS and any fields not in TRANSMITTABLE_FIELDS.
94
+ * Runs a paranoia check for sensitive patterns in the resulting payload.
95
+ *
96
+ * Matches Python's prepare_transmission() exactly.
97
+ *
98
+ * @param entries - List of ledger entry dicts.
99
+ * @param fieldsToShare - Optional additional field names beyond TRANSMITTABLE_FIELDS.
100
+ * @returns Filtered payload dict suitable for transmission.
101
+ * @throws PrivacyViolationError if any value matches a sensitive pattern.
102
+ */
103
+ export function prepareTransmission(entries, fieldsToShare) {
104
+ const allowed = new Set(TRANSMITTABLE_FIELDS);
105
+ if (fieldsToShare) {
106
+ for (const f of fieldsToShare) {
107
+ allowed.add(f);
108
+ }
109
+ }
110
+ const filteredEntries = [];
111
+ for (const entry of entries) {
112
+ const filtered = {};
113
+ const entryObj = entry;
114
+ for (const field of allowed) {
115
+ if (field in entryObj) {
116
+ filtered[field] = entryObj[field];
117
+ }
118
+ }
119
+ filteredEntries.push(filtered);
120
+ }
121
+ const payload = {
122
+ schema_version: '1.0',
123
+ transmitted_at: new Date().toISOString(),
124
+ entry_count: filteredEntries.length,
125
+ entries: filteredEntries,
126
+ };
127
+ assertNoSensitiveFields(payload);
128
+ return payload;
129
+ }
130
+ /**
131
+ * Walk every string value in the payload and raise on any sensitive pattern match.
132
+ *
133
+ * Matches Python's _assert_no_sensitive_fields() — fail-closed.
134
+ *
135
+ * @throws PrivacyViolationError on first match found.
136
+ */
137
+ function assertNoSensitiveFields(payload) {
138
+ for (const [path, value] of walkValues(payload)) {
139
+ if (typeof value !== 'string')
140
+ continue;
141
+ for (const pattern of SENSITIVE_PATTERNS) {
142
+ if (pattern.test(value)) {
143
+ throw new PrivacyViolationError(`Sensitive pattern '${pattern.source}' found at field path '${path}': ${JSON.stringify(value.substring(0, 80))}. Transmission blocked.`);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ /**
149
+ * Recursively yield [path, value] pairs from a nested dict/list.
150
+ * Matches Python's _walk_values().
151
+ */
152
+ function walkValues(obj, path = '') {
153
+ const results = [];
154
+ if (obj !== null && typeof obj === 'object') {
155
+ if (Array.isArray(obj)) {
156
+ for (let i = 0; i < obj.length; i++) {
157
+ results.push(...walkValues(obj[i], `${path}[${i}]`));
158
+ }
159
+ }
160
+ else {
161
+ for (const [k, v] of Object.entries(obj)) {
162
+ const childPath = path ? `${path}.${k}` : k;
163
+ results.push(...walkValues(v, childPath));
164
+ }
165
+ }
166
+ }
167
+ else {
168
+ results.push([path, obj]);
169
+ }
170
+ return results;
171
+ }
172
+ /**
173
+ * Detect sensitive content in a string. Returns matching pattern sources.
174
+ *
175
+ * Convenience function for callers that want to pre-screen values.
176
+ */
177
+ export function detectSensitiveContent(text) {
178
+ return SENSITIVE_PATTERNS
179
+ .filter(p => p.test(text))
180
+ .map(p => p.source);
181
+ }
182
+ // ------------------------------------------------------------------
183
+ // Manifest generation
184
+ // ------------------------------------------------------------------
185
+ /**
186
+ * Generate a box-drawing manifest of what will be transmitted.
187
+ *
188
+ * Matches Python's generate_manifest() box-drawing format exactly.
189
+ *
190
+ * @param transmissionData - Filtered payload from prepareTransmission().
191
+ * @param destination - Target URL the data will be sent to.
192
+ * @returns Multiline string suitable for printing to a terminal.
193
+ */
194
+ export function generateManifest(transmissionData, destination) {
195
+ const entryCount = transmissionData.entry_count ?? 0;
196
+ const transmittedAt = transmissionData.transmitted_at ?? 'unknown';
197
+ const payloadJson = pythonJsonDumps(transmissionData);
198
+ const payloadHash = createHash('sha256')
199
+ .update(payloadJson, 'utf8')
200
+ .digest('hex')
201
+ .substring(0, 16);
202
+ const lines = [
203
+ '',
204
+ '┌─────────────────────────────────────────────────────────────────┐',
205
+ '│ ForgeOS — Trust Data Transmission Preview │',
206
+ '├─────────────────────────────────────────────────────────────────┤',
207
+ `│ Destination : ${destination.substring(0, 49).padEnd(49)}│`,
208
+ `│ Entries : ${String(entryCount).padEnd(49)}│`,
209
+ `│ Prepared at : ${transmittedAt.substring(0, 49).padEnd(49)}│`,
210
+ `│ Payload hash : ${payloadHash.padEnd(49)}│`,
211
+ '├─────────────────────────────────────────────────────────────────┤',
212
+ '│ Fields included in this transmission: │',
213
+ ];
214
+ // List transmitted field names (sorted)
215
+ for (const field of [...TRANSMITTABLE_FIELDS].sort()) {
216
+ lines.push(`│ • ${field.padEnd(60)}│`);
217
+ }
218
+ lines.push('├─────────────────────────────────────────────────────────────────┤', '│ Fields EXCLUDED (never transmitted): │', '│ • signature (Ed25519 key material) │', '│ • source_tree_hash (local path binding) │', '│ • full payload dict (analysis internals) │', '└─────────────────────────────────────────────────────────────────┘', '');
219
+ return lines.join('\n');
220
+ }
221
+ /**
222
+ * Generate a plain-text (no box-drawing) manifest for non-TTY output.
223
+ *
224
+ * Matches Python's generate_plain_manifest() exactly.
225
+ */
226
+ export function generatePlainManifest(transmissionData, destination) {
227
+ const entryCount = transmissionData.entry_count ?? 0;
228
+ const transmittedAt = transmissionData.transmitted_at ?? 'unknown';
229
+ const fields = [...TRANSMITTABLE_FIELDS].sort().join(', ');
230
+ return ('\nForgeOS Trust Data Transmission Preview\n' +
231
+ '----------------------------------------\n' +
232
+ `Destination : ${destination}\n` +
233
+ `Entries : ${entryCount}\n` +
234
+ `Prepared at : ${transmittedAt}\n` +
235
+ `Fields : ${fields}\n` +
236
+ 'Excluded : signature, source_tree_hash, full payload\n' +
237
+ '----------------------------------------\n');
238
+ }
239
+ /**
240
+ * Append a transmission record to .forgeos/transmissions.log.
241
+ *
242
+ * Append-only log — every attempt is recorded whether approved,
243
+ * rejected, or errored. Matches Python's _log_transmission().
244
+ */
245
+ export function logTransmission(projectPath, approved, autoConfirmed, payloadHash, destination, httpStatus = null, error = null) {
246
+ const logPath = join(projectPath, '.forgeos', 'transmissions.log');
247
+ const record = {
248
+ timestamp: new Date().toISOString(),
249
+ approved,
250
+ auto_confirmed: autoConfirmed,
251
+ payload_hash: payloadHash,
252
+ destination,
253
+ http_status: httpStatus,
254
+ error,
255
+ };
256
+ try {
257
+ // Match Python's json.dumps(record, ensure_ascii=False, sort_keys=True)
258
+ const line = pythonJsonDumps(record);
259
+ appendFileSync(logPath, line + '\n', 'utf8');
260
+ }
261
+ catch {
262
+ // Transmission logging failure must not prevent the result from being returned.
263
+ }
264
+ }
265
+ // ------------------------------------------------------------------
266
+ // HTTP transmission (stdlib fetch, no external deps)
267
+ // ------------------------------------------------------------------
268
+ /**
269
+ * Load allowed endpoints from .forgeos/config.toml.
270
+ *
271
+ * Falls back to DEFAULT_ALLOWED_ENDPOINTS if the config file is missing
272
+ * or unreadable. Uses simple regex parsing (no TOML library dependency).
273
+ */
274
+ export function loadAllowedEndpoints(projectPath) {
275
+ const configPath = join(projectPath, '.forgeos', 'config.toml');
276
+ if (!existsSync(configPath)) {
277
+ return [...DEFAULT_ALLOWED_ENDPOINTS];
278
+ }
279
+ try {
280
+ const content = readFileSync(configPath, 'utf8');
281
+ // Extract allowed_endpoints array from [transmission] section
282
+ // Simple line-by-line parser — avoids TOML library dependency
283
+ const endpoints = [];
284
+ let inTransmissionSection = false;
285
+ let inArray = false;
286
+ for (const line of content.split('\n')) {
287
+ const trimmed = line.trim();
288
+ if (trimmed === '[transmission]') {
289
+ inTransmissionSection = true;
290
+ continue;
291
+ }
292
+ if (trimmed.startsWith('[') && trimmed !== '[transmission]') {
293
+ inTransmissionSection = false;
294
+ inArray = false;
295
+ continue;
296
+ }
297
+ if (!inTransmissionSection)
298
+ continue;
299
+ if (trimmed.startsWith('allowed_endpoints')) {
300
+ inArray = true;
301
+ // Check for inline array: allowed_endpoints = ["url"]
302
+ const inlineMatch = trimmed.match(/allowed_endpoints\s*=\s*\[([^\]]*)\]/);
303
+ if (inlineMatch) {
304
+ const items = inlineMatch[1].match(/"([^"]+)"/g);
305
+ if (items) {
306
+ endpoints.push(...items.map(s => s.replace(/"/g, '')));
307
+ }
308
+ inArray = false;
309
+ }
310
+ continue;
311
+ }
312
+ if (inArray) {
313
+ if (trimmed === ']') {
314
+ inArray = false;
315
+ continue;
316
+ }
317
+ const urlMatch = trimmed.match(/^"([^"]+)"/);
318
+ if (urlMatch) {
319
+ endpoints.push(urlMatch[1]);
320
+ }
321
+ }
322
+ }
323
+ return endpoints.length > 0 ? endpoints : [...DEFAULT_ALLOWED_ENDPOINTS];
324
+ }
325
+ catch {
326
+ return [...DEFAULT_ALLOWED_ENDPOINTS];
327
+ }
328
+ }
329
+ /**
330
+ * Send a transmission payload to a ForgeOS Trust API endpoint.
331
+ *
332
+ * Checks the URL against the allowed endpoints list.
333
+ * Returns a TransmissionResult; all errors are caught and returned as status='error'.
334
+ *
335
+ * @param url - Target endpoint URL (must be HTTPS).
336
+ * @param data - Filtered payload from prepareTransmission().
337
+ * @param projectPath - Project root for config and logging.
338
+ * @param noConfirm - Skip interactive confirmation.
339
+ * @returns TransmissionResult.
340
+ * @throws TransmissionError if the URL is not in the allowed list.
341
+ */
342
+ export async function sendTransmission(url, data, projectPath, noConfirm = false) {
343
+ // Endpoint allowlist check
344
+ const allowed = loadAllowedEndpoints(projectPath);
345
+ if (!allowed.includes(url)) {
346
+ throw new TransmissionError(`Endpoint '${url}' is not in the allowed endpoints list. ` +
347
+ `Add it to .forgeos/config.toml under [transmission] allowed_endpoints to permit this destination.`);
348
+ }
349
+ if (!url.startsWith('https://')) {
350
+ throw new TransmissionError(`Refusing to transmit over non-HTTPS URL: ${JSON.stringify(url)}`);
351
+ }
352
+ const payloadJson = pythonJsonDumps(data);
353
+ const payloadHash = createHash('sha256').update(payloadJson, 'utf8').digest('hex');
354
+ try {
355
+ const response = await fetch(url, {
356
+ method: 'POST',
357
+ headers: {
358
+ 'Content-Type': 'application/json',
359
+ 'User-Agent': 'forgeos-cli/1.0',
360
+ },
361
+ body: payloadJson,
362
+ signal: AbortSignal.timeout(30_000),
363
+ });
364
+ let responseBody = null;
365
+ try {
366
+ responseBody = (await response.json());
367
+ }
368
+ catch {
369
+ responseBody = null;
370
+ }
371
+ logTransmission(projectPath, true, noConfirm, payloadHash, url, response.status);
372
+ return {
373
+ status: 'sent',
374
+ http_status: response.status,
375
+ response_body: responseBody,
376
+ payload_hash: payloadHash,
377
+ };
378
+ }
379
+ catch (exc) {
380
+ const errorMessage = exc instanceof Error ? exc.message : String(exc);
381
+ logTransmission(projectPath, true, noConfirm, payloadHash, url, null, errorMessage);
382
+ return {
383
+ status: 'error',
384
+ http_status: null,
385
+ response_body: null,
386
+ payload_hash: payloadHash,
387
+ };
388
+ }
389
+ }
390
+ //# sourceMappingURL=transmission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transmission.js","sourceRoot":"","sources":["../../src/trust/transmission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ export interface Session {
2
+ id: string;
3
+ developer_id: string;
4
+ project_id: string;
5
+ initiative_id: string | null;
6
+ started_at: string;
7
+ ended_at: string | null;
8
+ status: string;
9
+ tasks: Task[];
10
+ }
11
+ export interface Task {
12
+ id: string;
13
+ session_id: string;
14
+ project_id: string;
15
+ description: string;
16
+ initiative_id: string | null;
17
+ changeset_id: string | null;
18
+ status: string;
19
+ current_gate: string | null;
20
+ created_at: string;
21
+ completed_at: string | null;
22
+ }
23
+ export interface Initiative {
24
+ id: string;
25
+ title: string;
26
+ description: string;
27
+ priority: string;
28
+ status: string;
29
+ project_id: string;
30
+ created_at: string;
31
+ }
32
+ export interface RiskProfile {
33
+ changeset_id: string;
34
+ score: number;
35
+ categories_triggered: string[];
36
+ required_roles: string[];
37
+ required_evidence: string[];
38
+ required_gates: string[];
39
+ computed_at: string;
40
+ }
41
+ export interface ChangeSet {
42
+ id: string;
43
+ initiative_id: string;
44
+ project_id: string;
45
+ description: string;
46
+ files_changed: string[];
47
+ modules_affected: string[];
48
+ status: string;
49
+ created_at: string;
50
+ }
51
+ export interface ReviewFinding {
52
+ category: string;
53
+ severity: string;
54
+ observation: string;
55
+ recommendation: string | null;
56
+ }
57
+ export interface Profile {
58
+ role: string;
59
+ system_prompt: string;
60
+ extended_prompt: string;
61
+ output_format: string;
62
+ checklist: Array<{
63
+ gate: string;
64
+ role_responsible: boolean;
65
+ required_evidence: string[];
66
+ }>;
67
+ severity_levels: string[];
68
+ verdict_options: string[];
69
+ shared_mind_context?: {
70
+ patterns: string[];
71
+ anti_patterns: string[];
72
+ fix_recipes: Array<{
73
+ problem: string;
74
+ solution: string;
75
+ }>;
76
+ past_regressions: Array<{
77
+ modules: string[];
78
+ description: string;
79
+ }>;
80
+ past_gate_failures: Array<{
81
+ gate: string;
82
+ reason: string;
83
+ }>;
84
+ quality_warnings: Array<{
85
+ severity: string;
86
+ category: string;
87
+ message: string;
88
+ }>;
89
+ };
90
+ focus_areas?: string[];
91
+ }
92
+ export interface GatePipeline {
93
+ changeset_id: string;
94
+ project_id: string;
95
+ current_gate: string;
96
+ gates: GateStatus[];
97
+ risk_score: number;
98
+ created_at: string;
99
+ }
100
+ export interface GateStatus {
101
+ gate_id: string;
102
+ gate_name: string;
103
+ order: number;
104
+ status: string;
105
+ required_evidence: string[];
106
+ provided_evidence: string[];
107
+ required_roles: string[];
108
+ completed_roles: string[];
109
+ promoted_at: string | null;
110
+ promoted_by: string | null;
111
+ rejection_reason: string | null;
112
+ }
113
+ export interface ReleaseCheck {
114
+ can_release: boolean;
115
+ pending_gates: string[];
116
+ failed_gates: string[];
117
+ passed_gates: string[];
118
+ skipped_gates: string[];
119
+ }
120
+ export interface WorkflowState {
121
+ initiative_id: string;
122
+ initiative: Initiative;
123
+ changesets: Array<{
124
+ changeset: ChangeSet;
125
+ risk_profile: RiskProfile;
126
+ current_gate: string | null;
127
+ can_release: boolean;
128
+ missing_evidence: string[];
129
+ missing_roles: string[];
130
+ blockers: string[];
131
+ }>;
132
+ current_step: string;
133
+ next_actions: Array<{
134
+ action: string;
135
+ tool: string;
136
+ description: string;
137
+ }>;
138
+ progress: {
139
+ gates_total: number;
140
+ gates_passed: number;
141
+ gates_pending: number;
142
+ percent_complete: number;
143
+ };
144
+ }
145
+ export interface BootstrapResponse {
146
+ session: Session;
147
+ project: Record<string, unknown>;
148
+ active_initiatives: Array<{
149
+ id: string;
150
+ title: string;
151
+ priority: string;
152
+ status: string;
153
+ created_at: string;
154
+ }>;
155
+ pending_changesets: Array<{
156
+ changeset: ChangeSet;
157
+ risk_profile: RiskProfile;
158
+ pipeline_summary: {
159
+ current_gate: string;
160
+ pending_gates: string[];
161
+ passed_gates: string[];
162
+ };
163
+ }>;
164
+ shared_mind_stats: Record<string, unknown>;
165
+ governance: {
166
+ gate_definitions: Array<Record<string, unknown>>;
167
+ quality_roles: string[];
168
+ evidence_types: string[];
169
+ risk_categories: string[];
170
+ risk_thresholds: Record<string, string>;
171
+ };
172
+ runbook: {
173
+ workflow_steps: Array<{
174
+ step: number;
175
+ name: string;
176
+ tool: string | null;
177
+ description: string;
178
+ }>;
179
+ review_protocol: string;
180
+ rules: string[];
181
+ };
182
+ }
183
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,EAAE,OAAO,CAAC;QAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC,CAAC;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,CAAC,EAAE;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,WAAW,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC1D,gBAAgB,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACpE,kBAAkB,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC5D,gBAAgB,EAAE,KAAK,CAAC;YACtB,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC;SACjB,CAAC,CAAC;KACJ,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,KAAK,CAAC;QAChB,SAAS,EAAE,SAAS,CAAC;QACrB,YAAY,EAAE,WAAW,CAAC;QAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,WAAW,EAAE,OAAO,CAAC;QACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC,CAAC;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,KAAK,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,kBAAkB,EAAE,KAAK,CAAC;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,kBAAkB,EAAE,KAAK,CAAC;QACxB,SAAS,EAAE,SAAS,CAAC;QACrB,YAAY,EAAE,WAAW,CAAC;QAC1B,gBAAgB,EAAE;YAChB,YAAY,EAAE,MAAM,CAAC;YACrB,aAAa,EAAE,MAAM,EAAE,CAAC;YACxB,YAAY,EAAE,MAAM,EAAE,CAAC;SACxB,CAAC;KACH,CAAC,CAAC;IACH,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,UAAU,EAAE;QACV,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACjD,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACzC,CAAC;IACF,OAAO,EAAE;QACP,cAAc,EAAE,KAAK,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;YACpB,WAAW,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,eAAe,EAAE,MAAM,CAAC;QACxB,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // Engine response types
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,wBAAwB"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "@synctek/forgeos",
3
+ "version": "2.0.0",
4
+ "description": "ForgeOS - AI Governance Platform CLI & MCP Server",
5
+ "type": "module",
6
+ "main": "dist/mcp/index.js",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "LICENSE"
11
+ ],
12
+ "bin": {
13
+ "forge": "dist/cli/index.js",
14
+ "forgeos-mcp": "dist/mcp/index.js",
15
+ "forgeos-mcp-http": "dist/mcp/http-server.js"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc -p .",
19
+ "start": "node dist/mcp/index.js",
20
+ "start:http": "node dist/mcp/http-server.js",
21
+ "dev": "tsx src/mcp/index.ts",
22
+ "dev:http": "tsx src/mcp/http-server.ts"
23
+ },
24
+ "dependencies": {
25
+ "@hono/node-server": "^1.19.9",
26
+ "@modelcontextprotocol/sdk": "^1.26.0",
27
+ "commander": "^12.1.0",
28
+ "hono": "^4.12.1",
29
+ "zod": "^4.3.6"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^25.2.1",
33
+ "tsx": "^4.21.0",
34
+ "typescript": "^5.9.3"
35
+ },
36
+ "keywords": [
37
+ "mcp",
38
+ "forgeos",
39
+ "governance",
40
+ "claude",
41
+ "ai-agent",
42
+ "synctek",
43
+ "model-context-protocol"
44
+ ],
45
+ "author": "Synctek <hello@synctek.io>",
46
+ "license": "MIT",
47
+ "homepage": "https://synctek.io/forgeos",
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "https://github.com/synctek/forgeos-mcp"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/synctek/forgeos-mcp/issues"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public"
57
+ },
58
+ "engines": {
59
+ "node": ">=18.0.0"
60
+ }
61
+ }