@amaster.ai/pi-teamwork 0.1.2-beta.8 → 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/README.md +58 -7
- package/dist/adapters/multica-installer.d.ts +8 -0
- package/dist/adapters/multica-installer.d.ts.map +1 -0
- package/dist/adapters/multica-installer.js +82 -0
- package/dist/adapters/multica-installer.js.map +1 -0
- package/dist/adapters/multica.d.ts +15 -8
- package/dist/adapters/multica.d.ts.map +1 -1
- package/dist/adapters/multica.js +75 -20
- package/dist/adapters/multica.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +131 -42
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +15 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -2
- package/preview.png +0 -0
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# @amaster.ai/pi-teamwork
|
|
2
2
|
|
|
3
|
+

|
|
4
|
+
|
|
3
5
|
Pi extension for team collaboration and project management. Provides LLM-callable tools to interact with issue trackers and project management systems.
|
|
4
6
|
|
|
5
7
|
## Supported Providers
|
|
@@ -8,7 +10,18 @@ Pi extension for team collaboration and project management. Provides LLM-callabl
|
|
|
8
10
|
|
|
9
11
|
## Configuration
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
### Auto-Install
|
|
14
|
+
|
|
15
|
+
When the extension starts and `multica` is not found on `$PATH`, it will automatically install the CLI:
|
|
16
|
+
|
|
17
|
+
- **macOS / Linux**: Homebrew (`brew install multica-ai/tap/multica`) with a fallback to the install script (`curl -fsSL ... | bash`)
|
|
18
|
+
- **Windows**: PowerShell install script (`irm ... | iex`)
|
|
19
|
+
|
|
20
|
+
Set `autoInstall: false` to disable this behavior.
|
|
21
|
+
|
|
22
|
+
### Mode 1 — Self-hosted server
|
|
23
|
+
|
|
24
|
+
For teams running their own Multica server. The extension runs `multica setup self-host` with the provided URLs, then authenticates with the token:
|
|
12
25
|
|
|
13
26
|
```json
|
|
14
27
|
{
|
|
@@ -16,21 +29,58 @@ Add to `.pi/settings.json`:
|
|
|
16
29
|
"enabled": true,
|
|
17
30
|
"provider": "multica",
|
|
18
31
|
"multica": {
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"token": ""
|
|
32
|
+
"serverUrl": "https://api.your-server.com",
|
|
33
|
+
"appUrl": "https://your-server.com",
|
|
34
|
+
"token": "<token-from-multica-server>"
|
|
22
35
|
}
|
|
23
36
|
}
|
|
24
37
|
}
|
|
25
38
|
```
|
|
26
39
|
|
|
40
|
+
### Mode 2 — Pre-configured environment
|
|
41
|
+
|
|
42
|
+
Run `multica setup` once on the machine and finish login through multica's normal flow. The extension will reuse that state:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"pi-teamwork": {
|
|
47
|
+
"enabled": true,
|
|
48
|
+
"provider": "multica",
|
|
49
|
+
"multica": {
|
|
50
|
+
"workspace": ""
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Mode 3 — Headless token (Multica Cloud)
|
|
57
|
+
|
|
58
|
+
For CI or non-interactive environments where you can't run `multica setup`. The extension will run `multica login --token <token>` on every `session_start`:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"pi-teamwork": {
|
|
63
|
+
"enabled": true,
|
|
64
|
+
"provider": "multica",
|
|
65
|
+
"multica": {
|
|
66
|
+
"token": "<token-from-multica-server>"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
> ⚠️ `token` is a credential. Keep it out of version control — put it in a local-only settings file or inject via env-substituted config.
|
|
73
|
+
|
|
27
74
|
| Field | Description |
|
|
28
75
|
|-------|-------------|
|
|
29
76
|
| `enabled` | Enable/disable the extension |
|
|
30
77
|
| `provider` | Provider name (currently only `multica`) |
|
|
31
78
|
| `multica.binary` | Path to multica binary (default: `multica`) |
|
|
32
|
-
| `multica.workspace` | Workspace ID override |
|
|
33
|
-
| `multica.token` |
|
|
79
|
+
| `multica.workspace` | Workspace ID override; leave empty to use multica's default |
|
|
80
|
+
| `multica.token` | Headless-login token. Omit when multica is already logged in on the machine |
|
|
81
|
+
| `multica.serverUrl` | Self-hosted server API URL. Triggers `multica setup self-host --server-url` on start |
|
|
82
|
+
| `multica.appUrl` | Self-hosted server frontend URL. Required when `serverUrl` is a remote address |
|
|
83
|
+
| `multica.autoInstall` | Auto-install multica CLI if missing (default: `true`) |
|
|
34
84
|
|
|
35
85
|
## Tools
|
|
36
86
|
|
|
@@ -55,7 +105,8 @@ src/
|
|
|
55
105
|
├── index.ts # Generic tool layer (provider-agnostic)
|
|
56
106
|
├── types.ts # TeamworkProvider interface + shared types
|
|
57
107
|
└── adapters/
|
|
58
|
-
|
|
108
|
+
├── multica.ts # Multica CLI adapter + initialization
|
|
109
|
+
└── multica-installer.ts # Auto-detect & install multica CLI
|
|
59
110
|
```
|
|
60
111
|
|
|
61
112
|
The extension uses a provider pattern — `index.ts` registers tools that delegate to a `TeamworkProvider` interface. Adding a new provider (Linear, Jira, etc.) only requires implementing the interface and adding a factory branch in `session_start`.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExecFn } from '../types.js';
|
|
2
|
+
export type InstallResult = {
|
|
3
|
+
installed: boolean;
|
|
4
|
+
alreadyPresent: boolean;
|
|
5
|
+
error?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function ensureMulticaBinary(binary: string, exec: ExecFn): Promise<InstallResult>;
|
|
8
|
+
//# sourceMappingURL=multica-installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multica-installer.d.ts","sourceRoot":"","sources":["../../src/adapters/multica-installer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAQF,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA2B9F"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const BREW_TAP = 'multica-ai/tap/multica';
|
|
2
|
+
const INSTALL_SCRIPT_URL = 'https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh';
|
|
3
|
+
const INSTALL_PS1_URL = 'https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.ps1';
|
|
4
|
+
export async function ensureMulticaBinary(binary, exec) {
|
|
5
|
+
if (await isAvailable(binary, exec)) {
|
|
6
|
+
return { installed: true, alreadyPresent: true };
|
|
7
|
+
}
|
|
8
|
+
const platform = process.platform;
|
|
9
|
+
let installError;
|
|
10
|
+
if (platform === 'win32') {
|
|
11
|
+
installError = await installWindows(exec);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
installError = await installUnix(exec);
|
|
15
|
+
}
|
|
16
|
+
if (installError) {
|
|
17
|
+
return { installed: false, alreadyPresent: false, error: installError };
|
|
18
|
+
}
|
|
19
|
+
if (await isAvailable(binary, exec)) {
|
|
20
|
+
return { installed: true, alreadyPresent: false };
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
installed: false,
|
|
24
|
+
alreadyPresent: false,
|
|
25
|
+
error: 'multica binary not found on PATH after installation',
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async function isAvailable(binary, exec) {
|
|
29
|
+
try {
|
|
30
|
+
const { code } = await exec(binary, ['--version']);
|
|
31
|
+
return code === 0;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function installUnix(exec) {
|
|
38
|
+
const hasBrew = await checkBrew(exec);
|
|
39
|
+
if (hasBrew) {
|
|
40
|
+
try {
|
|
41
|
+
const { code } = await exec('brew', ['install', BREW_TAP]);
|
|
42
|
+
if (code === 0)
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// brew threw, fall through to curl
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return installViaCurl(exec);
|
|
50
|
+
}
|
|
51
|
+
async function checkBrew(exec) {
|
|
52
|
+
try {
|
|
53
|
+
const { code } = await exec('which', ['brew']);
|
|
54
|
+
return code === 0;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function installViaCurl(exec) {
|
|
61
|
+
try {
|
|
62
|
+
const { code, stderr } = await exec('bash', ['-c', `curl -fsSL ${INSTALL_SCRIPT_URL} | bash`]);
|
|
63
|
+
if (code === 0)
|
|
64
|
+
return undefined;
|
|
65
|
+
return stderr.trim() || `install script exited with code ${code}`;
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
return e instanceof Error ? e.message : String(e);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function installWindows(exec) {
|
|
72
|
+
try {
|
|
73
|
+
const { code, stderr } = await exec('powershell', ['-Command', `irm ${INSTALL_PS1_URL} | iex`]);
|
|
74
|
+
if (code === 0)
|
|
75
|
+
return undefined;
|
|
76
|
+
return stderr.trim() || `install script exited with code ${code}`;
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
return e instanceof Error ? e.message : String(e);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=multica-installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multica-installer.js","sourceRoot":"","sources":["../../src/adapters/multica-installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,25 @@
|
|
|
1
|
-
import type { Comment, ExecFn, Issue, IssueCreateInput, IssueListFilter, IssueUpdateInput, MulticaAdapterConfig, Project, TeamworkProvider } from '../types.js';
|
|
2
|
-
|
|
1
|
+
import type { Comment, ExecFn, Issue, IssueCreateInput, IssueListFilter, IssueUpdateInput, MulticaAdapterConfig, Project, TeamworkProvider, Workspace } from '../types.js';
|
|
2
|
+
import { type InstallResult } from './multica-installer.js';
|
|
3
|
+
export type InitMulticaResult = {
|
|
4
|
+
adapter: MulticaAdapter;
|
|
5
|
+
installResult: InstallResult;
|
|
6
|
+
};
|
|
7
|
+
export declare function initMulticaProvider(config: MulticaAdapterConfig, exec: ExecFn): Promise<InitMulticaResult>;
|
|
3
8
|
export declare class MulticaAdapter implements TeamworkProvider {
|
|
4
9
|
private readonly exec;
|
|
5
10
|
readonly name = "multica";
|
|
6
11
|
private readonly binary;
|
|
7
|
-
private readonly
|
|
12
|
+
private readonly defaultWorkspaceArgs;
|
|
8
13
|
constructor(config: MulticaAdapterConfig, exec: ExecFn);
|
|
14
|
+
private wsArgs;
|
|
15
|
+
listWorkspaces(): Promise<Workspace[]>;
|
|
9
16
|
listIssues(filter?: IssueListFilter): Promise<Issue[]>;
|
|
10
|
-
getIssue(id: string): Promise<Issue | undefined>;
|
|
17
|
+
getIssue(id: string, workspaceId?: string): Promise<Issue | undefined>;
|
|
11
18
|
createIssue(input: IssueCreateInput): Promise<Issue>;
|
|
12
|
-
updateIssue(id: string, input: IssueUpdateInput): Promise<Issue | undefined>;
|
|
13
|
-
addComment(issueId: string, content: string, parentId?: string): Promise<Comment>;
|
|
14
|
-
listComments(issueId: string): Promise<Comment[]>;
|
|
15
|
-
listProjects(): Promise<Project[]>;
|
|
19
|
+
updateIssue(id: string, input: IssueUpdateInput, workspaceId?: string): Promise<Issue | undefined>;
|
|
20
|
+
addComment(issueId: string, content: string, parentId?: string, workspaceId?: string): Promise<Comment>;
|
|
21
|
+
listComments(issueId: string, workspaceId?: string): Promise<Comment[]>;
|
|
22
|
+
listProjects(workspaceId?: string): Promise<Project[]>;
|
|
16
23
|
status(): Promise<Record<string, unknown>>;
|
|
17
24
|
private run;
|
|
18
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multica.d.ts","sourceRoot":"","sources":["../../src/adapters/multica.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,OAAO,EACP,gBAAgB,
|
|
1
|
+
{"version":3,"file":"multica.d.ts","sourceRoot":"","sources":["../../src/adapters/multica.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,OAAO,EACP,gBAAgB,EAChB,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,iBAAiB,CAAC,CA2C5B;AAED,qBAAa,cAAe,YAAW,gBAAgB;IAOnD,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAW;gBAG9C,MAAM,EAAE,oBAAoB,EACX,IAAI,EAAE,MAAM;IAQ/B,OAAO,CAAC,MAAM;IAIR,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUtC,UAAU,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAatD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IActE,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAapD,WAAW,CACf,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,gBAAgB,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAgBvB,UAAU,CACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAmBb,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAsBvE,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAmBtD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YASlC,GAAG;CAQlB"}
|
package/dist/adapters/multica.js
CHANGED
|
@@ -1,11 +1,28 @@
|
|
|
1
|
+
import { ensureMulticaBinary } from './multica-installer.js';
|
|
1
2
|
export async function initMulticaProvider(config, exec) {
|
|
2
3
|
const binary = config.binary?.trim() || 'multica';
|
|
3
|
-
|
|
4
|
+
const autoInstall = config.autoInstall !== false;
|
|
5
|
+
let installResult = { installed: true, alreadyPresent: true };
|
|
6
|
+
if (autoInstall) {
|
|
7
|
+
installResult = await ensureMulticaBinary(binary, exec);
|
|
8
|
+
if (!installResult.installed) {
|
|
9
|
+
return { adapter: new MulticaAdapter(config, exec), installResult };
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
if (config.serverUrl) {
|
|
4
13
|
try {
|
|
5
|
-
await exec(binary, ['
|
|
14
|
+
await exec(binary, ['config', 'set', 'server_url', config.serverUrl]);
|
|
6
15
|
}
|
|
7
16
|
catch {
|
|
8
|
-
//
|
|
17
|
+
// Config may already be set
|
|
18
|
+
}
|
|
19
|
+
if (config.appUrl) {
|
|
20
|
+
try {
|
|
21
|
+
await exec(binary, ['config', 'set', 'app_url', config.appUrl]);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Config may already be set
|
|
25
|
+
}
|
|
9
26
|
}
|
|
10
27
|
}
|
|
11
28
|
try {
|
|
@@ -14,22 +31,44 @@ export async function initMulticaProvider(config, exec) {
|
|
|
14
31
|
catch {
|
|
15
32
|
// Daemon may already be running
|
|
16
33
|
}
|
|
17
|
-
|
|
34
|
+
if (config.token) {
|
|
35
|
+
try {
|
|
36
|
+
await exec(binary, ['login', '--token', config.token]);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Login may already be done
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { adapter: new MulticaAdapter(config, exec), installResult };
|
|
18
43
|
}
|
|
19
44
|
export class MulticaAdapter {
|
|
20
45
|
exec;
|
|
21
46
|
name = 'multica';
|
|
22
47
|
binary;
|
|
23
|
-
|
|
48
|
+
defaultWorkspaceArgs;
|
|
24
49
|
constructor(config, exec) {
|
|
25
50
|
this.exec = exec;
|
|
26
51
|
this.binary = config.binary?.trim() || 'multica';
|
|
27
|
-
this.
|
|
52
|
+
this.defaultWorkspaceArgs = config.workspace?.trim()
|
|
28
53
|
? ['--workspace-id', config.workspace.trim()]
|
|
29
54
|
: [];
|
|
30
55
|
}
|
|
56
|
+
wsArgs(workspaceId) {
|
|
57
|
+
return workspaceId ? ['--workspace-id', workspaceId] : this.defaultWorkspaceArgs;
|
|
58
|
+
}
|
|
59
|
+
async listWorkspaces() {
|
|
60
|
+
const result = await this.run(['workspace', 'list', '--output', 'json']);
|
|
61
|
+
const data = parseJson(result);
|
|
62
|
+
if (!Array.isArray(data))
|
|
63
|
+
return [];
|
|
64
|
+
return data.map((item) => ({
|
|
65
|
+
id: String(item.id ?? ''),
|
|
66
|
+
name: String(item.name ?? item.title ?? ''),
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
31
69
|
async listIssues(filter) {
|
|
32
|
-
const
|
|
70
|
+
const wsArgs = this.wsArgs(filter?.workspaceId);
|
|
71
|
+
const args = ['issue', 'list', '--output', 'json', ...wsArgs];
|
|
33
72
|
if (filter?.status)
|
|
34
73
|
args.push('--status', filter.status);
|
|
35
74
|
if (filter?.assignee)
|
|
@@ -44,15 +83,23 @@ export class MulticaAdapter {
|
|
|
44
83
|
return [];
|
|
45
84
|
return data.map(mapIssue);
|
|
46
85
|
}
|
|
47
|
-
async getIssue(id) {
|
|
48
|
-
const result = await this.run([
|
|
86
|
+
async getIssue(id, workspaceId) {
|
|
87
|
+
const result = await this.run([
|
|
88
|
+
'issue',
|
|
89
|
+
'get',
|
|
90
|
+
id,
|
|
91
|
+
'--output',
|
|
92
|
+
'json',
|
|
93
|
+
...this.wsArgs(workspaceId),
|
|
94
|
+
]);
|
|
49
95
|
const data = parseJson(result);
|
|
50
96
|
if (!data || typeof data !== 'object')
|
|
51
97
|
return undefined;
|
|
52
98
|
return mapIssue(data);
|
|
53
99
|
}
|
|
54
100
|
async createIssue(input) {
|
|
55
|
-
const
|
|
101
|
+
const wsArgs = this.wsArgs(input.workspaceId);
|
|
102
|
+
const args = ['issue', 'create', '--title', input.title, ...wsArgs];
|
|
56
103
|
if (input.description)
|
|
57
104
|
args.push('--description', input.description);
|
|
58
105
|
if (input.priority)
|
|
@@ -67,9 +114,10 @@ export class MulticaAdapter {
|
|
|
67
114
|
return mapIssue(data);
|
|
68
115
|
return { id: 'unknown', title: input.title, status: 'todo' };
|
|
69
116
|
}
|
|
70
|
-
async updateIssue(id, input) {
|
|
117
|
+
async updateIssue(id, input, workspaceId) {
|
|
118
|
+
const wsArgs = this.wsArgs(workspaceId);
|
|
71
119
|
if (input.status) {
|
|
72
|
-
await this.run(['issue', 'status', id, input.status, ...
|
|
120
|
+
await this.run(['issue', 'status', id, input.status, ...wsArgs]);
|
|
73
121
|
}
|
|
74
122
|
const updateArgs = [];
|
|
75
123
|
if (input.title)
|
|
@@ -81,12 +129,13 @@ export class MulticaAdapter {
|
|
|
81
129
|
if (input.assignee)
|
|
82
130
|
updateArgs.push('--assignee', input.assignee);
|
|
83
131
|
if (updateArgs.length > 0) {
|
|
84
|
-
await this.run(['issue', 'update', id, ...updateArgs, ...
|
|
132
|
+
await this.run(['issue', 'update', id, ...updateArgs, ...wsArgs]);
|
|
85
133
|
}
|
|
86
|
-
return this.getIssue(id);
|
|
134
|
+
return this.getIssue(id, workspaceId);
|
|
87
135
|
}
|
|
88
|
-
async addComment(issueId, content, parentId) {
|
|
89
|
-
const
|
|
136
|
+
async addComment(issueId, content, parentId, workspaceId) {
|
|
137
|
+
const wsArgs = this.wsArgs(workspaceId);
|
|
138
|
+
const args = ['issue', 'comment', 'add', issueId, '--content', content, ...wsArgs];
|
|
90
139
|
if (parentId)
|
|
91
140
|
args.push('--parent', parentId);
|
|
92
141
|
const result = await this.run(args);
|
|
@@ -103,7 +152,7 @@ export class MulticaAdapter {
|
|
|
103
152
|
}
|
|
104
153
|
return { id: 'unknown', issueId, content };
|
|
105
154
|
}
|
|
106
|
-
async listComments(issueId) {
|
|
155
|
+
async listComments(issueId, workspaceId) {
|
|
107
156
|
const result = await this.run([
|
|
108
157
|
'issue',
|
|
109
158
|
'comment',
|
|
@@ -111,7 +160,7 @@ export class MulticaAdapter {
|
|
|
111
160
|
issueId,
|
|
112
161
|
'--output',
|
|
113
162
|
'json',
|
|
114
|
-
...this.
|
|
163
|
+
...this.wsArgs(workspaceId),
|
|
115
164
|
]);
|
|
116
165
|
const data = parseJson(result);
|
|
117
166
|
if (!Array.isArray(data))
|
|
@@ -125,8 +174,14 @@ export class MulticaAdapter {
|
|
|
125
174
|
...(item.parent_id ? { parentId: String(item.parent_id) } : {}),
|
|
126
175
|
}));
|
|
127
176
|
}
|
|
128
|
-
async listProjects() {
|
|
129
|
-
const result = await this.run([
|
|
177
|
+
async listProjects(workspaceId) {
|
|
178
|
+
const result = await this.run([
|
|
179
|
+
'project',
|
|
180
|
+
'list',
|
|
181
|
+
'--output',
|
|
182
|
+
'json',
|
|
183
|
+
...this.wsArgs(workspaceId),
|
|
184
|
+
]);
|
|
130
185
|
const data = parseJson(result);
|
|
131
186
|
if (!Array.isArray(data))
|
|
132
187
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multica.js","sourceRoot":"","sources":["../../src/adapters/multica.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA4B,EAC5B,IAAY;IAEZ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"multica.js","sourceRoot":"","sources":["../../src/adapters/multica.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAsBpE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA+SlE"}
|
package/dist/index.js
CHANGED
|
@@ -1,35 +1,90 @@
|
|
|
1
|
-
import { loadPiSettings
|
|
1
|
+
import { loadPiSettings } from '@amaster.ai/pi-shared/settings';
|
|
2
2
|
import { Type } from 'typebox';
|
|
3
3
|
import { initMulticaProvider } from './adapters/multica.js';
|
|
4
4
|
const SETTINGS_KEY = 'pi-teamwork';
|
|
5
5
|
const STATUS_KEY = 'pi-teamwork';
|
|
6
|
+
const TEAMWORK_GUIDANCE = [
|
|
7
|
+
'<teamwork-guidance>',
|
|
8
|
+
'You are working in a shared project tracker (teamwork) where humans and other agents collaborate. Use the issue_* and project_* tools to keep that shared space in sync.',
|
|
9
|
+
'',
|
|
10
|
+
'Before starting non-trivial work, check whether a relevant issue already exists (issue_list / issue_get) — to avoid duplicating work another collaborator has picked up.',
|
|
11
|
+
'',
|
|
12
|
+
'When you reach meaningful progress, hit a blocker, or need input from a collaborator, leave a comment on the relevant issue (issue_comment). Comments are how humans and other agents observe what you are doing.',
|
|
13
|
+
'',
|
|
14
|
+
'When you finish work that an issue describes, update its status (issue_update). An issue left in an outdated state misleads other collaborators.',
|
|
15
|
+
'',
|
|
16
|
+
'The tracker is for cross-collaborator coordination, not for tracking your own session-local TODOs. Do not file an issue just to remind yourself of something within the current conversation.',
|
|
17
|
+
'</teamwork-guidance>',
|
|
18
|
+
].join('\n');
|
|
6
19
|
export default function piTeamworkExtension(pi) {
|
|
7
20
|
let provider;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
21
|
+
let readyPromise;
|
|
22
|
+
async function ensureReady() {
|
|
23
|
+
if (readyPromise)
|
|
24
|
+
await readyPromise;
|
|
25
|
+
if (!provider)
|
|
26
|
+
return 'Teamwork provider is not initialized.';
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
12
29
|
pi.on('session_start', async (_event, ctx) => {
|
|
30
|
+
provider = undefined;
|
|
31
|
+
readyPromise = undefined;
|
|
13
32
|
const config = loadConfig(ctx.cwd);
|
|
14
33
|
if (config.enabled === false) {
|
|
15
34
|
ctx.ui.setStatus(STATUS_KEY, 'teamwork: disabled');
|
|
16
35
|
return;
|
|
17
36
|
}
|
|
18
37
|
const providerName = config.provider ?? 'multica';
|
|
19
|
-
if (providerName
|
|
20
|
-
provider = await initMulticaProvider(config.multica ?? {}, exec);
|
|
21
|
-
ctx.ui.setStatus(STATUS_KEY, 'teamwork: multica');
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
38
|
+
if (providerName !== 'multica') {
|
|
24
39
|
ctx.ui.setStatus(STATUS_KEY, `teamwork: unknown provider "${providerName}"`);
|
|
40
|
+
return;
|
|
25
41
|
}
|
|
42
|
+
const exec = async (command, args) => {
|
|
43
|
+
const result = await pi.exec(command, args);
|
|
44
|
+
return { stdout: result.stdout, stderr: result.stderr, code: result.code };
|
|
45
|
+
};
|
|
46
|
+
readyPromise = (async () => {
|
|
47
|
+
const { adapter, installResult } = await initMulticaProvider(config.multica ?? {}, exec);
|
|
48
|
+
provider = adapter;
|
|
49
|
+
if (!installResult.installed) {
|
|
50
|
+
ctx.ui.notify(`multica CLI could not be installed: ${installResult.error ?? 'unknown error'}. Run "multica setup" manually.`, 'warning');
|
|
51
|
+
ctx.ui.setStatus(STATUS_KEY, 'teamwork: multica (not installed)');
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!installResult.alreadyPresent) {
|
|
55
|
+
ctx.ui.notify('multica CLI was auto-installed successfully.', 'info');
|
|
56
|
+
}
|
|
57
|
+
if (!config.multica?.token && !config.multica?.serverUrl) {
|
|
58
|
+
ctx.ui.notify('No multica token or serverUrl configured. Run "multica setup" to authenticate.', 'warning');
|
|
59
|
+
}
|
|
60
|
+
if (config.multica?.serverUrl && !config.multica?.appUrl) {
|
|
61
|
+
ctx.ui.notify('multica serverUrl is set but appUrl is missing. Remote servers require both.', 'warning');
|
|
62
|
+
}
|
|
63
|
+
ctx.ui.setStatus(STATUS_KEY, 'teamwork: multica');
|
|
64
|
+
})().catch((err) => {
|
|
65
|
+
ctx.ui.setStatus(STATUS_KEY, `teamwork: multica (error: ${err instanceof Error ? err.message : String(err)})`);
|
|
66
|
+
});
|
|
26
67
|
});
|
|
27
68
|
pi.on('session_shutdown', async () => {
|
|
28
69
|
provider = undefined;
|
|
70
|
+
readyPromise = undefined;
|
|
71
|
+
});
|
|
72
|
+
pi.on('before_agent_start', async (event) => {
|
|
73
|
+
if (readyPromise)
|
|
74
|
+
await readyPromise;
|
|
75
|
+
if (!provider)
|
|
76
|
+
return;
|
|
77
|
+
return {
|
|
78
|
+
systemPrompt: event.systemPrompt
|
|
79
|
+
? `${event.systemPrompt}\n\n${TEAMWORK_GUIDANCE}`
|
|
80
|
+
: TEAMWORK_GUIDANCE,
|
|
81
|
+
};
|
|
29
82
|
});
|
|
30
83
|
pi.registerCommand('teamwork-status', {
|
|
31
84
|
description: 'Show teamwork provider status.',
|
|
32
85
|
handler: async (_args, ctx) => {
|
|
86
|
+
if (readyPromise)
|
|
87
|
+
await readyPromise;
|
|
33
88
|
if (!provider) {
|
|
34
89
|
ctx.ui.notify('Teamwork provider is not initialized.', 'warning');
|
|
35
90
|
return;
|
|
@@ -43,21 +98,44 @@ export default function piTeamworkExtension(pi) {
|
|
|
43
98
|
}
|
|
44
99
|
},
|
|
45
100
|
});
|
|
46
|
-
// --- LLM-callable tools ---
|
|
101
|
+
// --- LLM-callable tools (registered once, use latest provider via closure) ---
|
|
102
|
+
pi.registerTool({
|
|
103
|
+
name: 'workspace_list',
|
|
104
|
+
label: 'Teamwork',
|
|
105
|
+
description: 'List all workspaces you belong to. Call this first to get a workspace ID before using other teamwork tools.',
|
|
106
|
+
promptSnippet: 'List workspaces in the shared project tracker.',
|
|
107
|
+
parameters: Type.Object({}),
|
|
108
|
+
async execute() {
|
|
109
|
+
const err = await ensureReady();
|
|
110
|
+
if (err)
|
|
111
|
+
return textResult(err);
|
|
112
|
+
try {
|
|
113
|
+
const workspaces = await provider.listWorkspaces();
|
|
114
|
+
if (workspaces.length === 0)
|
|
115
|
+
return textResult('No workspaces found.');
|
|
116
|
+
return textResult(JSON.stringify(workspaces, null, 2));
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
return textResult(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
});
|
|
47
123
|
pi.registerTool({
|
|
48
124
|
name: 'issue_list',
|
|
49
125
|
label: 'Teamwork',
|
|
50
|
-
description: 'List issues from
|
|
51
|
-
promptSnippet: 'List issues from
|
|
126
|
+
description: 'List issues from a shared project tracker. Issues are work items that humans or other agents collaborate on. Supports filtering by status, assignee, and project.',
|
|
127
|
+
promptSnippet: 'List issues from a shared project tracker where humans and agents collaborate.',
|
|
52
128
|
parameters: Type.Object({
|
|
129
|
+
workspaceId: Type.String({ description: 'Workspace ID (get from workspace_list).' }),
|
|
53
130
|
status: Type.Optional(Type.String({ description: 'Filter by status (e.g. todo, in_progress, done, blocked).' })),
|
|
54
131
|
assignee: Type.Optional(Type.String({ description: 'Filter by assignee name.' })),
|
|
55
132
|
project: Type.Optional(Type.String({ description: 'Filter by project ID.' })),
|
|
56
133
|
limit: Type.Optional(Type.Number({ description: 'Max number of results.' })),
|
|
57
134
|
}),
|
|
58
135
|
async execute(_toolCallId, params) {
|
|
59
|
-
|
|
60
|
-
|
|
136
|
+
const err = await ensureReady();
|
|
137
|
+
if (err)
|
|
138
|
+
return textResult(err);
|
|
61
139
|
try {
|
|
62
140
|
const issues = await provider.listIssues(params);
|
|
63
141
|
if (issues.length === 0)
|
|
@@ -72,15 +150,17 @@ export default function piTeamworkExtension(pi) {
|
|
|
72
150
|
pi.registerTool({
|
|
73
151
|
name: 'issue_get',
|
|
74
152
|
label: 'Teamwork',
|
|
75
|
-
description: 'Get detailed information about a specific issue.',
|
|
153
|
+
description: 'Get detailed information about a specific issue (a work item in the shared project tracker).',
|
|
76
154
|
parameters: Type.Object({
|
|
155
|
+
workspaceId: Type.String({ description: 'Workspace ID (get from workspace_list).' }),
|
|
77
156
|
id: Type.String({ description: 'The issue ID.' }),
|
|
78
157
|
}),
|
|
79
158
|
async execute(_toolCallId, params) {
|
|
80
|
-
|
|
81
|
-
|
|
159
|
+
const err = await ensureReady();
|
|
160
|
+
if (err)
|
|
161
|
+
return textResult(err);
|
|
82
162
|
try {
|
|
83
|
-
const issue = await provider.getIssue(params.id);
|
|
163
|
+
const issue = await provider.getIssue(params.id, params.workspaceId);
|
|
84
164
|
if (!issue)
|
|
85
165
|
return textResult(`Issue not found: ${params.id}`);
|
|
86
166
|
return textResult(JSON.stringify(issue, null, 2));
|
|
@@ -93,9 +173,10 @@ export default function piTeamworkExtension(pi) {
|
|
|
93
173
|
pi.registerTool({
|
|
94
174
|
name: 'issue_create',
|
|
95
175
|
label: 'Teamwork',
|
|
96
|
-
description: 'Create a new issue in the project
|
|
97
|
-
promptSnippet: 'Create issues in
|
|
176
|
+
description: 'Create a new issue (a work item / ticket) in the shared project tracker. Use this to file work for humans or other agents to pick up.',
|
|
177
|
+
promptSnippet: 'Create issues / tickets in a shared project tracker for humans or agents to collaborate on.',
|
|
98
178
|
parameters: Type.Object({
|
|
179
|
+
workspaceId: Type.String({ description: 'Workspace ID (get from workspace_list).' }),
|
|
99
180
|
title: Type.String({ description: 'Issue title.' }),
|
|
100
181
|
description: Type.Optional(Type.String({ description: 'Issue description.' })),
|
|
101
182
|
priority: Type.Optional(Type.String({ description: 'Priority (e.g. low, medium, high, urgent).' })),
|
|
@@ -103,8 +184,9 @@ export default function piTeamworkExtension(pi) {
|
|
|
103
184
|
project: Type.Optional(Type.String({ description: 'Project ID to associate with.' })),
|
|
104
185
|
}),
|
|
105
186
|
async execute(_toolCallId, params) {
|
|
106
|
-
|
|
107
|
-
|
|
187
|
+
const err = await ensureReady();
|
|
188
|
+
if (err)
|
|
189
|
+
return textResult(err);
|
|
108
190
|
try {
|
|
109
191
|
const issue = await provider.createIssue(params);
|
|
110
192
|
return textResult(JSON.stringify(issue, null, 2));
|
|
@@ -117,8 +199,9 @@ export default function piTeamworkExtension(pi) {
|
|
|
117
199
|
pi.registerTool({
|
|
118
200
|
name: 'issue_update',
|
|
119
201
|
label: 'Teamwork',
|
|
120
|
-
description: 'Update an existing issue. Can change title, description, status, priority, or assignee.',
|
|
202
|
+
description: 'Update an existing issue in the shared project tracker. Can change title, description, status, priority, or assignee.',
|
|
121
203
|
parameters: Type.Object({
|
|
204
|
+
workspaceId: Type.String({ description: 'Workspace ID (get from workspace_list).' }),
|
|
122
205
|
id: Type.String({ description: 'The issue ID to update.' }),
|
|
123
206
|
title: Type.Optional(Type.String({ description: 'New title.' })),
|
|
124
207
|
description: Type.Optional(Type.String({ description: 'New description.' })),
|
|
@@ -129,11 +212,12 @@ export default function piTeamworkExtension(pi) {
|
|
|
129
212
|
assignee: Type.Optional(Type.String({ description: 'New assignee name.' })),
|
|
130
213
|
}),
|
|
131
214
|
async execute(_toolCallId, params) {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
215
|
+
const err = await ensureReady();
|
|
216
|
+
if (err)
|
|
217
|
+
return textResult(err);
|
|
218
|
+
const { id, workspaceId, ...input } = params;
|
|
135
219
|
try {
|
|
136
|
-
const issue = await provider.updateIssue(id, input);
|
|
220
|
+
const issue = await provider.updateIssue(id, input, workspaceId);
|
|
137
221
|
if (!issue)
|
|
138
222
|
return textResult(`Issue not found: ${id}`);
|
|
139
223
|
return textResult(JSON.stringify(issue, null, 2));
|
|
@@ -146,17 +230,19 @@ export default function piTeamworkExtension(pi) {
|
|
|
146
230
|
pi.registerTool({
|
|
147
231
|
name: 'issue_comment',
|
|
148
232
|
label: 'Teamwork',
|
|
149
|
-
description: 'Add a comment to an issue. Use for progress updates, questions, or blockers.',
|
|
233
|
+
description: 'Add a comment to an issue in the shared project tracker. Use for progress updates, questions, or blockers visible to other collaborators (humans or agents).',
|
|
150
234
|
parameters: Type.Object({
|
|
235
|
+
workspaceId: Type.String({ description: 'Workspace ID (get from workspace_list).' }),
|
|
151
236
|
issueId: Type.String({ description: 'The issue ID to comment on.' }),
|
|
152
237
|
content: Type.String({ description: 'Comment content.' }),
|
|
153
238
|
parentId: Type.Optional(Type.String({ description: 'Parent comment ID for threaded replies.' })),
|
|
154
239
|
}),
|
|
155
240
|
async execute(_toolCallId, params) {
|
|
156
|
-
|
|
157
|
-
|
|
241
|
+
const err = await ensureReady();
|
|
242
|
+
if (err)
|
|
243
|
+
return textResult(err);
|
|
158
244
|
try {
|
|
159
|
-
const comment = await provider.addComment(params.issueId, params.content, params.parentId);
|
|
245
|
+
const comment = await provider.addComment(params.issueId, params.content, params.parentId, params.workspaceId);
|
|
160
246
|
return textResult(JSON.stringify(comment, null, 2));
|
|
161
247
|
}
|
|
162
248
|
catch (error) {
|
|
@@ -167,13 +253,16 @@ export default function piTeamworkExtension(pi) {
|
|
|
167
253
|
pi.registerTool({
|
|
168
254
|
name: 'project_list',
|
|
169
255
|
label: 'Teamwork',
|
|
170
|
-
description: 'List all projects in
|
|
171
|
-
parameters: Type.Object({
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
256
|
+
description: 'List all projects in a workspace.',
|
|
257
|
+
parameters: Type.Object({
|
|
258
|
+
workspaceId: Type.String({ description: 'Workspace ID (get from workspace_list).' }),
|
|
259
|
+
}),
|
|
260
|
+
async execute(_toolCallId, params) {
|
|
261
|
+
const err = await ensureReady();
|
|
262
|
+
if (err)
|
|
263
|
+
return textResult(err);
|
|
175
264
|
try {
|
|
176
|
-
const projects = await provider.listProjects();
|
|
265
|
+
const projects = await provider.listProjects(params.workspaceId);
|
|
177
266
|
if (projects.length === 0)
|
|
178
267
|
return textResult('No projects found.');
|
|
179
268
|
return textResult(JSON.stringify(projects, null, 2));
|
|
@@ -186,11 +275,12 @@ export default function piTeamworkExtension(pi) {
|
|
|
186
275
|
pi.registerTool({
|
|
187
276
|
name: 'teamwork_status',
|
|
188
277
|
label: 'Teamwork',
|
|
189
|
-
description: 'Check the status of the teamwork provider (daemon status, connected agents, etc.).',
|
|
278
|
+
description: 'Check the status of the teamwork collaboration provider (daemon status, connected agents, etc.).',
|
|
190
279
|
parameters: Type.Object({}),
|
|
191
280
|
async execute() {
|
|
192
|
-
|
|
193
|
-
|
|
281
|
+
const err = await ensureReady();
|
|
282
|
+
if (err)
|
|
283
|
+
return textResult(err);
|
|
194
284
|
try {
|
|
195
285
|
const s = await provider.status();
|
|
196
286
|
return textResult(JSON.stringify(s, null, 2));
|
|
@@ -208,7 +298,6 @@ function loadConfig(cwd) {
|
|
|
208
298
|
try {
|
|
209
299
|
const config = loadPiSettings(SETTINGS_KEY, {
|
|
210
300
|
cwd,
|
|
211
|
-
agentDir: resolveAgentDir(),
|
|
212
301
|
});
|
|
213
302
|
return Object.keys(config).length > 0 ? config : {};
|
|
214
303
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export type Issue = {
|
|
|
11
11
|
metadata?: Record<string, unknown>;
|
|
12
12
|
};
|
|
13
13
|
export type IssueCreateInput = {
|
|
14
|
+
workspaceId: string;
|
|
14
15
|
title: string;
|
|
15
16
|
description?: string;
|
|
16
17
|
priority?: string;
|
|
@@ -25,6 +26,7 @@ export type IssueUpdateInput = {
|
|
|
25
26
|
assignee?: string;
|
|
26
27
|
};
|
|
27
28
|
export type IssueListFilter = {
|
|
29
|
+
workspaceId: string;
|
|
28
30
|
status?: string;
|
|
29
31
|
assignee?: string;
|
|
30
32
|
project?: string;
|
|
@@ -45,15 +47,20 @@ export type Project = {
|
|
|
45
47
|
status?: string;
|
|
46
48
|
lead?: string;
|
|
47
49
|
};
|
|
50
|
+
export type Workspace = {
|
|
51
|
+
id: string;
|
|
52
|
+
name: string;
|
|
53
|
+
};
|
|
48
54
|
export interface TeamworkProvider {
|
|
49
55
|
name: string;
|
|
56
|
+
listWorkspaces(): Promise<Workspace[]>;
|
|
50
57
|
listIssues(filter?: IssueListFilter): Promise<Issue[]>;
|
|
51
|
-
getIssue(id: string): Promise<Issue | undefined>;
|
|
58
|
+
getIssue(id: string, workspaceId?: string): Promise<Issue | undefined>;
|
|
52
59
|
createIssue(input: IssueCreateInput): Promise<Issue>;
|
|
53
|
-
updateIssue(id: string, input: IssueUpdateInput): Promise<Issue | undefined>;
|
|
54
|
-
addComment(issueId: string, content: string, parentId?: string): Promise<Comment>;
|
|
55
|
-
listComments(issueId: string): Promise<Comment[]>;
|
|
56
|
-
listProjects(): Promise<Project[]>;
|
|
60
|
+
updateIssue(id: string, input: IssueUpdateInput, workspaceId?: string): Promise<Issue | undefined>;
|
|
61
|
+
addComment(issueId: string, content: string, parentId?: string, workspaceId?: string): Promise<Comment>;
|
|
62
|
+
listComments(issueId: string, workspaceId?: string): Promise<Comment[]>;
|
|
63
|
+
listProjects(workspaceId?: string): Promise<Project[]>;
|
|
57
64
|
status(): Promise<Record<string, unknown>>;
|
|
58
65
|
}
|
|
59
66
|
export type ExecFn = (command: string, args: string[]) => Promise<{
|
|
@@ -65,6 +72,9 @@ export type MulticaAdapterConfig = {
|
|
|
65
72
|
binary?: string;
|
|
66
73
|
workspace?: string;
|
|
67
74
|
token?: string;
|
|
75
|
+
autoInstall?: boolean;
|
|
76
|
+
serverUrl?: string;
|
|
77
|
+
appUrl?: string;
|
|
68
78
|
};
|
|
69
79
|
export type TeamworkConfig = {
|
|
70
80
|
enabled?: boolean;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IACvE,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACrD,WAAW,CACT,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,gBAAgB,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IAC9B,UAAU,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,MAAM,GAAG,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,KACX,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE/D,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/pi-teamwork",
|
|
3
|
-
"version": "0.1.2
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Pi extension for team collaboration and issue management via Multica",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -26,12 +26,14 @@
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
"pi": {
|
|
29
|
+
"image": "https://raw.githubusercontent.com/TGYD-helige/pi/master/packages/pi-teamwork/preview.png",
|
|
29
30
|
"extensions": [
|
|
30
31
|
"./dist/index.js"
|
|
31
32
|
]
|
|
32
33
|
},
|
|
33
34
|
"files": [
|
|
34
35
|
"dist",
|
|
36
|
+
"preview.png",
|
|
35
37
|
"README.md"
|
|
36
38
|
],
|
|
37
39
|
"publishConfig": {
|
|
@@ -43,7 +45,7 @@
|
|
|
43
45
|
"directory": "packages/pi-teamwork"
|
|
44
46
|
},
|
|
45
47
|
"dependencies": {
|
|
46
|
-
"@amaster.ai/pi-shared": "0.1.2
|
|
48
|
+
"@amaster.ai/pi-shared": "0.1.2"
|
|
47
49
|
},
|
|
48
50
|
"peerDependencies": {
|
|
49
51
|
"@earendil-works/pi-coding-agent": ">=0.74.0",
|
package/preview.png
ADDED
|
Binary file
|