@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.
@@ -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;CACtB;AAED;;iCAEiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB;qEACiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B;;yDAEqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB;2CACuC;IACvC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;oBAGgB;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB;6DACyD;IACzD,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;gCAC4B;IAC5B,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC;;yCAEqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb;;qBAEiB;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B;;+CAE2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB;iCAC6B;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;mDAE+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB;6CACyC;IACzC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;;8BAE0B;IAC1B,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB;oDACgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB;;sBAEkB;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;kCAO8B;IAC9B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAC1C"}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "@tianshu-ai/tianshu",
3
- "version": "0.4.1",
3
+ "version": "0.4.2",
4
4
  "description": "An open AI agent platform with a sidecar browser. Built in public.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/tianshu-ai/tianshu",
@@ -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;CACtB;AAED;;iCAEiC;AACjC,MAAM,WAAW,mBAAmB;IAClC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB;qEACiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC1B;;yDAEqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB;2CACuC;IACvC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;oBAGgB;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB;6DACyD;IACzD,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;gCAC4B;IAC5B,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC;;yCAEqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb;;qBAEiB;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B;;+CAE2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB;iCAC6B;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;mDAE+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB;6CACyC;IACzC,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B;;8BAE0B;IAC1B,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB;oDACgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB;;sBAEkB;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,kBAAkB,CAAC;IACzB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,2BAA2B;IAC1C;;;;;;;kCAO8B;IAC9B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAC1C"}
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,EAEV,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,CAuEnB"}
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":"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"}
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/workforce/snapshot.ts"],"names":[],"mappings":"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"}