@jterrats/open-orchestra 1.0.16 → 1.0.18

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 (313) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/CLAUDE.md +25 -2
  3. package/README.md +32 -9
  4. package/dist/active-runtime-store.d.ts +18 -0
  5. package/dist/active-runtime-store.js +75 -0
  6. package/dist/active-runtime-store.js.map +1 -0
  7. package/dist/benchmark.js +65 -27
  8. package/dist/benchmark.js.map +1 -1
  9. package/dist/chat-api-errors.d.ts +7 -0
  10. package/dist/chat-api-errors.js +15 -0
  11. package/dist/chat-api-errors.js.map +1 -0
  12. package/dist/chat-api-message-persistence.d.ts +12 -0
  13. package/dist/chat-api-message-persistence.js +125 -0
  14. package/dist/chat-api-message-persistence.js.map +1 -0
  15. package/dist/chat-api-records.d.ts +35 -0
  16. package/dist/chat-api-records.js +94 -0
  17. package/dist/chat-api-records.js.map +1 -0
  18. package/dist/chat-api-service.d.ts +32 -0
  19. package/dist/chat-api-service.js +120 -0
  20. package/dist/chat-api-service.js.map +1 -0
  21. package/dist/chat-api-storage.d.ts +1 -0
  22. package/dist/chat-api-storage.js +14 -0
  23. package/dist/chat-api-storage.js.map +1 -0
  24. package/dist/chat-api-types.d.ts +81 -0
  25. package/dist/chat-api-types.js +2 -0
  26. package/dist/chat-api-types.js.map +1 -0
  27. package/dist/chat-compliance-service.d.ts +60 -0
  28. package/dist/chat-compliance-service.js +241 -0
  29. package/dist/chat-compliance-service.js.map +1 -0
  30. package/dist/chat-event-stream.d.ts +13 -0
  31. package/dist/chat-event-stream.js +124 -0
  32. package/dist/chat-event-stream.js.map +1 -0
  33. package/dist/chat-pagination.d.ts +6 -0
  34. package/dist/chat-pagination.js +64 -0
  35. package/dist/chat-pagination.js.map +1 -0
  36. package/dist/chat-storage-actor-validation.d.ts +4 -0
  37. package/dist/chat-storage-actor-validation.js +65 -0
  38. package/dist/chat-storage-actor-validation.js.map +1 -0
  39. package/dist/chat-storage-content-policy.d.ts +6 -0
  40. package/dist/chat-storage-content-policy.js +84 -0
  41. package/dist/chat-storage-content-policy.js.map +1 -0
  42. package/dist/chat-storage-errors.d.ts +20 -0
  43. package/dist/chat-storage-errors.js +17 -0
  44. package/dist/chat-storage-errors.js.map +1 -0
  45. package/dist/chat-storage-local-files.d.ts +17 -0
  46. package/dist/chat-storage-local-files.js +78 -0
  47. package/dist/chat-storage-local-files.js.map +1 -0
  48. package/dist/chat-storage-local-paths.d.ts +6 -0
  49. package/dist/chat-storage-local-paths.js +124 -0
  50. package/dist/chat-storage-local-paths.js.map +1 -0
  51. package/dist/chat-storage-local-projection.d.ts +10 -0
  52. package/dist/chat-storage-local-projection.js +55 -0
  53. package/dist/chat-storage-local-projection.js.map +1 -0
  54. package/dist/chat-storage-local-records.d.ts +13 -0
  55. package/dist/chat-storage-local-records.js +56 -0
  56. package/dist/chat-storage-local-records.js.map +1 -0
  57. package/dist/chat-storage-local.d.ts +6 -0
  58. package/dist/chat-storage-local.js +114 -0
  59. package/dist/chat-storage-local.js.map +1 -0
  60. package/dist/chat-storage-validation.d.ts +10 -0
  61. package/dist/chat-storage-validation.js +100 -0
  62. package/dist/chat-storage-validation.js.map +1 -0
  63. package/dist/chat-storage.d.ts +16 -0
  64. package/dist/chat-storage.js +4 -0
  65. package/dist/chat-storage.js.map +1 -0
  66. package/dist/chat-workflow-timeline.d.ts +17 -0
  67. package/dist/chat-workflow-timeline.js +210 -0
  68. package/dist/chat-workflow-timeline.js.map +1 -0
  69. package/dist/{workspace-claude-settings.d.ts → claude-settings.d.ts} +22 -3
  70. package/dist/{workspace-claude-settings.js → claude-settings.js} +28 -9
  71. package/dist/claude-settings.js.map +1 -0
  72. package/dist/command-init.d.ts +2 -0
  73. package/dist/command-init.js +150 -0
  74. package/dist/command-init.js.map +1 -0
  75. package/dist/command-manifest.js +1 -1
  76. package/dist/command-manifest.js.map +1 -1
  77. package/dist/commands.d.ts +1 -1
  78. package/dist/commands.js +1 -140
  79. package/dist/commands.js.map +1 -1
  80. package/dist/constants.d.ts +1 -0
  81. package/dist/constants.js +1 -0
  82. package/dist/constants.js.map +1 -1
  83. package/dist/context-runtime-preprocessor.d.ts +41 -0
  84. package/dist/context-runtime-preprocessor.js +199 -0
  85. package/dist/context-runtime-preprocessor.js.map +1 -0
  86. package/dist/cursor-settings.d.ts +25 -0
  87. package/dist/cursor-settings.js +72 -0
  88. package/dist/cursor-settings.js.map +1 -0
  89. package/dist/health-commands.js +43 -3
  90. package/dist/health-commands.js.map +1 -1
  91. package/dist/metrics-commands.js +3 -0
  92. package/dist/metrics-commands.js.map +1 -1
  93. package/dist/model-aliases.d.ts +5 -0
  94. package/dist/model-aliases.js +37 -0
  95. package/dist/model-aliases.js.map +1 -0
  96. package/dist/ollama-provider.js +25 -0
  97. package/dist/ollama-provider.js.map +1 -1
  98. package/dist/phase-playbooks.js +11 -0
  99. package/dist/phase-playbooks.js.map +1 -1
  100. package/dist/provider-agent-wrapper.js +14 -0
  101. package/dist/provider-agent-wrapper.js.map +1 -1
  102. package/dist/runtime-adapters.js +56 -0
  103. package/dist/runtime-adapters.js.map +1 -1
  104. package/dist/runtime-bootstrap.js +34 -11
  105. package/dist/runtime-bootstrap.js.map +1 -1
  106. package/dist/runtime-capacity-policy.d.ts +38 -0
  107. package/dist/runtime-capacity-policy.js +117 -0
  108. package/dist/runtime-capacity-policy.js.map +1 -0
  109. package/dist/runtime-capacity-scheduler-helpers.d.ts +40 -0
  110. package/dist/runtime-capacity-scheduler-helpers.js +111 -0
  111. package/dist/runtime-capacity-scheduler-helpers.js.map +1 -0
  112. package/dist/runtime-capacity-scheduler-state.d.ts +44 -0
  113. package/dist/runtime-capacity-scheduler-state.js +128 -0
  114. package/dist/runtime-capacity-scheduler-state.js.map +1 -0
  115. package/dist/runtime-capacity-scheduler.d.ts +34 -0
  116. package/dist/runtime-capacity-scheduler.js +193 -0
  117. package/dist/runtime-capacity-scheduler.js.map +1 -0
  118. package/dist/runtime-capacity-snapshot.d.ts +14 -0
  119. package/dist/runtime-capacity-snapshot.js +87 -0
  120. package/dist/runtime-capacity-snapshot.js.map +1 -0
  121. package/dist/runtime-child-prompt.d.ts +2 -1
  122. package/dist/runtime-child-prompt.js +12 -1
  123. package/dist/runtime-child-prompt.js.map +1 -1
  124. package/dist/runtime-claude-native-bridge.js +2 -1
  125. package/dist/runtime-claude-native-bridge.js.map +1 -1
  126. package/dist/runtime-commands.js +6 -0
  127. package/dist/runtime-commands.js.map +1 -1
  128. package/dist/runtime-context-manifest.d.ts +4 -1
  129. package/dist/runtime-context-manifest.js +59 -3
  130. package/dist/runtime-context-manifest.js.map +1 -1
  131. package/dist/runtime-execution-adapters.js +19 -0
  132. package/dist/runtime-execution-adapters.js.map +1 -1
  133. package/dist/runtime-execution-renderer.js +4 -0
  134. package/dist/runtime-execution-renderer.js.map +1 -1
  135. package/dist/runtime-execution.js +13 -82
  136. package/dist/runtime-execution.js.map +1 -1
  137. package/dist/runtime-hooks.d.ts +46 -0
  138. package/dist/runtime-hooks.js +95 -0
  139. package/dist/runtime-hooks.js.map +1 -0
  140. package/dist/runtime-lifecycle-watch.d.ts +5 -2
  141. package/dist/runtime-lifecycle-watch.js +19 -3
  142. package/dist/runtime-lifecycle-watch.js.map +1 -1
  143. package/dist/runtime-load-balancer.d.ts +12 -0
  144. package/dist/runtime-load-balancer.js +106 -0
  145. package/dist/runtime-load-balancer.js.map +1 -0
  146. package/dist/runtime-parent-actions.js +5 -0
  147. package/dist/runtime-parent-actions.js.map +1 -1
  148. package/dist/runtime-spawn-bridge.js +24 -0
  149. package/dist/runtime-spawn-bridge.js.map +1 -1
  150. package/dist/runtime-spawn-guidance.js +15 -46
  151. package/dist/runtime-spawn-guidance.js.map +1 -1
  152. package/dist/runtime-worker-registry.d.ts +19 -0
  153. package/dist/runtime-worker-registry.js +84 -0
  154. package/dist/runtime-worker-registry.js.map +1 -0
  155. package/dist/security/chat-guardrail-policy.d.ts +7 -0
  156. package/dist/security/chat-guardrail-policy.js +61 -0
  157. package/dist/security/chat-guardrail-policy.js.map +1 -0
  158. package/dist/security/chat-guardrail-types.d.ts +65 -0
  159. package/dist/security/chat-guardrail-types.js +2 -0
  160. package/dist/security/chat-guardrail-types.js.map +1 -0
  161. package/dist/security/chat-guardrail-validation.d.ts +9 -0
  162. package/dist/security/chat-guardrail-validation.js +64 -0
  163. package/dist/security/chat-guardrail-validation.js.map +1 -0
  164. package/dist/security/chat-guardrails.d.ts +3 -0
  165. package/dist/security/chat-guardrails.js +136 -0
  166. package/dist/security/chat-guardrails.js.map +1 -0
  167. package/dist/security/content-classifier.d.ts +2 -0
  168. package/dist/security/content-classifier.js +179 -0
  169. package/dist/security/content-classifier.js.map +1 -0
  170. package/dist/security/operation-contract-types.d.ts +28 -0
  171. package/dist/security/operation-contract-types.js +2 -0
  172. package/dist/security/operation-contract-types.js.map +1 -0
  173. package/dist/security/operation-contract.d.ts +2 -0
  174. package/dist/security/operation-contract.js +169 -0
  175. package/dist/security/operation-contract.js.map +1 -0
  176. package/dist/security/payment-card-detection.d.ts +3 -0
  177. package/dist/security/payment-card-detection.js +48 -0
  178. package/dist/security/payment-card-detection.js.map +1 -0
  179. package/dist/security/policy-engine.d.ts +2 -0
  180. package/dist/security/policy-engine.js +142 -0
  181. package/dist/security/policy-engine.js.map +1 -0
  182. package/dist/security/policy-types.d.ts +79 -0
  183. package/dist/security/policy-types.js +7 -0
  184. package/dist/security/policy-types.js.map +1 -0
  185. package/dist/security/prompt-intake.d.ts +13 -0
  186. package/dist/security/prompt-intake.js +33 -0
  187. package/dist/security/prompt-intake.js.map +1 -0
  188. package/dist/security/provider-egress-policy.d.ts +27 -0
  189. package/dist/security/provider-egress-policy.js +72 -0
  190. package/dist/security/provider-egress-policy.js.map +1 -0
  191. package/dist/security/public-api-auth.d.ts +20 -0
  192. package/dist/security/public-api-auth.js +55 -0
  193. package/dist/security/public-api-auth.js.map +1 -0
  194. package/dist/security/public-api-policy.d.ts +8 -0
  195. package/dist/security/public-api-policy.js +40 -0
  196. package/dist/security/public-api-policy.js.map +1 -0
  197. package/dist/security/redaction.d.ts +3 -0
  198. package/dist/security/redaction.js +95 -0
  199. package/dist/security/redaction.js.map +1 -0
  200. package/dist/security/restricted-content-quarantine.d.ts +17 -0
  201. package/dist/security/restricted-content-quarantine.js +50 -0
  202. package/dist/security/restricted-content-quarantine.js.map +1 -0
  203. package/dist/security/restricted-data-classifier.d.ts +9 -0
  204. package/dist/security/restricted-data-classifier.js +254 -0
  205. package/dist/security/restricted-data-classifier.js.map +1 -0
  206. package/dist/security/sink-encoding.d.ts +6 -0
  207. package/dist/security/sink-encoding.js +40 -0
  208. package/dist/security/sink-encoding.js.map +1 -0
  209. package/dist/skills-render.js +7 -14
  210. package/dist/skills-render.js.map +1 -1
  211. package/dist/sprint-commands.js +33 -22
  212. package/dist/sprint-commands.js.map +1 -1
  213. package/dist/telemetry-redaction.d.ts +2 -0
  214. package/dist/telemetry-redaction.js +25 -2
  215. package/dist/telemetry-redaction.js.map +1 -1
  216. package/dist/transcription-failures.d.ts +2 -0
  217. package/dist/transcription-failures.js +4 -0
  218. package/dist/transcription-failures.js.map +1 -0
  219. package/dist/transcription-media-preflight.d.ts +9 -0
  220. package/dist/transcription-media-preflight.js +147 -0
  221. package/dist/transcription-media-preflight.js.map +1 -0
  222. package/dist/transcription-request.d.ts +13 -0
  223. package/dist/transcription-request.js +150 -0
  224. package/dist/transcription-request.js.map +1 -0
  225. package/dist/transcription-source-policy.d.ts +4 -0
  226. package/dist/transcription-source-policy.js +43 -0
  227. package/dist/transcription-source-policy.js.map +1 -0
  228. package/dist/transcription-types.d.ts +161 -0
  229. package/dist/transcription-types.js +2 -0
  230. package/dist/transcription-types.js.map +1 -0
  231. package/dist/types/chat.d.ts +203 -0
  232. package/dist/types/chat.js +10 -0
  233. package/dist/types/chat.js.map +1 -0
  234. package/dist/types/model-config.d.ts +4 -0
  235. package/dist/types/public-api.d.ts +75 -0
  236. package/dist/types/public-api.js +2 -0
  237. package/dist/types/public-api.js.map +1 -0
  238. package/dist/types/restricted-data.d.ts +69 -0
  239. package/dist/types/restricted-data.js +8 -0
  240. package/dist/types/restricted-data.js.map +1 -0
  241. package/dist/types/restricted-fragment.d.ts +82 -0
  242. package/dist/types/restricted-fragment.js +14 -0
  243. package/dist/types/restricted-fragment.js.map +1 -0
  244. package/dist/types/runtime.d.ts +159 -0
  245. package/dist/types.d.ts +9 -1
  246. package/dist/types.js +1 -0
  247. package/dist/types.js.map +1 -1
  248. package/dist/web-api.js +24 -0
  249. package/dist/web-api.js.map +1 -1
  250. package/dist/web-artifact-parsers.d.ts +6 -0
  251. package/dist/web-artifact-parsers.js +244 -0
  252. package/dist/web-artifact-parsers.js.map +1 -0
  253. package/dist/web-artifact-types.d.ts +76 -0
  254. package/dist/web-artifact-types.js +2 -0
  255. package/dist/web-artifact-types.js.map +1 -0
  256. package/dist/web-artifacts.d.ts +2 -43
  257. package/dist/web-artifacts.js +73 -58
  258. package/dist/web-artifacts.js.map +1 -1
  259. package/dist/web-chat-route-inputs.d.ts +11 -0
  260. package/dist/web-chat-route-inputs.js +156 -0
  261. package/dist/web-chat-route-inputs.js.map +1 -0
  262. package/dist/web-chat-routes.d.ts +7 -0
  263. package/dist/web-chat-routes.js +213 -0
  264. package/dist/web-chat-routes.js.map +1 -0
  265. package/dist/web-console/assets/index-CJup1cIA.css +1 -0
  266. package/dist/web-console/assets/index-CVDOfipu.js +11 -0
  267. package/dist/web-console/index.html +2 -2
  268. package/dist/web-evidence.d.ts +1 -1
  269. package/dist/web-evidence.js +9 -2
  270. package/dist/web-evidence.js.map +1 -1
  271. package/dist/web-public-route-inputs.d.ts +14 -0
  272. package/dist/web-public-route-inputs.js +136 -0
  273. package/dist/web-public-route-inputs.js.map +1 -0
  274. package/dist/web-public-routes.d.ts +6 -0
  275. package/dist/web-public-routes.js +194 -0
  276. package/dist/web-public-routes.js.map +1 -0
  277. package/dist/web-public-service.d.ts +16 -0
  278. package/dist/web-public-service.js +154 -0
  279. package/dist/web-public-service.js.map +1 -0
  280. package/dist/workflow-phase-planner.js +5 -3
  281. package/dist/workflow-phase-planner.js.map +1 -1
  282. package/dist/workflow-phases.js +5 -0
  283. package/dist/workflow-phases.js.map +1 -1
  284. package/dist/workflow-run-commands.js +89 -10
  285. package/dist/workflow-run-commands.js.map +1 -1
  286. package/dist/workflow-services.js +5 -0
  287. package/dist/workflow-services.js.map +1 -1
  288. package/dist/workspace-runtime-bootstrap.js +15 -4
  289. package/dist/workspace-runtime-bootstrap.js.map +1 -1
  290. package/docs/audio-video-transcription-skill.md +102 -70
  291. package/docs/chat-audit-retention.md +76 -0
  292. package/docs/chat-provider-provenance-ledger.md +75 -0
  293. package/docs/context-runtime-preprocessing.md +37 -0
  294. package/docs/orchestra-mvp.md +8 -2
  295. package/docs/public-api-contract.md +43 -0
  296. package/docs/release-test-matrix.md +14 -14
  297. package/docs/restricted-fragment-storage-contract.md +147 -0
  298. package/docs/runtime-adapters.md +47 -7
  299. package/docs/runtime-capacity.md +57 -0
  300. package/docs/security-saas-orchestrator.md +368 -0
  301. package/docs/site-manifest.json +128 -30
  302. package/package.json +5 -2
  303. package/site/dist/_headers +9 -0
  304. package/site/dist/_redirects +2 -0
  305. package/site/dist/architecture.mmd +61 -0
  306. package/site/dist/assets/index-Bi8l6tCE.js +10 -0
  307. package/site/dist/assets/index-BsCLqY__.css +1 -0
  308. package/site/dist/favicon.svg +19 -0
  309. package/site/dist/index.html +28 -0
  310. package/site/package.json +19 -0
  311. package/dist/web-console/assets/index-BHs7OIv8.css +0 -1
  312. package/dist/web-console/assets/index-BJuVTqfQ.js +0 -11
  313. package/dist/workspace-claude-settings.js.map +0 -1
