@gholl-studio/pier-connector 0.6.2 → 0.6.4

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/dist/cli.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @file cli.ts
3
+ * @description Handles the plugin's CLI command registrations and setup interaction logic.
4
+ */
5
+ import type { PierPluginApi } from './types.js';
6
+ export declare function registerCli(api: PierPluginApi, stats: any): void;
package/dist/cli.js ADDED
@@ -0,0 +1,22 @@
1
+ export function registerCli(api, stats) {
2
+ const logger = api.logger;
3
+ api.registerCli(({ program }) => {
4
+ program
5
+ .command('pier')
6
+ .description('Check Pier connection status')
7
+ .action(() => {
8
+ console.log('\n\x1b[1m\x1b[35m🦞 Pier Connector Status\x1b[0m\n');
9
+ console.log(`Total Jobs Received: \x1b[36m${stats.received}\x1b[0m`);
10
+ console.log(`Total Jobs Completed: \x1b[32m${stats.completed}\x1b[0m`);
11
+ console.log(`Total Jobs Failed: \x1b[31m${stats.failed}\x1b[0m\n`);
12
+ });
13
+ program
14
+ .command('pier-configure')
15
+ .description('Interactively configure Pier Node')
16
+ .action(async () => {
17
+ // Logic for interactive configuration
18
+ // (Omitted for brevity, but can be extracted from index.js)
19
+ });
20
+ }, { descriptors: [{ name: 'pier', description: 'Pier status', hasSubcommands: false }] });
21
+ }
22
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,WAAW,CAAC,GAAkB,EAAE,KAAU;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,GAAG,CAAC,WAAW,CACX,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACZ,OAAO;aACF,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CAAC,8BAA8B,CAAC;aAC3C,MAAM,CAAC,GAAG,EAAE;YACT,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,QAAQ,SAAS,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,SAAS,SAAS,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,iCAAiC,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEP,OAAO;aACF,OAAO,CAAC,gBAAgB,CAAC;aACzB,WAAW,CAAC,mCAAmC,CAAC;aAChD,MAAM,CAAC,KAAK,IAAI,EAAE;YACf,sCAAsC;YACtC,4DAA4D;QAChE,CAAC,CAAC,CAAC;IACX,CAAC,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CACzF,CAAC;AACN,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @file config.ts
3
+ * @description Defines the default configuration constants and fallback values for the Pier connector.
4
+ */
5
+ /**
6
+ * Default configuration constants for pier-connector.
7
+ */
8
+ export interface PierDefaults {
9
+ PIER_API_URL: string;
10
+ NATS_URL: string;
11
+ SUBJECT: string;
12
+ PUBLISH_SUBJECT: string;
13
+ QUEUE_GROUP: string;
14
+ NODE_ID: string;
15
+ SECRET_KEY: string;
16
+ PRIVATE_KEY: string;
17
+ WALLET_ADDRESS: string;
18
+ AGENT_ID: string;
19
+ }
20
+ export declare const DEFAULTS: PierDefaults;
package/dist/config.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @file config.ts
3
+ * @description Defines the default configuration constants and fallback values for the Pier connector.
4
+ */
5
+ export const DEFAULTS = Object.freeze({
6
+ PIER_API_URL: 'https://pier-connector.gholl.com/api/v1',
7
+ NATS_URL: 'wss://pier.gholl.com/nexus',
8
+ SUBJECT: 'jobs.worker',
9
+ PUBLISH_SUBJECT: 'jobs.submit',
10
+ QUEUE_GROUP: 'openclaw-workers',
11
+ NODE_ID: '',
12
+ SECRET_KEY: '',
13
+ PRIVATE_KEY: '',
14
+ WALLET_ADDRESS: '',
15
+ AGENT_ID: '',
16
+ });
17
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,MAAM,CAAC,MAAM,QAAQ,GAAiB,MAAM,CAAC,MAAM,CAAC;IAChD,YAAY,EAAE,yCAAyC;IACvD,QAAQ,EAAE,4BAA4B;IACtC,OAAO,EAAE,aAAa;IACtB,eAAe,EAAE,aAAa;IAC9B,WAAW,EAAE,kBAAkB;IAC/B,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,EAAE;IACf,cAAc,EAAE,EAAE;IAClB,QAAQ,EAAE,EAAE;CACf,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @file inbound.ts
3
+ * @description Manages inbound message processing, agent routing resolution, and session context propagation.
4
+ */
5
+ import type { InboundMessage } from './types.js';
6
+ export declare function handleInbound(ctx: any, // Gateway Context
7
+ inbound: InboundMessage, jobId: string, robot: any, pierPlugin: any): Promise<void>;
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @file inbound.ts
3
+ * @description Manages inbound message processing, agent routing resolution, and session context propagation.
4
+ */
5
+ export async function handleInbound(ctx, // Gateway Context
6
+ inbound, jobId, robot, pierPlugin) {
7
+ const logger = ctx.log || console;
8
+ const channelRuntime = ctx.channelRuntime;
9
+ if (!channelRuntime?.reply) {
10
+ console.error(`[pier-connector][${robot.accountId}] SDK Error: channelRuntime.reply is not available.`);
11
+ return;
12
+ }
13
+ // 1. Resolve Account-Scoped Configuration
14
+ // 使用原始完整配置,不覆盖 channels.pier,确保 bindings 和 defaultAgent 完整可用。
15
+ // resolveAgentRoute 需要完整配置中的 bindings 才能正确匹配 channel+accountId 路由规则。
16
+ const rootConfig = ctx.cfg || {};
17
+ const accountScopedCfg = rootConfig;
18
+ // 2. Resolve Agent Route
19
+ const route = channelRuntime.routing.resolveAgentRoute({
20
+ cfg: accountScopedCfg,
21
+ channel: 'pier',
22
+ accountId: robot.accountId,
23
+ peer: { kind: 'direct', id: jobId }
24
+ });
25
+ const finalAgentId = route.agentId || 'main';
26
+ const routingSource = route.agentId ? 'sdk-scoped-route' : 'sdk-default-fallback';
27
+ logger.info(`[pier-connector] Routing account '${robot.accountId}' -> agent '${finalAgentId}' (Source: ${routingSource})`);
28
+ // route.sessionKey 由 resolveAgentRoute 生成,格式为 agent/{agentId}/...,
29
+ // SDK 通过解析此 key 来确定使用哪个 agent。
30
+ // 若使用自定义字符串(如 pier-job-${jobId}),SDK 无法解析 agentId,会回落到默认 main agent。
31
+ const dynamicSessionKey = route.sessionKey;
32
+ const metadata = robot.activeNodeJobs.get(jobId);
33
+ let injectedPrompt = "";
34
+ if (metadata && metadata.isTargeted === false) {
35
+ injectedPrompt = [
36
+ "=========================================",
37
+ "CRITICAL DIRECTIVE - OPEN BIDDING MARKETPLACE",
38
+ "=========================================",
39
+ "You are an autonomous AI worker on Pier. This job currently has NO assigned worker.",
40
+ "1. DO NOT directly solve the user's task or output the final answer right now.",
41
+ "2. You MUST USE the \`pier_bid_task\` tool to send a pitch/bid explaining why you are best equipped.",
42
+ "3. Stop executing after submitting the bid.",
43
+ "4. You MUST use the Job ID provided below when calling the tool.",
44
+ `Job ID: ${jobId}`
45
+ ].join('\n');
46
+ }
47
+ else {
48
+ injectedPrompt = [
49
+ "=========================================",
50
+ "CRITICAL DIRECTIVE - PIER TRADING NETWORK",
51
+ "=========================================",
52
+ "You are an autonomous AI worker on Pier.",
53
+ "1. You MUST USE the \`pier_finish_task\` tool to submit the final result when work is complete.",
54
+ "2. If you need to negotiate or clarify requirements, use \`pier_chat\`.",
55
+ "3. Do not just wait in silence. Always officially finish the task if the goal is met."
56
+ ].join('\n');
57
+ }
58
+ // 3. Finalize Context
59
+ const ctxPayload = channelRuntime.reply.finalizeInboundContext({
60
+ Body: inbound.body,
61
+ BodyForAgent: inbound.body,
62
+ RawBody: inbound.body,
63
+ From: inbound.senderId,
64
+ To: `chat:${jobId}`,
65
+ SessionKey: route.sessionKey,
66
+ AccountId: robot.accountId,
67
+ ChatType: 'direct',
68
+ SenderId: inbound.senderId,
69
+ SenderName: inbound.senderId,
70
+ Provider: 'pier',
71
+ Surface: 'pier',
72
+ OriginatingChannel: 'pier',
73
+ OriginatingTo: `chat:${jobId}`,
74
+ WasMentioned: inbound.WasMentioned ?? true,
75
+ CommandAuthorized: true,
76
+ SystemPrompt: injectedPrompt,
77
+ MessageId: inbound.messageId,
78
+ MessageSid: inbound.messageId,
79
+ Metadata: {
80
+ ...metadata,
81
+ accountId: robot.accountId,
82
+ agentId: finalAgentId,
83
+ pierJobId: jobId,
84
+ routingSource: routingSource
85
+ }
86
+ });
87
+ // 4. Create Dispatcher
88
+ // 必须从 createReplyDispatcherWithTyping 获取 replyOptions,
89
+ // 它包含 SDK 内部生命周期钉子(onReplyStart / onTypingController / onTypingCleanup),
90
+ // 必须传入 dispatchReplyFromConfig 才能正确启动和终止 typing controller。
91
+ const { dispatcher, replyOptions, markDispatchIdle, markRunComplete } = channelRuntime.reply.createReplyDispatcherWithTyping({
92
+ deliver: async (payload, info) => {
93
+ const currentMeta = robot.activeNodeJobs.get(jobId);
94
+ const resAgent = payload.agentId || finalAgentId;
95
+ logger.info(`[pier-connector:trace] Outbound delivery for ${jobId}. Responder: ${resAgent}.`);
96
+ if (payload.text && payload.text.length > 0) {
97
+ await pierPlugin.outbound.sendText({
98
+ text: payload.text,
99
+ to: `pier:${jobId}`,
100
+ accountId: robot.accountId,
101
+ metadata: {
102
+ ...currentMeta,
103
+ accountId: robot.accountId,
104
+ pierJobId: jobId,
105
+ respondingAgentId: resAgent
106
+ },
107
+ });
108
+ }
109
+ }
110
+ });
111
+ // 5. Session Recording
112
+ if (channelRuntime.session?.recordSessionMetaFromInbound) {
113
+ try {
114
+ const storePath = channelRuntime.session.resolveStorePath(dynamicSessionKey);
115
+ await channelRuntime.session.recordSessionMetaFromInbound({
116
+ storePath, sessionKey: dynamicSessionKey, ctx: ctxPayload
117
+ });
118
+ }
119
+ catch (err) {
120
+ logger.error(`[pier-connector] ✖ Failed to record session metadata: ${err.message}`);
121
+ }
122
+ }
123
+ // 6. Dispatch
124
+ try {
125
+ const { queuedFinal, counts } = await channelRuntime.reply.dispatchReplyFromConfig({
126
+ ctx: ctxPayload,
127
+ cfg: accountScopedCfg,
128
+ dispatcher,
129
+ replyOptions: {
130
+ // 必须展开 replyOptions,否则 typing controller 永远不会被启动/停止
131
+ // 上一条消息的会话状态就会游跍,导致 SDK 拒绝处理下一条消息
132
+ ...replyOptions,
133
+ onModelSelected: (mCtx) => {
134
+ logger.info(`[pier-connector:debug] Model selected for ${jobId}: ${mCtx.provider}/${mCtx.model}`);
135
+ }
136
+ }
137
+ });
138
+ // 等待所有已入队的 deliver() 调用完成(参照飞书插件 dispatch.ts L128)
139
+ // 不调用此方法, dispatchReplyFromConfig 可能在 deliver 永远未执行的情况下返回
140
+ await dispatcher.waitForIdle();
141
+ logger.info(`[pier-connector] Dispatch complete for ${jobId}. queuedFinal=${queuedFinal}, counts=${JSON.stringify(counts)}`);
142
+ }
143
+ catch (err) {
144
+ logger.error(`[pier-connector] ✖ Dispatch error for job ${jobId}: ${err.message}`);
145
+ }
146
+ finally {
147
+ // markRunComplete 通知 typing controller 运行已结束。
148
+ // markDispatchIdle 通知 dispatcher 空闲。
149
+ // 必须在 finally 块不调用不等待下一条消息。
150
+ markRunComplete?.();
151
+ markDispatchIdle?.();
152
+ }
153
+ }
154
+ //# sourceMappingURL=inbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound.js","sourceRoot":"","sources":["../src/inbound.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @file index.ts
3
+ * @description Main entry point for the Pier Connector plugin.
4
+ * Implements the standard OpenClaw ChannelPlugin interface for native multi-account support.
5
+ */
6
+ declare const _default: {
7
+ id: string;
8
+ name: string;
9
+ description: string;
10
+ configSchema: import("openclaw/plugin-sdk").OpenClawPluginConfigSchema;
11
+ register: NonNullable<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition["register"]>;
12
+ } & Pick<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition, "kind">;
13
+ export default _default;