@n8r/surface 0.1.0-experimental.2 → 0.1.0-experimental.5

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 (118) hide show
  1. package/README.md +30 -4
  2. package/dist/cli.js +174 -22
  3. package/dist/codec.d.ts +2 -0
  4. package/dist/codec.js +22 -7
  5. package/dist/codex.d.ts +1 -1
  6. package/dist/codex.js +26 -10
  7. package/dist/contracts.d.ts +108 -2
  8. package/dist/cyclonedx-schemas/bom-1.7.schema.json +6700 -0
  9. package/dist/cyclonedx-schemas/cryptography-defs.schema.json +576 -0
  10. package/dist/cyclonedx-schemas/jsf-0.82.schema.json +240 -0
  11. package/dist/cyclonedx-schemas/spdx.schema.json +786 -0
  12. package/dist/cyclonedx-validation.d.ts +1 -0
  13. package/dist/cyclonedx-validation.js +45 -0
  14. package/dist/html.js +27 -3
  15. package/dist/recent.d.ts +9 -0
  16. package/dist/recent.js +71 -0
  17. package/dist/revisions.js +42 -0
  18. package/dist/skill-artifacts-cli.d.ts +1 -0
  19. package/dist/skill-artifacts-cli.js +13 -0
  20. package/dist/skill-artifacts.d.ts +15 -0
  21. package/dist/skill-artifacts.js +184 -0
  22. package/dist/skill-cyclonedx.d.ts +26 -0
  23. package/dist/skill-cyclonedx.js +214 -0
  24. package/dist/skill-presentation.d.ts +10 -0
  25. package/dist/skill-presentation.js +108 -0
  26. package/dist/skill-surface-cli.d.ts +1 -0
  27. package/dist/skill-surface-cli.js +37 -0
  28. package/dist/skill-surface-store.d.ts +7 -0
  29. package/dist/skill-surface-store.js +126 -0
  30. package/dist/surface-bom.d.ts +73 -0
  31. package/dist/surface-bom.js +139 -0
  32. package/dist/surface-draft.d.ts +6 -3
  33. package/dist/surface-draft.js +20 -3
  34. package/dist/surface-instructions.d.ts +2 -1
  35. package/dist/surface-instructions.js +10 -1
  36. package/dist/surface-overview.d.ts +15 -0
  37. package/dist/surface-overview.js +86 -0
  38. package/dist/surface-store.d.ts +5 -7
  39. package/dist/surface-store.js +34 -2
  40. package/dist/surface-view.d.ts +3 -0
  41. package/dist/surface-view.js +50 -0
  42. package/dist/validate.js +298 -0
  43. package/docs/n8r-surface/cli-bundles.md +72 -0
  44. package/docs/n8r-surface/command-outcomes.md +151 -4
  45. package/docs/n8r-surface/contracts.md +10 -0
  46. package/docs/n8r-surface/critical-path.md +21 -0
  47. package/docs/n8r-surface/first-use-access.md +143 -0
  48. package/docs/n8r-surface/first-use-overview.md +262 -0
  49. package/docs/n8r-surface/getting-started.md +55 -88
  50. package/docs/n8r-surface/guided-journey-verification.md +137 -0
  51. package/docs/n8r-surface/implementation-decisions.md +14 -14
  52. package/docs/n8r-surface/instance-first-research.md +209 -0
  53. package/docs/n8r-surface/npm-distribution.md +39 -69
  54. package/docs/n8r-surface/npm-release.md +141 -14
  55. package/docs/n8r-surface/product-direction.md +327 -0
  56. package/docs/n8r-surface/researcher-skill.md +105 -51
  57. package/docs/n8r-surface/security-assurance-strategy.md +267 -0
  58. package/docs/n8r-surface/skill-bom-verification.md +142 -0
  59. package/docs/n8r-surface/skill-cyclonedx-verification.md +144 -0
  60. package/docs/n8r-surface/skill-cyclonedx.md +85 -0
  61. package/docs/n8r-surface/skill-manual.md +129 -0
  62. package/docs/n8r-surface/skill-surface-artifacts.md +234 -0
  63. package/docs/n8r-surface/skill-usefulness-verification.md +135 -0
  64. package/docs/n8r-surface/skill-workspace-automation.md +359 -0
  65. package/docs/n8r-surface/surface-description-contract.md +224 -0
  66. package/docs/n8r-surface/surface-descriptions.md +173 -0
  67. package/docs/n8r-surface/surface-relationships.md +231 -0
  68. package/docs/n8r-surface/tester-candidate.md +158 -0
  69. package/docs/n8r-surface/versioning.md +55 -66
  70. package/docs/n8r-surface/workspace-human-check.md +101 -0
  71. package/docs/n8r-surface/workspace-installation.md +68 -0
  72. package/docs/n8r-surface/workspace-verification.md +350 -0
  73. package/docs/n8r-surface/workspace.md +83 -0
  74. package/examples/researcher/README.md +8 -0
  75. package/examples/researcher/cyclonedx/configured/README.md +7 -0
  76. package/examples/researcher/cyclonedx/configured/manifest.json +10 -0
  77. package/examples/researcher/cyclonedx/configured/mapping.json +323 -0
  78. package/examples/researcher/cyclonedx/configured/surface-records.json +1275 -0
  79. package/examples/researcher/cyclonedx/configured/surface.cdx.json +79 -0
  80. package/examples/researcher/descriptions/README.md +29 -0
  81. package/examples/researcher/descriptions/bound-r1.json +141 -0
  82. package/examples/researcher/descriptions/bound-r2.json +153 -0
  83. package/examples/researcher/descriptions/capability.json +167 -0
  84. package/examples/researcher/descriptions/research-r1.json +153 -0
  85. package/examples/researcher/descriptions/research-r2.json +157 -0
  86. package/examples/researcher/descriptions/sources.md +24 -0
  87. package/examples/researcher/relationships/README.md +34 -0
  88. package/examples/researcher/relationships/bound-r1.json +346 -0
  89. package/examples/researcher/relationships/bound-r2.json +358 -0
  90. package/examples/researcher/relationships/capability.json +325 -0
  91. package/examples/researcher/relationships/config/assistant.env.example +4 -0
  92. package/examples/researcher/relationships/research-r1.json +300 -0
  93. package/examples/researcher/relationships/research-r2.json +304 -0
  94. package/examples/researcher/relationships/sources.md +38 -0
  95. package/examples/researcher/surface-bom/README.md +17 -0
  96. package/examples/researcher/surface-bom/initial.cdx.json +188 -0
  97. package/package.json +1 -1
  98. package/plugins/n8r-surface/.codex-plugin/plugin.json +2 -2
  99. package/plugins/n8r-surface/LICENSING.md +3 -0
  100. package/plugins/n8r-surface/plugin.json +2 -2
  101. package/plugins/n8r-surface/skills/research/SKILL.md +79 -38
  102. package/plugins/n8r-surface/skills/research/references/artifacts.md +152 -0
  103. package/plugins/n8r-surface/skills/research/references/cyclonedx.md +207 -0
  104. package/plugins/n8r-surface/skills/research/references/discovery-map.md +20 -2
  105. package/plugins/n8r-surface/skills/research/references/examples/bound-r1.json +346 -0
  106. package/plugins/n8r-surface/skills/research/references/examples/capability.json +325 -0
  107. package/plugins/n8r-surface/skills/research/references/examples/research-r1.json +300 -0
  108. package/plugins/n8r-surface/skills/research/references/examples/surface.cdx.json +188 -0
  109. package/plugins/n8r-surface/skills/research/references/first-use-access.md +97 -0
  110. package/plugins/n8r-surface/skills/research/references/first-use-overview.md +101 -0
  111. package/plugins/n8r-surface/skills/research/references/instance-first.md +125 -0
  112. package/plugins/n8r-surface/skills/research/references/working-notes.md +6 -1
  113. package/plugins/n8r-surface/skills/research/references/workspace.md +89 -0
  114. package/plugins/n8r-surface/skills/research/scripts/THIRD-PARTY-NOTICES.txt +273 -0
  115. package/plugins/n8r-surface/skills/research/scripts/artifacts.mjs +8348 -0
  116. package/plugins/n8r-surface/skills/research/scripts/cyclonedx.mjs +28113 -0
  117. package/plugins/n8r-surface/skills/research/scripts/surface.mjs +27800 -0
  118. package/plugins/n8r-surface/skills/research/scripts/workspace.mjs +120 -0
