@agents-ensemble/core 0.5.0 → 0.5.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.
Files changed (66) hide show
  1. package/dist/acp/acp-client.d.ts +3 -0
  2. package/dist/acp/acp-client.d.ts.map +1 -1
  3. package/dist/acp/acp-client.js +7 -1
  4. package/dist/acp/acp-client.js.map +1 -1
  5. package/dist/acp/index.d.ts +2 -0
  6. package/dist/acp/index.d.ts.map +1 -1
  7. package/dist/acp/index.js +1 -0
  8. package/dist/acp/index.js.map +1 -1
  9. package/dist/acp/resolve-acp-auth.d.ts +13 -0
  10. package/dist/acp/resolve-acp-auth.d.ts.map +1 -0
  11. package/dist/acp/resolve-acp-auth.js +31 -0
  12. package/dist/acp/resolve-acp-auth.js.map +1 -0
  13. package/dist/acp/resolve-acp-spawn.d.ts.map +1 -1
  14. package/dist/acp/resolve-acp-spawn.js +4 -0
  15. package/dist/acp/resolve-acp-spawn.js.map +1 -1
  16. package/dist/acp/testing/fake-acp-server.d.ts +7 -0
  17. package/dist/acp/testing/fake-acp-server.d.ts.map +1 -1
  18. package/dist/acp/testing/fake-acp-server.js +14 -2
  19. package/dist/acp/testing/fake-acp-server.js.map +1 -1
  20. package/dist/acp/validate-acp-preset-prerequisites.js +2 -2
  21. package/dist/acp/validate-acp-preset-prerequisites.js.map +1 -1
  22. package/dist/conductor/conductor-agent.d.ts +2 -1
  23. package/dist/conductor/conductor-agent.d.ts.map +1 -1
  24. package/dist/conductor/conductor-agent.js +3 -0
  25. package/dist/conductor/conductor-agent.js.map +1 -1
  26. package/dist/conductor/conductor-session-driver.d.ts +4 -0
  27. package/dist/conductor/conductor-session-driver.d.ts.map +1 -1
  28. package/dist/conductor/conductor-session-driver.js +19 -4
  29. package/dist/conductor/conductor-session-driver.js.map +1 -1
  30. package/dist/conductor/conductor-session.d.ts.map +1 -1
  31. package/dist/conductor/conductor-session.js +60 -87
  32. package/dist/conductor/conductor-session.js.map +1 -1
  33. package/dist/escalation/create-permission-ask-handler.js +1 -1
  34. package/dist/escalation/create-permission-ask-handler.js.map +1 -1
  35. package/dist/index.d.ts +1 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/mcp/index.d.ts +4 -0
  40. package/dist/mcp/index.d.ts.map +1 -0
  41. package/dist/mcp/index.js +2 -0
  42. package/dist/mcp/index.js.map +1 -0
  43. package/dist/mcp/load-mcp-config.d.ts +24 -0
  44. package/dist/mcp/load-mcp-config.d.ts.map +1 -0
  45. package/dist/mcp/load-mcp-config.js +165 -0
  46. package/dist/mcp/load-mcp-config.js.map +1 -0
  47. package/dist/permission/index.d.ts +1 -1
  48. package/dist/permission/index.d.ts.map +1 -1
  49. package/dist/permission/index.js.map +1 -1
  50. package/dist/permission/permission-broker.d.ts +3 -3
  51. package/dist/permission/permission-broker.d.ts.map +1 -1
  52. package/dist/permission/permission-broker.js +31 -7
  53. package/dist/permission/permission-broker.js.map +1 -1
  54. package/dist/permission/permission-pipeline.d.ts.map +1 -1
  55. package/dist/permission/permission-pipeline.js +3 -3
  56. package/dist/permission/permission-pipeline.js.map +1 -1
  57. package/dist/permission/permission-request.d.ts +9 -0
  58. package/dist/permission/permission-request.d.ts.map +1 -1
  59. package/dist/permission/permission-request.js +21 -0
  60. package/dist/permission/permission-request.js.map +1 -1
  61. package/dist/profiles/implementer-and-reviewer/team.md +23 -3
  62. package/package.json +1 -1
  63. package/dist/github/github-post-loop-resume.d.ts +0 -9
  64. package/dist/github/github-post-loop-resume.d.ts.map +0 -1
  65. package/dist/github/github-post-loop-resume.js +0 -16
  66. package/dist/github/github-post-loop-resume.js.map +0 -1
