agentsx 0.1.1 → 0.1.2
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/AGENT_PATHS.md +23 -15
- package/README.md +8 -3
- package/REQUIREMENTS.md +11 -1
- package/dist/agents/claude.js +34 -46
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/codex.js +2 -0
- package/dist/agents/codex.js.map +1 -1
- package/dist/agents/copilot.js +14 -46
- package/dist/agents/copilot.js.map +1 -1
- package/dist/agents/cursor.js +24 -27
- package/dist/agents/cursor.js.map +1 -1
- package/dist/agents/opencode.js +43 -34
- package/dist/agents/opencode.js.map +1 -1
- package/dist/commands/pull.d.ts +1 -1
- package/dist/commands/pull.js +2 -2
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts +1 -1
- package/dist/commands/push.js +2 -2
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.js +2 -2
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/targets.js +3 -3
- package/dist/commands/targets.js.map +1 -1
- package/dist/core/planner.js +12 -0
- package/dist/core/planner.js.map +1 -1
- package/dist/core/run-sync-command.d.ts +1 -1
- package/dist/core/run-sync-command.js +19 -2
- package/dist/core/run-sync-command.js.map +1 -1
- package/dist/core/scanner.js +2 -0
- package/dist/core/scanner.js.map +1 -1
- package/dist/core/structured-config.d.ts +22 -0
- package/dist/core/structured-config.js +308 -0
- package/dist/core/structured-config.js.map +1 -0
- package/dist/core/sync-engine.d.ts +1 -0
- package/dist/core/sync-engine.js +147 -8
- package/dist/core/sync-engine.js.map +1 -1
- package/dist/core/target-selectors.d.ts +4 -0
- package/dist/core/target-selectors.js +96 -0
- package/dist/core/target-selectors.js.map +1 -0
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/ui/prompts.js +2 -2
- package/dist/ui/prompts.js.map +1 -1
- package/dist/ui/structured-tree.d.ts +2 -0
- package/dist/ui/structured-tree.js +82 -0
- package/dist/ui/structured-tree.js.map +1 -0
- package/package.json +5 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/agents/opencode.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,GAAG,EAAE,UAAU;IACf,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;IAC5D,UAAU,EAAE;QACV,kCAAkC;QAClC,iCAAiC;QACjC,iCAAiC;QACjC,mCAAmC;KACpC;IACD,OAAO,EAAE;QACP;YACE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../src/agents/opencode.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,GAAG,EAAE,UAAU;IACf,WAAW,EAAE,UAAU;IACvB,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;IAC5D,UAAU,EAAE;QACV,kCAAkC;QAClC,iCAAiC;QACjC,iCAAiC;QACjC,mCAAmC;KACpC;IACD,OAAO,EAAE;QACP;YACE,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,gCAAgC;YACtC,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,MAAM;SACf;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,+CAA+C;YAC5D,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,0BAA0B;YAChC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,MAAM;YACb,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,UAAU;YACjB,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,4CAA4C;YACzD,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,2BAA2B;YACjC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,wBAAwB;YAC9B,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,yCAAyC;YACtD,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC"}
|
package/dist/commands/pull.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { ConflictPolicy } from "../types.js";
|
|
2
|
-
export declare function runPull(agent: string, targets: string[], conflictPolicy?: ConflictPolicy): Promise<void>;
|
|
2
|
+
export declare function runPull(agent: string, targets: string[], conflictPolicy?: ConflictPolicy, jsonPathRules?: string[]): Promise<void>;
|
package/dist/commands/pull.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runSyncCommand } from "../core/run-sync-command.js";
|
|
2
|
-
export async function runPull(agent, targets, conflictPolicy) {
|
|
3
|
-
await runSyncCommand("pull", agent, targets, conflictPolicy);
|
|
2
|
+
export async function runPull(agent, targets, conflictPolicy, jsonPathRules = []) {
|
|
3
|
+
await runSyncCommand("pull", agent, targets, conflictPolicy, jsonPathRules);
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=pull.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,OAAiB,EACjB,cAA+B
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,OAAiB,EACjB,cAA+B,EAC/B,gBAA0B,EAAE;IAE5B,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/commands/push.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { ConflictPolicy } from "../types.js";
|
|
2
|
-
export declare function runPush(agent: string, targets: string[], conflictPolicy?: ConflictPolicy): Promise<void>;
|
|
2
|
+
export declare function runPush(agent: string, targets: string[], conflictPolicy?: ConflictPolicy, jsonPathRules?: string[]): Promise<void>;
|
package/dist/commands/push.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runSyncCommand } from "../core/run-sync-command.js";
|
|
2
|
-
export async function runPush(agent, targets, conflictPolicy) {
|
|
3
|
-
await runSyncCommand("push", agent, targets, conflictPolicy);
|
|
2
|
+
export async function runPush(agent, targets, conflictPolicy, jsonPathRules = []) {
|
|
3
|
+
await runSyncCommand("push", agent, targets, conflictPolicy, jsonPathRules);
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=push.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,OAAiB,EACjB,cAA+B
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,OAAiB,EACjB,cAA+B,EAC/B,gBAA0B,EAAE;IAE5B,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/commands/sync.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { ConflictPolicy } from "../types.js";
|
|
2
|
-
export declare function runSync(agent: string, targets: string[], conflictPolicy?: ConflictPolicy): Promise<void>;
|
|
2
|
+
export declare function runSync(agent: string, targets: string[], conflictPolicy?: ConflictPolicy, jsonPathRules?: string[]): Promise<void>;
|
package/dist/commands/sync.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { runSyncCommand } from "../core/run-sync-command.js";
|
|
2
|
-
export async function runSync(agent, targets, conflictPolicy) {
|
|
3
|
-
await runSyncCommand("sync", agent, targets, conflictPolicy);
|
|
2
|
+
export async function runSync(agent, targets, conflictPolicy, jsonPathRules = []) {
|
|
3
|
+
await runSyncCommand("sync", agent, targets, conflictPolicy, jsonPathRules);
|
|
4
4
|
}
|
|
5
5
|
//# sourceMappingURL=sync.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,OAAiB,EACjB,cAA+B
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,KAAa,EACb,OAAiB,EACjB,cAA+B,EAC/B,gBAA0B,EAAE;IAE5B,MAAM,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AAC9E,CAAC"}
|
package/dist/commands/targets.js
CHANGED
|
@@ -3,10 +3,10 @@ export function runTargets(agentInput) {
|
|
|
3
3
|
const adapter = resolveAgentAdapter(agentInput);
|
|
4
4
|
const lines = [];
|
|
5
5
|
lines.push(`${adapter.displayName} (${adapter.key})`);
|
|
6
|
-
lines.push("
|
|
6
|
+
lines.push("settings:");
|
|
7
7
|
for (const target of adapter.targets) {
|
|
8
|
-
lines.push(`- ${target.id} | ${target.
|
|
9
|
-
lines.push(` ${target.description}`);
|
|
8
|
+
lines.push(`- ${target.id} | ${target.label} | ${target.category} | default=${target.includeByDefault ? "yes" : "no"} | optional=${target.optional ? "yes" : "no"}`);
|
|
9
|
+
lines.push(` ${target.description} (scope=${target.scope}, kind=${target.kind}, structured=${target.structured ? "yes" : "no"}${target.format ? `:${target.format}` : ""})`);
|
|
10
10
|
}
|
|
11
11
|
lines.push("references:");
|
|
12
12
|
for (const ref of adapter.references) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/commands/targets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEhD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/commands/targets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,MAAM,OAAO,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEhD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAExB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CACR,KAAK,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,KAAK,MAAM,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,eAAe,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACzJ,CAAC;QACF,KAAK,CAAC,IAAI,CACR,KAAK,MAAM,CAAC,WAAW,WAAW,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAI,gBAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAClK,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC"}
|
package/dist/core/planner.js
CHANGED
|
@@ -9,6 +9,7 @@ export function mergeEntries(local, remote) {
|
|
|
9
9
|
key,
|
|
10
10
|
targetId: entry.targetId,
|
|
11
11
|
relPath: entry.relPath,
|
|
12
|
+
selector: entry.selector,
|
|
12
13
|
local: entry.snapshot,
|
|
13
14
|
remote: map.get(key)?.remote,
|
|
14
15
|
});
|
|
@@ -20,6 +21,7 @@ export function mergeEntries(local, remote) {
|
|
|
20
21
|
key,
|
|
21
22
|
targetId: entry.targetId,
|
|
22
23
|
relPath: entry.relPath,
|
|
24
|
+
selector: entry.selector ?? prev?.selector,
|
|
23
25
|
local: prev?.local,
|
|
24
26
|
remote: entry.snapshot,
|
|
25
27
|
});
|
|
@@ -42,6 +44,7 @@ function addConflict(conflicts, entry) {
|
|
|
42
44
|
key: entry.key,
|
|
43
45
|
targetId: entry.targetId,
|
|
44
46
|
relPath: entry.relPath,
|
|
47
|
+
selector: entry.selector,
|
|
45
48
|
local: entry.local,
|
|
46
49
|
remote: entry.remote,
|
|
47
50
|
});
|
|
@@ -60,6 +63,7 @@ function pushLikePlan(entries, command, policy) {
|
|
|
60
63
|
key: entry.key,
|
|
61
64
|
targetId: entry.targetId,
|
|
62
65
|
relPath: entry.relPath,
|
|
66
|
+
selector: entry.selector,
|
|
63
67
|
action: command === "push" ? "copy-local-to-remote" : "copy-remote-to-local",
|
|
64
68
|
reason: "new",
|
|
65
69
|
});
|
|
@@ -70,6 +74,7 @@ function pushLikePlan(entries, command, policy) {
|
|
|
70
74
|
key: entry.key,
|
|
71
75
|
targetId: entry.targetId,
|
|
72
76
|
relPath: entry.relPath,
|
|
77
|
+
selector: entry.selector,
|
|
73
78
|
action: "skip",
|
|
74
79
|
reason: "same",
|
|
75
80
|
});
|
|
@@ -81,6 +86,7 @@ function pushLikePlan(entries, command, policy) {
|
|
|
81
86
|
key: entry.key,
|
|
82
87
|
targetId: entry.targetId,
|
|
83
88
|
relPath: entry.relPath,
|
|
89
|
+
selector: entry.selector,
|
|
84
90
|
action: command === "push" ? "copy-local-to-remote" : "copy-remote-to-local",
|
|
85
91
|
reason: "overwrite",
|
|
86
92
|
});
|
|
@@ -90,6 +96,7 @@ function pushLikePlan(entries, command, policy) {
|
|
|
90
96
|
key: entry.key,
|
|
91
97
|
targetId: entry.targetId,
|
|
92
98
|
relPath: entry.relPath,
|
|
99
|
+
selector: entry.selector,
|
|
93
100
|
action: "skip",
|
|
94
101
|
reason: "conflict-skip",
|
|
95
102
|
});
|
|
@@ -110,6 +117,7 @@ function syncPlan(entries, policy) {
|
|
|
110
117
|
key: entry.key,
|
|
111
118
|
targetId: entry.targetId,
|
|
112
119
|
relPath: entry.relPath,
|
|
120
|
+
selector: entry.selector,
|
|
113
121
|
action: "copy-local-to-remote",
|
|
114
122
|
reason: "new",
|
|
115
123
|
});
|
|
@@ -120,6 +128,7 @@ function syncPlan(entries, policy) {
|
|
|
120
128
|
key: entry.key,
|
|
121
129
|
targetId: entry.targetId,
|
|
122
130
|
relPath: entry.relPath,
|
|
131
|
+
selector: entry.selector,
|
|
123
132
|
action: "copy-remote-to-local",
|
|
124
133
|
reason: "new",
|
|
125
134
|
});
|
|
@@ -133,6 +142,7 @@ function syncPlan(entries, policy) {
|
|
|
133
142
|
key: entry.key,
|
|
134
143
|
targetId: entry.targetId,
|
|
135
144
|
relPath: entry.relPath,
|
|
145
|
+
selector: entry.selector,
|
|
136
146
|
action: "skip",
|
|
137
147
|
reason: "same",
|
|
138
148
|
});
|
|
@@ -144,6 +154,7 @@ function syncPlan(entries, policy) {
|
|
|
144
154
|
key: entry.key,
|
|
145
155
|
targetId: entry.targetId,
|
|
146
156
|
relPath: entry.relPath,
|
|
157
|
+
selector: entry.selector,
|
|
147
158
|
action: chooseSyncDirection(entry),
|
|
148
159
|
reason: "overwrite",
|
|
149
160
|
});
|
|
@@ -153,6 +164,7 @@ function syncPlan(entries, policy) {
|
|
|
153
164
|
key: entry.key,
|
|
154
165
|
targetId: entry.targetId,
|
|
155
166
|
relPath: entry.relPath,
|
|
167
|
+
selector: entry.selector,
|
|
156
168
|
action: "skip",
|
|
157
169
|
reason: "conflict-skip",
|
|
158
170
|
});
|
package/dist/core/planner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/core/planner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../src/core/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { ConflictPolicy, SyncCommand } from "../types.js";
|
|
2
|
-
export declare function runSyncCommand(command: SyncCommand, agentInput: string, targetIds: string[], conflictPolicy?: ConflictPolicy): Promise<void>;
|
|
2
|
+
export declare function runSyncCommand(command: SyncCommand, agentInput: string, targetIds: string[], conflictPolicy?: ConflictPolicy, jsonPathRules?: string[]): Promise<void>;
|
|
@@ -4,13 +4,14 @@ import { conflictDefaultKey, saveState } from "./state.js";
|
|
|
4
4
|
import { selectTargets } from "./targets.js";
|
|
5
5
|
import { executeSyncEngine } from "./sync-engine.js";
|
|
6
6
|
import { requireRemote } from "./remote.js";
|
|
7
|
+
import { combineJsonPathSelections, parseCliJsonPathSelections, promptInteractiveJsonPathSelections, } from "./target-selectors.js";
|
|
7
8
|
function timestampIso() {
|
|
8
9
|
return new Date().toISOString();
|
|
9
10
|
}
|
|
10
11
|
function commitMessage(command, agent) {
|
|
11
12
|
return `agentsx(${command}): ${agent} @ ${timestampIso()}`;
|
|
12
13
|
}
|
|
13
|
-
export async function runSyncCommand(command, agentInput, targetIds, conflictPolicy) {
|
|
14
|
+
export async function runSyncCommand(command, agentInput, targetIds, conflictPolicy, jsonPathRules = []) {
|
|
14
15
|
const adapter = resolveAgentAdapter(agentInput);
|
|
15
16
|
const { state, remote } = await requireRemote();
|
|
16
17
|
const remoteStatus = prepareRemoteBranch(remote.mirrorPath, remote.defaultBranch);
|
|
@@ -21,7 +22,19 @@ export async function runSyncCommand(command, agentInput, targetIds, conflictPol
|
|
|
21
22
|
if (selection.targets.length === 0) {
|
|
22
23
|
throw new Error("동기화할 대상을 최소 1개 이상 선택해야 합니다.");
|
|
23
24
|
}
|
|
24
|
-
const
|
|
25
|
+
const cliJsonPathSelections = parseCliJsonPathSelections(selection.targets, jsonPathRules);
|
|
26
|
+
const interactiveJsonPathSelections = selection.interactive
|
|
27
|
+
? await promptInteractiveJsonPathSelections(command, adapter, selection.targets, process.cwd(), remote.mirrorPath)
|
|
28
|
+
: {};
|
|
29
|
+
const jsonPathSelectionsByTarget = combineJsonPathSelections(cliJsonPathSelections, interactiveJsonPathSelections);
|
|
30
|
+
const selectionFingerprint = selection.targets.map((target) => {
|
|
31
|
+
const selectors = jsonPathSelectionsByTarget[target.id];
|
|
32
|
+
if (!selectors || selectors.length === 0) {
|
|
33
|
+
return `${target.id}:*`;
|
|
34
|
+
}
|
|
35
|
+
return `${target.id}:${selectors.slice().sort().join("&")}`;
|
|
36
|
+
});
|
|
37
|
+
const conflictKey = conflictDefaultKey(command, adapter.key, selectionFingerprint);
|
|
25
38
|
const summary = await executeSyncEngine({
|
|
26
39
|
command,
|
|
27
40
|
adapter,
|
|
@@ -32,6 +45,7 @@ export async function runSyncCommand(command, agentInput, targetIds, conflictPol
|
|
|
32
45
|
conflictStateKey: conflictKey,
|
|
33
46
|
interactiveTargets: selection.interactive,
|
|
34
47
|
explicitPolicy: conflictPolicy,
|
|
48
|
+
jsonPathSelectionsByTarget,
|
|
35
49
|
});
|
|
36
50
|
state.lastSyncAtByAgent[adapter.key] = new Date().toISOString();
|
|
37
51
|
await saveState(state);
|
|
@@ -50,6 +64,9 @@ export async function runSyncCommand(command, agentInput, targetIds, conflictPol
|
|
|
50
64
|
`복사(remote->local): ${summary.copiedRemoteToLocal}`,
|
|
51
65
|
`건너뜀: ${summary.skipped}`,
|
|
52
66
|
summary.policy ? `충돌정책: ${summary.policy}` : undefined,
|
|
67
|
+
Object.keys(jsonPathSelectionsByTarget).length > 0
|
|
68
|
+
? `세부선택(jsonpath): ${JSON.stringify(jsonPathSelectionsByTarget)}`
|
|
69
|
+
: undefined,
|
|
53
70
|
adapter.references.length > 0 ? `참고 문서: ${adapter.references.join(", ")}` : undefined,
|
|
54
71
|
].filter(Boolean).join("\n"));
|
|
55
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-sync-command.js","sourceRoot":"","sources":["../../src/core/run-sync-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run-sync-command.js","sourceRoot":"","sources":["../../src/core/run-sync-command.ts"],"names":[],"mappings":"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"}
|
package/dist/core/scanner.js
CHANGED
|
@@ -22,6 +22,7 @@ export async function scanTargetSide(basePath, target, targetId) {
|
|
|
22
22
|
{
|
|
23
23
|
targetId,
|
|
24
24
|
relPath: path.basename(basePath),
|
|
25
|
+
selector: undefined,
|
|
25
26
|
snapshot: await toSnapshot(basePath, fileStat.mtimeMs),
|
|
26
27
|
},
|
|
27
28
|
];
|
|
@@ -32,6 +33,7 @@ export async function scanTargetSide(basePath, target, targetId) {
|
|
|
32
33
|
entries.push({
|
|
33
34
|
targetId,
|
|
34
35
|
relPath: file.relPath,
|
|
36
|
+
selector: undefined,
|
|
35
37
|
snapshot: await toSnapshot(file.absPath, file.mtimeMs),
|
|
36
38
|
});
|
|
37
39
|
}
|
package/dist/core/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,OAAe;IACxD,OAAO;QACL,OAAO;QACP,IAAI,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC;QAC7B,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,MAAkB,EAClB,QAAgB;IAEhB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL;gBACE,QAAQ;gBACR,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAChC,QAAQ,EAAE,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;aACvD;SACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ;YACR,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,OAAqB;IAErB,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,KAAmB,EACnB,OAAqB;IAErB,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../src/core/scanner.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEtE,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,OAAe;IACxD,OAAO;QACL,OAAO;QACP,IAAI,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC;QAC7B,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,MAAkB,EAClB,QAAgB;IAEhB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO;YACL;gBACE,QAAQ;gBACR,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAChC,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,MAAM,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC;aACvD;SACF,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ;YACR,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;SACvD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,OAAqB;IAErB,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAAkB,EAClB,KAAmB,EACnB,OAAqB;IAErB,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAClE,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ConfigFormat, TargetSpec } from "../types.js";
|
|
2
|
+
export interface ParsedJsonPathRule {
|
|
3
|
+
targetId: string;
|
|
4
|
+
expression: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function inferConfigFormatFromPath(filePath: string): ConfigFormat | undefined;
|
|
7
|
+
export declare function isStructuredConfigTarget(target: TargetSpec): boolean;
|
|
8
|
+
export declare function resolveTargetFormat(target: TargetSpec, filePath: string): ConfigFormat;
|
|
9
|
+
export declare function readStructuredFile(filePath: string, format: ConfigFormat): Promise<unknown>;
|
|
10
|
+
export interface SelectorSnapshot {
|
|
11
|
+
exists: boolean;
|
|
12
|
+
hash: string | undefined;
|
|
13
|
+
matchedCount: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function getSelectorSnapshot(doc: unknown, expression: string): SelectorSnapshot;
|
|
16
|
+
export declare function applyStructuredSelectionFile(sourceFilePath: string, destinationFilePath: string, target: TargetSpec, selectors: string[]): Promise<{
|
|
17
|
+
applied: number;
|
|
18
|
+
missingSelectors: string[];
|
|
19
|
+
}>;
|
|
20
|
+
export declare function parseJsonPathRule(input: string): ParsedJsonPathRule;
|
|
21
|
+
export declare function segmentsToJsonPath(segments: Array<string | number>): string;
|
|
22
|
+
export declare function getNodeBySegments(root: unknown, segments: Array<string | number>): unknown;
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { JSONPath } from "jsonpath-plus";
|
|
5
|
+
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
6
|
+
import { parse as parseToml, stringify as stringifyToml } from "@iarna/toml";
|
|
7
|
+
import { ensureDir, exists } from "../utils/fs.js";
|
|
8
|
+
export function inferConfigFormatFromPath(filePath) {
|
|
9
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
10
|
+
if (ext === ".json") {
|
|
11
|
+
return "json";
|
|
12
|
+
}
|
|
13
|
+
if (ext === ".yaml" || ext === ".yml") {
|
|
14
|
+
return "yaml";
|
|
15
|
+
}
|
|
16
|
+
if (ext === ".toml") {
|
|
17
|
+
return "toml";
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
export function isStructuredConfigTarget(target) {
|
|
22
|
+
if (target.kind !== "file") {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
if (target.structured) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
if (typeof target.path !== "string") {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return inferConfigFormatFromPath(target.path) !== undefined;
|
|
32
|
+
}
|
|
33
|
+
export function resolveTargetFormat(target, filePath) {
|
|
34
|
+
if (target.format) {
|
|
35
|
+
return target.format;
|
|
36
|
+
}
|
|
37
|
+
const inferred = inferConfigFormatFromPath(filePath);
|
|
38
|
+
if (!inferred) {
|
|
39
|
+
throw new Error(`구조화 설정 포맷을 추론할 수 없습니다: ${filePath}`);
|
|
40
|
+
}
|
|
41
|
+
return inferred;
|
|
42
|
+
}
|
|
43
|
+
function parseStructuredText(text, format) {
|
|
44
|
+
if (format === "json") {
|
|
45
|
+
return JSON.parse(text);
|
|
46
|
+
}
|
|
47
|
+
if (format === "yaml") {
|
|
48
|
+
return parseYaml(text);
|
|
49
|
+
}
|
|
50
|
+
return parseToml(text);
|
|
51
|
+
}
|
|
52
|
+
function stringifyStructuredValue(value, format) {
|
|
53
|
+
if (format === "json") {
|
|
54
|
+
return `${JSON.stringify(value, null, 2)}\n`;
|
|
55
|
+
}
|
|
56
|
+
if (format === "yaml") {
|
|
57
|
+
return stringifyYaml(value);
|
|
58
|
+
}
|
|
59
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
60
|
+
return stringifyToml(value);
|
|
61
|
+
}
|
|
62
|
+
return stringifyToml({});
|
|
63
|
+
}
|
|
64
|
+
export async function readStructuredFile(filePath, format) {
|
|
65
|
+
const raw = await readFile(filePath, "utf8");
|
|
66
|
+
try {
|
|
67
|
+
return parseStructuredText(raw, format);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
const message = error instanceof Error ? error.message : "파싱 오류";
|
|
71
|
+
throw new Error(`구조화 설정 파싱 실패 (${format}): ${filePath}\n${message}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function parseJsonPathFromResultPath(resultPath) {
|
|
75
|
+
if (resultPath === "$") {
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
const segments = [];
|
|
79
|
+
const bracketRegex = /\[['"]((?:\\.|[^'\\"])*)['"]\]|\[(\d+)\]/g;
|
|
80
|
+
let match;
|
|
81
|
+
while ((match = bracketRegex.exec(resultPath)) !== null) {
|
|
82
|
+
const key = match[1];
|
|
83
|
+
const index = match[2];
|
|
84
|
+
if (typeof key === "string") {
|
|
85
|
+
segments.push(key.replace(/\\'/g, "'").replace(/\\"/g, '"'));
|
|
86
|
+
}
|
|
87
|
+
else if (typeof index === "string") {
|
|
88
|
+
segments.push(Number(index));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return segments;
|
|
92
|
+
}
|
|
93
|
+
function createContainer(next) {
|
|
94
|
+
return typeof next === "number" ? [] : {};
|
|
95
|
+
}
|
|
96
|
+
function getChild(container, key) {
|
|
97
|
+
if (Array.isArray(container) && typeof key === "number") {
|
|
98
|
+
return container[key];
|
|
99
|
+
}
|
|
100
|
+
if (!Array.isArray(container) && typeof key === "string") {
|
|
101
|
+
return container[key];
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
function setChild(container, key, value) {
|
|
106
|
+
if (Array.isArray(container) && typeof key === "number") {
|
|
107
|
+
container[key] = value;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!Array.isArray(container) && typeof key === "string") {
|
|
111
|
+
container[key] = value;
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
throw new Error(`경로 타입 불일치: ${String(key)}`);
|
|
115
|
+
}
|
|
116
|
+
function setBySegments(root, segments, value) {
|
|
117
|
+
if (segments.length === 0) {
|
|
118
|
+
return structuredClone(value);
|
|
119
|
+
}
|
|
120
|
+
const firstSegment = segments[0];
|
|
121
|
+
if (firstSegment === undefined) {
|
|
122
|
+
return structuredClone(value);
|
|
123
|
+
}
|
|
124
|
+
let base;
|
|
125
|
+
if (Array.isArray(root)) {
|
|
126
|
+
base = [...root];
|
|
127
|
+
}
|
|
128
|
+
else if (root && typeof root === "object") {
|
|
129
|
+
base = { ...root };
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
base = createContainer(firstSegment);
|
|
133
|
+
}
|
|
134
|
+
let cursor = base;
|
|
135
|
+
for (let i = 0; i < segments.length - 1; i += 1) {
|
|
136
|
+
const current = segments[i];
|
|
137
|
+
const next = segments[i + 1];
|
|
138
|
+
if (current === undefined || next === undefined) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
const existing = getChild(cursor, current);
|
|
142
|
+
if (existing && typeof existing === "object") {
|
|
143
|
+
setChild(cursor, current, Array.isArray(existing) ? [...existing] : { ...existing });
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
setChild(cursor, current, createContainer(next));
|
|
147
|
+
}
|
|
148
|
+
const nextCursor = getChild(cursor, current);
|
|
149
|
+
if (!nextCursor || typeof nextCursor !== "object") {
|
|
150
|
+
throw new Error(`경로 구성 실패: ${segmentsToJsonPath(segments.slice(0, i + 1))}`);
|
|
151
|
+
}
|
|
152
|
+
cursor = nextCursor;
|
|
153
|
+
}
|
|
154
|
+
const leaf = segments[segments.length - 1];
|
|
155
|
+
if (leaf === undefined) {
|
|
156
|
+
return base;
|
|
157
|
+
}
|
|
158
|
+
setChild(cursor, leaf, structuredClone(value));
|
|
159
|
+
return base;
|
|
160
|
+
}
|
|
161
|
+
function selectMatches(json, expression) {
|
|
162
|
+
const jsonInput = json === null ||
|
|
163
|
+
typeof json === "string" ||
|
|
164
|
+
typeof json === "number" ||
|
|
165
|
+
typeof json === "boolean" ||
|
|
166
|
+
Array.isArray(json) ||
|
|
167
|
+
(typeof json === "object" && json !== null)
|
|
168
|
+
? json
|
|
169
|
+
: null;
|
|
170
|
+
const results = JSONPath({
|
|
171
|
+
path: expression,
|
|
172
|
+
json: jsonInput,
|
|
173
|
+
resultType: "all",
|
|
174
|
+
wrap: true,
|
|
175
|
+
});
|
|
176
|
+
if (!Array.isArray(results)) {
|
|
177
|
+
return [];
|
|
178
|
+
}
|
|
179
|
+
return results;
|
|
180
|
+
}
|
|
181
|
+
function stableStringify(value) {
|
|
182
|
+
if (value === null || typeof value !== "object") {
|
|
183
|
+
return JSON.stringify(value);
|
|
184
|
+
}
|
|
185
|
+
if (Array.isArray(value)) {
|
|
186
|
+
return `[${value.map((item) => stableStringify(item)).join(",")}]`;
|
|
187
|
+
}
|
|
188
|
+
const entries = Object.entries(value).sort(([a], [b]) => a.localeCompare(b));
|
|
189
|
+
return `{${entries.map(([key, val]) => `${JSON.stringify(key)}:${stableStringify(val)}`).join(",")}}`;
|
|
190
|
+
}
|
|
191
|
+
function hashText(text) {
|
|
192
|
+
return createHash("sha256").update(text).digest("hex");
|
|
193
|
+
}
|
|
194
|
+
export function getSelectorSnapshot(doc, expression) {
|
|
195
|
+
const matches = selectMatches(doc, expression);
|
|
196
|
+
if (matches.length === 0) {
|
|
197
|
+
return {
|
|
198
|
+
exists: false,
|
|
199
|
+
hash: undefined,
|
|
200
|
+
matchedCount: 0,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
const canonical = matches
|
|
204
|
+
.map((match) => ({ path: match.path ?? "", value: stableStringify(match.value) }))
|
|
205
|
+
.sort((a, b) => a.path.localeCompare(b.path))
|
|
206
|
+
.map((item) => `${item.path}=${item.value}`)
|
|
207
|
+
.join("|");
|
|
208
|
+
return {
|
|
209
|
+
exists: true,
|
|
210
|
+
hash: hashText(canonical),
|
|
211
|
+
matchedCount: matches.length,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
export async function applyStructuredSelectionFile(sourceFilePath, destinationFilePath, target, selectors) {
|
|
215
|
+
const format = resolveTargetFormat(target, sourceFilePath);
|
|
216
|
+
const source = await readStructuredFile(sourceFilePath, format);
|
|
217
|
+
let destination = {};
|
|
218
|
+
if (await exists(destinationFilePath)) {
|
|
219
|
+
destination = await readStructuredFile(destinationFilePath, format);
|
|
220
|
+
}
|
|
221
|
+
let current = destination;
|
|
222
|
+
let applied = 0;
|
|
223
|
+
const missingSelectors = [];
|
|
224
|
+
for (const selector of selectors) {
|
|
225
|
+
const trimmed = selector.trim();
|
|
226
|
+
if (!trimmed) {
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (trimmed === "$") {
|
|
230
|
+
current = structuredClone(source);
|
|
231
|
+
applied += 1;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const matches = selectMatches(source, trimmed);
|
|
235
|
+
if (matches.length === 0) {
|
|
236
|
+
missingSelectors.push(trimmed);
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
for (const match of matches) {
|
|
240
|
+
if (!match.path) {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
const segments = parseJsonPathFromResultPath(match.path);
|
|
244
|
+
current = setBySegments(current, segments, match.value);
|
|
245
|
+
applied += 1;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (applied === 0) {
|
|
249
|
+
return {
|
|
250
|
+
applied,
|
|
251
|
+
missingSelectors,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
await ensureDir(path.dirname(destinationFilePath));
|
|
255
|
+
await writeFile(destinationFilePath, stringifyStructuredValue(current, format), "utf8");
|
|
256
|
+
return {
|
|
257
|
+
applied,
|
|
258
|
+
missingSelectors,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
export function parseJsonPathRule(input) {
|
|
262
|
+
const trimmed = input.trim();
|
|
263
|
+
const firstEquals = trimmed.indexOf("=");
|
|
264
|
+
if (firstEquals <= 0 || firstEquals === trimmed.length - 1) {
|
|
265
|
+
throw new Error(`--jsonpath 형식이 잘못되었습니다: '${input}'. 형식: targetId=$.path`);
|
|
266
|
+
}
|
|
267
|
+
const targetId = trimmed.slice(0, firstEquals).trim();
|
|
268
|
+
const expression = trimmed.slice(firstEquals + 1).trim();
|
|
269
|
+
if (!targetId || !expression) {
|
|
270
|
+
throw new Error(`--jsonpath 형식이 잘못되었습니다: '${input}'. 형식: targetId=$.path`);
|
|
271
|
+
}
|
|
272
|
+
return { targetId, expression };
|
|
273
|
+
}
|
|
274
|
+
export function segmentsToJsonPath(segments) {
|
|
275
|
+
let pathText = "$";
|
|
276
|
+
for (const segment of segments) {
|
|
277
|
+
if (typeof segment === "number") {
|
|
278
|
+
pathText += `[${segment}]`;
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(segment)) {
|
|
282
|
+
pathText += `.${segment}`;
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
const escaped = segment.replace(/\\/g, "\\\\").replace(/'/g, "\\'");
|
|
286
|
+
pathText += `['${escaped}']`;
|
|
287
|
+
}
|
|
288
|
+
return pathText;
|
|
289
|
+
}
|
|
290
|
+
export function getNodeBySegments(root, segments) {
|
|
291
|
+
let cursor = root;
|
|
292
|
+
for (const segment of segments) {
|
|
293
|
+
if (cursor == null) {
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
296
|
+
if (Array.isArray(cursor) && typeof segment === "number") {
|
|
297
|
+
cursor = cursor[segment];
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
if (!Array.isArray(cursor) && typeof cursor === "object" && typeof segment === "string") {
|
|
301
|
+
cursor = cursor[segment];
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
return undefined;
|
|
305
|
+
}
|
|
306
|
+
return cursor;
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=structured-config.js.map
|