@@ -0,0 +1,304 @@
1
+ {
2
+ "id": "urn:demo:relationship-research",
3
+ "title": "Synthetic relationship evidence",
4
+ "scope": "Synthetic role/product identities only; runtime unverified.",
5
+ "revision": {
6
+ "id": "r2",
7
+ "parent": {
8
+ "id": "urn:demo:relationship-research",
9
+ "revision": "r1",
10
+ "digest": "sha256:615bc6f8f443b986f78a46414faf97822206bcfcc9781e8d7c03d2dcb83940a0"
11
+ },
12
+ "createdAt": "2026-11-08T00:00:00Z",
13
+ "author": "Synthetic author",
14
+ "reason": "Changed configured database target"
15
+ },
16
+ "extensions": {},
17
+ "contract": "n8r.research/0.1",
18
+ "sources": [
19
+ {
20
+ "id": "urn:source:summary",
21
+ "location": "sources.md",
22
+ "version": "synthetic-relationships-1",
23
+ "digest": "sha256:cb9498a53d65fb16c16b7ac297b84b2d14a825297012bec9ac07df083e3c5647",
24
+ "inspectedAt": "2026-11-08T00:00:00Z",
25
+ "coverage": [
26
+ {
27
+ "path": "sources.md",
28
+ "status": "inspected",
29
+ "note": "Sanitized synthetic source pack, not raw configuration."
30
+ }
31
+ ]
32
+ },
33
+ {
34
+ "id": "urn:source:config",
35
+ "location": "config/assistant.env.example",
36
+ "version": "synthetic-1",
37
+ "digest": "sha256:d575d918e3e60fa1bf4490f7d6ceddafdcf0dba56b41b0e566a3adc8d88fe256",
38
+ "inspectedAt": "2026-11-08T00:00:00Z",
39
+ "coverage": [
40
+ {
41
+ "path": "config/assistant.env.example",
42
+ "status": "inspected",
43
+ "note": "Synthetic setting-name documentation only."
44
+ }
45
+ ]
46
+ }
47
+ ],
48
+ "findings": [
49
+ {
50
+ "id": "urn:f:database",
51
+ "subject": "urn:node:app",
52
+ "property": "supports",
53
+ "state": "known",
54
+ "note": "Synthetic source assertion; not runtime evidence.",
55
+ "claims": [
56
+ {
57
+ "value": "urn:node:mongodb",
58
+ "evidence": [
59
+ {
60
+ "source": "urn:source:summary",
61
+ "locator": "Product guide"
62
+ }
63
+ ]
64
+ }
65
+ ]
66
+ },
67
+ {
68
+ "id": "urn:f:oidc",
69
+ "subject": "urn:node:app",
70
+ "property": "supports",
71
+ "state": "known",
72
+ "note": "Synthetic source assertion; not runtime evidence.",
73
+ "claims": [
74
+ {
75
+ "value": "urn:node:oidc",
76
+ "evidence": [
77
+ {
78
+ "source": "urn:source:summary",
79
+ "locator": "Product guide"
80
+ }
81
+ ]
82
+ }
83
+ ]
84
+ },
85
+ {
86
+ "id": "urn:f:saml",
87
+ "subject": "urn:node:app",
88
+ "property": "supports",
89
+ "state": "known",
90
+ "note": "Synthetic source assertion; not runtime evidence.",
91
+ "claims": [
92
+ {
93
+ "value": "urn:node:saml",
94
+ "evidence": [
95
+ {
96
+ "source": "urn:source:summary",
97
+ "locator": "Product guide"
98
+ }
99
+ ]
100
+ }
101
+ ]
102
+ },
103
+ {
104
+ "id": "urn:f:database-bound",
105
+ "subject": "urn:instance:demo",
106
+ "property": "urn:cap:database",
107
+ "state": "known",
108
+ "note": "Synthetic source assertion; not runtime evidence.",
109
+ "claims": [
110
+ {
111
+ "value": "urn:target:mongodb",
112
+ "evidence": [
113
+ {
114
+ "source": "urn:source:summary",
115
+ "locator": "Sanitized instance configuration summary, revision 2"
116
+ }
117
+ ]
118
+ }
119
+ ]
120
+ },
121
+ {
122
+ "id": "urn:f:identity",
123
+ "subject": "urn:instance:demo",
124
+ "property": "urn:cap:oidc",
125
+ "state": "conflicting",
126
+ "note": "Synthetic source assertion; not runtime evidence.",
127
+ "claims": [
128
+ {
129
+ "value": "urn:target:oidc",
130
+ "evidence": [
131
+ {
132
+ "source": "urn:source:summary",
133
+ "locator": "Sanitized instance configuration summary, revision 1"
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "value": "urn:target:saml",
139
+ "evidence": [
140
+ {
141
+ "source": "urn:source:summary",
142
+ "locator": "Sanitized instance configuration summary, revision 1"
143
+ }
144
+ ]
145
+ }
146
+ ]
147
+ },
148
+ {
149
+ "id": "urn:f:database-purpose",
150
+ "subject": "urn:cap:database",
151
+ "property": "purpose",
152
+ "state": "known",
153
+ "note": "Synthetic source statement; no actual settings.",
154
+ "claims": [
155
+ {
156
+ "value": "Persist conversation history and user profiles.",
157
+ "evidence": [
158
+ {
159
+ "source": "urn:source:summary",
160
+ "locator": "Database integration"
161
+ }
162
+ ]
163
+ }
164
+ ]
165
+ },
166
+ {
167
+ "id": "urn:f:database-integration",
168
+ "subject": "urn:cap:database",
169
+ "property": "integration",
170
+ "state": "known",
171
+ "note": "Synthetic source statement; no actual settings.",
172
+ "claims": [
173
+ {
174
+ "value": "MongoDB client driver using the MongoDB wire protocol.",
175
+ "evidence": [
176
+ {
177
+ "source": "urn:source:summary",
178
+ "locator": "Database integration"
179
+ }
180
+ ]
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ "id": "urn:f:database-configuration",
186
+ "subject": "urn:cap:database",
187
+ "property": "configuration",
188
+ "state": "known",
189
+ "note": "Synthetic source statement; no actual settings.",
190
+ "claims": [
191
+ {
192
+ "value": [
193
+ {
194
+ "owner": "urn:node:app",
195
+ "mechanism": "environment-variable",
196
+ "key": "CHAT_STORE_URI",
197
+ "location": "config/assistant.env.example"
198
+ }
199
+ ],
200
+ "evidence": [
201
+ {
202
+ "source": "urn:source:config",
203
+ "locator": "CHAT_STORE_URI comment"
204
+ }
205
+ ]
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "id": "urn:f:oidc-purpose",
211
+ "subject": "urn:cap:oidc",
212
+ "property": "purpose",
213
+ "state": "known",
214
+ "note": "Synthetic source statement; no actual settings.",
215
+ "claims": [
216
+ {
217
+ "value": "Authenticate users through an identity service.",
218
+ "evidence": [
219
+ {
220
+ "source": "urn:source:summary",
221
+ "locator": "Authentication integration"
222
+ }
223
+ ]
224
+ }
225
+ ]
226
+ },
227
+ {
228
+ "id": "urn:f:oidc-integration",
229
+ "subject": "urn:cap:oidc",
230
+ "property": "integration",
231
+ "state": "known",
232
+ "note": "Synthetic source statement; no actual settings.",
233
+ "claims": [
234
+ {
235
+ "value": "OpenID Connect",
236
+ "evidence": [
237
+ {
238
+ "source": "urn:source:summary",
239
+ "locator": "Authentication integration"
240
+ }
241
+ ]
242
+ }
243
+ ]
244
+ },
245
+ {
246
+ "id": "urn:f:saml-purpose",
247
+ "subject": "urn:cap:saml",
248
+ "property": "purpose",
249
+ "state": "known",
250
+ "note": "Synthetic source statement; no actual settings.",
251
+ "claims": [
252
+ {
253
+ "value": "Authenticate users through an identity service.",
254
+ "evidence": [
255
+ {
256
+ "source": "urn:source:summary",
257
+ "locator": "Authentication integration"
258
+ }
259
+ ]
260
+ }
261
+ ]
262
+ },
263
+ {
264
+ "id": "urn:f:saml-integration",
265
+ "subject": "urn:cap:saml",
266
+ "property": "integration",
267
+ "state": "known",
268
+ "note": "Synthetic source statement; no actual settings.",
269
+ "claims": [
270
+ {
271
+ "value": "SAML 2.0",
272
+ "evidence": [
273
+ {
274
+ "source": "urn:source:summary",
275
+ "locator": "Authentication integration"
276
+ }
277
+ ]
278
+ }
279
+ ]
280
+ }
281
+ ],
282
+ "alternatives": [
283
+ {
284
+ "id": "urn:option:oidc",
285
+ "title": "Prefer OIDC",
286
+ "findings": [
287
+ "urn:f:identity"
288
+ ],
289
+ "requirements": []
290
+ }
291
+ ],
292
+ "decisions": [
293
+ {
294
+ "id": "urn:decision:oidc",
295
+ "alternative": "urn:option:oidc",
296
+ "choice": "selected",
297
+ "reason": "Synthetic human preference; conflict unresolved.",
298
+ "by": "Synthetic reviewer",
299
+ "at": "2026-11-08T00:00:00Z"
300
+ }
301
+ ],
302
+ "questions": [],
303
+ "notes": []
304
+ }
@@ -0,0 +1,38 @@
1
+ # Fictional assistant source pack
2
+
3
+ ## Product guide
4
+
5
+ The assistant supports MongoDB storage, OIDC authentication, and SAML authentication.
6
+ OIDC and SAML are mutually exclusive for this example instance. Inference support
7
+ has not been researched.
8
+
9
+ ## Sanitized instance configuration summary, revision 1
10
+
11
+ The database relationship is configured for MongoDB Atlas. No endpoint, username,
12
+ password or key is included. The two permitted summaries disagree about identity:
13
+ one identifies the OIDC service, the other the SAML service. Neither establishes
14
+ runtime use. Inference binding evidence is missing.
15
+
16
+ ## Human decision
17
+
18
+ A synthetic reviewer prefers OIDC. This decision does not resolve the contradictory
19
+ configuration summaries.
20
+
21
+ ## Sanitized instance configuration summary, revision 2
22
+
23
+ The database relationship is now configured for a self-hosted MongoDB service.
24
+ The other evidence remains unchanged. No actual setting values are supplied.
25
+
26
+ ## Database integration
27
+
28
+ The fictional assistant persists conversation history and user profiles in MongoDB.
29
+ It connects using a MongoDB client driver and the MongoDB wire protocol.
30
+ The assistant owns the CHAT_STORE_URI environment variable, documented in
31
+ config/assistant.env.example. Only the setting name and relative documentation
32
+ location are retained here; no configured value is included.
33
+
34
+ ## Authentication integration
35
+
36
+ The assistant authenticates users through an identity service. OIDC uses the
37
+ OpenID Connect protocol; SAML uses SAML 2.0. Configuration locations have not been
38
+ researched and must remain unknown, not absent.
@@ -0,0 +1,17 @@
1
+ # Synthetic Surface BOM
2
+
3
+ `initial.cdx.json` is a fictional assistant with four database alternatives, one
4
+ selected dependency, an unknown inference connection, evidence, a user decision
5
+ and an investigation plan. It makes no claim about LibreChat or any deployment.
6
+ The repeated evidence hash is a synthetic placeholder, not a real inspected file.
7
+
8
+ Read the [profile](../../../plugins/n8r-surface/skills/research/references/cyclonedx.md)
9
+ and [mapping limits](../../../docs/n8r-surface/skill-cyclonedx.md).
10
+ From the repository root with Node 22/24/26:
11
+
12
+ ```sh
13
+ node plugins/n8r-surface/skills/research/scripts/surface.mjs check examples/researcher/surface-bom/initial.cdx.json
14
+ ```
15
+
16
+ Expect exit 0 and `checked`, five relationships and three investigation entries.
17
+ This checks structure/references only, not actual product evidence.
@@ -0,0 +1,188 @@
1
+ {
2
+ "bomFormat": "CycloneDX",
3
+ "specVersion": "1.7",
4
+ "serialNumber": "urn:uuid:94141625-a8d3-4cec-984a-c46be305058d",
5
+ "version": 1,
6
+ "metadata": {
7
+ "timestamp": "2026-11-13T12:00:00Z"
8
+ },
9
+ "components": [
10
+ {
11
+ "bom-ref": "app",
12
+ "type": "application",
13
+ "name": "Synthetic Assistant"
14
+ },
15
+ {
16
+ "bom-ref": "model",
17
+ "type": "machine-learning-model",
18
+ "name": "Synthetic Model"
19
+ }
20
+ ],
21
+ "services": [
22
+ {
23
+ "bom-ref": "db-a",
24
+ "name": "Database A"
25
+ },
26
+ {
27
+ "bom-ref": "db-b",
28
+ "name": "Database B"
29
+ },
30
+ {
31
+ "bom-ref": "db-c",
32
+ "name": "Database C"
33
+ },
34
+ {
35
+ "bom-ref": "db-d",
36
+ "name": "Database D"
37
+ }
38
+ ],
39
+ "dependencies": [
40
+ {
41
+ "ref": "app",
42
+ "dependsOn": [
43
+ "db-b"
44
+ ]
45
+ }
46
+ ],
47
+ "compositions": [
48
+ {
49
+ "aggregate": "unknown"
50
+ }
51
+ ],
52
+ "annotations": [
53
+ {
54
+ "bom-ref": "evidence-support",
55
+ "subjects": [
56
+ "app",
57
+ "db-a",
58
+ "db-b",
59
+ "db-c",
60
+ "db-d"
61
+ ],
62
+ "annotator": {
63
+ "individual": {
64
+ "name": "Researcher"
65
+ }
66
+ },
67
+ "timestamp": "2026-11-13T12:00:00Z",
68
+ "text": "The synthetic source describes four supported database alternatives. This does not establish a selected deployment."
69
+ },
70
+ {
71
+ "bom-ref": "evidence-selection",
72
+ "subjects": [
73
+ "app",
74
+ "db-b"
75
+ ],
76
+ "annotator": {
77
+ "individual": {
78
+ "name": "Researcher"
79
+ }
80
+ },
81
+ "timestamp": "2026-11-13T12:00:00Z",
82
+ "text": "A synthetic safe configuration projection identifies database B; connection values were not retained."
83
+ },
84
+ {
85
+ "bom-ref": "decision-1",
86
+ "subjects": [
87
+ "app"
88
+ ],
89
+ "annotator": {
90
+ "individual": {
91
+ "name": "User"
92
+ }
93
+ },
94
+ "timestamp": "2026-11-13T12:00:00Z",
95
+ "text": "Investigate storage before model hosting."
96
+ }
97
+ ],
98
+ "externalReferences": [
99
+ {
100
+ "type": "evidence",
101
+ "url": "synthetic-source-pack",
102
+ "comment": "Synthetic source pack; version 1; inspected support and safe projection only.",
103
+ "hashes": [
104
+ {
105
+ "alg": "SHA-256",
106
+ "content": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
107
+ }
108
+ ]
109
+ }
110
+ ],
111
+ "citations": [
112
+ {
113
+ "bom-ref": "citation-1",
114
+ "pointers": [
115
+ "/annotations/0/text"
116
+ ],
117
+ "timestamp": "2026-11-13T12:00:00Z",
118
+ "attributedTo": "app",
119
+ "note": "Synthetic fixture attribution, not real product evidence."
120
+ }
121
+ ],
122
+ "properties": [
123
+ {
124
+ "name": "n8r:surface:profile",
125
+ "value": "1"
126
+ },
127
+ {
128
+ "name": "n8r:surface:objective",
129
+ "value": "Understand storage choices and the selected connection."
130
+ },
131
+ {
132
+ "name": "n8r:surface:scope",
133
+ "value": "Synthetic assistant; no live runtime access."
134
+ },
135
+ {
136
+ "name": "n8r:surface:relationship",
137
+ "value": "{\"id\":\"storage-a\",\"from\":\"app\",\"to\":\"db-a\",\"kind\":\"dependency\",\"optionality\":\"alternative\",\"group\":\"storage\",\"support\":\"supported\",\"selection\":\"unknown\",\"observations\":[],\"evidence\":[\"evidence-support\"],\"selectionEvidence\":[],\"purpose\":\"Persist conversation state\",\"mechanism\":\"Database driver\",\"configuration\":[],\"conditions\":[],\"note\":\"Supported alternative; selection of other targets is unestablished.\"}"
138
+ },
139
+ {
140
+ "name": "n8r:surface:relationship",
141
+ "value": "{\"id\":\"storage-b\",\"from\":\"app\",\"to\":\"db-b\",\"kind\":\"dependency\",\"optionality\":\"alternative\",\"group\":\"storage\",\"support\":\"supported\",\"selection\":\"selected\",\"observations\":[],\"evidence\":[\"evidence-support\"],\"selectionEvidence\":[\"evidence-selection\"],\"purpose\":\"Persist conversation state\",\"mechanism\":\"Database driver\",\"configuration\":[\"safe-projection.json: database-kind\"],\"conditions\":[],\"note\":\"Supported alternative; selection of other targets is unestablished.\"}"
142
+ },
143
+ {
144
+ "name": "n8r:surface:relationship",
145
+ "value": "{\"id\":\"storage-c\",\"from\":\"app\",\"to\":\"db-c\",\"kind\":\"dependency\",\"optionality\":\"alternative\",\"group\":\"storage\",\"support\":\"supported\",\"selection\":\"unknown\",\"observations\":[],\"evidence\":[\"evidence-support\"],\"selectionEvidence\":[],\"purpose\":\"Persist conversation state\",\"mechanism\":\"Database driver\",\"configuration\":[],\"conditions\":[],\"note\":\"Supported alternative; selection of other targets is unestablished.\"}"
146
+ },
147
+ {
148
+ "name": "n8r:surface:relationship",
149
+ "value": "{\"id\":\"storage-d\",\"from\":\"app\",\"to\":\"db-d\",\"kind\":\"dependency\",\"optionality\":\"alternative\",\"group\":\"storage\",\"support\":\"supported\",\"selection\":\"unknown\",\"observations\":[],\"evidence\":[\"evidence-support\"],\"selectionEvidence\":[],\"purpose\":\"Persist conversation state\",\"mechanism\":\"Database driver\",\"configuration\":[],\"conditions\":[],\"note\":\"Supported alternative; selection of other targets is unestablished.\"}"
150
+ },
151
+ {
152
+ "name": "n8r:surface:relationship",
153
+ "value": "{\"id\":\"inference\",\"from\":\"app\",\"to\":\"model\",\"kind\":\"integration\",\"optionality\":\"unknown\",\"group\":\"\",\"support\":\"unknown\",\"selection\":\"unknown\",\"observations\":[],\"evidence\":[],\"selectionEvidence\":[],\"purpose\":\"Generate a response\",\"mechanism\":\"Unknown\",\"configuration\":[],\"conditions\":[],\"note\":\"Model serving connection remains uninvestigated.\"}"
154
+ },
155
+ {
156
+ "name": "n8r:surface:entry",
157
+ "value": "{\"id\":\"plan-1\",\"kind\":\"next\",\"title\":\"Inspect storage selection\",\"text\":\"Establish the selected database from a safe configuration projection.\",\"status\":\"done\",\"reason\":\"Projection supplied in this synthetic example.\",\"access\":\"Safe configuration projection\",\"evidence\":[\"evidence-selection\"],\"at\":\"2026-11-13T12:00:00Z\"}"
158
+ },
159
+ {
160
+ "name": "n8r:surface:entry",
161
+ "value": "{\"id\":\"choice-1\",\"kind\":\"decision\",\"title\":\"Storage first\",\"text\":\"Investigate storage before model hosting.\",\"status\":\"active\",\"reason\":\"User priority\",\"access\":\"None\",\"evidence\":[\"decision-1\"],\"at\":\"2026-11-13T12:00:00Z\"}"
162
+ },
163
+ {
164
+ "name": "n8r:surface:entry",
165
+ "value": "{\"id\":\"question-1\",\"kind\":\"question\",\"title\":\"Which service hosts inference?\",\"text\":\"Inspect the serving configuration to identify the model endpoint role.\",\"status\":\"open\",\"reason\":\"Source does not establish this connection.\",\"access\":\"Safe inference configuration\",\"evidence\":[],\"at\":\"2026-11-13T12:00:00Z\"}"
166
+ },
167
+ {
168
+ "name": "n8r:surface:coverage",
169
+ "value": "Only synthetic support and selection sources inspected."
170
+ },
171
+ {
172
+ "name": "n8r:surface:gap",
173
+ "value": "Runtime use has not been observed."
174
+ },
175
+ {
176
+ "name": "n8r:surface:evidence",
177
+ "value": "{\"id\": \"evidence-support\", \"basis\": \"source\", \"sources\": [{\"index\": 0, \"locator\": \"support.md:1-20\"}], \"applicability\": \"Synthetic fixture only.\"}"
178
+ },
179
+ {
180
+ "name": "n8r:surface:evidence",
181
+ "value": "{\"id\": \"evidence-selection\", \"basis\": \"configuration\", \"sources\": [{\"index\": 0, \"locator\": \"safe-projection.json: database-kind\"}], \"applicability\": \"Synthetic fixture only.\"}"
182
+ },
183
+ {
184
+ "name": "n8r:surface:evidence",
185
+ "value": "{\"id\": \"decision-1\", \"basis\": \"user\", \"sources\": [], \"applicability\": \"Synthetic fixture only.\"}"
186
+ }
187
+ ]
188
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@n8r/surface",
3
- "version": "0.1.0-experimental.2",
3
+ "version": "0.1.0-experimental.5",
4
4
  "private": false,
5
5
  "description": "Experimental AI Surface Model library and Codex research command",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8r-surface",
3
- "version": "0.1.8",
3
+ "version": "0.1.16",
4
4
  "description": "Discover and reconcile AI-relevant components and connections using source evidence and permitted live settings. Experimental working notes; no deployment or compatibility claims.",
5
5
  "author": {
6
6
  "name": "AI Surface Model contributors",
@@ -19,7 +19,7 @@
19
19
  "interface": {
20
20
  "displayName": "n8r-surface Researcher",
21
21
  "shortDescription": "Research AI system components",
22
- "longDescription": "Build partial AI Surface graphs from supplied sources, prior descriptions and permitted live observations using the current host. Retain evidence, decisions and gaps in working notes. This experimental skill does not change deployments or produce validated n8r research/Surface artefacts. Access and saving depend on the host tools.",
22
+ "longDescription": "Build partial AI Surface graphs from supplied sources, prior descriptions and permitted live observations using the current host. Retain evidence, decisions and gaps in working notes. This experimental skill can save a self-contained Surface with an investigation journal and visual using bundled resources; it does not change deployments. Access and saving depend on the host tools.",
23
23
  "developerName": "AI Surface Model contributors",
24
24
  "category": "Developer Tools",
25
25
  "capabilities": [],
@@ -34,3 +34,6 @@ Copied project examples remain subject to their applicable licence.
34
34
 
35
35
  Third-party material retains its own applicable terms and attribution. The
36
36
  project licences do not relicense third-party components described in a Surface.
37
+
38
+ The bundled `skills/research/scripts/artifacts.mjs` includes yaml 2.9.1 under
39
+ its ISC licence; see `skills/research/scripts/THIRD-PARTY-NOTICES.txt`.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "n8r-surface",
4
- "version": "0.1.8",
4
+ "version": "0.1.16",
5
5
  "description": "Discover and reconcile AI-relevant components and connections using source evidence and permitted live settings. Experimental working notes; no deployment or compatibility claims.",
6
6
  "author": {"name": "AI Surface Model contributors", "url": "https://github.com/injectionator/n8r-surface"},
7
7
  "homepage": "https://github.com/injectionator/n8r-surface",
@@ -13,7 +13,7 @@
13
13
  "interface": {
14
14
  "displayName": "n8r-surface Researcher",
15
15
  "shortDescription": "Research AI system components",
16
- "longDescription": "Build partial AI Surface graphs from supplied sources, prior descriptions and permitted live observations using the current host. Retain evidence, decisions and gaps in working notes. This experimental skill does not change deployments or produce validated n8r research/Surface artefacts. Access and saving depend on the host tools.",
16
+ "longDescription": "Build partial AI Surface graphs from supplied sources, prior descriptions and permitted live observations using the current host. Retain evidence, decisions and gaps in working notes. This experimental skill can save a self-contained Surface with an investigation journal and visual using bundled resources; it does not change deployments. Access and saving depend on the host tools.",
17
17
  "developerName": "AI Surface Model contributors",
18
18
  "category": "Developer Tools",
19
19
  "capabilities": [],