@amaster.ai/pi-teamwork 0.1.2 → 0.1.3

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 CHANGED
@@ -7,6 +7,7 @@ Pi extension for team collaboration and project management. Provides LLM-callabl
7
7
  ## Supported Providers
8
8
 
9
9
  - **Multica** — CLI-based adapter via [multica](https://github.com/multica-ai/multica)
10
+ - **AMaster Employee** — CLI-based adapter via managed `amaster-employee` and optional `amaster-runtime`
10
11
 
11
12
  ## Configuration
12
13
 
@@ -71,16 +72,39 @@ For CI or non-interactive environments where you can't run `multica setup`. The
71
72
 
72
73
  > ⚠️ `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
74
 
75
+ ### Mode 4 — AMaster Employee managed CLI
76
+
77
+ For Pi Agent / AMaster Employee integration, configure the provider explicitly. The extension shells out to the stable managed command names; do not point settings at a local `cli/dist/amaster.js` build artifact.
78
+
79
+ ```json
80
+ {
81
+ "pi-teamwork": {
82
+ "enabled": true,
83
+ "provider": "amaster",
84
+ "amaster": {
85
+ "apiBase": "https://amaster.example.com"
86
+ }
87
+ }
88
+ }
89
+ ```
90
+
91
+ Pi Agent may pass a browser-session board credential through `session_start.amasterEmployee.apiKey`. The extension uses it only in memory for child CLI execution and does not save it to settings.
92
+
93
+ For the AMaster provider, the LUI-facing `workspaceId` parameter maps to an AMaster company id. The adapter passes that value to the AMaster Employee CLI as `-C <companyId>`. `workspace_list` is a discovery/switch helper, not a hard prerequisite for every tool call: when the account has exactly one company, the adapter falls back to that company automatically; when multiple companies are available and no `workspaceId` is provided, the tool fails clearly and asks the caller to pass a canonical id from `workspace_list`. The adapter does not keep a global "active company" state.
94
+
74
95
  | Field | Description |
75
96
  |-------|-------------|
76
97
  | `enabled` | Enable/disable the extension |
77
- | `provider` | Provider name (currently only `multica`) |
98
+ | `provider` | Provider name (`multica` or `amaster`) |
78
99
  | `multica.binary` | Path to multica binary (default: `multica`) |
79
100
  | `multica.workspace` | Workspace ID override; leave empty to use multica's default |
80
101
  | `multica.token` | Headless-login token. Omit when multica is already logged in on the machine |
81
102
  | `multica.serverUrl` | Self-hosted server API URL. Triggers `multica setup self-host --server-url` on start |
82
103
  | `multica.appUrl` | Self-hosted server frontend URL. Required when `serverUrl` is a remote address |
83
104
  | `multica.autoInstall` | Auto-install multica CLI if missing (default: `true`) |
105
+ | `amaster.apiBase` | AMaster Employee API base passed to the CLI as `--api-base` |
106
+ | `amaster.companyId` | Optional AMaster canonical company id override passed to the CLI as `-C` |
107
+ | `amaster.context` / `profile` / `authStore` | Optional CLI context/profile/auth-store overrides |
84
108
 
85
109
  ## Tools
86
110
 
@@ -92,6 +116,7 @@ For CI or non-interactive environments where you can't run `multica setup`. The
92
116
  | `issue_update` | Update an existing issue (title, description, status, priority, assignee) |
93
117
  | `issue_comment` | Add a comment to an issue |
94
118
  | `project_list` | List all projects in the workspace |
119
+ | `user_directory_list` | List assignable AMaster users or members (AMaster provider only) |
95
120
  | `teamwork_status` | Check provider/daemon status |
96
121
 
97
122
  ## Commands
@@ -106,7 +131,8 @@ src/
106
131
  ├── types.ts # TeamworkProvider interface + shared types
107
132
  └── adapters/
108
133
  ├── multica.ts # Multica CLI adapter + initialization
109
- └── multica-installer.ts # Auto-detect & install multica CLI
134
+ ├── multica-installer.ts # Auto-detect & install multica CLI
135
+ └── amaster.ts # AMaster Employee CLI adapter
110
136
  ```
111
137
 
112
138
  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,35 @@
1
+ import type { AmasterAdapterConfig, Comment, ExecFn, Issue, IssueCreateInput, IssueListFilter, IssueUpdateInput, Project, TeamworkProvider, UserDirectoryEntry, Workspace } from '../types.js';
2
+ export declare function initAmasterProvider(config: AmasterAdapterConfig, exec: ExecFn): Promise<TeamworkProvider>;
3
+ export declare class AmasterAdapter implements TeamworkProvider {
4
+ private readonly exec;
5
+ readonly name = "amaster";
6
+ private readonly binary;
7
+ private readonly runtimeBinary;
8
+ private readonly commonArgs;
9
+ private readonly defaultCompanyId?;
10
+ private discoveredCompanyId;
11
+ private workspaceDiscoveryPromise;
12
+ constructor(config: AmasterAdapterConfig, exec: ExecFn);
13
+ listWorkspaces(): Promise<Workspace[]>;
14
+ listIssues(filter?: IssueListFilter): Promise<Issue[]>;
15
+ getIssue(id: string, workspaceId?: string): Promise<Issue | undefined>;
16
+ createIssue(input: IssueCreateInput): Promise<Issue>;
17
+ updateIssue(id: string, input: IssueUpdateInput, workspaceId?: string): Promise<Issue | undefined>;
18
+ addComment(issueId: string, content: string, _parentId?: string, workspaceId?: string): Promise<Comment>;
19
+ listComments(issueId: string, workspaceId?: string): Promise<Comment[]>;
20
+ listProjects(workspaceId?: string): Promise<Project[]>;
21
+ listUserDirectory(filter?: {
22
+ workspaceId?: string;
23
+ q?: string;
24
+ limit?: number;
25
+ }): Promise<UserDirectoryEntry[]>;
26
+ status(): Promise<Record<string, unknown>>;
27
+ private runAmaster;
28
+ private runOptional;
29
+ private buildArgs;
30
+ private buildArgsSync;
31
+ private resolveDefaultCompanyId;
32
+ private discoverSingleCompanyId;
33
+ private primeDefaultCompanyCache;
34
+ }
35
+ //# sourceMappingURL=amaster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amaster.d.ts","sourceRoot":"","sources":["../../src/adapters/amaster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,OAAO,EACP,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACV,MAAM,aAAa,CAAC;AAIrB,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,oBAAoB,EAC5B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED,qBAAa,cAAe,YAAW,gBAAgB;IAWnD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAVvB,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAS;IAC3C,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,yBAAyB,CAA0C;gBAGzE,MAAM,EAAE,oBAAoB,EACX,IAAI,EAAE,MAAM;IAUzB,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUtC,UAAU,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAWtD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAUtE,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC;IAgBpD,WAAW,CACf,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,gBAAgB,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAcvB,UAAU,CACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC;IAqBb,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAevE,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAkBtD,iBAAiB,CAAC,MAAM,CAAC,EAAE;QAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAoB3B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAkBlC,UAAU;YAQV,WAAW;YAYX,SAAS;IAavB,OAAO,CAAC,aAAa;YAQP,uBAAuB;YAevB,uBAAuB;IASrC,OAAO,CAAC,wBAAwB;CAWjC"}
@@ -0,0 +1,420 @@
1
+ export async function initAmasterProvider(config, exec) {
2
+ return new AmasterAdapter(config, exec);
3
+ }
4
+ export class AmasterAdapter {
5
+ exec;
6
+ name = 'amaster';
7
+ binary = 'amaster-employee';
8
+ runtimeBinary = 'amaster-runtime';
9
+ commonArgs;
10
+ defaultCompanyId;
11
+ discoveredCompanyId;
12
+ workspaceDiscoveryPromise;
13
+ constructor(config, exec) {
14
+ this.exec = exec;
15
+ this.commonArgs = [];
16
+ if (config.apiBase?.trim())
17
+ this.commonArgs.push('--api-base', config.apiBase.trim());
18
+ if (config.context?.trim())
19
+ this.commonArgs.push('--context', config.context.trim());
20
+ if (config.profile?.trim())
21
+ this.commonArgs.push('--profile', config.profile.trim());
22
+ if (config.authStore?.trim())
23
+ this.commonArgs.push('--auth-store', config.authStore.trim());
24
+ if (config.companyId?.trim())
25
+ this.defaultCompanyId = config.companyId.trim();
26
+ }
27
+ async listWorkspaces() {
28
+ const data = parseRequiredJsonArray(await this.runAmaster(withJson(await this.buildArgs(['company', 'list'], undefined, false))), 'AMaster company list');
29
+ const workspaces = data.map(mapWorkspace);
30
+ this.primeDefaultCompanyCache(workspaces);
31
+ return workspaces;
32
+ }
33
+ async listIssues(filter) {
34
+ const args = await this.buildArgs(['issue', 'list'], filter?.workspaceId);
35
+ if (filter?.status)
36
+ args.push('--status', filter.status);
37
+ if (filter?.assignee)
38
+ args.push('--assignee', filter.assignee);
39
+ if (filter?.project)
40
+ args.push('--project', filter.project);
41
+ if (filter?.limit)
42
+ args.push('--limit', String(filter.limit));
43
+ args.push('--json');
44
+ const data = parseRequiredJsonArray(await this.runAmaster(args), 'AMaster issue list');
45
+ return data.map(mapIssue);
46
+ }
47
+ async getIssue(id, workspaceId) {
48
+ const data = parseRequiredJson(await this.runAmaster(withJson(await this.buildArgs(['issue', 'get', id], workspaceId))), 'AMaster issue get');
49
+ const issue = unwrapIssue(data);
50
+ if (!isIssueRecord(issue))
51
+ return undefined;
52
+ return mapIssue(issue);
53
+ }
54
+ async createIssue(input) {
55
+ const args = await this.buildArgs(['issue', 'create', '--title', input.title], input.workspaceId);
56
+ if (input.description)
57
+ args.push('--description', input.description);
58
+ if (input.priority)
59
+ args.push('--priority', input.priority);
60
+ if (input.assignee)
61
+ args.push('--assignee', input.assignee);
62
+ if (input.project)
63
+ args.push('--project', input.project);
64
+ args.push('--json');
65
+ const data = parseRequiredJson(await this.runAmaster(args), 'AMaster issue create');
66
+ const issue = unwrapIssue(data);
67
+ if (isIssueRecord(issue))
68
+ return mapIssue(issue);
69
+ throw new Error('AMaster issue create did not return a created issue.');
70
+ }
71
+ async updateIssue(id, input, workspaceId) {
72
+ const args = await this.buildArgs(['issue', 'update', id], workspaceId);
73
+ if (input.title)
74
+ args.push('--title', input.title);
75
+ if (input.description)
76
+ args.push('--description', input.description);
77
+ if (input.status)
78
+ args.push('--status', input.status);
79
+ if (input.priority)
80
+ args.push('--priority', input.priority);
81
+ if (input.assignee)
82
+ args.push('--assignee', input.assignee);
83
+ args.push('--json');
84
+ const data = parseRequiredJson(await this.runAmaster(args), 'AMaster issue update');
85
+ const issue = unwrapIssue(data);
86
+ if (isIssueRecord(issue))
87
+ return mapIssue(issue);
88
+ return this.getIssue(id, workspaceId);
89
+ }
90
+ async addComment(issueId, content, _parentId, workspaceId) {
91
+ const args = ['issue', 'comment', issueId, '--content', content];
92
+ const data = parseRequiredJson(await this.runAmaster(withJson(await this.buildArgs(args, workspaceId))), 'AMaster issue comment');
93
+ if (data && typeof data === 'object' && !Array.isArray(data)) {
94
+ const item = data;
95
+ const id = stringValue(item.id ?? item.commentId);
96
+ if (!id)
97
+ throw new Error('AMaster issue comment did not return a created comment.');
98
+ return {
99
+ id,
100
+ issueId,
101
+ content: String(item.content ?? item.body ?? content),
102
+ ...optionalString('author', item.author ?? item.authorName),
103
+ ...optionalString('createdAt', item.createdAt ?? item.created_at),
104
+ };
105
+ }
106
+ throw new Error('AMaster issue comment did not return a created comment.');
107
+ }
108
+ async listComments(issueId, workspaceId) {
109
+ const summary = await this.getIssue(issueId, workspaceId);
110
+ const comments = collectCommentRecords(summary?.metadata);
111
+ return comments.map((item) => {
112
+ const record = item;
113
+ return {
114
+ id: String(record.id ?? record.commentId ?? ''),
115
+ issueId,
116
+ content: String(record.content ?? record.body ?? ''),
117
+ ...optionalString('author', record.author ?? record.authorName),
118
+ ...optionalString('createdAt', record.createdAt ?? record.created_at),
119
+ };
120
+ });
121
+ }
122
+ async listProjects(workspaceId) {
123
+ const data = parseRequiredJsonArray(await this.runAmaster(withJson(await this.buildArgs(['project', 'list'], workspaceId))), 'AMaster project list');
124
+ return data.map((item) => {
125
+ const record = item;
126
+ const id = requiredString(record.id);
127
+ return {
128
+ id,
129
+ title: String(record.title ?? record.name ?? id),
130
+ ...optionalString('description', record.description),
131
+ ...optionalString('status', record.status),
132
+ ...optionalString('lead', record.lead),
133
+ };
134
+ });
135
+ }
136
+ async listUserDirectory(filter) {
137
+ const args = await this.buildArgs(['user-directory', 'list'], filter?.workspaceId);
138
+ if (filter?.q)
139
+ args.push('--q', filter.q);
140
+ if (filter?.limit)
141
+ args.push('--limit', String(filter.limit));
142
+ args.push('--json');
143
+ const data = parseRequiredJsonArray(await this.runAmaster(args), 'AMaster user-directory list');
144
+ return data.map((item) => {
145
+ const record = item;
146
+ const id = requiredString(record.id);
147
+ return {
148
+ id,
149
+ name: String(record.name ?? record.displayName ?? record.label ?? record.email ?? id),
150
+ ...optionalString('email', record.email),
151
+ ...optionalString('role', record.role),
152
+ ...optionalString('type', record.type ?? record.kind),
153
+ ...optionalString('status', record.status),
154
+ };
155
+ });
156
+ }
157
+ async status() {
158
+ const [teamwork, runtime] = await Promise.all([
159
+ this.runOptional(this.binary, withJson(this.buildArgsSync(['status']))),
160
+ this.runOptional(this.runtimeBinary, ['daemon', 'status']),
161
+ ]);
162
+ return {
163
+ provider: 'amaster',
164
+ teamwork: parseJsonOrRaw(teamwork.stdout),
165
+ runtime: parseJsonOrRaw(runtime.stdout),
166
+ ok: teamwork.code === 0,
167
+ runtimeOk: runtime.code === 0,
168
+ authenticated: teamwork.code === 0,
169
+ localRuntimeAttached: runtime.code === 0 && /running|ready|attached/i.test(runtime.stdout),
170
+ ...(teamwork.code !== 0 ? { error: classifyAmasterFailure('employee', teamwork) } : {}),
171
+ ...(runtime.code !== 0 ? { runtimeError: classifyAmasterFailure('runtime', runtime) } : {}),
172
+ };
173
+ }
174
+ async runAmaster(args) {
175
+ const result = await this.exec(this.binary, args);
176
+ if (result.code !== 0) {
177
+ throw new Error(`amaster ${args[0]} failed: ${classifyAmasterFailure('employee', result)}`);
178
+ }
179
+ return result.stdout;
180
+ }
181
+ async runOptional(command, args) {
182
+ try {
183
+ return await this.exec(command, args);
184
+ }
185
+ catch (error) {
186
+ return {
187
+ stdout: '',
188
+ stderr: redactText(error instanceof Error ? error.message : String(error)),
189
+ code: 1,
190
+ };
191
+ }
192
+ }
193
+ async buildArgs(args, workspaceId, useDefaultCompany = true) {
194
+ const next = [...args, ...this.commonArgs];
195
+ const companyId = normalizeWorkspaceId(workspaceId) ??
196
+ (useDefaultCompany ? await this.resolveDefaultCompanyId() : undefined);
197
+ if (companyId)
198
+ next.push('-C', companyId);
199
+ return next;
200
+ }
201
+ buildArgsSync(args, workspaceId, useDefaultCompany = true) {
202
+ const next = [...args, ...this.commonArgs];
203
+ const companyId = normalizeWorkspaceId(workspaceId) ?? (useDefaultCompany ? this.defaultCompanyId : undefined);
204
+ if (companyId)
205
+ next.push('-C', companyId);
206
+ return next;
207
+ }
208
+ async resolveDefaultCompanyId() {
209
+ if (this.defaultCompanyId)
210
+ return this.defaultCompanyId;
211
+ if (this.discoveredCompanyId)
212
+ return this.discoveredCompanyId;
213
+ if (!this.workspaceDiscoveryPromise) {
214
+ this.workspaceDiscoveryPromise = this.discoverSingleCompanyId();
215
+ }
216
+ try {
217
+ this.discoveredCompanyId = await this.workspaceDiscoveryPromise;
218
+ return this.discoveredCompanyId;
219
+ }
220
+ catch (error) {
221
+ this.workspaceDiscoveryPromise = undefined;
222
+ throw error;
223
+ }
224
+ }
225
+ async discoverSingleCompanyId() {
226
+ const workspaces = await this.listWorkspaces();
227
+ if (workspaces.length === 0)
228
+ return undefined;
229
+ if (workspaces.length === 1)
230
+ return workspaces[0].id;
231
+ throw new Error('Multiple AMaster workspaces are available; pass workspaceId from workspace_list.');
232
+ }
233
+ primeDefaultCompanyCache(workspaces) {
234
+ if (this.defaultCompanyId)
235
+ return;
236
+ if (workspaces.length === 1) {
237
+ const id = workspaces[0].id;
238
+ this.discoveredCompanyId = id;
239
+ this.workspaceDiscoveryPromise = Promise.resolve(id);
240
+ return;
241
+ }
242
+ this.discoveredCompanyId = undefined;
243
+ this.workspaceDiscoveryPromise = undefined;
244
+ }
245
+ }
246
+ function parseJson(text) {
247
+ try {
248
+ return sanitizeValue(JSON.parse(text.trim()));
249
+ }
250
+ catch {
251
+ return undefined;
252
+ }
253
+ }
254
+ function parseRequiredJson(text, label) {
255
+ const parsed = parseJson(text);
256
+ if (parsed === undefined)
257
+ throw new Error(`${label} did not return valid JSON.`);
258
+ return parsed;
259
+ }
260
+ function parseRequiredJsonArray(text, label) {
261
+ const parsed = parseJson(text);
262
+ if (!Array.isArray(parsed))
263
+ throw new Error(`${label} did not return a JSON array.`);
264
+ return parsed;
265
+ }
266
+ function parseJsonOrRaw(text) {
267
+ const parsed = parseJson(text);
268
+ if (parsed !== undefined)
269
+ return parsed;
270
+ return redactText(text);
271
+ }
272
+ function mapWorkspace(raw) {
273
+ const item = asRecord(raw);
274
+ if (!item)
275
+ throw new Error('AMaster company list returned a malformed workspace.');
276
+ const id = requiredString(item.id ?? item.companyId);
277
+ return {
278
+ id,
279
+ name: String(item.name ?? item.title ?? item.urlKey ?? id),
280
+ };
281
+ }
282
+ function mapIssue(raw) {
283
+ const item = asRecord(raw);
284
+ if (!item)
285
+ throw new Error('AMaster issue response did not contain an issue object.');
286
+ const id = requiredString(item.id ?? item.identifier);
287
+ const metadata = buildIssueMetadata(item);
288
+ return {
289
+ id,
290
+ title: String(item.title ?? ''),
291
+ status: String(item.status ?? 'unknown'),
292
+ ...optionalString('description', item.description),
293
+ ...optionalString('priority', item.priority),
294
+ ...optionalString('assignee', item.assignee ?? item.assigneeName),
295
+ ...optionalString('project', item.project ?? item.projectId),
296
+ ...optionalString('createdAt', item.createdAt ?? item.created_at),
297
+ ...optionalString('updatedAt', item.updatedAt ?? item.updated_at),
298
+ ...(Object.keys(metadata).length > 0 ? { metadata } : {}),
299
+ };
300
+ }
301
+ function buildIssueMetadata(item) {
302
+ const metadata = {};
303
+ for (const [key, value] of Object.entries(item)) {
304
+ if (ISSUE_TOP_LEVEL_FIELDS.has(key))
305
+ continue;
306
+ metadata[key] = sanitizeValue(value);
307
+ }
308
+ for (const key of ['identifier', 'projectId']) {
309
+ if (item[key] !== undefined)
310
+ metadata[key] = sanitizeValue(item[key]);
311
+ }
312
+ return metadata;
313
+ }
314
+ function collectCommentRecords(metadata) {
315
+ if (!metadata)
316
+ return [];
317
+ const comments = [];
318
+ if (Array.isArray(metadata.comments))
319
+ comments.push(...metadata.comments);
320
+ const nestedMetadata = asRecord(metadata.metadata);
321
+ if (Array.isArray(nestedMetadata?.comments))
322
+ comments.push(...nestedMetadata.comments);
323
+ return comments;
324
+ }
325
+ const ISSUE_TOP_LEVEL_FIELDS = new Set([
326
+ 'id',
327
+ 'title',
328
+ 'status',
329
+ 'description',
330
+ 'priority',
331
+ 'assignee',
332
+ 'assigneeName',
333
+ 'project',
334
+ 'createdAt',
335
+ 'created_at',
336
+ 'updatedAt',
337
+ 'updated_at',
338
+ ]);
339
+ function unwrapIssue(raw) {
340
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
341
+ return raw;
342
+ const item = raw;
343
+ if (item.issue && typeof item.issue === 'object' && !Array.isArray(item.issue))
344
+ return item.issue;
345
+ return raw;
346
+ }
347
+ function sanitizeValue(value) {
348
+ if (Array.isArray(value))
349
+ return value.map(sanitizeValue);
350
+ if (!value || typeof value !== 'object')
351
+ return typeof value === 'string' ? redactText(value) : value;
352
+ const out = {};
353
+ for (const [key, raw] of Object.entries(value)) {
354
+ out[key] = isSensitiveKey(key) ? '[redacted]' : sanitizeValue(raw);
355
+ }
356
+ return out;
357
+ }
358
+ function classifyAmasterFailure(kind, result) {
359
+ const output = redactText(result.stderr || result.stdout || `Exit code ${result.code}`);
360
+ const lower = output.toLowerCase();
361
+ if (/enoent|not found|command not found|spawn .* no such file/i.test(output)) {
362
+ return kind === 'runtime'
363
+ ? 'AMaster runtime managed CLI wrapper is missing; runtime executor lease is unavailable, but task list/create can still work.'
364
+ : 'AMaster Employee managed CLI wrapper is missing.';
365
+ }
366
+ if (/managed amaster employee cli|cli target|artifact|未安装|未构建/i.test(output)) {
367
+ return 'Managed AMaster Employee CLI artifact is missing or not built.';
368
+ }
369
+ if (/401|unauthorized|not authenticated/.test(lower)) {
370
+ return 'AMaster authentication failed. In Pi Agent LUI this means the login/session_start auth was not propagated; do not ask the user to paste tokens.';
371
+ }
372
+ if (kind === 'runtime') {
373
+ return `Runtime daemon unavailable; only local executor lease is affected. ${output}`.trim();
374
+ }
375
+ return output.trim() || `Exit code ${result.code}`;
376
+ }
377
+ function isSensitiveKey(key) {
378
+ return /api[_-]?key|access[_-]?token|refresh[_-]?token|connector[_-]?token|token|secret|password|authorization|cookie|database[_-]?url|db[_-]?url/i.test(key);
379
+ }
380
+ function redactText(text) {
381
+ return String(text ?? '')
382
+ .replace(/Bearer\s+[A-Za-z0-9._~+/=-]+/gi, 'Bearer [redacted]')
383
+ .replace(/\bamrtc(?:_pair)?_[A-Za-z0-9._~+/=-]+/g, '[redacted]')
384
+ .replace(/(["']?(?:access_token|refresh_token|connectorToken|connector_token|apiKey|api_key|token|secret|password|authorization|cookie|databaseUrl|dbUrl)["']?\s*[:=]\s*["']?)[^"',\s}]+/gi, '$1[redacted]');
385
+ }
386
+ function stringValue(value) {
387
+ return value === undefined || value === null ? undefined : String(value);
388
+ }
389
+ function requiredString(value) {
390
+ const normalized = stringValue(value)?.trim();
391
+ if (!normalized)
392
+ throw new Error('AMaster response did not contain a required id.');
393
+ return normalized;
394
+ }
395
+ function normalizeWorkspaceId(workspaceId) {
396
+ const trimmed = workspaceId?.trim();
397
+ if (!trimmed)
398
+ return undefined;
399
+ return trimmed;
400
+ }
401
+ function withJson(args) {
402
+ return [...args, '--json'];
403
+ }
404
+ function asRecord(value) {
405
+ return value && typeof value === 'object' && !Array.isArray(value)
406
+ ? value
407
+ : undefined;
408
+ }
409
+ function isIssueRecord(value) {
410
+ const item = asRecord(value);
411
+ if (!item)
412
+ return false;
413
+ const id = stringValue(item.id ?? item.identifier)?.trim();
414
+ return Boolean(id);
415
+ }
416
+ function optionalString(key, value) {
417
+ const normalized = stringValue(value);
418
+ return normalized === undefined ? {} : { [key]: normalized };
419
+ }
420
+ //# sourceMappingURL=amaster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amaster.js","sourceRoot":"","sources":["../../src/adapters/amaster.ts"],"names":[],"mappings":"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"}
@@ -58,11 +58,32 @@ async function checkBrew(exec) {
58
58
  }
59
59
  }
60
60
  async function installViaCurl(exec) {
61
+ // multica's upstream install.sh tries `/usr/local/bin` first, then `sudo mv`,
62
+ // and only falls back to `~/.local/bin` if `sudo` is missing entirely. On
63
+ // CI runners (and other environments where the user has sudo configured but
64
+ // no NOPASSWD), the sudo branch hangs on a password prompt and the script
65
+ // exits non-zero before reaching the user-bin fallback.
66
+ //
67
+ // Force the user-bin path via MULTICA_BIN_DIR. macOS users who own
68
+ // /usr/local/bin still take the first branch (writable), so this only
69
+ // changes behavior for the cases that were broken.
70
+ const userBin = `${process.env.HOME ?? ''}/.local/bin`;
71
+ const cmd = `curl -fsSL ${INSTALL_SCRIPT_URL} | MULTICA_BIN_DIR=${JSON.stringify(userBin)} bash`;
61
72
  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}`;
73
+ const { code, stderr } = await exec('bash', ['-c', cmd]);
74
+ if (code !== 0) {
75
+ return stderr.trim() || `install script exited with code ${code}`;
76
+ }
77
+ // ~/.local/bin isn't on the inherited PATH on every Linux runner; without
78
+ // this the very next isAvailable() spawn(multica) misses the binary we
79
+ // just dropped.
80
+ if (process.env.HOME) {
81
+ const path = process.env.PATH ?? '';
82
+ if (!path.split(':').includes(userBin)) {
83
+ process.env.PATH = path ? `${userBin}:${path}` : userBin;
84
+ }
85
+ }
86
+ return undefined;
66
87
  }
67
88
  catch (e) {
68
89
  return e instanceof Error ? e.message : String(e);
@@ -1 +1 @@
1
- {"version":3,"file":"multica-installer.js","sourceRoot":"","sources":["../../src/adapters/multica-installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multica-installer.js","sourceRoot":"","sources":["../../src/adapters/multica-installer.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- import type { ExtensionAPI } from '@earendil-works/pi-coding-agent';
1
+ import { type ExtensionAPI } from '@earendil-works/pi-coding-agent';
2
2
  export default function piTeamworkExtension(pi: ExtensionAPI): void;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -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;AAsBpE,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA+SlE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAmChF,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAuKlE"}