@tianshu-ai/tianshu 0.4.1 → 0.4.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/node_modules/@tianshu-ai/plugin-sdk/dist/workforce-snapshot.d.ts +50 -0
- package/node_modules/@tianshu-ai/plugin-sdk/dist/workforce-snapshot.d.ts.map +1 -1
- package/node_modules/@tianshu-ai/plugin-sdk/src/workforce-snapshot.ts +52 -0
- package/package.json +1 -1
- package/packages/plugin-sdk/dist/workforce-snapshot.d.ts +50 -0
- package/packages/plugin-sdk/dist/workforce-snapshot.d.ts.map +1 -1
- package/packages/server/dist/workforce/snapshot.d.ts.map +1 -1
- package/packages/server/dist/workforce/snapshot.js +55 -3
- package/packages/server/dist/workforce/snapshot.js.map +1 -1
- package/packages/web/dist/assets/{bundle-web-CN6iyzXK.js → bundle-web-4cjT-3Gc.js} +1 -1
- package/packages/web/dist/assets/index-5Pcda8Ig.js +71 -0
- package/packages/web/dist/assets/index-fnzabO1H.css +2 -0
- package/packages/web/dist/index.html +2 -2
- package/plugins/workforce-studio/dist/client.d.ts.map +1 -1
- package/plugins/workforce-studio/dist/client.js +51 -5
- package/plugins/workforce-studio/dist/client.js.map +1 -1
- package/plugins/workforce-studio/dist/zip-builder.d.ts.map +1 -1
- package/plugins/workforce-studio/dist/zip-builder.js +46 -3
- package/plugins/workforce-studio/dist/zip-builder.js.map +1 -1
- package/packages/web/dist/assets/index-Cwi5Z-00.js +0 -71
- package/packages/web/dist/assets/index-DanHqw0s.css +0 -2
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
/** Where a tool / skill comes from. Studio renders this as a
|
|
2
|
+
* coloured badge so the operator can tell at a glance whether
|
|
3
|
+
* a capability is part of the core install, a built-in plugin,
|
|
4
|
+
* or something a tenant administrator added later.
|
|
5
|
+
*
|
|
6
|
+
* - "core" Host-owned tools registered directly by
|
|
7
|
+
* the server (e.g. worker_analytics).
|
|
8
|
+
* - "builtin-plugin" A plugin shipped under `plugins/<id>/`
|
|
9
|
+
* inside this Tianshu install. Always
|
|
10
|
+
* available without operator action.
|
|
11
|
+
* - "tenant-plugin" A plugin discovered under the tenant's
|
|
12
|
+
* `<home>/_tenant/config/plugins/<id>/`
|
|
13
|
+
* — installed/edited per-tenant.
|
|
14
|
+
*/
|
|
15
|
+
export type WorkforceOrigin = "core" | "builtin-plugin" | "tenant-plugin";
|
|
1
16
|
/** Tool the agent has access to, with enough detail to render a
|
|
2
17
|
* studio detail panel + write a `tools.md` entry in the zip. */
|
|
3
18
|
export interface WorkforceToolEntry {
|
|
@@ -14,6 +29,9 @@ export interface WorkforceToolEntry {
|
|
|
14
29
|
/** Manifest `since` version (string semver). null when the
|
|
15
30
|
* plugin didn't declare it. */
|
|
16
31
|
since: string | null;
|
|
32
|
+
/** Provenance bucket. Computed from `pluginId` against the
|
|
33
|
+
* plugin inventory so the studio can group/colour by origin. */
|
|
34
|
+
origin: WorkforceOrigin;
|
|
17
35
|
}
|
|
18
36
|
/** Skill the agent has access to. Includes the markdown body so
|
|
19
37
|
* the zip export can reproduce the file the agent reads when it
|
|
@@ -34,6 +52,34 @@ export interface WorkforceSkillEntry {
|
|
|
34
52
|
relativePath: string;
|
|
35
53
|
/** Full markdown body, frontmatter included. */
|
|
36
54
|
body: string;
|
|
55
|
+
/** Same provenance bucket as tools; computed from `pluginId`. */
|
|
56
|
+
origin: WorkforceOrigin;
|
|
57
|
+
}
|
|
58
|
+
/** One row in the plugin inventory the studio displays at the top
|
|
59
|
+
* of the snapshot. The host derives this from the active plugin
|
|
60
|
+
* registry; non-active (failed / disabled) plugins are still
|
|
61
|
+
* surfaced so admins can see why a missing tool/skill is missing. */
|
|
62
|
+
export interface WorkforcePluginInfo {
|
|
63
|
+
id: string;
|
|
64
|
+
displayName: string;
|
|
65
|
+
version: string;
|
|
66
|
+
description: string;
|
|
67
|
+
/** Where the plugin manifest was found. Maps directly to
|
|
68
|
+
* WorkforceOrigin so the studio can colour-match plugin rows
|
|
69
|
+
* against tool/skill badges. */
|
|
70
|
+
origin: "builtin-plugin" | "tenant-plugin";
|
|
71
|
+
/** Lifecycle state: "active" means the registry activated it;
|
|
72
|
+
* "failed" / "disabled" / etc. mean the plugin is known but
|
|
73
|
+
* not currently contributing anything. Studio displays the
|
|
74
|
+
* reason for non-active states. */
|
|
75
|
+
state: "active" | "failed" | "disabled" | "loading";
|
|
76
|
+
/** Populated for non-active states; null when state===active. */
|
|
77
|
+
failureReason: string | null;
|
|
78
|
+
/** Number of tools this plugin currently contributes to the
|
|
79
|
+
* main agent. Useful for a quick "weight" view. */
|
|
80
|
+
toolCount: number;
|
|
81
|
+
/** Number of skills this plugin currently contributes. */
|
|
82
|
+
skillCount: number;
|
|
37
83
|
}
|
|
38
84
|
export interface WorkforceMainAgent {
|
|
39
85
|
/** Brand name from tenant config. */
|
|
@@ -99,6 +145,10 @@ export interface WorkforceSnapshot {
|
|
|
99
145
|
* zip's README so future re-imports know what era the export
|
|
100
146
|
* belongs to. */
|
|
101
147
|
tianshuVersion: string;
|
|
148
|
+
/** Inventory of every plugin currently visible to the tenant.
|
|
149
|
+
* Each tool/skill entry's `origin` field is derived from this
|
|
150
|
+
* list, so a UI can correlate a badge back to a concrete row. */
|
|
151
|
+
plugins: WorkforcePluginInfo[];
|
|
102
152
|
main: WorkforceMainAgent;
|
|
103
153
|
workers: WorkforceWorkerAgent[];
|
|
104
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workforce-snapshot.d.ts","sourceRoot":"","sources":["../src/workforce-snapshot.ts"],"names":[],"mappings":"AAiBA;iEACiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB;0DACsD;IACtD,UAAU,EAAE,OAAO,CAAC;IACpB;uCACmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB;oCACgC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"workforce-snapshot.d.ts","sourceRoot":"","sources":["../src/workforce-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,22 @@
|
|
|
15
15
|
// part of the bundle. The catalog capabilities stay slim for
|
|
16
16
|
// the cases that only need names + descriptions.
|
|
17
17
|
|
|
18
|
+
/** Where a tool / skill comes from. Studio renders this as a
|
|
19
|
+
* coloured badge so the operator can tell at a glance whether
|
|
20
|
+
* a capability is part of the core install, a built-in plugin,
|
|
21
|
+
* or something a tenant administrator added later.
|
|
22
|
+
*
|
|
23
|
+
* - "core" Host-owned tools registered directly by
|
|
24
|
+
* the server (e.g. worker_analytics).
|
|
25
|
+
* - "builtin-plugin" A plugin shipped under `plugins/<id>/`
|
|
26
|
+
* inside this Tianshu install. Always
|
|
27
|
+
* available without operator action.
|
|
28
|
+
* - "tenant-plugin" A plugin discovered under the tenant's
|
|
29
|
+
* `<home>/_tenant/config/plugins/<id>/`
|
|
30
|
+
* — installed/edited per-tenant.
|
|
31
|
+
*/
|
|
32
|
+
export type WorkforceOrigin = "core" | "builtin-plugin" | "tenant-plugin";
|
|
33
|
+
|
|
18
34
|
/** Tool the agent has access to, with enough detail to render a
|
|
19
35
|
* studio detail panel + write a `tools.md` entry in the zip. */
|
|
20
36
|
export interface WorkforceToolEntry {
|
|
@@ -31,6 +47,9 @@ export interface WorkforceToolEntry {
|
|
|
31
47
|
/** Manifest `since` version (string semver). null when the
|
|
32
48
|
* plugin didn't declare it. */
|
|
33
49
|
since: string | null;
|
|
50
|
+
/** Provenance bucket. Computed from `pluginId` against the
|
|
51
|
+
* plugin inventory so the studio can group/colour by origin. */
|
|
52
|
+
origin: WorkforceOrigin;
|
|
34
53
|
}
|
|
35
54
|
|
|
36
55
|
/** Skill the agent has access to. Includes the markdown body so
|
|
@@ -52,6 +71,35 @@ export interface WorkforceSkillEntry {
|
|
|
52
71
|
relativePath: string;
|
|
53
72
|
/** Full markdown body, frontmatter included. */
|
|
54
73
|
body: string;
|
|
74
|
+
/** Same provenance bucket as tools; computed from `pluginId`. */
|
|
75
|
+
origin: WorkforceOrigin;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** One row in the plugin inventory the studio displays at the top
|
|
79
|
+
* of the snapshot. The host derives this from the active plugin
|
|
80
|
+
* registry; non-active (failed / disabled) plugins are still
|
|
81
|
+
* surfaced so admins can see why a missing tool/skill is missing. */
|
|
82
|
+
export interface WorkforcePluginInfo {
|
|
83
|
+
id: string;
|
|
84
|
+
displayName: string;
|
|
85
|
+
version: string;
|
|
86
|
+
description: string;
|
|
87
|
+
/** Where the plugin manifest was found. Maps directly to
|
|
88
|
+
* WorkforceOrigin so the studio can colour-match plugin rows
|
|
89
|
+
* against tool/skill badges. */
|
|
90
|
+
origin: "builtin-plugin" | "tenant-plugin";
|
|
91
|
+
/** Lifecycle state: "active" means the registry activated it;
|
|
92
|
+
* "failed" / "disabled" / etc. mean the plugin is known but
|
|
93
|
+
* not currently contributing anything. Studio displays the
|
|
94
|
+
* reason for non-active states. */
|
|
95
|
+
state: "active" | "failed" | "disabled" | "loading";
|
|
96
|
+
/** Populated for non-active states; null when state===active. */
|
|
97
|
+
failureReason: string | null;
|
|
98
|
+
/** Number of tools this plugin currently contributes to the
|
|
99
|
+
* main agent. Useful for a quick "weight" view. */
|
|
100
|
+
toolCount: number;
|
|
101
|
+
/** Number of skills this plugin currently contributes. */
|
|
102
|
+
skillCount: number;
|
|
55
103
|
}
|
|
56
104
|
|
|
57
105
|
export interface WorkforceMainAgent {
|
|
@@ -120,6 +168,10 @@ export interface WorkforceSnapshot {
|
|
|
120
168
|
* zip's README so future re-imports know what era the export
|
|
121
169
|
* belongs to. */
|
|
122
170
|
tianshuVersion: string;
|
|
171
|
+
/** Inventory of every plugin currently visible to the tenant.
|
|
172
|
+
* Each tool/skill entry's `origin` field is derived from this
|
|
173
|
+
* list, so a UI can correlate a badge back to a concrete row. */
|
|
174
|
+
plugins: WorkforcePluginInfo[];
|
|
123
175
|
main: WorkforceMainAgent;
|
|
124
176
|
workers: WorkforceWorkerAgent[];
|
|
125
177
|
}
|
package/package.json
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
/** Where a tool / skill comes from. Studio renders this as a
|
|
2
|
+
* coloured badge so the operator can tell at a glance whether
|
|
3
|
+
* a capability is part of the core install, a built-in plugin,
|
|
4
|
+
* or something a tenant administrator added later.
|
|
5
|
+
*
|
|
6
|
+
* - "core" Host-owned tools registered directly by
|
|
7
|
+
* the server (e.g. worker_analytics).
|
|
8
|
+
* - "builtin-plugin" A plugin shipped under `plugins/<id>/`
|
|
9
|
+
* inside this Tianshu install. Always
|
|
10
|
+
* available without operator action.
|
|
11
|
+
* - "tenant-plugin" A plugin discovered under the tenant's
|
|
12
|
+
* `<home>/_tenant/config/plugins/<id>/`
|
|
13
|
+
* — installed/edited per-tenant.
|
|
14
|
+
*/
|
|
15
|
+
export type WorkforceOrigin = "core" | "builtin-plugin" | "tenant-plugin";
|
|
1
16
|
/** Tool the agent has access to, with enough detail to render a
|
|
2
17
|
* studio detail panel + write a `tools.md` entry in the zip. */
|
|
3
18
|
export interface WorkforceToolEntry {
|
|
@@ -14,6 +29,9 @@ export interface WorkforceToolEntry {
|
|
|
14
29
|
/** Manifest `since` version (string semver). null when the
|
|
15
30
|
* plugin didn't declare it. */
|
|
16
31
|
since: string | null;
|
|
32
|
+
/** Provenance bucket. Computed from `pluginId` against the
|
|
33
|
+
* plugin inventory so the studio can group/colour by origin. */
|
|
34
|
+
origin: WorkforceOrigin;
|
|
17
35
|
}
|
|
18
36
|
/** Skill the agent has access to. Includes the markdown body so
|
|
19
37
|
* the zip export can reproduce the file the agent reads when it
|
|
@@ -34,6 +52,34 @@ export interface WorkforceSkillEntry {
|
|
|
34
52
|
relativePath: string;
|
|
35
53
|
/** Full markdown body, frontmatter included. */
|
|
36
54
|
body: string;
|
|
55
|
+
/** Same provenance bucket as tools; computed from `pluginId`. */
|
|
56
|
+
origin: WorkforceOrigin;
|
|
57
|
+
}
|
|
58
|
+
/** One row in the plugin inventory the studio displays at the top
|
|
59
|
+
* of the snapshot. The host derives this from the active plugin
|
|
60
|
+
* registry; non-active (failed / disabled) plugins are still
|
|
61
|
+
* surfaced so admins can see why a missing tool/skill is missing. */
|
|
62
|
+
export interface WorkforcePluginInfo {
|
|
63
|
+
id: string;
|
|
64
|
+
displayName: string;
|
|
65
|
+
version: string;
|
|
66
|
+
description: string;
|
|
67
|
+
/** Where the plugin manifest was found. Maps directly to
|
|
68
|
+
* WorkforceOrigin so the studio can colour-match plugin rows
|
|
69
|
+
* against tool/skill badges. */
|
|
70
|
+
origin: "builtin-plugin" | "tenant-plugin";
|
|
71
|
+
/** Lifecycle state: "active" means the registry activated it;
|
|
72
|
+
* "failed" / "disabled" / etc. mean the plugin is known but
|
|
73
|
+
* not currently contributing anything. Studio displays the
|
|
74
|
+
* reason for non-active states. */
|
|
75
|
+
state: "active" | "failed" | "disabled" | "loading";
|
|
76
|
+
/** Populated for non-active states; null when state===active. */
|
|
77
|
+
failureReason: string | null;
|
|
78
|
+
/** Number of tools this plugin currently contributes to the
|
|
79
|
+
* main agent. Useful for a quick "weight" view. */
|
|
80
|
+
toolCount: number;
|
|
81
|
+
/** Number of skills this plugin currently contributes. */
|
|
82
|
+
skillCount: number;
|
|
37
83
|
}
|
|
38
84
|
export interface WorkforceMainAgent {
|
|
39
85
|
/** Brand name from tenant config. */
|
|
@@ -99,6 +145,10 @@ export interface WorkforceSnapshot {
|
|
|
99
145
|
* zip's README so future re-imports know what era the export
|
|
100
146
|
* belongs to. */
|
|
101
147
|
tianshuVersion: string;
|
|
148
|
+
/** Inventory of every plugin currently visible to the tenant.
|
|
149
|
+
* Each tool/skill entry's `origin` field is derived from this
|
|
150
|
+
* list, so a UI can correlate a badge back to a concrete row. */
|
|
151
|
+
plugins: WorkforcePluginInfo[];
|
|
102
152
|
main: WorkforceMainAgent;
|
|
103
153
|
workers: WorkforceWorkerAgent[];
|
|
104
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workforce-snapshot.d.ts","sourceRoot":"","sources":["../src/workforce-snapshot.ts"],"names":[],"mappings":"AAiBA;iEACiE;AACjE,MAAM,WAAW,kBAAkB;IACjC,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB;0DACsD;IACtD,UAAU,EAAE,OAAO,CAAC;IACpB;uCACmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB;oCACgC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"workforce-snapshot.d.ts","sourceRoot":"","sources":["../src/workforce-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/workforce/snapshot.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/workforce/snapshot.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAIV,iBAAiB,EAGlB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAGlE,UAAU,iBAAiB;IACzB,GAAG,EAAE,aAAa,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,CAiInB"}
|
|
@@ -35,6 +35,16 @@ import { defaultSystemPrompt } from "../chat/system-prompt.js";
|
|
|
35
35
|
*/
|
|
36
36
|
export function buildWorkforceSnapshot(args) {
|
|
37
37
|
const { ctx, userId, pluginRegistry, tianshuVersion } = args;
|
|
38
|
+
// --- Plugin inventory (drives the provenance bucket for each
|
|
39
|
+
// tool/skill, and is itself surfaced in the studio so an
|
|
40
|
+
// operator can see what's actually installed).
|
|
41
|
+
const entries = pluginRegistry.listForTenant(ctx.tenantId);
|
|
42
|
+
const originByPlugin = new Map();
|
|
43
|
+
originByPlugin.set("core", "core");
|
|
44
|
+
for (const e of entries) {
|
|
45
|
+
originByPlugin.set(e.manifest.id, e.source === "builtin" ? "builtin-plugin" : "tenant-plugin");
|
|
46
|
+
}
|
|
47
|
+
const resolveOrigin = (pluginId) => originByPlugin.get(pluginId) ?? "core";
|
|
38
48
|
// --- Tool catalog (with since metadata) ---
|
|
39
49
|
const catalog = pluginRegistry.toolCatalogForTenant(ctx.tenantId);
|
|
40
50
|
const sinceByName = new Map();
|
|
@@ -53,11 +63,12 @@ export function buildWorkforceSnapshot(args) {
|
|
|
53
63
|
parameters: tool.schema.parameters ?? null,
|
|
54
64
|
pluginId,
|
|
55
65
|
since: sinceByName.get(tool.schema.name) ?? null,
|
|
66
|
+
origin: resolveOrigin(pluginId),
|
|
56
67
|
}))
|
|
57
68
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
58
69
|
// --- Skills (with body) ---
|
|
59
70
|
const allSkills = pluginRegistry.skillsForTenant(ctx.tenantId);
|
|
60
|
-
const skillsAll = allSkills.map((s) => toSkillEntry(s));
|
|
71
|
+
const skillsAll = allSkills.map((s) => toSkillEntry(s, resolveOrigin));
|
|
61
72
|
// --- Main agent ---
|
|
62
73
|
// The host doesn't have a one-call helper to assemble plugin
|
|
63
74
|
// fragments + skills + brand for arbitrary callers, but
|
|
@@ -75,25 +86,65 @@ export function buildWorkforceSnapshot(args) {
|
|
|
75
86
|
// --- Workers ---
|
|
76
87
|
const fsRecords = loadWorkerAgents(ctx.tenantId, ctx.home);
|
|
77
88
|
const workers = fsRecords.map((r) => toWorkerEntry(r, toolsAll, skillsAll));
|
|
89
|
+
// --- Plugin inventory rows ---
|
|
90
|
+
// We count tools/skills per plugin so the studio can show a
|
|
91
|
+
// "weight" ("contributes 12 tools, 4 skills"). The counts are
|
|
92
|
+
// derived from the same catalogs the agent sees, not the
|
|
93
|
+
// manifest's declared contributes[] — a plugin can declare
|
|
94
|
+
// tools that fail to register (missing module export) and we
|
|
95
|
+
// want to surface what actually made it through.
|
|
96
|
+
const toolCountByPlugin = new Map();
|
|
97
|
+
for (const t of toolsAll) {
|
|
98
|
+
toolCountByPlugin.set(t.pluginId, (toolCountByPlugin.get(t.pluginId) ?? 0) + 1);
|
|
99
|
+
}
|
|
100
|
+
const skillCountByPlugin = new Map();
|
|
101
|
+
for (const s of skillsAll) {
|
|
102
|
+
skillCountByPlugin.set(s.pluginId, (skillCountByPlugin.get(s.pluginId) ?? 0) + 1);
|
|
103
|
+
}
|
|
104
|
+
const plugins = entries
|
|
105
|
+
.map((e) => ({
|
|
106
|
+
id: e.manifest.id,
|
|
107
|
+
displayName: e.manifest.displayName ?? e.manifest.id,
|
|
108
|
+
version: e.manifest.version ?? "0.0.0",
|
|
109
|
+
description: e.manifest.description ?? "",
|
|
110
|
+
origin: e.source === "builtin"
|
|
111
|
+
? "builtin-plugin"
|
|
112
|
+
: "tenant-plugin",
|
|
113
|
+
// Map the registry's PluginState onto a closed enum the SDK
|
|
114
|
+
// can present. "loading" only appears mid-activation; by
|
|
115
|
+
// the time we read the entry it's almost always settled.
|
|
116
|
+
state: mapPluginState(e.state),
|
|
117
|
+
failureReason: e.state === "failed" ? e.failedReason ?? null : null,
|
|
118
|
+
toolCount: toolCountByPlugin.get(e.manifest.id) ?? 0,
|
|
119
|
+
skillCount: skillCountByPlugin.get(e.manifest.id) ?? 0,
|
|
120
|
+
}))
|
|
121
|
+
.sort((a, b) => a.id.localeCompare(b.id));
|
|
78
122
|
return {
|
|
79
123
|
tenantId: ctx.tenantId,
|
|
80
124
|
userId,
|
|
81
125
|
generatedAt: Date.now(),
|
|
82
126
|
tianshuVersion,
|
|
127
|
+
plugins,
|
|
83
128
|
main: {
|
|
84
129
|
brandName,
|
|
85
130
|
defaultModelId,
|
|
86
131
|
systemPrompt: mainSystemPrompt,
|
|
87
132
|
tools: toolsAll, // main sees the full catalog
|
|
88
|
-
skills: mainSkills.map(toSkillEntry),
|
|
133
|
+
skills: mainSkills.map((s) => toSkillEntry(s, resolveOrigin)),
|
|
89
134
|
},
|
|
90
135
|
workers,
|
|
91
136
|
};
|
|
92
137
|
}
|
|
138
|
+
function mapPluginState(state) {
|
|
139
|
+
if (state === "active" || state === "failed" || state === "disabled") {
|
|
140
|
+
return state;
|
|
141
|
+
}
|
|
142
|
+
return "loading";
|
|
143
|
+
}
|
|
93
144
|
function filterScope(skills, audience) {
|
|
94
145
|
return skills.filter((s) => !s.scope || s.scope === audience);
|
|
95
146
|
}
|
|
96
|
-
function toSkillEntry(s) {
|
|
147
|
+
function toSkillEntry(s, resolveOrigin) {
|
|
97
148
|
return {
|
|
98
149
|
name: s.name,
|
|
99
150
|
description: s.description,
|
|
@@ -106,6 +157,7 @@ function toSkillEntry(s) {
|
|
|
106
157
|
// so callers can correlate, but a stable shape matters more.
|
|
107
158
|
relativePath: `${s.source.pluginId}/${path.basename(s.filePath)}`,
|
|
108
159
|
body: s.body ?? safeReadFile(s.filePath),
|
|
160
|
+
origin: resolveOrigin(s.source.pluginId),
|
|
109
161
|
};
|
|
110
162
|
}
|
|
111
163
|
function safeReadFile(p) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/workforce/snapshot.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,mCAAmC;AACnC,EAAE;AACF,mEAAmE;AACnE,mEAAmE;AACnE,gEAAgE;AAChE,6CAA6C;AAC7C,EAAE;AACF,gEAAgE;AAChE,iEAAiE;AACjE,6CAA6C;AAC7C,6DAA6D;AAE7D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/workforce/snapshot.ts"],"names":[],"mappings":"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"}
|