@pinet/slack-bridge 0.1.0
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/LICENSE +21 -0
- package/README.md +570 -0
- package/dist/activity-log.d.ts +62 -0
- package/dist/activity-log.js +293 -0
- package/dist/agent-completion-runtime.d.ts +17 -0
- package/dist/agent-completion-runtime.js +26 -0
- package/dist/agent-event-runtime.d.ts +13 -0
- package/dist/agent-event-runtime.js +27 -0
- package/dist/agent-prompt-guidance.d.ts +22 -0
- package/dist/agent-prompt-guidance.js +46 -0
- package/dist/broker/adapters/slack.d.ts +74 -0
- package/dist/broker/adapters/slack.js +563 -0
- package/dist/broker/adapters/types.d.ts +1 -0
- package/dist/broker/adapters/types.js +1 -0
- package/dist/broker/agent-messaging.d.ts +1 -0
- package/dist/broker/agent-messaging.js +1 -0
- package/dist/broker/auth.d.ts +1 -0
- package/dist/broker/auth.js +1 -0
- package/dist/broker/client.d.ts +167 -0
- package/dist/broker/client.js +624 -0
- package/dist/broker/control-plane-dashboard.d.ts +98 -0
- package/dist/broker/control-plane-dashboard.js +213 -0
- package/dist/broker/ghost-reaper.d.ts +49 -0
- package/dist/broker/ghost-reaper.js +209 -0
- package/dist/broker/index.d.ts +36 -0
- package/dist/broker/index.js +90 -0
- package/dist/broker/leader.d.ts +1 -0
- package/dist/broker/leader.js +1 -0
- package/dist/broker/maintenance.d.ts +1 -0
- package/dist/broker/maintenance.js +1 -0
- package/dist/broker/message-send.d.ts +1 -0
- package/dist/broker/message-send.js +1 -0
- package/dist/broker/paths.d.ts +1 -0
- package/dist/broker/paths.js +1 -0
- package/dist/broker/raw-tcp-loopback.d.ts +1 -0
- package/dist/broker/raw-tcp-loopback.js +1 -0
- package/dist/broker/router.d.ts +1 -0
- package/dist/broker/router.js +1 -0
- package/dist/broker/schema.d.ts +9 -0
- package/dist/broker/schema.js +63 -0
- package/dist/broker/socket-server.d.ts +120 -0
- package/dist/broker/socket-server.js +1087 -0
- package/dist/broker/types.d.ts +1 -0
- package/dist/broker/types.js +1 -0
- package/dist/broker-delivery.d.ts +10 -0
- package/dist/broker-delivery.js +26 -0
- package/dist/broker-inbound-persistence.d.ts +11 -0
- package/dist/broker-inbound-persistence.js +22 -0
- package/dist/broker-prompt-loader.d.ts +34 -0
- package/dist/broker-prompt-loader.js +185 -0
- package/dist/broker-runtime-access.d.ts +14 -0
- package/dist/broker-runtime-access.js +20 -0
- package/dist/broker-runtime.d.ts +100 -0
- package/dist/broker-runtime.js +533 -0
- package/dist/broker-thread-owner-hints.d.ts +10 -0
- package/dist/broker-thread-owner-hints.js +14 -0
- package/dist/canvases.d.ts +80 -0
- package/dist/canvases.js +221 -0
- package/dist/command-registration-runtime.d.ts +9 -0
- package/dist/command-registration-runtime.js +9 -0
- package/dist/core-tool-guardrails.d.ts +24 -0
- package/dist/core-tool-guardrails.js +66 -0
- package/dist/deploy-manifest.d.ts +27 -0
- package/dist/deploy-manifest.js +197 -0
- package/dist/follower-delivery.d.ts +16 -0
- package/dist/follower-delivery.js +70 -0
- package/dist/follower-runtime.d.ts +61 -0
- package/dist/follower-runtime.js +350 -0
- package/dist/git-metadata.d.ts +35 -0
- package/dist/git-metadata.js +88 -0
- package/dist/guardrails.d.ts +69 -0
- package/dist/guardrails.js +283 -0
- package/dist/helpers.d.ts +550 -0
- package/dist/helpers.js +2711 -0
- package/dist/home-tab.d.ts +27 -0
- package/dist/home-tab.js +242 -0
- package/dist/imessage-tools.d.ts +33 -0
- package/dist/imessage-tools.js +96 -0
- package/dist/inbox-drain-runtime.d.ts +30 -0
- package/dist/inbox-drain-runtime.js +71 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1330 -0
- package/dist/persisted-runtime-state.d.ts +52 -0
- package/dist/persisted-runtime-state.js +98 -0
- package/dist/pinet-activity-formatting.d.ts +20 -0
- package/dist/pinet-activity-formatting.js +43 -0
- package/dist/pinet-agent-status.d.ts +36 -0
- package/dist/pinet-agent-status.js +48 -0
- package/dist/pinet-commands.d.ts +70 -0
- package/dist/pinet-commands.js +402 -0
- package/dist/pinet-confirmation-replies.d.ts +7 -0
- package/dist/pinet-confirmation-replies.js +30 -0
- package/dist/pinet-control-plane-dashboard.d.ts +34 -0
- package/dist/pinet-control-plane-dashboard.js +86 -0
- package/dist/pinet-home-tabs.d.ts +36 -0
- package/dist/pinet-home-tabs.js +101 -0
- package/dist/pinet-maintenance-delivery.d.ts +22 -0
- package/dist/pinet-maintenance-delivery.js +45 -0
- package/dist/pinet-mesh-ops.d.ts +97 -0
- package/dist/pinet-mesh-ops.js +266 -0
- package/dist/pinet-registration-gate.d.ts +14 -0
- package/dist/pinet-registration-gate.js +42 -0
- package/dist/pinet-remote-control-acks.d.ts +16 -0
- package/dist/pinet-remote-control-acks.js +46 -0
- package/dist/pinet-remote-control.d.ts +17 -0
- package/dist/pinet-remote-control.js +74 -0
- package/dist/pinet-runtime-composition.d.ts +27 -0
- package/dist/pinet-runtime-composition.js +20 -0
- package/dist/pinet-tools.d.ts +67 -0
- package/dist/pinet-tools.js +1211 -0
- package/dist/prompts/broker/default.md +41 -0
- package/dist/prompts/broker/tmux.md +49 -0
- package/dist/ralph-loop.d.ts +76 -0
- package/dist/ralph-loop.js +524 -0
- package/dist/reaction-triggers.d.ts +25 -0
- package/dist/reaction-triggers.js +171 -0
- package/dist/repo-tool-guardrails.d.ts +20 -0
- package/dist/repo-tool-guardrails.js +81 -0
- package/dist/runtime-agent-context.d.ts +93 -0
- package/dist/runtime-agent-context.js +302 -0
- package/dist/runtime-mode.d.ts +10 -0
- package/dist/runtime-mode.js +39 -0
- package/dist/scheduled-wakeups.d.ts +1 -0
- package/dist/scheduled-wakeups.js +1 -0
- package/dist/session-ui-runtime.d.ts +20 -0
- package/dist/session-ui-runtime.js +163 -0
- package/dist/single-player-runtime.d.ts +71 -0
- package/dist/single-player-runtime.js +436 -0
- package/dist/skins/cosmere.json +1571 -0
- package/dist/skins/foundation.json +1304 -0
- package/dist/slack-access.d.ts +186 -0
- package/dist/slack-access.js +462 -0
- package/dist/slack-api.d.ts +2 -0
- package/dist/slack-api.js +1 -0
- package/dist/slack-block-kit.d.ts +36 -0
- package/dist/slack-block-kit.js +242 -0
- package/dist/slack-export.d.ts +31 -0
- package/dist/slack-export.js +206 -0
- package/dist/slack-message-context.d.ts +15 -0
- package/dist/slack-message-context.js +207 -0
- package/dist/slack-modals.d.ts +13 -0
- package/dist/slack-modals.js +79 -0
- package/dist/slack-pinet-runtime-adapter.d.ts +16 -0
- package/dist/slack-pinet-runtime-adapter.js +72 -0
- package/dist/slack-presence.d.ts +36 -0
- package/dist/slack-presence.js +89 -0
- package/dist/slack-request-runtime.d.ts +8 -0
- package/dist/slack-request-runtime.js +19 -0
- package/dist/slack-runtime-access.d.ts +28 -0
- package/dist/slack-runtime-access.js +107 -0
- package/dist/slack-scope-diagnostics.d.ts +31 -0
- package/dist/slack-scope-diagnostics.js +235 -0
- package/dist/slack-socket-dedup.d.ts +7 -0
- package/dist/slack-socket-dedup.js +135 -0
- package/dist/slack-thread-status.d.ts +41 -0
- package/dist/slack-thread-status.js +156 -0
- package/dist/slack-tool-policy-runtime.d.ts +36 -0
- package/dist/slack-tool-policy-runtime.js +96 -0
- package/dist/slack-tools.d.ts +52 -0
- package/dist/slack-tools.js +2688 -0
- package/dist/slack-turn-guardrails.d.ts +19 -0
- package/dist/slack-turn-guardrails.js +36 -0
- package/dist/slack-upload.d.ts +49 -0
- package/dist/slack-upload.js +224 -0
- package/dist/task-assignments.d.ts +45 -0
- package/dist/task-assignments.js +527 -0
- package/dist/thread-confirmations.d.ts +22 -0
- package/dist/thread-confirmations.js +139 -0
- package/dist/tool-registration-runtime.d.ts +13 -0
- package/dist/tool-registration-runtime.js +13 -0
- package/dist/ttl-cache.d.ts +47 -0
- package/dist/ttl-cache.js +105 -0
- package/manifest.yaml +57 -0
- package/package.json +60 -0
- package/skills/pinet-skin-creator/SKILL.md +109 -0
- package/skills/pinet-skin-creator/references/descriptor-format.md +99 -0
- package/skills/pinet-skin-creator/references/safety-checklist.md +56 -0
- package/skills/pinet-skin-creator/templates/pinet-skin-descriptor.json +77 -0
- package/skills/slack-bridge/SKILL.md +360 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { evaluateSlackOriginCoreToolPolicy } from "./core-tool-guardrails.js";
|
|
2
|
+
import { evaluateSlackOriginRepoToolPolicy } from "./repo-tool-guardrails.js";
|
|
3
|
+
import { isBrokerForbiddenTool } from "./guardrails.js";
|
|
4
|
+
import { consumePendingSlackToolPolicyTurn, deliverTrackedSlackFollowUpMessage as trackAndDeliverSlackFollowUpMessage, } from "./slack-turn-guardrails.js";
|
|
5
|
+
export function createSlackToolPolicyRuntime(deps) {
|
|
6
|
+
const pendingSlackToolPolicyTurns = [];
|
|
7
|
+
let nextSlackToolPolicyTurn = null;
|
|
8
|
+
let activeSlackToolPolicyTurn = null;
|
|
9
|
+
function deliverTrackedSlackFollowUpMessage(options) {
|
|
10
|
+
return trackAndDeliverSlackFollowUpMessage({
|
|
11
|
+
queue: pendingSlackToolPolicyTurns,
|
|
12
|
+
prompt: options.prompt,
|
|
13
|
+
messages: options.messages,
|
|
14
|
+
deliver: deps.deliverFollowUpMessage,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
async function onInput(event) {
|
|
18
|
+
if (event.source !== "extension") {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
nextSlackToolPolicyTurn = consumePendingSlackToolPolicyTurn(pendingSlackToolPolicyTurns, event.text);
|
|
22
|
+
}
|
|
23
|
+
async function onTurnStart() {
|
|
24
|
+
activeSlackToolPolicyTurn = nextSlackToolPolicyTurn;
|
|
25
|
+
nextSlackToolPolicyTurn = null;
|
|
26
|
+
if (activeSlackToolPolicyTurn?.channel && activeSlackToolPolicyTurn.threadTs) {
|
|
27
|
+
await deps
|
|
28
|
+
.beginThreadStatus?.(activeSlackToolPolicyTurn.channel, activeSlackToolPolicyTurn.threadTs, "is thinking…")
|
|
29
|
+
.catch(() => {
|
|
30
|
+
/* best effort */
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function onTurnEnd() {
|
|
35
|
+
const turn = activeSlackToolPolicyTurn;
|
|
36
|
+
activeSlackToolPolicyTurn = null;
|
|
37
|
+
if (turn?.channel && turn.threadTs) {
|
|
38
|
+
await deps.clearThreadStatus?.(turn.channel, turn.threadTs).catch(() => {
|
|
39
|
+
/* best effort */
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function onAgentEnd() {
|
|
44
|
+
const turn = activeSlackToolPolicyTurn;
|
|
45
|
+
activeSlackToolPolicyTurn = null;
|
|
46
|
+
if (turn?.channel && turn.threadTs) {
|
|
47
|
+
await deps.clearThreadStatus?.(turn.channel, turn.threadTs).catch(() => {
|
|
48
|
+
/* best effort */
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async function onToolCall(event) {
|
|
53
|
+
if (activeSlackToolPolicyTurn?.channel && activeSlackToolPolicyTurn.threadTs) {
|
|
54
|
+
await deps
|
|
55
|
+
.updateThreadStatus?.(activeSlackToolPolicyTurn.channel, activeSlackToolPolicyTurn.threadTs, "Calling tool…")
|
|
56
|
+
.catch(() => {
|
|
57
|
+
/* best effort */
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (deps.getBrokerRole() === "broker" && isBrokerForbiddenTool(event.toolName)) {
|
|
61
|
+
return {
|
|
62
|
+
block: true,
|
|
63
|
+
reason: `Tool "${event.toolName}" is forbidden for the broker role. The broker coordinates — it does not code. Use pinet action=send to delegate to a connected worker instead.`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const corePolicy = evaluateSlackOriginCoreToolPolicy({
|
|
67
|
+
turn: activeSlackToolPolicyTurn,
|
|
68
|
+
toolName: event.toolName,
|
|
69
|
+
input: event.input,
|
|
70
|
+
guardrails: deps.getGuardrails(),
|
|
71
|
+
requireToolPolicy: deps.requireToolPolicy,
|
|
72
|
+
formatAction: deps.formatAction,
|
|
73
|
+
formatError: deps.formatError,
|
|
74
|
+
});
|
|
75
|
+
if (corePolicy) {
|
|
76
|
+
return corePolicy;
|
|
77
|
+
}
|
|
78
|
+
return evaluateSlackOriginRepoToolPolicy({
|
|
79
|
+
turn: activeSlackToolPolicyTurn,
|
|
80
|
+
toolName: event.toolName,
|
|
81
|
+
input: event.input,
|
|
82
|
+
guardrails: deps.getGuardrails(),
|
|
83
|
+
requireToolPolicy: deps.requireToolPolicy,
|
|
84
|
+
formatAction: deps.formatAction,
|
|
85
|
+
formatError: deps.formatError,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
deliverTrackedSlackFollowUpMessage,
|
|
90
|
+
onInput,
|
|
91
|
+
onTurnStart,
|
|
92
|
+
onTurnEnd,
|
|
93
|
+
onAgentEnd,
|
|
94
|
+
onToolCall,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { InboxMessage } from "./helpers.js";
|
|
3
|
+
import type { SlackResult } from "./slack-api.js";
|
|
4
|
+
export interface SlackToolsThreadContextPort {
|
|
5
|
+
resolveThreadChannel: (threadTs: string | undefined) => Promise<string | null>;
|
|
6
|
+
noteThreadReply: (threadTs: string, channelId: string) => void;
|
|
7
|
+
clearPendingAttention: (threadTs: string) => void;
|
|
8
|
+
}
|
|
9
|
+
export interface SlackPinetDeliveryInput {
|
|
10
|
+
threadId: string;
|
|
11
|
+
channel: string;
|
|
12
|
+
text: string;
|
|
13
|
+
blocks?: ReadonlyArray<Record<string, unknown>>;
|
|
14
|
+
}
|
|
15
|
+
export interface SlackPinetDeliveryResult {
|
|
16
|
+
adapter: string;
|
|
17
|
+
messageId: number;
|
|
18
|
+
threadId: string;
|
|
19
|
+
channel: string;
|
|
20
|
+
source: string;
|
|
21
|
+
}
|
|
22
|
+
export interface SlackPinetDeliveryPort {
|
|
23
|
+
isAvailable: () => boolean;
|
|
24
|
+
sendSlackMessage: (input: SlackPinetDeliveryInput) => Promise<SlackPinetDeliveryResult>;
|
|
25
|
+
}
|
|
26
|
+
export interface RegisterSlackToolsDeps {
|
|
27
|
+
getBotToken: () => string;
|
|
28
|
+
getDefaultChannel: () => string | undefined;
|
|
29
|
+
getSecurityPrompt: () => string;
|
|
30
|
+
inbox: InboxMessage[];
|
|
31
|
+
slack: (method: string, token: string, body?: Record<string, unknown>) => Promise<SlackResult>;
|
|
32
|
+
getAgentName: () => string;
|
|
33
|
+
getAgentEmoji: () => string;
|
|
34
|
+
getAgentOwnerToken: () => string;
|
|
35
|
+
getLastDmChannel: () => string | null;
|
|
36
|
+
updateBadge: () => void;
|
|
37
|
+
resolveUser: (userId: string) => Promise<string>;
|
|
38
|
+
threadContext: SlackToolsThreadContextPort;
|
|
39
|
+
resolveChannel: (nameOrId: string) => Promise<string>;
|
|
40
|
+
rememberChannel: (name: string, channelId: string) => void;
|
|
41
|
+
requireToolPolicy: (toolName: string, threadTs: string | undefined, action: string) => void;
|
|
42
|
+
registerConfirmationRequest: (threadTs: string, tool: string, action: string) => {
|
|
43
|
+
status: "created" | "refreshed" | "conflict";
|
|
44
|
+
conflict?: {
|
|
45
|
+
toolPattern: string;
|
|
46
|
+
action: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
getBotUserId: () => string | null;
|
|
50
|
+
pinetDelivery?: SlackPinetDeliveryPort;
|
|
51
|
+
}
|
|
52
|
+
export declare function registerSlackTools(pi: ExtensionAPI, deps: RegisterSlackToolsDeps): void;
|