@tenonhq/dovetail-core 0.0.125 → 0.0.126
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/README.md +6 -1
- package/dist/MultiScopeWatcher.js +89 -0
- package/dist/allScopesCommands.js +12 -3
- package/dist/appUtils.js +12 -2
- package/dist/claudeSession.js +50 -5
- package/dist/commander.js +42 -1
- package/dist/createRecordCommand.js +23 -2
- package/dist/envArg.js +64 -15
- package/dist/gitHead.js +36 -0
- package/dist/pullRecord.js +91 -15
- package/dist/reconcileCommand.js +2 -0
- package/dist/snClient.js +45 -3
- package/dist/tests/claudeSession.test.js +22 -0
- package/dist/tests/commanderStrict.test.js +27 -0
- package/dist/tests/createRecordUpdateSet.test.js +40 -0
- package/dist/tests/dovetailUtilsMSTableOptions.test.js +109 -2
- package/dist/tests/envArg.test.js +90 -7
- package/dist/tests/gitHead.test.js +65 -0
- package/dist/tests/multi-scope-watcher.test.js +77 -0
- package/dist/tests/pullRecord.test.js +81 -0
- package/dist/tests/reconcileCreateGuard.test.js +60 -0
- package/dist/tests/snClient.createRecordGuards.test.js +35 -0
- package/dist/tests/snClient.getScopeId.test.js +67 -0
- package/dist/tests/switchUpdateSetSysId.test.js +83 -0
- package/dist/tests/watchClaudeGuard.test.js +132 -0
- package/dist/updateSetCommands.js +19 -2
- package/package.json +1 -1
- package/release-manifest.json +96 -69
- package/skills/dove-setup-project.md +1 -1
- package/skills/dove-troubleshoot-sync.md +1 -1
|
@@ -297,7 +297,7 @@ async function switchUpdateSetCommand(args) {
|
|
|
297
297
|
try {
|
|
298
298
|
const client = (0, snClient_1.defaultClient)();
|
|
299
299
|
// Get update set to switch to
|
|
300
|
-
const targetUpdateSet = await selectUpdateSet(args.name, args.scope);
|
|
300
|
+
const targetUpdateSet = await selectUpdateSet(args.name, args.scope, args.sysId);
|
|
301
301
|
if (!targetUpdateSet) {
|
|
302
302
|
throw new Error("No update set selected");
|
|
303
303
|
}
|
|
@@ -633,8 +633,16 @@ async function getCurrentUpdateSetDetails(scope) {
|
|
|
633
633
|
/**
|
|
634
634
|
* Helper function to select an update set from a list
|
|
635
635
|
*/
|
|
636
|
-
async function selectUpdateSet(nameFilter, scopeFilter) {
|
|
636
|
+
async function selectUpdateSet(nameFilter, scopeFilter, sysIdFilter) {
|
|
637
637
|
let query = "state=in progress";
|
|
638
|
+
// An exact sys_id is unambiguous where a name may not be (two in-progress
|
|
639
|
+
// sets can share a name). Validate it before it reaches the encoded query.
|
|
640
|
+
if (sysIdFilter !== undefined) {
|
|
641
|
+
if (typeof sysIdFilter !== "string" || !/^[0-9a-f]{32}$/i.test(sysIdFilter)) {
|
|
642
|
+
Logger_1.logger.error(`Invalid --sysId "${String(sysIdFilter)}": expected a 32-character sys_id`);
|
|
643
|
+
return null;
|
|
644
|
+
}
|
|
645
|
+
}
|
|
638
646
|
if (scopeFilter) {
|
|
639
647
|
const client = (0, snClient_1.defaultClient)();
|
|
640
648
|
const scopeResult = await (0, snClient_1.unwrapSNResponse)(client.getScopeId(scopeFilter));
|
|
@@ -644,6 +652,15 @@ async function selectUpdateSet(nameFilter, scopeFilter) {
|
|
|
644
652
|
}
|
|
645
653
|
query += `^application=${scopeResult[0].sys_id}`;
|
|
646
654
|
}
|
|
655
|
+
if (sysIdFilter !== undefined) {
|
|
656
|
+
const byId = await getUpdateSets(`${query}^sys_id=${sysIdFilter}`);
|
|
657
|
+
if (byId.length === 0) {
|
|
658
|
+
Logger_1.logger.error(`No in-progress update set with sys_id ${sysIdFilter}` +
|
|
659
|
+
(scopeFilter ? ` in scope "${scopeFilter}"` : ""));
|
|
660
|
+
return null;
|
|
661
|
+
}
|
|
662
|
+
return byId[0];
|
|
663
|
+
}
|
|
647
664
|
const updateSets = await getUpdateSets(query);
|
|
648
665
|
if (updateSets.length === 0) {
|
|
649
666
|
Logger_1.logger.info("No in-progress update sets found");
|
package/package.json
CHANGED
package/release-manifest.json
CHANGED
|
@@ -1,7 +1,102 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "dovetail-manifest/v1",
|
|
3
|
-
"generated_at": "2026-10-
|
|
3
|
+
"generated_at": "2026-10-08T18:59:46.354Z",
|
|
4
4
|
"events": [
|
|
5
|
+
{
|
|
6
|
+
"$schema": "dovetail-release-event/v1",
|
|
7
|
+
"event_id": "dovetail-servicenow@0.0.52",
|
|
8
|
+
"package": "@tenonhq/dovetail-servicenow",
|
|
9
|
+
"version": "0.0.52",
|
|
10
|
+
"prev_version": "0.0.51",
|
|
11
|
+
"published_at": "2026-10-08T18:59:46.343Z",
|
|
12
|
+
"git": {
|
|
13
|
+
"sha": "b2fd9270f790cea252d16a6c57df65707fc97fb8",
|
|
14
|
+
"tag": "dovetail-servicenow@0.0.52"
|
|
15
|
+
},
|
|
16
|
+
"semver_bump": "patch",
|
|
17
|
+
"commits": [
|
|
18
|
+
{
|
|
19
|
+
"sha": "b2fd9270f",
|
|
20
|
+
"subject": "feat(servicenow): sync-ux-events — register now-ui.json actions as sys_ux_event on the macroponent (#324)",
|
|
21
|
+
"pr": 324
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"sha": "301dfbb75",
|
|
25
|
+
"subject": "fix: review fixes for the Oct 1-8 merges, re-land reverted #288 and #311 (#322)",
|
|
26
|
+
"pr": 322
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"sha": "c9f0b0528",
|
|
30
|
+
"subject": "chore(release): publish 2 packages [skip ci]"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"exports_delta": null,
|
|
34
|
+
"narrative": null
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"$schema": "dovetail-release-event/v1",
|
|
38
|
+
"event_id": "dovetail-mcp@0.0.50",
|
|
39
|
+
"package": "@tenonhq/dovetail-mcp",
|
|
40
|
+
"version": "0.0.50",
|
|
41
|
+
"prev_version": "0.0.49",
|
|
42
|
+
"published_at": "2026-10-08T18:59:46.343Z",
|
|
43
|
+
"git": {
|
|
44
|
+
"sha": "b2fd9270f790cea252d16a6c57df65707fc97fb8",
|
|
45
|
+
"tag": "dovetail-mcp@0.0.50"
|
|
46
|
+
},
|
|
47
|
+
"semver_bump": "patch",
|
|
48
|
+
"commits": [
|
|
49
|
+
{
|
|
50
|
+
"sha": "301dfbb75",
|
|
51
|
+
"subject": "fix: review fixes for the Oct 1-8 merges, re-land reverted #288 and #311 (#322)",
|
|
52
|
+
"pr": 322
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"sha": "c9f0b0528",
|
|
56
|
+
"subject": "chore(release): publish 2 packages [skip ci]"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"exports_delta": null,
|
|
60
|
+
"narrative": null
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"$schema": "dovetail-release-event/v1",
|
|
64
|
+
"event_id": "dovetail-core@0.0.125",
|
|
65
|
+
"package": "@tenonhq/dovetail-core",
|
|
66
|
+
"version": "0.0.125",
|
|
67
|
+
"prev_version": "0.0.124",
|
|
68
|
+
"published_at": "2026-10-08T07:05:53.853Z",
|
|
69
|
+
"git": {
|
|
70
|
+
"sha": "d9cb3db0700edff976d54ac69497e4722452189f",
|
|
71
|
+
"tag": "dovetail-core@0.0.125"
|
|
72
|
+
},
|
|
73
|
+
"semver_bump": "patch",
|
|
74
|
+
"commits": [
|
|
75
|
+
{
|
|
76
|
+
"sha": "d9cb3db07",
|
|
77
|
+
"subject": "feat(core): dove pull <table> <sys_id> — per-record pull without a scope refresh (#321)",
|
|
78
|
+
"pr": 321
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"sha": "c9f0b0528",
|
|
82
|
+
"subject": "chore(release): publish 2 packages [skip ci]"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"sha": "6579c6d00",
|
|
86
|
+
"subject": "chore(release): publish 2 packages [skip ci]"
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"sha": "73c35c0c0",
|
|
90
|
+
"subject": "chore(release): publish 2 packages [skip ci]"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"sha": "c45a56a81",
|
|
94
|
+
"subject": "chore(release): publish 3 packages [skip ci]"
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"exports_delta": null,
|
|
98
|
+
"narrative": null
|
|
99
|
+
},
|
|
5
100
|
{
|
|
6
101
|
"$schema": "dovetail-release-event/v1",
|
|
7
102
|
"event_id": "dovetail-servicenow@0.0.51",
|
|
@@ -1243,74 +1338,6 @@
|
|
|
1243
1338
|
],
|
|
1244
1339
|
"exports_delta": null,
|
|
1245
1340
|
"narrative": null
|
|
1246
|
-
},
|
|
1247
|
-
{
|
|
1248
|
-
"$schema": "dovetail-release-event/v1",
|
|
1249
|
-
"event_id": "dovetail-mcp@0.0.35",
|
|
1250
|
-
"package": "@tenonhq/dovetail-mcp",
|
|
1251
|
-
"version": "0.0.35",
|
|
1252
|
-
"prev_version": "0.0.34",
|
|
1253
|
-
"published_at": "2026-09-15T23:33:16.570Z",
|
|
1254
|
-
"git": {
|
|
1255
|
-
"sha": "925c0ca40cc6407fa78f28b25b82f8dc0fbd460f",
|
|
1256
|
-
"tag": "dovetail-mcp@0.0.35"
|
|
1257
|
-
},
|
|
1258
|
-
"semver_bump": "patch",
|
|
1259
|
-
"commits": [
|
|
1260
|
-
{
|
|
1261
|
-
"sha": "83df94645",
|
|
1262
|
-
"subject": "chore(release): publish 2 packages [skip ci]"
|
|
1263
|
-
}
|
|
1264
|
-
],
|
|
1265
|
-
"exports_delta": null,
|
|
1266
|
-
"narrative": null
|
|
1267
|
-
},
|
|
1268
|
-
{
|
|
1269
|
-
"$schema": "dovetail-release-event/v1",
|
|
1270
|
-
"event_id": "dovetail-servicenow@0.0.37",
|
|
1271
|
-
"package": "@tenonhq/dovetail-servicenow",
|
|
1272
|
-
"version": "0.0.37",
|
|
1273
|
-
"prev_version": "0.0.36",
|
|
1274
|
-
"published_at": "2026-09-15T22:43:57.664Z",
|
|
1275
|
-
"git": {
|
|
1276
|
-
"sha": "420fbbb20842c3369ed85e9b3325fd1ead989540",
|
|
1277
|
-
"tag": "dovetail-servicenow@0.0.37"
|
|
1278
|
-
},
|
|
1279
|
-
"semver_bump": "patch",
|
|
1280
|
-
"commits": [
|
|
1281
|
-
{
|
|
1282
|
-
"sha": "420fbbb20",
|
|
1283
|
-
"subject": "feat(servicenow): add-index — create a unique index on a scoped table via the dictionary unique flag (#275)",
|
|
1284
|
-
"pr": 275
|
|
1285
|
-
},
|
|
1286
|
-
{
|
|
1287
|
-
"sha": "4576c072f",
|
|
1288
|
-
"subject": "chore(release): publish 15 packages [skip ci]"
|
|
1289
|
-
}
|
|
1290
|
-
],
|
|
1291
|
-
"exports_delta": null,
|
|
1292
|
-
"narrative": null
|
|
1293
|
-
},
|
|
1294
|
-
{
|
|
1295
|
-
"$schema": "dovetail-release-event/v1",
|
|
1296
|
-
"event_id": "dovetail-mcp@0.0.34",
|
|
1297
|
-
"package": "@tenonhq/dovetail-mcp",
|
|
1298
|
-
"version": "0.0.34",
|
|
1299
|
-
"prev_version": "0.0.33",
|
|
1300
|
-
"published_at": "2026-09-15T22:43:57.664Z",
|
|
1301
|
-
"git": {
|
|
1302
|
-
"sha": "420fbbb20842c3369ed85e9b3325fd1ead989540",
|
|
1303
|
-
"tag": "dovetail-mcp@0.0.34"
|
|
1304
|
-
},
|
|
1305
|
-
"semver_bump": "patch",
|
|
1306
|
-
"commits": [
|
|
1307
|
-
{
|
|
1308
|
-
"sha": "4576c072f",
|
|
1309
|
-
"subject": "chore(release): publish 15 packages [skip ci]"
|
|
1310
|
-
}
|
|
1311
|
-
],
|
|
1312
|
-
"exports_delta": null,
|
|
1313
|
-
"narrative": null
|
|
1314
1341
|
}
|
|
1315
1342
|
]
|
|
1316
1343
|
}
|
|
@@ -56,7 +56,7 @@ SN_INSTANCE=your-instance.service-now.com
|
|
|
56
56
|
- Instance should NOT have `https://` prefix or trailing slash
|
|
57
57
|
- Optional: `DASHBOARD_PORT=3456`
|
|
58
58
|
- **Never commit `.env` to git**
|
|
59
|
-
- **Multiple instances?** Keep one file per instance (`.env.dev`, `.env.prod`) and pass `--env <path>` (alias `-e`) on any command: `npx dove push --env
|
|
59
|
+
- **Multiple instances?** Keep one file per instance (`.env.dev`, `.env.prod`) and pass `--env <name|path>` (alias `-e`) on any command: `npx dove push --env prod` (bare name → `.env.prod` in the cwd) or `npx dove push --env .env.prod`. `dove login --env prod` writes credentials to that file too. Git-ignore the whole pattern (`.env*`).
|
|
60
60
|
|
|
61
61
|
#### Set up `.gitignore`
|
|
62
62
|
```
|
|
@@ -49,7 +49,7 @@ Ask the user which symptom they are experiencing (if not already clear):
|
|
|
49
49
|
- Instance should NOT have `https://` prefix or trailing slash
|
|
50
50
|
- Credentials must have admin or developer role
|
|
51
51
|
|
|
52
|
-
2. **Test connection:** `npx dove status` (add `--env <path>` to test a specific credential file, e.g. `npx dove status --env
|
|
52
|
+
2. **Test connection:** `npx dove status` (add `--env <name|path>` to test a specific credential file, e.g. `npx dove status --env prod` for `.env.prod` in the cwd)
|
|
53
53
|
|
|
54
54
|
3. **Check the Dovetail server scoped app** is installed on the instance. Without it, API endpoints will 404.
|
|
55
55
|
|