@@ -0,0 +1,368 @@
1
+ # SaaS And Orchestrator Security Definition
2
+
3
+ ## Purpose
4
+
5
+ Open Orchestra is local-first workflow orchestration for humans and agent
6
+ runtimes. The CLI owns the current source of truth in `.agent-workflow/`; the
7
+ web console, runtime adapters, provider-backed phases, tracker integrations, and
8
+ future SaaS surfaces must preserve that local trust model instead of turning
9
+ agent automation into an implicit privileged service.
10
+
11
+ This document defines the baseline security model for the local CLI and the
12
+ future SaaS orchestrator. It intentionally avoids secrets, tenant identifiers,
13
+ private hosts, and production endpoints.
14
+
15
+ ## Security Objectives
16
+
17
+ - Keep local repositories, workflow state, secrets, and evidence under explicit
18
+ user or tenant control.
19
+ - Treat prompts, issues, comments, model output, uploaded artifacts, generated
20
+ plans, tool metadata, and runtime handoffs as untrusted input.
21
+ - Fail closed for cross-tenant access, secret exposure, unsafe writes, shell
22
+ execution, provider policy violations, and evidence integrity failures.
23
+ - Make every privileged action reviewable through role gates, policy decisions,
24
+ and evidence records.
25
+ - Support offline local development without weakening the SaaS security posture.
26
+
27
+ ## System View
28
+
29
+ ```mermaid
30
+ flowchart LR
31
+ human["Human operator"]
32
+ cli["Local CLI"]
33
+ web["Local web console"]
34
+ api["Future SaaS API"]
35
+ workflow["Workflow core"]
36
+ state[".agent-workflow state"]
37
+ workers["SaaS workers"]
38
+ runtimes["Agent runtimes"]
39
+ tools["MCP and local tools"]
40
+ providers["Model providers"]
41
+ trackers["GitHub, Sonar, trackers"]
42
+ storage["Tenant storage and evidence ledger"]
43
+
44
+ human --> cli
45
+ human --> web
46
+ web --> cli
47
+ cli --> workflow
48
+ workflow --> state
49
+ workflow --> runtimes
50
+ workflow --> tools
51
+ workflow --> providers
52
+ workflow --> trackers
53
+ api --> workers
54
+ workers --> storage
55
+ workers --> providers
56
+ workers --> trackers
57
+ workers --> runtimes
58
+ ```
59
+
60
+ The local CLI remains the default control plane. SaaS components may coordinate,
61
+ store sanitized workflow metadata, and run isolated workers, but they must not
62
+ receive raw secrets, raw repository contents, or direct runtime authority unless
63
+ tenant policy and role gates explicitly allow it.
64
+
65
+ ## Trust Boundaries
66
+
67
+ - Human to CLI: trust the installed CLI binary, local config, and explicit
68
+ flags. Treat terminal input, pasted prompts, and shell environment as
69
+ untrusted. Require argument validation, safe defaults, no secret echo, and
70
+ confirmation before writes outside known workflow paths.
71
+ - CLI to workspace: trust the workspace root and allowlisted
72
+ `.agent-workflow/` paths. Treat user files, symlinks, generated paths, and
73
+ imported archives as untrusted. Require root containment, path traversal
74
+ rejection, symlink escape checks, and dry-run before broad writes.
75
+ - Local web console to CLI/API: trust the loopback-only local service and
76
+ command contracts. Treat browser input, request bodies, and local plugins as
77
+ untrusted. Require CSRF-aware mutations, strict JSON validation, no arbitrary
78
+ command endpoint, and sanitized errors.
79
+ - SaaS API to tenant workers: trust authenticated tenant context and policy.
80
+ Treat requests, uploaded artifacts, and webhook payloads as untrusted.
81
+ Require AuthN/AuthZ, tenant scoping, schema validation, rate limits, audit
82
+ logs, malware scanning, and secret scanning.
83
+ - Tenant to tenant: trust only the current tenant partition. Treat other
84
+ tenants, shared queues, and shared caches as untrusted. Require mandatory
85
+ tenant id in every data access path, row or storage isolation, cache key
86
+ partitioning, and per-tenant encryption context.
87
+ - Workflow core to runtimes: trust the rendered task packet and allowed
88
+ commands. Treat runtime instructions, child agent output, and handoff files as
89
+ untrusted. Require prompt-injection checks, ownership path limits, lifecycle
90
+ attestation, and no provider keys in packets.
91
+ - Runtime to tools/MCP: trust tool registry metadata and approved scopes. Treat
92
+ tool descriptions, tool results, and external MCP servers as untrusted.
93
+ Require tool identity pinning, capability allowlists, OAuth token isolation,
94
+ and output sanitization.
95
+ - Provider-backed phases: trust provider adapter policy and redacted context.
96
+ Treat model outputs and provider errors as untrusted. Require explicit opt-in,
97
+ tenant data policy, prompt and output filtering, cost limits, budget limits,
98
+ and redacted error handling.
99
+ - Trackers and scanners: trust stable adapter contracts. Treat issues,
100
+ comments, scan reports, and CI logs as untrusted. Require remote text to be
101
+ handled as data, redact secrets, and verify webhook signatures when
102
+ applicable.
103
+ - Evidence ledger: trust append-only local or tenant evidence records. Treat
104
+ generated evidence, command logs, screenshots, and runtime claims as
105
+ untrusted. Require hashing, provenance, immutable event ids, reviewer
106
+ sign-off, and tamper-evident summaries.
107
+ - Storage and backups: trust tenant storage service and KMS policy. Treat
108
+ object keys, retained artifacts, and backup restore paths as untrusted.
109
+ Require encryption at rest, retention policy, restore testing, access logs,
110
+ and delete workflows.
111
+
112
+ ## Threat Model
113
+
114
+ - Prompt injection: untrusted text asks an agent to ignore gates, reveal
115
+ secrets, or mutate files. Treat instructions from issues, docs, comments,
116
+ tools, and model output as data; enforce system policy outside the prompt.
117
+ - Indirect prompt injection: a retrieved artifact hides malicious instructions
118
+ in evidence, PDFs, websites, or tool results. Scan and label context sources,
119
+ then strip or quarantine high-risk instruction patterns before runtime
120
+ packets.
121
+ - SQL or NoSQL injection: tenant filters or search queries alter data access.
122
+ Use parameterized queries, typed repositories, schema validation, and tenant
123
+ predicates applied server-side.
124
+ - Command injection: user or model text reaches a shell command. Use
125
+ `execFile` or `spawn` with argument arrays; block shell interpolation and
126
+ `shell: true` unless a reviewed exception exists.
127
+ - SSRF: SaaS workers fetch attacker-controlled internal URLs. Allow only
128
+ `https://` URLs, deny private and metadata address ranges, use egress policy,
129
+ and avoid server-side fetches without approval.
130
+ - Path traversal: generated paths escape the workspace or tenant storage
131
+ prefix. Resolve canonical paths, reject `..` and symlink escapes, and require
132
+ approved roots for secure files.
133
+ - Secrets exfiltration: tokens appear in prompts, evidence, logs, provider
134
+ errors, or artifacts. Load secrets from secret managers or approved local
135
+ files, redact before persistence, and never send secrets to model context.
136
+ - Tenant isolation failure: a request, cache, worker, or artifact crosses tenant
137
+ scope. Require tenant-scoped auth, data access, queue names, cache keys,
138
+ storage prefixes, audit events, and encryption context.
139
+ - Unsafe file writes: runtime or SaaS worker writes outside intended docs,
140
+ workflow, or output paths. Require ownership paths, dry-run previews for broad
141
+ changes, path policy checks, and user approval for sensitive writes.
142
+ - Tool impersonation: a malicious tool mimics a trusted MCP server, scanner, or
143
+ runtime adapter. Pin tool identity, origin, executable path, version, and
144
+ capability manifest; reject writable PATH tool discovery for sensitive tools.
145
+ - Evidence tampering: a runtime edits evidence or claims tests passed without
146
+ proof. Require append-only evidence events, command metadata, hashes for large
147
+ artifacts, reviewer gates, and mismatch detection.
148
+ - Cross-site request forgery: a browser triggers local web console mutations.
149
+ Keep local services loopback-only by default, require mutation tokens or
150
+ same-origin controls, and avoid ambient credentials.
151
+ - Dependency compromise: a package or binary changes behavior after install.
152
+ Pin lockfiles, scan dependencies, verify sensitive binaries from trusted
153
+ paths, and keep dependency updates atomic.
154
+ - Denial of wallet or quota: provider-backed phases consume unexpected tokens,
155
+ jobs, or storage. Enforce per-task and per-tenant budgets, rate limits,
156
+ cancellation, cost evidence, and fail-closed budget handling.
157
+
158
+ ## Secure-By-Default Controls
159
+
160
+ ### Deterministic Policy Engine
161
+
162
+ The orchestration policy engine is a typed domain boundary, not prompt text.
163
+ It should expose one deterministic decision contract used by CLI commands,
164
+ runtime packet rendering, provider requests, tool calls, evidence writes,
165
+ tracker/webhook adapters, and future SaaS workers. Every sensitive operation
166
+ must pass a complete policy subject, action, resource, tenant/workspace scope,
167
+ data classification, and sink before side effects begin. Missing, ambiguous, or
168
+ schema-invalid input denies by default and records a sanitized reason.
169
+
170
+ Recommended module boundaries:
171
+
172
+ - `src/security/policy-types.ts`: discriminated unions for policy subjects,
173
+ actions, resources, sinks, decisions, redaction status, and denial reasons.
174
+ - `src/security/policy-engine.ts`: pure decision engine and rule registry. It
175
+ performs no filesystem, network, shell, provider, or persistence I/O.
176
+ - `src/security/prompt-intake.ts`: deserializes prompt/runtime packets into
177
+ typed segments and classifies each segment as instruction, data, tool input,
178
+ tool output, evidence, provider response, or unknown.
179
+ - `src/security/content-classifier.ts`: deterministic detectors for
180
+ query-like and executable-like strings, prompt-injection patterns, path
181
+ traversal, SSRF candidates, shell metacharacters, SQL/NoSQL-like payloads,
182
+ and secret-shaped values.
183
+ - `src/security/redaction.ts`: redacts restricted values, marks quarantined
184
+ segments, and returns a redaction report before persistence or model reuse.
185
+ - `src/security/sink-encoding.ts`: sink-specific escaping and encoding for
186
+ Markdown, JSON, shell arguments, URLs, HTML/text UI, logs, evidence, and
187
+ provider messages.
188
+ - `src/security/path-policy.ts`, `url-policy.ts`, `command-policy.ts`,
189
+ `tenant-policy.ts`, `tool-policy.ts`, `provider-policy.ts`,
190
+ `evidence-policy.ts`, and `runtime-packet-policy.ts`: focused rule modules
191
+ plugged into the pure engine.
192
+ - Existing adapters such as CLI commands, runtime renderers, provider
193
+ adapters, MCP/tool adapters, and workflow evidence services stay thin: build
194
+ typed policy requests, call the engine, then execute or fail closed.
195
+
196
+ Prompt/content intake pipeline:
197
+
198
+ 1. Deserialize all prompt packets, context packs, tool results, provider
199
+ responses, handoffs, issue text, and evidence snippets with strict schemas.
200
+ Unknown fields and malformed envelopes become `unknown` segments and are not
201
+ forwarded to sensitive sinks.
202
+ 2. Split content into typed segments with provenance, tenant/workspace/task
203
+ scope, source artifact, declared sink, and original byte length.
204
+ 3. Detect query-like strings (`SELECT`, GraphQL-like bodies, JSON filters,
205
+ search expressions), executable-like strings (shell fragments, command
206
+ substitutions, shebangs, PowerShell, SQL/NoSQL mutation verbs), and
207
+ instruction-like text asking agents to ignore policy or reveal secrets.
208
+ 4. Classify each segment as data, instruction, tool input, tool output,
209
+ evidence, provider response, or unknown. Remote text is data by default;
210
+ only trusted system-authored templates may become instruction segments.
211
+ 5. Redact restricted values before persistence, provider calls, logs, telemetry,
212
+ and evidence summaries. Quarantine segments when redaction confidence is
213
+ low, executable intent appears in a data segment, or the destination sink
214
+ cannot safely encode it.
215
+ 6. Encode for the exact sink immediately before use: argument arrays for
216
+ commands, canonicalized `https://` URLs for fetches, JSON string escaping
217
+ for packets, Markdown escaping for handoffs, `textContent`/HTML escaping for
218
+ UI, and provider-message wrapping that labels untrusted text as data.
219
+
220
+ Policy decisions should be append-only evidence inputs with request id, task id,
221
+ actor, action, resource summary, decision (`allow`, `deny`, `requiresApproval`,
222
+ `quarantine`), matched rule ids, redaction status, and sanitized reasons. They
223
+ must not include raw secrets, full prompt bodies, bearer headers, or internal
224
+ stack traces.
225
+
226
+ ### Local CLI
227
+
228
+ - Default to local-only operation; network calls require an explicit command,
229
+ configured adapter, or CI-owned workflow.
230
+ - Keep `.agent-workflow/` as the auditable source of task, decision, evidence,
231
+ review, and release state.
232
+ - Validate workspace roots before writes and reject unsafe roots without
233
+ explicit confirmation.
234
+ - Use typed command contracts and JSON schemas for automation surfaces.
235
+ - Never log secret values, bearer headers, raw provider errors, or raw stack
236
+ traces in user-facing output.
237
+ - Preserve dry-run or evaluate modes for commands that alter config, tokens,
238
+ runtime adapters, generated files, or tracker state.
239
+
240
+ ### Future SaaS API And Web Console
241
+
242
+ - Require tenant-authenticated sessions for every SaaS API request.
243
+ - Enforce authorization server-side; UI role visibility is not authorization.
244
+ - Bind every job, artifact, cache entry, evidence event, and storage object to a
245
+ tenant and workspace.
246
+ - Validate request bodies with narrow schemas and reject unknown mutation fields.
247
+ - Use short-lived worker credentials and scoped service identities.
248
+ - Store only sanitized workflow metadata unless the tenant explicitly enables
249
+ managed artifact storage.
250
+ - Apply tenant retention, deletion, export, and audit policies to every stored
251
+ artifact.
252
+
253
+ ### Workers, Runtimes, And Providers
254
+
255
+ - Run workers with least privilege, no shared mutable workspace, and no default
256
+ access to tenant secrets.
257
+ - Require explicit provider opt-in before direct model API calls.
258
+ - Keep runtime-native delegation packets free of provider credentials and raw
259
+ secret material.
260
+ - Pass bounded, redacted context packets to model providers.
261
+ - Enforce allowed commands, ownership paths, and lifecycle recording for child
262
+ runtime work.
263
+ - Treat model output as suggestions until validated by code review, tests, and
264
+ role gates.
265
+
266
+ ### Tools, MCP, And External Integrations
267
+
268
+ - Require `https://` for remote MCP and integration endpoints.
269
+ - Store OAuth and integration tokens only in tenant secret stores or approved
270
+ local secret paths; never in prompt, evidence, or generated runtime files.
271
+ - Pin sensitive executable discovery to trusted paths and reject tools resolved
272
+ from user-writable PATH entries.
273
+ - Redact tool results before persistence or model reuse.
274
+ - Verify webhook signatures and replay windows before accepting remote events.
275
+ - Keep scanner and tracker adapters narrow: one adapter owns I/O, policy checks,
276
+ retries, and sanitized errors for each integration.
277
+
278
+ ### Evidence Integrity
279
+
280
+ - Record command evidence with command name, exit status, summary, and relevant
281
+ artifact paths, not raw secrets or full logs by default.
282
+ - Use append-only event records for workflow lifecycle, runtime spawn state,
283
+ reviews, and evidence.
284
+ - Hash large evidence artifacts and generated reports when they become release
285
+ inputs.
286
+ - Require QA and Architect review when evidence does not map to acceptance
287
+ criteria or when technical contracts changed.
288
+ - Preserve failed evidence and unresolved risk instead of overwriting it with a
289
+ later passing summary.
290
+
291
+ ## Role Gates
292
+
293
+ - Product readiness: Product Owner and Analyst block when acceptance criteria,
294
+ non-goals, priority, or tenant impact are missing.
295
+ - Architecture readiness: Architect and Security block when boundaries, data
296
+ flow, provider policy, storage ownership, or failure modes are unclear.
297
+ - Security review: Security and Compliance/Privacy block sensitive work when
298
+ auth, secrets, PII, file paths, shell execution, network calls, dependencies,
299
+ TLS, cookies, sessions, CORS, webhooks, tenant isolation, or infrastructure
300
+ are touched without controls.
301
+ - Implementation handoff: Developer and Tech Lead block when tests, typed
302
+ contracts, ownership paths, or migration/rollback notes are missing.
303
+ - QA evidence: QA and Analyst block when evidence does not prove acceptance
304
+ criteria, edge cases, regression areas, or security controls.
305
+ - Operational readiness: SRE, DevOps, and Release Manager block when
306
+ monitoring, alerting, rate limits, budgets, rollout, rollback, or incident
307
+ owner is missing for SaaS behavior.
308
+ - Data readiness: DBA and Data Engineer/Analyst block when indexes, migrations,
309
+ retention, lineage, or tenant query patterns are not defined.
310
+ - Release go/no-go: Product Owner, Release Manager, and Security block when
311
+ residual risk remains unresolved and is not explicitly risk-accepted.
312
+
313
+ Security-sensitive tasks must include a threat model note, impacted boundaries,
314
+ controls, validation evidence, residual risks, and a reviewer outcome before
315
+ release.
316
+
317
+ ## Data Classification
318
+
319
+ - Public: published docs and public command manifests. These may be indexed and
320
+ sent to providers when policy allows.
321
+ - Internal: workflow metadata, task summaries, and sanitized evidence. These are
322
+ tenant/workspace scoped and redacted before external provider use unless
323
+ policy allows broader handling.
324
+ - Confidential: private repo content, issue context, generated handoffs, and
325
+ logs. These are local-only or redacted-external by default; retention and
326
+ audit are required.
327
+ - Restricted: secrets, tokens, credentials, regulated PII, and signing material.
328
+ These are never sent to prompts or persisted in evidence; use a secret
329
+ manager, tokenization, or approved local secure files.
330
+
331
+ ## Backlog Candidates
332
+
333
+ 1. Policy engine for tenant data classification, provider routing, network
334
+ access, tool capabilities, and fail-open/fail-closed behavior.
335
+ 2. Prompt-injection scanner for issues, comments, artifacts, tool outputs,
336
+ evidence, model responses, and context packs.
337
+ 3. Tenant isolation test suite covering SaaS API, workers, queues, caches,
338
+ evidence, object storage, and backup restore paths.
339
+ 4. Evidence integrity ledger with append-only events, artifact hashing,
340
+ reviewer attestations, and tamper detection.
341
+ 5. SSRF and URL validation library shared by SaaS workers, web console, MCP
342
+ proxy, and tracker adapters.
343
+ 6. Tool identity registry for MCP servers, local binaries, runtime adapters,
344
+ allowed commands, versions, and trusted executable paths.
345
+ 7. Secret redaction pipeline for runtime packets, provider errors, evidence,
346
+ logs, telemetry, imported artifacts, and generated summaries.
347
+ 8. SaaS audit log schema with tenant id, actor, action, target, policy decision,
348
+ evidence id, request id, and redaction status.
349
+ 9. Worker sandbox profile with filesystem, network, process, timeout, memory,
350
+ and budget limits.
351
+ 10. Release gate automation that blocks security-sensitive SaaS changes without
352
+ Security, QA, SRE, and Compliance/Privacy evidence.
353
+ 11. Tenant retention and deletion workflows with export, legal hold, backup
354
+ tombstone, and restore verification.
355
+ 12. Dependency and binary provenance checks for scanner tools, MCP proxies,
356
+ release automation, and runtime bridge helpers.
357
+
358
+ ## Validation Expectations
359
+
360
+ - Documentation-only changes should run lightweight text checks and the
361
+ Orchestra evidence/review workflow.
362
+ - Security-sensitive code changes should run format, lint, typecheck, unit
363
+ tests, secret scan, security audit, and targeted E2E or contract tests.
364
+ - SaaS implementation stories should add tests for tenant isolation, prompt
365
+ injection handling, URL validation, path traversal, unsafe writes, command
366
+ execution, secret redaction, and evidence tampering.
367
+ - Release evidence must name the acceptance criteria it proves or explicitly
368
+ record the deferred owner and rationale.
@@ -1,9 +1,7 @@
1
1
  {
2
2
  "repositoryUrl": "https://github.com/jterrats/open-orchestra",
3
3
  "packageUrl": "https://www.npmjs.com/package/@jterrats/open-orchestra",
4
- "nav": [
5
- { "href": "https://jterrats.dev", "label": "Main site" }
6
- ],
4
+ "nav": [{ "href": "https://jterrats.dev", "label": "Main site" }],
7
5
  "pages": [
8
6
  {
9
7
  "path": "/",
@@ -54,7 +52,7 @@
54
52
  },
55
53
  "quickstart": {
56
54
  "source": "README.md",
57
- "heading": "First Visible Value"
55
+ "heading": "Individual Mode: First Value In Minutes"
58
56
  },
59
57
  "capabilities": {
60
58
  "source": "README.md",
@@ -92,7 +90,7 @@
92
90
  "label": "README",
93
91
  "href": "https://github.com/jterrats/open-orchestra#quick-start",
94
92
  "source": "README.md",
95
- "heading": "First Visible Value"
93
+ "heading": "Individual Mode: First Value In Minutes"
96
94
  },
97
95
  {
98
96
  "title": "Release matrix",
@@ -110,43 +108,143 @@
110
108
  },
111
109
  "docs": {
112
110
  "links": [
113
- { "title": "Adoption guide", "source": "docs/adoption-guide.md", "heading": "Open Orchestra 1.0.0 Adoption Guide" },
114
- { "title": "Core command surface", "source": "docs/core-command-surface.md", "heading": "Core Command Surface" },
115
- { "title": "E2E test batteries", "source": "docs/e2e-test-batteries.md", "heading": "End-to-End Test Batteries" },
116
- { "title": "Duplicate-code enforcement", "source": "docs/duplicate-code-enforcement.md", "heading": "Duplicate-Code Enforcement" },
117
- { "title": "Sonar quality gates", "source": "docs/sonar-quality-gates.md", "heading": "Sonar Quality Gates" },
118
- { "title": "Sonar architecture model", "source": "docs/sonar-architecture-model.md", "heading": "Sonar Architecture Model" },
119
- { "title": "Runtime adapters", "source": "docs/runtime-adapters.md", "heading": "Runtime Adapters" },
120
- { "title": "Context vault", "source": "docs/context-vault.md", "heading": "Context Vault" },
121
- { "title": "Site content workflow", "source": "docs/site-content-workflow.md", "heading": "Public Site Content Workflow" }
111
+ {
112
+ "title": "Adoption guide",
113
+ "source": "docs/adoption-guide.md",
114
+ "heading": "Open Orchestra 1.0.0 Adoption Guide"
115
+ },
116
+ {
117
+ "title": "Core command surface",
118
+ "source": "docs/core-command-surface.md",
119
+ "heading": "Core Command Surface"
120
+ },
121
+ {
122
+ "title": "E2E test batteries",
123
+ "source": "docs/e2e-test-batteries.md",
124
+ "heading": "End-to-End Test Batteries"
125
+ },
126
+ {
127
+ "title": "Duplicate-code enforcement",
128
+ "source": "docs/duplicate-code-enforcement.md",
129
+ "heading": "Duplicate-Code Enforcement"
130
+ },
131
+ {
132
+ "title": "Sonar quality gates",
133
+ "source": "docs/sonar-quality-gates.md",
134
+ "heading": "Sonar Quality Gates"
135
+ },
136
+ {
137
+ "title": "Sonar architecture model",
138
+ "source": "docs/sonar-architecture-model.md",
139
+ "heading": "Sonar Architecture Model"
140
+ },
141
+ {
142
+ "title": "Runtime adapters",
143
+ "source": "docs/runtime-adapters.md",
144
+ "heading": "Runtime Adapters"
145
+ },
146
+ {
147
+ "title": "Context vault",
148
+ "source": "docs/context-vault.md",
149
+ "heading": "Context Vault"
150
+ },
151
+ {
152
+ "title": "Site content workflow",
153
+ "source": "docs/site-content-workflow.md",
154
+ "heading": "Public Site Content Workflow"
155
+ }
122
156
  ]
123
157
  },
124
158
  "releaseDocs": {
125
159
  "links": [
126
- { "title": "Release test matrix", "source": "docs/release-test-matrix.md", "heading": "1.0.0 Release Test Matrix" },
127
- { "title": "E2E test batteries", "source": "docs/e2e-test-batteries.md", "heading": "End-to-End Test Batteries" },
128
- { "title": "Sonar quality gates", "source": "docs/sonar-quality-gates.md", "heading": "Sonar Quality Gates" },
129
- { "title": "Sonar architecture model", "source": "docs/sonar-architecture-model.md", "heading": "Sonar Architecture Model" },
130
- { "title": "QA evidence", "source": "docs/site-content-workflow.md", "heading": "QA Evidence" },
131
- { "title": "Package naming", "source": "docs/package-naming.md", "heading": "Package Naming Decision" },
132
- { "title": "Upgrade dogfooding", "source": "README.md", "heading": "Quick Start" }
160
+ {
161
+ "title": "Release test matrix",
162
+ "source": "docs/release-test-matrix.md",
163
+ "heading": "1.0.0 Release Test Matrix"
164
+ },
165
+ {
166
+ "title": "E2E test batteries",
167
+ "source": "docs/e2e-test-batteries.md",
168
+ "heading": "End-to-End Test Batteries"
169
+ },
170
+ {
171
+ "title": "Sonar quality gates",
172
+ "source": "docs/sonar-quality-gates.md",
173
+ "heading": "Sonar Quality Gates"
174
+ },
175
+ {
176
+ "title": "Sonar architecture model",
177
+ "source": "docs/sonar-architecture-model.md",
178
+ "heading": "Sonar Architecture Model"
179
+ },
180
+ {
181
+ "title": "QA evidence",
182
+ "source": "docs/site-content-workflow.md",
183
+ "heading": "QA Evidence"
184
+ },
185
+ {
186
+ "title": "Package naming",
187
+ "source": "docs/package-naming.md",
188
+ "heading": "Package Naming Decision"
189
+ },
190
+ {
191
+ "title": "Upgrade dogfooding",
192
+ "source": "README.md",
193
+ "heading": "Quick Start"
194
+ }
133
195
  ]
134
196
  },
135
197
  "console": {
136
198
  "links": [
137
- { "title": "Web console QA", "source": "docs/web-console-qa.md", "heading": "Web Console QA Notes" },
138
- { "title": "Local web console", "source": "docs/orchestra-mvp.md", "heading": "Commands" },
139
- { "title": "Workflow progress API", "source": "README.md", "heading": "1.0.0 Workflow Tooling" },
140
- { "title": "Delivery dashboard", "source": "docs/adoption-guide.md", "heading": "Release Operations" }
199
+ {
200
+ "title": "Web console QA",
201
+ "source": "docs/web-console-qa.md",
202
+ "heading": "Web Console QA Notes"
203
+ },
204
+ {
205
+ "title": "Local web console",
206
+ "source": "docs/orchestra-mvp.md",
207
+ "heading": "Commands"
208
+ },
209
+ {
210
+ "title": "Workflow progress API",
211
+ "source": "README.md",
212
+ "heading": "1.0.0 Workflow Tooling"
213
+ },
214
+ {
215
+ "title": "Delivery dashboard",
216
+ "source": "docs/adoption-guide.md",
217
+ "heading": "Release Operations"
218
+ }
141
219
  ]
142
220
  },
143
221
  "reference": {
144
222
  "links": [
145
- { "title": "Command contracts", "source": "docs/command-contracts.md", "heading": "Command Contracts" },
146
- { "title": "Generated artifact APIs", "source": "docs/generated-artifact-api-catalog.md", "heading": "Generated Artifact API Catalog" },
147
- { "title": "Runtime LLM flow", "source": "docs/runtime-llm-flow.md", "heading": "Runtime LLM Flow" },
148
- { "title": "Tracker adapter contract", "source": "docs/tracker-adapter-contract.md", "heading": "Tracker Adapter Contract" },
149
- { "title": "Source of truth and learning", "source": "docs/source-of-truth-and-agent-learning.md", "heading": "Source of Truth and Agent Learning" }
223
+ {
224
+ "title": "Command contracts",
225
+ "source": "docs/command-contracts.md",
226
+ "heading": "Command Contracts"
227
+ },
228
+ {
229
+ "title": "Generated artifact APIs",
230
+ "source": "docs/generated-artifact-api-catalog.md",
231
+ "heading": "Generated Artifact API Catalog"
232
+ },
233
+ {
234
+ "title": "Runtime LLM flow",
235
+ "source": "docs/runtime-llm-flow.md",
236
+ "heading": "Runtime LLM Flow"
237
+ },
238
+ {
239
+ "title": "Tracker adapter contract",
240
+ "source": "docs/tracker-adapter-contract.md",
241
+ "heading": "Tracker Adapter Contract"
242
+ },
243
+ {
244
+ "title": "Source of truth and learning",
245
+ "source": "docs/source-of-truth-and-agent-learning.md",
246
+ "heading": "Source of Truth and Agent Learning"
247
+ }
150
248
  ]
151
249
  }
152
250
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jterrats/open-orchestra",
3
- "version": "1.0.16",
3
+ "version": "1.0.18",
4
4
  "type": "module",
5
5
  "workspaces": [
6
6
  "extensions/vscode-open-orchestra",
@@ -31,7 +31,9 @@
31
31
  "release:matrix": "node scripts/release-test-matrix.js",
32
32
  "performance:bench": "npm run build && node scripts/performance-benchmark.js",
33
33
  "precommit": "npm run lint && npm run typecheck && npm run secret-scan && npm run security:audit && npm test && npm run validate:workflow",
34
- "prepack": "npm run build",
34
+ "package:build": "npm run build && npm run site:build",
35
+ "package:validate": "node scripts/validate-package-contents.js",
36
+ "prepack": "npm run package:build && npm run package:validate",
35
37
  "sonar:preflight:local": "node bin/orchestra.js sonar preflight --provider sonarqube-local --project-key jterrats_open-orchestra --host-url ${SONAR_HOST_URL:-http://localhost:9001}",
36
38
  "sonar:scan:local": "sonar-scanner -Dsonar.host.url=${SONAR_HOST_URL:-http://localhost:9001}",
37
39
  "hooks:install": "git config core.hooksPath .githooks",
@@ -71,6 +73,7 @@
71
73
  "files": [
72
74
  "bin/",
73
75
  "dist/",
76
+ "site/dist/",
74
77
  "rules/",
75
78
  "docs/",
76
79
  "skills/",
@@ -0,0 +1,9 @@
1
+ /*
2
+ Content-Security-Policy: default-src 'self'; base-uri 'self'; connect-src 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self' data:; object-src 'none'; script-src 'self'; style-src 'self'; form-action 'self'; upgrade-insecure-requests
3
+ Permissions-Policy: camera=(), geolocation=(), microphone=(), payment=(), usb=()
4
+ Referrer-Policy: strict-origin-when-cross-origin
5
+ Strict-Transport-Security: max-age=15552000; includeSubDomains; preload
6
+ X-Content-Type-Options: nosniff
7
+
8
+ /architecture.mmd
9
+ Content-Type: text/plain; charset=utf-8
@@ -0,0 +1,2 @@
1
+ https://www.open-orchestra.jterrats.dev/* https://open-orchestra.jterrats.dev/:splat 301
2
+ /* /index.html 200