@@ -4,7 +4,7 @@ import { type PermissionRequest } from './permission-request.js';
4
4
  export type PermissionAskHandler = (request: PermissionRequest) => PermissionDecision | Promise<PermissionDecision>;
5
5
  export interface PermissionBrokerOptions {
6
6
  policy?: PermissionPolicyRules;
7
- /** Called when policy verdict is `ask`. Defaults to allow-once. */
7
+ /** Called when policy verdict is `ask`. Defaults to the backend's allow-once option. */
8
8
  onAsk?: PermissionAskHandler;
9
9
  /** Label for logs (e.g. worker session id). */
10
10
  sessionLabel?: string;
@@ -24,6 +24,6 @@ export declare class PermissionBroker {
24
24
  private handle;
25
25
  private verdictToDecision;
26
26
  }
27
- export declare function allowOnce(): PermissionDecision;
28
- export declare function deny(): PermissionDecision;
27
+ export declare function allowOnce(request?: Pick<PermissionRequest, 'options'>): PermissionDecision;
28
+ export declare function deny(request?: Pick<PermissionRequest, 'options'>): PermissionDecision;
29
29
  //# sourceMappingURL=permission-broker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission-broker.d.ts","sourceRoot":"","sources":["../../src/permission/permission-broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,iBAAiB,KACvB,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,mEAAmE;IACnE,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,KAAK,CAAoC;gBAEpB,OAAO,GAAE,uBAA4B;IAElE,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAOvD,MAAM,CACJ,MAAM,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,kBAAkB,CAAC;IAI9B,OAAO,CAAC,OAAO;YASD,MAAM;YAUN,iBAAiB;CAkBhC;AAED,wBAAgB,SAAS,IAAI,kBAAkB,CAE9C;AAED,wBAAgB,IAAI,IAAI,kBAAkB,CAIzC"}
1
+ {"version":3,"file":"permission-broker.d.ts","sourceRoot":"","sources":["../../src/permission/permission-broker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,iBAAiB,KACvB,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEtD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,wFAAwF;IACxF,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,KAAK,CAAoC;gBAEpB,OAAO,GAAE,uBAA4B;IAElE,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,iBAAiB;IAOvD,MAAM,CACJ,MAAM,EAAE,OAAO,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,kBAAkB,CAAC;IAI9B,OAAO,CAAC,OAAO;YASD,MAAM;YAUN,iBAAiB;CAkBhC;AAED,wBAAgB,SAAS,CACvB,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAC3C,kBAAkB,CASpB;AAED,wBAAgB,IAAI,CAClB,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAC3C,kBAAkB,CAWpB"}
@@ -27,10 +27,10 @@ export class PermissionBroker {
27
27
  }
28
28
  async verdictToDecision(verdict, request, sessionLabel) {
29
29
  if (verdict === 'allow') {
30
- return allowOnce();
30
+ return allowOnce(request);
31
31
  }
32
32
  if (verdict === 'deny') {
33
- return deny();
33
+ return deny(request);
34
34
  }
35
35
  const onAsk = this.options.onAsk ?? defaultAllowOnceAskHandler;
36
36
  return onAsk({
@@ -39,15 +39,39 @@ export class PermissionBroker {
39
39
  });
40
40
  }
41
41
  }
42
- export function allowOnce() {
43
- return DEFAULT_PERMISSION_DECISION;
42
+ export function allowOnce(request) {
43
+ const optionId = selectPermissionOptionId(request, 'allow');
44
+ if (!optionId) {
45
+ return DEFAULT_PERMISSION_DECISION;
46
+ }
47
+ return {
48
+ outcome: { outcome: 'selected', optionId },
49
+ };
44
50
  }
45
- export function deny() {
51
+ export function deny(request) {
52
+ const optionId = selectPermissionOptionId(request, 'deny');
53
+ if (optionId) {
54
+ return {
55
+ outcome: { outcome: 'selected', optionId },
56
+ };
57
+ }
46
58
  return {
47
59
  outcome: { outcome: 'selected', optionId: 'deny' },
48
60
  };
49
61
  }
50
- function defaultAllowOnceAskHandler() {
51
- return allowOnce();
62
+ function selectPermissionOptionId(request, intent) {
63
+ const preferredKinds = intent === 'allow'
64
+ ? ['allow_once', 'allow_always']
65
+ : ['reject_once', 'reject_always'];
66
+ for (const kind of preferredKinds) {
67
+ const option = request?.options?.find((candidate) => candidate.kind === kind);
68
+ if (option) {
69
+ return option.optionId;
70
+ }
71
+ }
72
+ return undefined;
73
+ }
74
+ function defaultAllowOnceAskHandler(request) {
75
+ return allowOnce(request);
52
76
  }
53
77
  //# sourceMappingURL=permission-broker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission-broker.js","sourceRoot":"","sources":["../../src/permission/permission-broker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACL,wBAAwB,GAGzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AAoBjC,MAAM,OAAO,gBAAgB;IAGE;IAFrB,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEjD,YAA6B,UAAmC,EAAE;QAArC,YAAO,GAAP,OAAO,CAA8B;IAAG,CAAC;IAEtE,aAAa,CAAC,YAAqB;QACjC,MAAM,KAAK,GAAG,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAExD,OAAO,CAAC,MAAM,EAAE,EAAE,CAChB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CACJ,MAAe,EACf,YAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEO,OAAO,CAAI,IAAsB;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CACnB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,MAAM,CAClB,MAAe,EACf,YAAqB;QAErB,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC9E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,OAA0B,EAC1B,OAA0B,EAC1B,YAAqB;QAErB,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,SAAS,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,0BAA0B,CAAC;QAC/D,OAAO,KAAK,CAAC;YACX,GAAG,OAAO;YACV,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,YAAY;SAC7C,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,2BAA2B,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,OAAO;QACL,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B;IACjC,OAAO,SAAS,EAAE,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"permission-broker.js","sourceRoot":"","sources":["../../src/permission/permission-broker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"permission-pipeline.d.ts","sourceRoot":"","sources":["../../src/permission/permission-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAKpE,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,yBAAyB,GACjC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3B,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,OAAO,CAAC,EAAE,yBAAyB,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;gBAEf,OAAO,GAAE,yBAA8B;IAIpE,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,yBAAyB;IAmB5B,gDAAgD;IAChD,iBAAiB,CACf,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,GAChB,iBAAiB;CAQrB"}
1
+ {"version":3,"file":"permission-pipeline.d.ts","sourceRoot":"","sources":["../../src/permission/permission-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAKpE,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,yBAAyB,GACjC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GACpD;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3B,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,OAAO,CAAC,EAAE,yBAAyB,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,QAAQ,CAAC,OAAO,EAAE,yBAAyB,CAAC;gBAEf,OAAO,GAAE,yBAA8B;IAIpE,QAAQ,CACN,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,GACzB,yBAAyB;IAmB5B,gDAAgD;IAChD,iBAAiB,CACf,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,GAChB,iBAAiB;CAWrB"}
@@ -15,10 +15,10 @@ export class PermissionPipeline {
15
15
  evaluate(requestId, workerId, request) {
16
16
  const verdict = evaluatePermissionPolicy(request, this.options.policy);
17
17
  if (verdict === 'allow') {
18
- return { status: 'resolved', decision: allowOnce() };
18
+ return { status: 'resolved', decision: allowOnce(request) };
19
19
  }
20
20
  if (verdict === 'deny') {
21
- return { status: 'resolved', decision: deny() };
21
+ return { status: 'resolved', decision: deny(request) };
22
22
  }
23
23
  this.pending.add({
24
24
  id: requestId,
@@ -34,7 +34,7 @@ export class PermissionPipeline {
34
34
  if (!entry) {
35
35
  throw new Error(`Unknown pending permission: ${requestId}`);
36
36
  }
37
- inbox.fulfillPermission(requestId, approved ? allowOnce() : deny());
37
+ inbox.fulfillPermission(requestId, approved ? allowOnce(entry.request) : deny(entry.request));
38
38
  return entry;
39
39
  }
40
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"permission-pipeline.js","sourceRoot":"","sources":["../../src/permission/permission-pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,IAAI,GACL,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,GAEzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC;AAWjC;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAGA;IAFpB,OAAO,CAA4B;IAE5C,YAA6B,UAAqC,EAAE;QAAvC,YAAO,GAAP,OAAO,CAAgC;QAClE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,yBAAyB,EAAE,CAAC;IACpE,CAAC;IAED,QAAQ,CACN,SAAiB,EACjB,QAAgB,EAChB,OAA0B;QAE1B,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvE,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACf,EAAE,EAAE,SAAS;YACb,QAAQ;YACR,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,gDAAgD;IAChD,iBAAiB,CACf,KAAqB,EACrB,SAAiB,EACjB,QAAiB;QAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"permission-pipeline.js","sourceRoot":"","sources":["../../src/permission/permission-pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,IAAI,GACL,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,GAEzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC;AAWjC;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAGA;IAFpB,OAAO,CAA4B;IAE5C,YAA6B,UAAqC,EAAE;QAAvC,YAAO,GAAP,OAAO,CAAgC;QAClE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,yBAAyB,EAAE,CAAC;IACpE,CAAC;IAED,QAAQ,CACN,SAAiB,EACjB,QAAgB,EAChB,OAA0B;QAE1B,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEvE,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9D,CAAC;QACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;YACf,EAAE,EAAE,SAAS;YACb,QAAQ;YACR,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,gDAAgD;IAChD,iBAAiB,CACf,KAAqB,EACrB,SAAiB,EACjB,QAAiB;QAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,iBAAiB,CACrB,SAAS,EACT,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAC1D,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -1,7 +1,16 @@
1
1
  /** Parsed `session/request_permission` params from ACP. */
2
+ export interface PermissionOption {
3
+ /** Backend-defined identifier returned in the ACP response. */
4
+ optionId: string;
5
+ /** ACP semantic kind (for example `allow_once` or `reject_once`). */
6
+ kind: string;
7
+ name?: string;
8
+ }
2
9
  export interface PermissionRequest {
3
10
  sessionId?: string;
4
11
  toolName: string;
12
+ /** Options advertised by the ACP backend, when they are well-formed. */
13
+ options?: PermissionOption[];
5
14
  raw: unknown;
6
15
  }
7
16
  export declare function parsePermissionRequest(params: unknown): PermissionRequest;
@@ -1 +1 @@
1
- {"version":3,"file":"permission-request.d.ts","sourceRoot":"","sources":["../../src/permission/permission-request.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,CAwBzE"}
1
+ {"version":3,"file":"permission-request.d.ts","sourceRoot":"","sources":["../../src/permission/permission-request.ts"],"names":[],"mappings":"AAGA,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,GAAG,EAAE,OAAO,CAAC;CACd;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,iBAAiB,CA0BzE"}
@@ -7,6 +7,7 @@ export function parsePermissionRequest(params) {
7
7
  const toolFromCall = toolCall ? formatConductorToolName(toolCall) : undefined;
8
8
  const explicitTool = readNonEmptyString(record.toolName) ?? readNonEmptyString(record.tool_name);
9
9
  const toolName = explicitTool ?? toolFromCall ?? 'unknown';
10
+ const options = parsePermissionOptions(record.options);
10
11
  return {
11
12
  sessionId: typeof record.sessionId === 'string'
12
13
  ? record.sessionId
@@ -14,9 +15,29 @@ export function parsePermissionRequest(params) {
14
15
  ? record.session_id
15
16
  : undefined,
16
17
  toolName,
18
+ ...(options ? { options } : {}),
17
19
  raw: params,
18
20
  };
19
21
  }
22
+ function parsePermissionOptions(value) {
23
+ if (!Array.isArray(value)) {
24
+ return undefined;
25
+ }
26
+ const options = value.flatMap((candidate) => {
27
+ if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) {
28
+ return [];
29
+ }
30
+ const option = candidate;
31
+ const optionId = readNonEmptyString(option.optionId);
32
+ const kind = readNonEmptyString(option.kind);
33
+ if (!optionId || !kind) {
34
+ return [];
35
+ }
36
+ const name = readNonEmptyString(option.name);
37
+ return [{ optionId, kind, ...(name ? { name } : {}) }];
38
+ });
39
+ return options.length > 0 ? options : undefined;
40
+ }
20
41
  function readToolCallRecord(record) {
21
42
  const toolCall = record.toolCall ?? record.tool_call;
22
43
  if (!toolCall || typeof toolCall !== 'object' || Array.isArray(toolCall)) {
@@ -1 +1 @@
1
- {"version":3,"file":"permission-request.js","sourceRoot":"","sources":["../../src/permission/permission-request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAS9E,MAAM,UAAU,sBAAsB,CAAC,MAAe;IACpD,MAAM,MAAM,GACV,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAClC,CAAC,CAAE,MAAkC;QACrC,CAAC,CAAC,EAAE,CAAC;IAET,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,MAAM,YAAY,GAChB,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE9E,MAAM,QAAQ,GAAG,YAAY,IAAI,YAAY,IAAI,SAAS,CAAC;IAE3D,OAAO;QACL,SAAS,EACP,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,CAAC,SAAS;YAClB,CAAC,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;gBACrC,CAAC,CAAC,MAAM,CAAC,UAAU;gBACnB,CAAC,CAAC,SAAS;QACjB,QAAQ;QACR,GAAG,EAAE,MAAM;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,MAA+B;IAE/B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC;IACrD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,QAAmC,CAAC;IACtD,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GACR,SAAS,CAAC,IAAI,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QACpF,CAAC,CAAE,SAAS,CAAC,IAAgC;QAC7C,CAAC,CAAC,EAAE,CAAC;IAET,OAAO,EAAE,IAAI,EAAE,IAAI,EAAc,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"permission-request.js","sourceRoot":"","sources":["../../src/permission/permission-request.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,7 @@ agents-ensemble のデフォルト動作モードの定義。**conductor・imple
26
26
  | 7 | **マージは人間** | 最終ゲートは人間。エージェント側は「あとはマージするだけ」の状態まで持っていく |
27
27
  | 8 | **一巡しても終わりではない** | 引き渡し後・マージ後にも質問が来る。応答できる状態で待つ(セッションは再開される) |
28
28
  | 9 | **投稿には出自を書く** | GitHub への投稿はエージェントによるものだと冒頭に明記する。作業対象リポジトリの慣習があればそれに従う |
29
+ | 10 | **Git 操作は implementer、失敗時は conductor が代行** | `git add` / `commit` / `push` は implementer の仕事。permission 承認後もサンドボックス等で失敗したら、implementer は conductor に代行を依頼し、conductor はホスト側で実行する(次善策。詳細は 3 章) |
29
30
 
30
31
  **境界が曖昧になったときの切り分け**: **これは「判断」か「作業」か「検証」か。** 判断は conductor、作業は implementer、検証は reviewer。ただし判断と作業の境界は厳密でない — 隙間は埋め合ってよい。判定に迷うものは conductor に返す。
31
32
 
@@ -105,6 +106,16 @@ worker は、スコープ外・破壊的・環境に触る操作の許可を con
105
106
  - 材料が足りないまま許諾しない
106
107
  - **init prompt(attach)ラウンド中でも同様**。init prompt 完了を待ってから permission を見ない([ADR 0016](../../docs/adr/0016-bootstrap-permission-conductor-wait.md))
107
108
 
109
+ ### Git 操作の代行(次善策)
110
+
111
+ Linked worktree 上の worker では、サンドボックスの書き込み範囲の制約により、`git add` / `commit` / `push` が **permission 承認後も**失敗することがある(例: リポジトリ共有の `.git/worktrees/<id>/` への `index.lock` 作成)。
112
+
113
+ - **implementer から依頼が来たら、ホスト側で代行する** — 通常は implementer の領域だが、環境制約で worker から完了できないときのフォールバック
114
+ - **代行の前に依頼内容を確認する** — 対象ブランチ、ステージするファイル(または `git add` の範囲)、コミットメッセージ、必要なら `push` 先。implementer が報告した失敗コマンドとエラーも参照する
115
+ - **代行した事実を Issue に短く残す** — 実行したコマンドと結果(コミット hash や push 先など)。作業の正本は Issue / PR のまま
116
+
117
+ implementer が同じ失敗を何度も試行錯誤しないよう、早めに代行へ回す。
118
+
108
119
  ### 人間へのエスカレーション
109
120
 
110
121
  | 出すべき | 出さなくていい |
@@ -119,13 +130,19 @@ worker は、スコープ外・破壊的・環境に触る操作の許可を con
119
130
 
120
131
  ### やらないこと
121
132
 
122
- - ファイル編集・テスト実行・コミット・PR 作成(実装は implementer の領域)
133
+ - ファイル編集・テスト実行・コミット・PR 作成(実装は implementer の領域。**例外**: worker の `git add` / `commit` / `push` が環境制約で失敗したときのホスト側代行は 3 章「Git 操作の代行」)
123
134
  - Issue の大目標の作り直しや作業単位の再定義を独断で行う
124
135
  - worker の追加起動(定義外の worker は使えない)
125
136
  - 参考フローの機械的な消化(省略・繰り返しは判断してよい。逆に、判断せず順に流すだけにしない)
126
137
  - 未回答の質問を放置したまま自律ターンを重ねる
127
138
  - worker の報告をそのまま信じる(**approve も入力の一つ**)
128
139
 
140
+ ### 引き渡し時の心得
141
+
142
+ Issue と PR は最終的に **conductor の作品**でもある。引き渡しに際して重要なのは、**Issue が真に解決しているか**である。
143
+
144
+ 特に、目的が各種の条件に対して **達成不可** であることが判明した場合は、その理由と判明した事実をオペレータに説明する必要がある。
145
+
129
146
  ### 終了の判断と終わり方
130
147
 
131
148
  - Issueの目的をPRが達成できている。受け入れ条件を満たし、reviewer が根拠つきで approve し、人間がマージするだけになっている
@@ -188,6 +205,7 @@ Issue の起票と方針決定は conductor 側に寄せる。ただし**気づ
188
205
  - Issue の前提が現実と食い違う(設計ミス・考慮漏れを見つけた)
189
206
  - 受け入れ条件を満たすにはスコープ外の変更が必要
190
207
  - 権限・認証・環境が足りない
208
+ - **`git add` / `commit` / `push` が permission 承認後も失敗する** — サンドボックスや linked worktree の制約が疑われるときは、同じ操作を繰り返さず conductor に代行を依頼する(対象ファイル・コミットメッセージ・ブランチ・失敗したコマンドとエラーを添える)
191
209
 
192
210
  報告には **何を試したか / 何が起きたか / 何が分かっていないか** を事実で書く。
193
211
 
@@ -324,6 +342,8 @@ Issue / PR は「何をしたか」は自然に残るが、**「いま何が分
324
342
  | 誰 → 誰 | 経路 | 最低限伝えること |
325
343
  |---|---|---|
326
344
  | conductor → implementer | 作業指示 | Issue、今回のゴール、スコープ、使う Skill・規約・前例 |
345
+ | implementer → conductor | Git 代行依頼 | 失敗したコマンドとエラー、対象ブランチ、ステージ範囲、コミットメッセージ、push の要否 |
346
+ | conductor → implementer | Git 代行完了 | 実行したコマンド、コミット hash、push 結果(Issue にも残す) |
327
347
  | implementer → conductor | 完了報告 | PR URL、受け入れ条件との対応、未達・未検証、判断が必要な点 |
328
348
  | implementer → reviewer | **PR / Issue** | 変更の意図、Test plan、受け入れ条件との対応(会話では届かない) |
329
349
  | conductor → reviewer | 検証指示 | PR URL、レビュー観点、再レビューなら前回ブロッカー |
@@ -351,8 +371,8 @@ Issue / PR は「何をしたか」は自然に残るが、**「いま何が分
351
371
 
352
372
  ## 7. 早見表
353
373
 
354
- **conductor** — 演奏しない / すべてを理解しようとしない / worker は起動時に全員いる(追加起動不可)/ いつ・何を・どの観点で指示する / approve は照合で確かめる / 逸脱と違和感は解決できなくても Issue に書く / permission は判定できるなら判定、できなければ人間へ / マージするだけの状態にして渡し、そのあとも待つ
374
+ **conductor** — 演奏しない / すべてを理解しようとしない / worker は起動時に全員いる(追加起動不可)/ いつ・何を・どの観点で指示する / approve は照合で確かめる / 逸脱と違和感は解決できなくても Issue に書く / permission は判定できるなら判定、できなければ人間へ / worker の git add・commit・push が環境制約で失敗したらホスト側で代行 / マージするだけの状態にして渡し、そのあとも待つ
355
375
 
356
- **implementer** — 受け入れ条件をチェックリストにする / 縦切りのテストまで書く / 利用者向け文書までこの PR で閉じる / 経過と違和感を Issue に小さく残す / 未検証は未検証と書く / スコープ超過と方針判断は conductor に返す / 詰まったら早めに正直に報告する
376
+ **implementer** — 受け入れ条件をチェックリストにする / 縦切りのテストまで書く / 利用者向け文書までこの PR で閉じる / 経過と違和感を Issue に小さく残す / 未検証は未検証と書く / スコープ超過と方針判断は conductor に返す / git add・commit・push が環境制約で失敗したら conductor に代行依頼 / 詰まったら早めに正直に報告する
357
377
 
358
378
  **reviewer** — コードは書かない / 検証のたびに Issue・PR から読み直す / 目的層と実装層に分ける / PR 完結性で判定する / 迷ったら deny / ブロッカーを残存メモに隠さない / 判定に落とせない違和感は区別して出す
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agents-ensemble/core",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "type": "module",
5
5
  "description": "Core types and orchestration logic for agents-ensemble",
6
6
  "main": "dist/index.js",
@@ -1,9 +0,0 @@
1
- import type { GitHubUpdateItem } from './github-update-types.js';
2
- /** `items` に actionable な Issue コメントが含まれるか。 */
3
- export declare function hasActionableIssueComment(items: GitHubUpdateItem[]): boolean;
4
- /**
5
- * post-loop 待機中に GitHub 更新で SessionDriver を再開してよいか。
6
- * max-turns 到達時はターン回復しない(enqueue のみ)。
7
- */
8
- export declare function canResumePostLoopForTurns(autonomousTurns: number, maxTurns: number): boolean;
9
- //# sourceMappingURL=github-post-loop-resume.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-post-loop-resume.d.ts","sourceRoot":"","sources":["../../src/github/github-post-loop-resume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,+CAA+C;AAC/C,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAE5E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAKT"}
@@ -1,16 +0,0 @@
1
- import { isMaxTurnsLimited } from '../conductor/session-policy.js';
2
- /** `items` に actionable な Issue コメントが含まれるか。 */
3
- export function hasActionableIssueComment(items) {
4
- return items.some((item) => item.kind === 'issue.comment');
5
- }
6
- /**
7
- * post-loop 待機中に GitHub 更新で SessionDriver を再開してよいか。
8
- * max-turns 到達時はターン回復しない(enqueue のみ)。
9
- */
10
- export function canResumePostLoopForTurns(autonomousTurns, maxTurns) {
11
- if (!isMaxTurnsLimited(maxTurns)) {
12
- return true;
13
- }
14
- return autonomousTurns < maxTurns;
15
- }
16
- //# sourceMappingURL=github-post-loop-resume.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github-post-loop-resume.js","sourceRoot":"","sources":["../../src/github/github-post-loop-resume.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,+CAA+C;AAC/C,MAAM,UAAU,yBAAyB,CAAC,KAAyB;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,eAAuB,EACvB,QAAgB;IAEhB,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,eAAe,GAAG,QAAQ,CAAC;AACpC,CAAC"}