graphlin 0.1.2 → 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 (102) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/README.md +12 -3
  4. package/docs/decision-service.md +393 -0
  5. package/docs/extension-authoring.md +553 -0
  6. package/docs/model-api.md +293 -0
  7. package/docs/usage.md +465 -0
  8. package/docs/visualizer-views.md +199 -0
  9. package/node_modules/@vscode/tree-sitter-wasm/LICENSE +21 -0
  10. package/node_modules/@vscode/tree-sitter-wasm/README.md +36 -0
  11. package/node_modules/@vscode/tree-sitter-wasm/SECURITY.md +41 -0
  12. package/node_modules/@vscode/tree-sitter-wasm/cgmanifest.json +16 -0
  13. package/node_modules/@vscode/tree-sitter-wasm/package.json +42 -0
  14. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-bash.wasm +0 -0
  15. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-c-sharp.wasm +0 -0
  16. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-cpp.wasm +0 -0
  17. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-css.wasm +0 -0
  18. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-go.wasm +0 -0
  19. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-ini.wasm +0 -0
  20. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-java.wasm +0 -0
  21. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-javascript.wasm +0 -0
  22. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-php.wasm +0 -0
  23. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-powershell.wasm +0 -0
  24. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-python.wasm +0 -0
  25. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-regex.wasm +0 -0
  26. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-ruby.wasm +0 -0
  27. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-rust.wasm +0 -0
  28. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-tsx.wasm +0 -0
  29. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-typescript.wasm +0 -0
  30. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter.js +4075 -0
  31. package/node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter.wasm +0 -0
  32. package/node_modules/@vscode/tree-sitter-wasm/wasm/web-tree-sitter.d.ts +1027 -0
  33. package/package.json +74 -9
  34. package/plugin.json +4 -2
  35. package/runtime/core/evidence.mjs +43 -9
  36. package/runtime/core/graph.mjs +11 -6
  37. package/runtime/core/privacy.mjs +1 -0
  38. package/runtime/daemon/auth.mjs +7 -3
  39. package/runtime/daemon/diagnostics.mjs +1 -1
  40. package/runtime/daemon/extension-api.mjs +203 -0
  41. package/runtime/daemon/lineage.mjs +70 -0
  42. package/runtime/daemon/manager.mjs +9 -6
  43. package/runtime/daemon/model-api.mjs +728 -0
  44. package/runtime/daemon/model-persistence.mjs +220 -0
  45. package/runtime/daemon/server.mjs +70 -12
  46. package/runtime/daemon/settings.mjs +11 -3
  47. package/runtime/decisions/broker.mjs +349 -0
  48. package/runtime/decisions/contracts.mjs +179 -0
  49. package/runtime/decisions/evaluation.mjs +305 -0
  50. package/runtime/decisions/faults.mjs +32 -0
  51. package/runtime/decisions/index.mjs +818 -0
  52. package/runtime/decisions/profiles.mjs +93 -0
  53. package/runtime/decisions/questions.mjs +268 -0
  54. package/runtime/discovery/index.mjs +2 -0
  55. package/runtime/discovery/inventory.mjs +160 -0
  56. package/runtime/discovery/parser.mjs +40 -0
  57. package/runtime/discovery/structure.mjs +232 -0
  58. package/runtime/extensions/contracts.mjs +59 -0
  59. package/runtime/extensions/frame.mjs +64 -0
  60. package/runtime/extensions/index.mjs +9 -0
  61. package/runtime/extensions/manifest.mjs +95 -0
  62. package/runtime/extensions/packages.mjs +222 -0
  63. package/runtime/extensions/profiles.mjs +36 -0
  64. package/runtime/extensions/projection.mjs +130 -0
  65. package/runtime/extensions/registry.mjs +285 -0
  66. package/runtime/extensions/scene.mjs +105 -0
  67. package/runtime/extensions/sdk.d.ts +205 -0
  68. package/runtime/extensions/sdk.mjs +88 -0
  69. package/runtime/jev/index.mjs +13 -777
  70. package/runtime/jev/provider.mjs +101 -0
  71. package/runtime/jev/questions.mjs +16 -258
  72. package/runtime/jev/wire.mjs +17 -25
  73. package/runtime/model/changes.mjs +42 -0
  74. package/runtime/model/history.mjs +124 -0
  75. package/runtime/model/index.mjs +2 -0
  76. package/runtime/model/project-model.mjs +889 -0
  77. package/runtime/model/records.mjs +239 -0
  78. package/runtime/pipeline.mjs +127 -48
  79. package/runtime/platform.mjs +254 -0
  80. package/runtime/visualizers/blocks.mjs +5 -0
  81. package/runtime/visualizers/c4.mjs +52 -0
  82. package/runtime/visualizers/changes.mjs +24 -0
  83. package/runtime/visualizers/code.mjs +5 -0
  84. package/runtime/visualizers/index.mjs +23 -0
  85. package/runtime/visualizers/structure.mjs +120 -0
  86. package/runtime/visualizers/timeline.mjs +66 -0
  87. package/runtime/web/app.js +369 -86
  88. package/runtime/web/extension-frame.js +128 -0
  89. package/runtime/web/index.html +123 -80
  90. package/runtime/web/model-client.js +162 -0
  91. package/runtime/web/platform.js +337 -0
  92. package/runtime/web/scene.js +111 -0
  93. package/runtime/web/style.css +152 -142
  94. package/schemas/graph.schema.json +4 -1
  95. package/scripts/arguments.mjs +5 -1
  96. package/scripts/build-packages.mjs +6 -2
  97. package/scripts/control.mjs +1 -1
  98. package/scripts/daemon.mjs +2 -1
  99. package/scripts/extensions.mjs +44 -0
  100. package/scripts/graphlin.mjs +23 -3
  101. package/scripts/onboarding.mjs +10 -3
  102. package/scripts/validate-packages.mjs +54 -8
