snow-flow 10.0.1-dev.413 → 10.0.1-dev.414

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
- "version": "10.0.1-dev.413",
3
+ "version": "10.0.1-dev.414",
4
4
  "name": "snow-flow",
5
5
  "description": "Snow-Flow - ServiceNow Multi-Agent Development Framework powered by AI",
6
6
  "license": "Elastic-2.0",
@@ -124,11 +124,11 @@ async function createFlowViaScheduledJob(
124
124
  " } catch(t1e) { r.steps.tier1 = { success: false, error: t1e.getMessage ? t1e.getMessage() : t1e + '' }; }",
125
125
  "",
126
126
  // ── TIER 2: GlideRecord ──
127
- // Reference flow analysis shows:
128
- // - flow_definition on flow record = null (working flows don't have it)
129
- // - latest_snapshot = 32-char sys_id (reference, NOT JSON!)
130
- // - latest_version = null (normal on this instance)
131
- // So: DON'T set flow_definition on flow, set latest_snapshot = version sys_id.
127
+ // Reference flow analysis:
128
+ // - latest_snapshot points to sys_hub_flow_snapshot (NOT version, NOT JSON)
129
+ // - flow_definition on flow record = null
130
+ // - latest_version = null (normal)
131
+ // Pipeline: flow version snapshot set latest_snapshot on flow
132
132
  " if (!flowSysId) {",
133
133
  " try {",
134
134
  " var f = new GlideRecord('sys_hub_flow');",
@@ -138,11 +138,10 @@ async function createFlowViaScheduledJob(
138
138
  " f.setValue('run_as', runAs); f.setValue('active', false);",
139
139
  " f.setValue('status', 'draft'); f.setValue('validated', true);",
140
140
  " f.setValue('type', isSubflow ? 'subflow' : 'flow');",
141
- // Do NOT set flow_definition (null on working flows)
142
- // Do NOT set latest_snapshot yet (set after version insert — it's a sys_id ref)
143
141
  " flowSysId = f.insert();",
144
142
  " r.steps.flow_insert = { success: !!flowSysId, sys_id: flowSysId + '' };",
145
143
  " if (flowSysId) {",
144
+ // Version record
146
145
  " var v = new GlideRecord('sys_hub_flow_version');",
147
146
  " v.initialize();",
148
147
  " v.setValue('flow', flowSysId); v.setValue('name', '1.0');",
@@ -153,16 +152,35 @@ async function createFlowViaScheduledJob(
153
152
  " verSysId = v.insert();",
154
153
  " r.steps.version_insert = { success: !!verSysId, sys_id: verSysId + '' };",
155
154
  "",
156
- // Set latest_snapshot on flow record to version sys_id (reference field, not JSON)
157
- " if (verSysId) {",
155
+ // Create snapshot in sys_hub_flow_snapshot (this is what latest_snapshot points to!)
156
+ " var snapId = null;",
157
+ " try {",
158
+ " var snap = new GlideRecord('sys_hub_flow_snapshot');",
159
+ " if (snap.isValid()) {",
160
+ " snap.initialize();",
161
+ " snap.setValue('name', flowName);",
162
+ // Try setting common fields — some may not exist, that's OK
163
+ " try { snap.setValue('flow', flowSysId); } catch(e) {}",
164
+ " try { snap.setValue('version', verSysId); } catch(e) {}",
165
+ " try { snap.setValue('state', 'draft'); } catch(e) {}",
166
+ " try { snap.setValue('active', true); } catch(e) {}",
167
+ " if (flowDefStr) { try { snap.setValue('flow_definition', flowDefStr); } catch(e) {} }",
168
+ " snapId = snap.insert();",
169
+ " r.steps.snapshot_insert = { success: !!snapId, sys_id: snapId + '' };",
170
+ " } else { r.steps.snapshot_insert = { success: false, error: 'table not valid' }; }",
171
+ " } catch(snapE) { r.steps.snapshot_insert = { success: false, error: snapE.getMessage ? snapE.getMessage() : snapE + '' }; }",
172
+ "",
173
+ // Set latest_snapshot on flow to point to the snapshot record
174
+ " var snapshotRef = snapId || verSysId;",
175
+ " if (snapshotRef) {",
158
176
  " try {",
159
177
  " var flowUpd = new GlideRecord('sys_hub_flow');",
160
178
  " if (flowUpd.get(flowSysId)) {",
161
- " flowUpd.setValue('latest_snapshot', verSysId);",
179
+ " flowUpd.setValue('latest_snapshot', snapshotRef);",
162
180
  " flowUpd.update();",
163
- " r.steps.latest_snapshot_set = verSysId + '';",
181
+ " r.steps.latest_snapshot_set = { value: snapshotRef + '', source: snapId ? 'snapshot' : 'version' };",
164
182
  " }",
165
- " } catch(lsE) { r.steps.latest_snapshot_set = 'error:' + (lsE.getMessage ? lsE.getMessage() : lsE + ''); }",
183
+ " } catch(lsE) { r.steps.latest_snapshot_set = { error: lsE.getMessage ? lsE.getMessage() : lsE + '' }; }",
166
184
  " }",
167
185
  " r.tier_used = 'gliderecord_scheduled'; r.success = true;",
168
186
  " }",
@@ -289,37 +307,27 @@ async function createFlowViaScheduledJob(
289
307
  " latest_snapshot_value: refLs,",
290
308
  " latest_version: refGr.getValue('latest_version') + ''",
291
309
  " };",
292
- // Find what table latest_snapshot points to
310
+ // Read the reference snapshot record fields (sys_hub_flow_snapshot)
293
311
  " if (refLs !== 'null' && refLs.length === 32) {",
294
- " var snapTables = ['sys_hub_flow_version', 'sys_hub_flow_snapshot', 'sys_hub_compiled_flow', 'sys_hub_flow_base'];",
295
- " for (var st = 0; st < snapTables.length; st++) {",
296
- " try {",
297
- " var stGr = new GlideRecord(snapTables[st]);",
298
- " if (stGr.isValid() && stGr.get(refLs)) {",
299
- " r.steps.reference_flow.snapshot_found_in_table = snapTables[st];",
300
- " r.steps.reference_flow.snapshot_record_name = stGr.getValue('name') + '';",
301
- " break;",
302
- " }",
303
- " } catch(e) {}",
304
- " }",
305
- // Also try sys_metadata (universal)
306
- " if (!r.steps.reference_flow.snapshot_found_in_table) {",
307
- " try {",
308
- " var metaGr = new GlideRecord('sys_metadata');",
309
- " if (metaGr.get(refLs)) {",
310
- " r.steps.reference_flow.snapshot_found_in_table = metaGr.getValue('sys_class_name') + '';",
312
+ " try {",
313
+ " var refSnap = new GlideRecord('sys_hub_flow_snapshot');",
314
+ " if (refSnap.get(refLs)) {",
315
+ " r.steps.reference_flow.snapshot_table = 'sys_hub_flow_snapshot';",
316
+ // Read all non-null fields to learn the schema
317
+ " var snapFields = {};",
318
+ " var snapEl = refSnap.getFields();",
319
+ " for (var si = 0; si < snapEl.size(); si++) {",
320
+ " var sField = snapEl.get(si);",
321
+ " var sName = sField.getName() + '';",
322
+ " var sVal = refSnap.getValue(sName);",
323
+ " if (sVal && sName.indexOf('sys_') !== 0) {",
324
+ " var sStr = sVal + '';",
325
+ " snapFields[sName] = sStr.length > 100 ? sStr.substring(0, 100) + '...(len:' + sStr.length + ')' : sStr;",
326
+ " }",
311
327
  " }",
312
- " } catch(e) {}",
313
- " }",
314
- " }",
315
- // Get field descriptor for latest_snapshot to see its reference table
316
- " var fd = refGr.getElement('latest_snapshot');",
317
- " if (fd) {",
318
- " var ed = fd.getED();",
319
- " if (ed) {",
320
- " r.steps.reference_flow.snapshot_field_type = ed.getInternalType() + '';",
321
- " r.steps.reference_flow.snapshot_field_reference = ed.getReference() + '';",
322
- " }",
328
+ " r.steps.reference_flow.snapshot_fields = snapFields;",
329
+ " }",
330
+ " } catch(snapRefE) { r.steps.reference_flow.snapshot_error = snapRefE + ''; }",
323
331
  " }",
324
332
  // Count trigger/action instances for reference flow
325
333
  " var refTrig = new GlideAggregate('sys_hub_trigger_instance');",