@productbrain/cli 0.1.0-beta.9413 → 0.1.0-beta.9427
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/__tests__/handshake.test.js +1 -1
- package/dist/__tests__/handshake.test.js.map +1 -1
- package/dist/__tests__/hook-intents.test.js +2 -2
- package/dist/__tests__/hook-intents.test.js.map +1 -1
- package/dist/__tests__/session-pinned-role.test.js +37 -52
- package/dist/__tests__/session-pinned-role.test.js.map +1 -1
- package/dist/commands/organisation.d.ts +0 -5
- package/dist/commands/organisation.d.ts.map +1 -1
- package/dist/commands/organisation.js +2 -39
- package/dist/commands/organisation.js.map +1 -1
- package/dist/commands/organisation.test.js +9 -23
- package/dist/commands/organisation.test.js.map +1 -1
- package/dist/commands/role.d.ts +10 -0
- package/dist/commands/role.d.ts.map +1 -1
- package/dist/commands/role.js +24 -1
- package/dist/commands/role.js.map +1 -1
- package/dist/commands/role.test.js +83 -4
- package/dist/commands/role.test.js.map +1 -1
- package/dist/commands/session.js +1 -1
- package/dist/commands/session.js.map +1 -1
- package/dist/generated/routeLatencyBudget.generated.d.ts.map +1 -1
- package/dist/generated/routeLatencyBudget.generated.js +0 -1
- package/dist/generated/routeLatencyBudget.generated.js.map +1 -1
- package/dist/lib/hook-intents.d.ts.map +1 -1
- package/dist/lib/hook-intents.js +2 -1
- package/dist/lib/hook-intents.js.map +1 -1
- package/dist/lib/pinnedRole.d.ts +6 -6
- package/dist/lib/pinnedRole.d.ts.map +1 -1
- package/dist/lib/pinnedRole.js +10 -17
- package/dist/lib/pinnedRole.js.map +1 -1
- package/dist/lib/seatSentence.d.ts +31 -0
- package/dist/lib/seatSentence.d.ts.map +1 -0
- package/dist/lib/seatSentence.js +19 -0
- package/dist/lib/seatSentence.js.map +1 -0
- package/dist/registerRoleCommands.d.ts +1 -1
- package/dist/registerRoleCommands.d.ts.map +1 -1
- package/dist/registerRoleCommands.js +16 -2
- package/dist/registerRoleCommands.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-intents.d.ts","sourceRoot":"","sources":["../../src/lib/hook-intents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,eAAe,GAAG,aAAa,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,YAAY,CAAC;CACnD;
|
|
1
|
+
{"version":3,"file":"hook-intents.d.ts","sourceRoot":"","sources":["../../src/lib/hook-intents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,eAAe,GAAG,aAAa,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,YAAY,CAAC;CACnD;AAID,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAgBpE,CAAC;AASF,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,YAAY,CAAC;IAC9C,KAAK,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACnF,KAAK,EAAE,MAAM,CAAC;CACf;AAQD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,UAAU,EAAE,EACrB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,YAAY,EAAE,CAyBhB;AAID,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,CAS9E"}
|
package/dist/lib/hook-intents.js
CHANGED
|
@@ -11,9 +11,10 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { SURFACE_REGISTRY } from '../surfaces/registry.js';
|
|
13
13
|
// Hook failure contract (TEN-712): every hook command MUST end with '|| true' so Claude Code always starts even if pb is unavailable.
|
|
14
|
+
// session-start keeps stderr (2>&1) so every refusal reaches the agent once (TASK-649, WP-810).
|
|
14
15
|
export const HOOK_INTENT_CONFIGS = {
|
|
15
16
|
'session-start': {
|
|
16
|
-
command:
|
|
17
|
+
command: 'pb session start 2>&1 || true',
|
|
17
18
|
statusMessage: 'Opening pb session...',
|
|
18
19
|
hookEvent: 'SessionStart',
|
|
19
20
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook-intents.js","sourceRoot":"","sources":["../../src/lib/hook-intents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAW3D,sIAAsI;AACtI,MAAM,CAAC,MAAM,mBAAmB,GAAyC;IACvE,eAAe,EAAE;QACf,OAAO,
|
|
1
|
+
{"version":3,"file":"hook-intents.js","sourceRoot":"","sources":["../../src/lib/hook-intents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAW3D,sIAAsI;AACtI,gGAAgG;AAChG,MAAM,CAAC,MAAM,mBAAmB,GAAyC;IACvE,eAAe,EAAE;QACf,OAAO,EAAE,+BAA+B;QACxC,aAAa,EAAE,uBAAuB;QACtC,SAAS,EAAE,cAAc;KAC1B;IACD,eAAe,EAAE;QACf,OAAO,EAAE,sCAAsC;QAC/C,aAAa,EAAE,uBAAuB;QACtC,SAAS,EAAE,MAAM;KAClB;IACD,aAAa,EAAE;QACb,OAAO,EACL,sKAAsK;QACxK,SAAS,EAAE,YAAY;KACxB;CACF,CAAC;AAKF,SAAS,UAAU,CAAC,MAAuC,EAAE,GAAW;IACtE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7E,CAAC;AAQD,MAAM,aAAa,GAA+B;IAChD,eAAe,EAAE,iCAAiC;IAClD,eAAe,EAAE,yBAAyB;IAC1C,aAAa,EAAE,wCAAwC;CACxD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAqB,EACrB,aAAsC;IAEtC,MAAM,SAAS,GAAmB,EAAE,CAAC;IAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAoC,CAAC;QAEjF,IAAI,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;YAAE,SAAS;QAEhD,MAAM,SAAS,GAA8D;YAC3E,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC;QACF,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACpC,SAAS,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;QAC9C,CAAC;QAED,SAAS,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,GAAG,CAAC,SAAS;YACpB,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;YAC7B,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC;SAC7B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AASD;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAoB;IAC1D,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IACpE,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,GAAG,OAAO,iEAAiE;KACpF,CAAC;AACJ,CAAC"}
|
package/dist/lib/pinnedRole.d.ts
CHANGED
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
* another (RULE-632). A role id names a role in ONE workspace, so the pin's role is sent only when
|
|
9
9
|
* the pin's own profile supplies the key; under any other key it is not sent, and that is said.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* any other failure is rethrown unchanged.
|
|
11
|
+
* A refusal is thrown once and printed once, on stderr; the SessionStart hook pb installs runs
|
|
12
|
+
* `pb session start 2>&1`, so the agent reads it there (TASK-649, WP-810). Older installs and
|
|
13
|
+
* machine-level hooks may still discard stderr (TEN-3736). Only role refusals get
|
|
14
|
+
* this framing: any other failure is rethrown unchanged.
|
|
15
15
|
*/
|
|
16
16
|
import { CLIError } from './errors.js';
|
|
17
17
|
/** The one test for a role refusal; session.ts's stale-preview-key recovery uses it too, so a role refusal is never relabelled. */
|
|
@@ -19,8 +19,8 @@ export declare const isRoleRefusal: (err: unknown) => err is CLIError;
|
|
|
19
19
|
/**
|
|
20
20
|
* Run a session start with `--role`, else the pin's role. A role refusal under `--role` gains the
|
|
21
21
|
* reset fix; under the pin it names the pin and its fix. With no role asked for, `multi_role` gains
|
|
22
|
-
* the folder-pin way to name one, and `no_role` keeps the kernel's fix.
|
|
23
|
-
*
|
|
22
|
+
* the folder-pin way to name one, and `no_role` keeps the kernel's fix. Every other failure is
|
|
23
|
+
* rethrown unchanged.
|
|
24
24
|
*/
|
|
25
25
|
export declare function startWithPinnedRole<O extends {
|
|
26
26
|
role?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pinnedRole.d.ts","sourceRoot":"","sources":["../../src/lib/pinnedRole.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,QAAQ,EAAkC,MAAM,aAAa,CAAC;AAmBvE,mIAAmI;AACnI,eAAO,MAAM,aAAa,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,QAAkE,CAAC;AAmCvH;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACnE,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"pinnedRole.d.ts","sourceRoot":"","sources":["../../src/lib/pinnedRole.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,QAAQ,EAAkC,MAAM,aAAa,CAAC;AAmBvE,mIAAmI;AACnI,eAAO,MAAM,aAAa,GAAI,KAAK,OAAO,KAAG,GAAG,IAAI,QAAkE,CAAC;AAmCvH;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,SAAS;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACnE,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|
package/dist/lib/pinnedRole.js
CHANGED
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
* another (RULE-632). A role id names a role in ONE workspace, so the pin's role is sent only when
|
|
9
9
|
* the pin's own profile supplies the key; under any other key it is not sent, and that is said.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* any other failure is rethrown unchanged.
|
|
11
|
+
* A refusal is thrown once and printed once, on stderr; the SessionStart hook pb installs runs
|
|
12
|
+
* `pb session start 2>&1`, so the agent reads it there (TASK-649, WP-810). Older installs and
|
|
13
|
+
* machine-level hooks may still discard stderr (TEN-3736). Only role refusals get
|
|
14
|
+
* this framing: any other failure is rethrown unchanged.
|
|
15
15
|
*/
|
|
16
16
|
import { readLocalProjectConfig } from './config.js';
|
|
17
17
|
import { CLIError, ErrorCode } from './errors.js';
|
|
@@ -64,8 +64,8 @@ function pinnedRoleInPlay(json) {
|
|
|
64
64
|
/**
|
|
65
65
|
* Run a session start with `--role`, else the pin's role. A role refusal under `--role` gains the
|
|
66
66
|
* reset fix; under the pin it names the pin and its fix. With no role asked for, `multi_role` gains
|
|
67
|
-
* the folder-pin way to name one, and `no_role` keeps the kernel's fix.
|
|
68
|
-
*
|
|
67
|
+
* the folder-pin way to name one, and `no_role` keeps the kernel's fix. Every other failure is
|
|
68
|
+
* rethrown unchanged.
|
|
69
69
|
*/
|
|
70
70
|
export async function startWithPinnedRole(options, json, start) {
|
|
71
71
|
if (options.role) {
|
|
@@ -76,16 +76,11 @@ export async function startWithPinnedRole(options, json, start) {
|
|
|
76
76
|
throw isRoleRefusal(err) ? withGuidance(err, ROLE_SWITCH_FIX) : err;
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
const refuse = (error) => {
|
|
80
|
-
if (!json && !process.stdout.isTTY)
|
|
81
|
-
process.stdout.write(`${error.message}\n${error.guidance ?? ''}\n`);
|
|
82
|
-
throw error;
|
|
83
|
-
};
|
|
84
79
|
const { role, malformed } = pinnedRoleInPlay(json);
|
|
85
80
|
if (malformed) {
|
|
86
|
-
|
|
81
|
+
throw new CLIError(`The "role" field in ${PIN} is not a role id (ROL- followed by a number), so the session did not start.`, {
|
|
87
82
|
code: ErrorCode.CONFIG_INVALID, category: 'config', guidance: PINNED_ROLE_FIX,
|
|
88
|
-
})
|
|
83
|
+
});
|
|
89
84
|
}
|
|
90
85
|
if (!role) {
|
|
91
86
|
try {
|
|
@@ -93,10 +88,8 @@ export async function startWithPinnedRole(options, json, start) {
|
|
|
93
88
|
}
|
|
94
89
|
catch (err) {
|
|
95
90
|
if (err instanceof CLIError && err.code === ErrorCode.MULTI_ROLE) {
|
|
96
|
-
|
|
91
|
+
throw withGuidance(err, `Or name this folder's role once: add "role": "<ROLE-ID>" to ${PIN}.`);
|
|
97
92
|
}
|
|
98
|
-
if (err instanceof CLIError && err.code === ErrorCode.NO_ROLE)
|
|
99
|
-
refuse(err);
|
|
100
93
|
throw err;
|
|
101
94
|
}
|
|
102
95
|
}
|
|
@@ -105,7 +98,7 @@ export async function startWithPinnedRole(options, json, start) {
|
|
|
105
98
|
}
|
|
106
99
|
catch (err) {
|
|
107
100
|
if (isRoleRefusal(err))
|
|
108
|
-
|
|
101
|
+
throw pinnedRoleRefusal(role, err);
|
|
109
102
|
throw err;
|
|
110
103
|
}
|
|
111
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pinnedRole.js","sourceRoot":"","sources":["../../src/lib/pinnedRole.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pinnedRole.js","sourceRoot":"","sources":["../../src/lib/pinnedRole.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TASK-633 S3c (WP-808, DEC-1954): the one sentence a seat or unseat reply reads as, on the CLI
|
|
3
|
+
* (`pb role seat` / `pb role unseat`) and the MCP `role` tool alike. Both doors call the same
|
|
4
|
+
* kernel routes (`organisation.seatInRole` / `organisation.unseatFromRole`) and render this
|
|
5
|
+
* sentence from the result, so the two replies cannot drift (RULE-657: one place decides it).
|
|
6
|
+
*
|
|
7
|
+
* Pure, no I/O, zero imports: copied into each connector by scripts/generate-mcp-embedded-copies.mjs.
|
|
8
|
+
* Field sanitization is the caller's (each connector's own `sanitizeSingleLineField`), passed in
|
|
9
|
+
* as `clean`, the same split ownerLine.ts uses.
|
|
10
|
+
*
|
|
11
|
+
* A seat names the person's id after their name: a placeholder has no email, and the id is the
|
|
12
|
+
* handle `pb role unseat --person` and the MCP `unseat` take (PR #1549 review; TASK-636, DEC-1810).
|
|
13
|
+
*/
|
|
14
|
+
export interface SeatReply {
|
|
15
|
+
outcome: 'applied' | 'refused';
|
|
16
|
+
created?: boolean;
|
|
17
|
+
removed?: boolean;
|
|
18
|
+
person?: string;
|
|
19
|
+
personId?: string;
|
|
20
|
+
personStatus?: string;
|
|
21
|
+
role?: string;
|
|
22
|
+
roleName?: string;
|
|
23
|
+
teamName?: string;
|
|
24
|
+
refusal?: {
|
|
25
|
+
code: string;
|
|
26
|
+
reason: string;
|
|
27
|
+
requiredAction?: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export declare function formatSeatSentence(action: 'seat' | 'unseat', reply: SeatReply, clean: (value: string) => string): string;
|
|
31
|
+
//# sourceMappingURL=seatSentence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seatSentence.d.ts","sourceRoot":"","sources":["../../src/lib/seatSentence.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,SAAS;IACzB,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAcxH"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// GENERATED by scripts/generate-mcp-embedded-copies.mjs from kernel/organisationalAuthority/seatSentence.ts.
|
|
2
|
+
// DO NOT EDIT. Run `npm run mcp:embedded-copies` to regenerate.
|
|
3
|
+
// Local runtime copy for the isolated connector build.
|
|
4
|
+
export function formatSeatSentence(action, reply, clean) {
|
|
5
|
+
if (reply.outcome === 'refused') {
|
|
6
|
+
return `Refused: ${reply.refusal?.reason ?? reply.refusal?.code ?? 'not allowed'}${reply.refusal?.requiredAction ? ` ${reply.refusal.requiredAction}` : ''}`;
|
|
7
|
+
}
|
|
8
|
+
const who = `${clean(reply.person ?? '')}${reply.personStatus && reply.personStatus !== 'active' ? ` (${clean(reply.personStatus)})` : ''}`;
|
|
9
|
+
const roleLabel = `${clean(reply.roleName ?? '')} (${reply.role ?? ''})`;
|
|
10
|
+
const teamLabel = clean(reply.teamName ?? '');
|
|
11
|
+
if (action === 'seat') {
|
|
12
|
+
const id = reply.personId ? ` [${reply.personId}]` : '';
|
|
13
|
+
return `${reply.created ? 'Seated' : 'Confirmed'} ${who}${id} as ${roleLabel} in ${teamLabel}.`;
|
|
14
|
+
}
|
|
15
|
+
return reply.removed
|
|
16
|
+
? `Unseated ${who} from ${roleLabel} in ${teamLabel}.`
|
|
17
|
+
: `${who} did not hold ${roleLabel} in ${teamLabel}; nothing changed.`;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=seatSentence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seatSentence.js","sourceRoot":"","sources":["../../src/lib/seatSentence.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,gEAAgE;AAChE,uDAAuD;AA4BvD,MAAM,UAAU,kBAAkB,CAAC,MAAyB,EAAE,KAAgB,EAAE,KAAgC;IAC/G,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,YAAY,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,aAAa,GAAG,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC9J,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5I,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC;IACzE,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,GAAG,EAAE,OAAO,SAAS,OAAO,SAAS,GAAG,CAAC;IACjG,CAAC;IACD,OAAO,KAAK,CAAC,OAAO;QACnB,CAAC,CAAC,YAAY,GAAG,SAAS,SAAS,OAAO,SAAS,GAAG;QACtD,CAAC,CAAC,GAAG,GAAG,iBAAiB,SAAS,OAAO,SAAS,oBAAoB,CAAC;AACzE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `pb role accountable` — registration (WP-730 S2).
|
|
2
|
+
* `pb role accountable` — registration (WP-730 S2); `pb role seat` / `pb role unseat` (TASK-633 S3c, DEC-1954).
|
|
3
3
|
*
|
|
4
4
|
* Its own file rather than more lines in `packages/cli/src/index.ts` (1,069 LOC and
|
|
5
5
|
* shrink-only) — the same `register*Commands.ts` split `registerOutcomeCommands.ts` already
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerRoleCommands.d.ts","sourceRoot":"","sources":["../src/registerRoleCommands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"registerRoleCommands.d.ts","sourceRoot":"","sources":["../src/registerRoleCommands.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4B3D"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { runRoleAccountable } from './commands/role.js';
|
|
1
|
+
import { runRoleAccountable, runRoleSeat, runRoleUnseat } from './commands/role.js';
|
|
2
2
|
export function registerRoleCommands(program) {
|
|
3
3
|
const roleCmd = program
|
|
4
4
|
.command('role')
|
|
5
|
-
.description('Roles — who is accountable for what
|
|
5
|
+
.description('Roles — who is accountable for what, and who holds them');
|
|
6
6
|
roleCmd
|
|
7
7
|
.command('accountable <role-id>')
|
|
8
8
|
.description('What this role is accountable for — explicit ownership, reporting duty, and Team-Lead vacancy coverage (not yet computed)')
|
|
@@ -10,5 +10,19 @@ export function registerRoleCommands(program) {
|
|
|
10
10
|
.option('--limit <n>', 'Max explicit-list rows per page (default and maximum 200)')
|
|
11
11
|
.option('--cursor <n>', 'Continue the explicit list from an earlier truncated page')
|
|
12
12
|
.action(runRoleAccountable);
|
|
13
|
+
roleCmd
|
|
14
|
+
.command('seat <role-id>')
|
|
15
|
+
.description('Put a person in this role, in its home team; their other roles there stay\n'
|
|
16
|
+
+ 'Example: pb role seat ROL-8 --new-person "Jan Jansen"')
|
|
17
|
+
.option('--person <id-or-email>', 'An existing person, by person id or exact email')
|
|
18
|
+
.option('--new-person <name>', 'A person with no login yet: the same exact name twice is one placeholder; a name that belongs to someone with an account is refused')
|
|
19
|
+
.option('--team <team-id>', 'Only for Team Lead, which is held in every team')
|
|
20
|
+
.action(runRoleSeat);
|
|
21
|
+
roleCmd
|
|
22
|
+
.command('unseat <role-id>')
|
|
23
|
+
.description('Take this role from a person; their other roles in the team stay. The last active Team Lead of a team is refused')
|
|
24
|
+
.requiredOption('--person <id-or-email>', 'The holder, by person id or exact email')
|
|
25
|
+
.option('--team <team-id>', 'Only for Team Lead, which is held in every team')
|
|
26
|
+
.action(runRoleUnseat);
|
|
13
27
|
}
|
|
14
28
|
//# sourceMappingURL=registerRoleCommands.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerRoleCommands.js","sourceRoot":"","sources":["../src/registerRoleCommands.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"registerRoleCommands.js","sourceRoot":"","sources":["../src/registerRoleCommands.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpF,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACpD,MAAM,OAAO,GAAG,OAAO;SACrB,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAEzE,OAAO;SACL,OAAO,CAAC,uBAAuB,CAAC;SAChC,WAAW,CAAC,2HAA2H,CAAC;SACxI,MAAM,CAAC,uBAAuB,EAAE,0DAA0D,CAAC;SAC3F,MAAM,CAAC,aAAa,EAAE,2DAA2D,CAAC;SAClF,MAAM,CAAC,cAAc,EAAE,2DAA2D,CAAC;SACnF,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE7B,OAAO;SACL,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,6EAA6E;UACvF,uDAAuD,CAAC;SAC1D,MAAM,CAAC,wBAAwB,EAAE,iDAAiD,CAAC;SACnF,MAAM,CAAC,qBAAqB,EAAE,qIAAqI,CAAC;SACpK,MAAM,CAAC,kBAAkB,EAAE,iDAAiD,CAAC;SAC7E,MAAM,CAAC,WAAW,CAAC,CAAC;IAEtB,OAAO;SACL,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,kHAAkH,CAAC;SAC/H,cAAc,CAAC,wBAAwB,EAAE,yCAAyC,CAAC;SACnF,MAAM,CAAC,kBAAkB,EAAE,iDAAiD,CAAC;SAC7E,MAAM,CAAC,aAAa,CAAC,CAAC;AACzB,CAAC"}
|