@@ -33,9 +33,10 @@ function validateRuntime() {
33
33
  }
34
34
 
35
35
  function validateExisting(current, options) {
36
- const { allowSource, persistEvidence, displayEvidence } = resolvePolicy(options, { current: current.policy });
36
+ const { allowSource, localSource, persistEvidence, displayEvidence } = resolvePolicy(options, { current: current.policy });
37
37
  const { mode = 'live', port = 0 } = options;
38
38
  if (current.mode !== mode || current.policy.transmitSource !== Boolean(allowSource) ||
39
+ current.policy.readSource !== Boolean(allowSource || localSource) ||
39
40
  current.policy.persistEvidence !== Boolean(persistEvidence) ||
40
41
  current.policy.displayEvidence !== Boolean(displayEvidence)) throw runtimeError('policy_restart_required');
41
42
  if (port && port !== current.port) throw runtimeError('port_restart_required');
@@ -90,11 +91,11 @@ async function stopInstance(paths, instanceId) {
90
91
  * instance closes or the caller aborts. Abort never stops a replacement owner.
91
92
  */
92
93
  export async function runForeground({ projectRoot, dataDir = defaultDataDir(), signal,
93
- allowSource, persistEvidence, displayEvidence, mode = 'live', port = 0 } = {}, onReady = () => {}) {
94
+ allowSource, localSource, persistEvidence, displayEvidence, mode = 'live', port = 0 } = {}, onReady = () => {}) {
94
95
  validateRuntime();
95
96
  if (signal?.aborted) return;
96
97
  const paths = await projectPaths(projectRoot, dataDir);
97
- const options = { allowSource, persistEvidence, displayEvidence, mode, port };
98
+ const options = { allowSource, localSource, persistEvidence, displayEvidence, mode, port };
98
99
  let server, launch, interrupted;
99
100
  const interruption = new Promise(resolve => { interrupted = resolve; });
100
101
  const interrupt = () => interrupted();
@@ -110,7 +111,8 @@ export async function runForeground({ projectRoot, dataDir = defaultDataDir(), s
110
111
  const demo = mode === 'demo' ? await import('./demo.mjs') : null;
111
112
  try {
112
113
  server = await startServer({ projectRoot: paths.projectRoot, dataDir: paths.dataDir, mode, port,
113
- policy: { transmitSource: policy.allowSource, persistEvidence: policy.persistEvidence,
114
+ policy: { readSource: Boolean(policy.localSource || policy.allowSource),
115
+ transmitSource: policy.allowSource, persistEvidence: policy.persistEvidence,
114
116
  displayEvidence: policy.displayEvidence },
115
117
  apiKey: policy.allowSource ? process.env.TYPESAFE_API_KEY ?? settings.apiKey : undefined,
116
118
  decisionService: demo?.demoDecisionService() });
@@ -155,11 +157,11 @@ export async function runForeground({ projectRoot, dataDir = defaultDataDir(), s
155
157
  // Detached operation is reserved for an explicit CLI --background request or
156
158
  // MCP. The normal interactive CLI uses runForeground instead.
157
159
  export async function startDaemon({ projectRoot, dataDir = defaultDataDir(), background = true,
158
- allowSource, persistEvidence, displayEvidence, mode = 'live', port = 0 } = {}) {
160
+ allowSource, localSource, persistEvidence, displayEvidence, mode = 'live', port = 0 } = {}) {
159
161
  validateRuntime();
160
162
  if (background !== true) throw runtimeError('background_required');
161
163
  const paths = await projectPaths(projectRoot, dataDir);
162
- const options = { allowSource, persistEvidence, displayEvidence, mode, port };
164
+ const options = { allowSource, localSource, persistEvidence, displayEvidence, mode, port };
163
165
  const existing = await daemonStatus({ projectRoot: paths.projectRoot, dataDir: paths.dataDir });
164
166
  if (existing.running) return { ...await existingLaunch(paths, existing, options), foreground: false };
165
167
  const settings = mode === 'demo' ? {} : await readSettings(paths);
@@ -167,6 +169,7 @@ export async function startDaemon({ projectRoot, dataDir = defaultDataDir(), bac
167
169
  await projectPaths(projectRoot, dataDir, { create: true });
168
170
  const args = [worker, '--project', paths.projectRoot, '--data-dir', paths.dataDir, '--mode', mode, '--port', String(port)];
169
171
  if (policy.allowSource) args.push('--allow-source');
172
+ else if (policy.localSource) args.push('--local-source');
170
173
  if (policy.persistEvidence) args.push('--persist-evidence');
171
174
  if (!policy.displayEvidence) args.push('--no-display-evidence');
172
175
  const env = { ...process.env };