@flowdesk/core 0.1.12 → 0.1.13

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 (114) hide show
  1. package/dist/agent-profiles.js +0 -1
  2. package/dist/agent-registry.d.ts +43 -0
  3. package/dist/agent-registry.d.ts.map +1 -0
  4. package/dist/agent-registry.js +309 -0
  5. package/dist/agent-registry.js.map +1 -0
  6. package/dist/audit.js +0 -1
  7. package/dist/authority-promotion.js +0 -1
  8. package/dist/bootstrap-foundation.js +0 -1
  9. package/dist/chat-control-authority.js +0 -1
  10. package/dist/chat-hook-authority-probe.js +0 -1
  11. package/dist/chat-routing.js +0 -1
  12. package/dist/command-manifest.js +0 -1
  13. package/dist/config-policy.js +0 -1
  14. package/dist/connector-gateway.js +0 -1
  15. package/dist/connector-profile.js +0 -1
  16. package/dist/controlled-conformance-doc-write.js +0 -1
  17. package/dist/controlled-redacted-audit-export-write.js +0 -1
  18. package/dist/controlled-workspace-file-write.d.ts +36 -0
  19. package/dist/controlled-workspace-file-write.d.ts.map +1 -0
  20. package/dist/controlled-workspace-file-write.js +130 -0
  21. package/dist/controlled-workspace-file-write.js.map +1 -0
  22. package/dist/core-completion-safety-contracts.js +0 -1
  23. package/dist/dispatch-attempt-manifest.js +0 -1
  24. package/dist/dispatch-idempotency.js +0 -1
  25. package/dist/external-auth-policy.js +0 -1
  26. package/dist/fake-remote-connector-adapter.js +0 -1
  27. package/dist/fake-runtime.js +0 -1
  28. package/dist/fallback-decision.js +0 -1
  29. package/dist/fallback-regate-plan.js +0 -1
  30. package/dist/fds1-schema-probe-result.js +0 -1
  31. package/dist/guard-boundary.js +0 -1
  32. package/dist/guarded-dry-run.js +0 -1
  33. package/dist/hook-harness.js +0 -1
  34. package/dist/index.d.ts +9 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +9 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/lane-heartbeat.js +0 -1
  39. package/dist/lane-lifecycle-record.js +0 -1
  40. package/dist/lane-observability.js +0 -1
  41. package/dist/lane-stall-projection.js +0 -1
  42. package/dist/managed-dispatch-evidence-shape.js +0 -1
  43. package/dist/model-availability-cache.js +0 -1
  44. package/dist/operational-intelligence.js +0 -1
  45. package/dist/pending-abort.js +0 -1
  46. package/dist/plan.js +0 -1
  47. package/dist/planning-evidence-common.d.ts +18 -0
  48. package/dist/planning-evidence-common.d.ts.map +1 -0
  49. package/dist/planning-evidence-common.js +95 -0
  50. package/dist/planning-evidence-common.js.map +1 -0
  51. package/dist/pre-dispatch-audit-record.js +0 -1
  52. package/dist/production-approval-source.js +0 -1
  53. package/dist/production-enablement.js +0 -1
  54. package/dist/production-verification.js +0 -1
  55. package/dist/provider-failures.js +0 -1
  56. package/dist/provider-usage-collector.d.ts.map +1 -1
  57. package/dist/provider-usage-collector.js +104 -10
  58. package/dist/provider-usage-collector.js.map +1 -1
  59. package/dist/redaction.js +0 -1
  60. package/dist/release1-contracts.js +0 -1
  61. package/dist/remote-write-connector-gate.js +0 -1
  62. package/dist/retry-plan.d.ts +20 -2
  63. package/dist/retry-plan.d.ts.map +1 -1
  64. package/dist/retry-plan.js +57 -3
  65. package/dist/retry-plan.js.map +1 -1
  66. package/dist/retry.js +0 -1
  67. package/dist/reviewer-lane-conformance.js +0 -1
  68. package/dist/runtime-lane-productization.js +0 -1
  69. package/dist/sanitized-auth-capture.js +0 -1
  70. package/dist/schema-artifacts.js +0 -1
  71. package/dist/schema-registry.d.ts.map +1 -1
  72. package/dist/schema-registry.js +5 -1
  73. package/dist/schema-registry.js.map +1 -1
  74. package/dist/session-evidence.d.ts.map +1 -1
  75. package/dist/session-evidence.js +32 -1
  76. package/dist/session-evidence.js.map +1 -1
  77. package/dist/state-paths.d.ts +1 -1
  78. package/dist/state-paths.d.ts.map +1 -1
  79. package/dist/state-paths.js +16 -0
  80. package/dist/state-paths.js.map +1 -1
  81. package/dist/state-store.js +0 -1
  82. package/dist/status.js +0 -1
  83. package/dist/task-agent-assignment.d.ts +30 -0
  84. package/dist/task-agent-assignment.d.ts.map +1 -0
  85. package/dist/task-agent-assignment.js +77 -0
  86. package/dist/task-agent-assignment.js.map +1 -0
  87. package/dist/task-graph.d.ts +31 -0
  88. package/dist/task-graph.d.ts.map +1 -0
  89. package/dist/task-graph.js +122 -0
  90. package/dist/task-graph.js.map +1 -0
  91. package/dist/task-model-selection.d.ts +36 -0
  92. package/dist/task-model-selection.d.ts.map +1 -0
  93. package/dist/task-model-selection.js +99 -0
  94. package/dist/task-model-selection.js.map +1 -0
  95. package/dist/task-result.js +0 -1
  96. package/dist/tool-contract-fixtures.js +0 -1
  97. package/dist/top-tier-reviewer-lane-probe.js +0 -1
  98. package/dist/usage-health.js +0 -1
  99. package/dist/validators.d.ts.map +1 -1
  100. package/dist/validators.js +10 -2
  101. package/dist/validators.js.map +1 -1
  102. package/dist/workflow-authoring-result.d.ts +25 -0
  103. package/dist/workflow-authoring-result.d.ts.map +1 -0
  104. package/dist/workflow-authoring-result.js +63 -0
  105. package/dist/workflow-authoring-result.js.map +1 -0
  106. package/dist/workflow-dispatch-plan.d.ts +65 -0
  107. package/dist/workflow-dispatch-plan.d.ts.map +1 -0
  108. package/dist/workflow-dispatch-plan.js +228 -0
  109. package/dist/workflow-dispatch-plan.js.map +1 -0
  110. package/dist/workflow-synthesis.d.ts +18 -0
  111. package/dist/workflow-synthesis.d.ts.map +1 -0
  112. package/dist/workflow-synthesis.js +40 -0
  113. package/dist/workflow-synthesis.js.map +1 -0
  114. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controlled-workspace-file-write.js","sourceRoot":"","sources":["../src/controlled-workspace-file-write.ts"],"names":[],"mappings":"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"}
@@ -95,4 +95,3 @@ export function validateFlowDeskFederatedRegistryStateV1(value) {
95
95
  errors.push(...validateNoForbiddenRawPayloads(record, "federated_registry_state").errors);
96
96
  return errors.length === 0 ? valid() : invalid(...errors);
97
97
  }
98
- //# sourceMappingURL=core-completion-safety-contracts.js.map
@@ -291,4 +291,3 @@ export function evaluateFlowDeskDispatchAttemptDurablePrecallV1(input) {
291
291
  : { reloaded_idempotency_snapshot_ref: idempotencyEntry.evidenceId }),
292
292
  };
293
293
  }
294
- //# sourceMappingURL=dispatch-attempt-manifest.js.map
@@ -272,4 +272,3 @@ export function prepareFlowDeskDispatchIdempotencyStateUpdateV1(input) {
272
272
  ...disabledAuthority,
273
273
  };
274
274
  }
275
- //# sourceMappingURL=dispatch-idempotency.js.map
@@ -163,4 +163,3 @@ export function validateFlowDeskExternalAuthProviderPolicyResultV1(value, expect
163
163
  errors.push(...validateNoForbiddenRawPayloads(value, "external_auth_provider_policy_result").errors);
164
164
  return errors.length === 0 ? valid() : invalid(...errors);
165
165
  }
166
- //# sourceMappingURL=external-auth-policy.js.map
@@ -159,4 +159,3 @@ export function validateFlowDeskFakeRemoteConnectorWriteResultV1(value) {
159
159
  errors.push(...validateNoForbiddenRawPayloads(record, "fake_remote_connector_write_result").errors);
160
160
  return errors.length === 0 ? valid() : invalid(...errors);
161
161
  }
162
- //# sourceMappingURL=fake-remote-connector-adapter.js.map
@@ -282,4 +282,3 @@ export function evaluateFlowDeskFakeRuntimeCommandV1(input) {
282
282
  runtime: inertRuntime
283
283
  };
284
284
  }
285
- //# sourceMappingURL=fake-runtime.js.map
@@ -90,4 +90,3 @@ export function validateFlowDeskFallbackDecisionV1(value) {
90
90
  errors.push(...validateNoForbiddenRawPayloads(record, "fallback_decision").errors);
91
91
  return errors.length === 0 ? valid() : invalid(...errors);
92
92
  }
93
- //# sourceMappingURL=fallback-decision.js.map
@@ -119,4 +119,3 @@ export function validateFlowDeskFallbackRegatePlanV1(value) {
119
119
  errors.push(...validateNoForbiddenRawPayloads(value, "fallback_regate_plan").errors);
120
120
  return errors.length === 0 ? valid() : invalid(...errors);
121
121
  }
122
- //# sourceMappingURL=fallback-regate-plan.js.map
@@ -112,4 +112,3 @@ export function validateFlowDeskFds1SchemaProbeResultV1(value) {
112
112
  errors.push(...validateNoForbiddenRawPayloads(record, "fds1_schema_probe_result").errors);
113
113
  return errors.length === 0 ? valid() : invalid(...errors);
114
114
  }
115
- //# sourceMappingURL=fds1-schema-probe-result.js.map
@@ -217,4 +217,3 @@ export function evaluateManagedDispatchBetaGuardBoundaryV1(input) {
217
217
  }
218
218
  return boundaryDecision("eligible", "runtime", "Eligible for managed-dispatch beta only; evaluator does not perform dispatch.", checks);
219
219
  }
220
- //# sourceMappingURL=guard-boundary.js.map
@@ -108,4 +108,3 @@ export function evaluateFlowDeskGuardedDryRunCommandV1(input) {
108
108
  runtime: inertRuntime
109
109
  };
110
110
  }
111
- //# sourceMappingURL=guarded-dry-run.js.map
@@ -127,4 +127,3 @@ export function evaluateFlowDeskHookHarnessV1(request) {
127
127
  return { ...invalid(...responseResult.errors), response };
128
128
  return { ...valid(), response };
129
129
  }
130
- //# sourceMappingURL=hook-harness.js.map
package/dist/index.d.ts CHANGED
@@ -10,6 +10,7 @@ export declare const flowdeskNoRealDispatchBoundary: {
10
10
  export declare function describeFlowDeskCoreScaffold(): string;
11
11
  export declare function canUseRealDispatchInRelease1(): false;
12
12
  export * from "./agent-profiles.js";
13
+ export * from "./agent-registry.js";
13
14
  export * from "./audit.js";
14
15
  export * from "./authority-promotion.js";
15
16
  export * from "./bootstrap-foundation.js";
@@ -22,6 +23,7 @@ export * from "./config-policy.js";
22
23
  export * from "./connector-profile.js";
23
24
  export * from "./controlled-conformance-doc-write.js";
24
25
  export * from "./controlled-redacted-audit-export-write.js";
26
+ export * from "./controlled-workspace-file-write.js";
25
27
  export * from "./core-completion-safety-contracts.js";
26
28
  export * from "./dispatch-attempt-manifest.js";
27
29
  export * from "./dispatch-idempotency.js";
@@ -43,6 +45,7 @@ export * from "./managed-dispatch-evidence-shape.js";
43
45
  export * from "./model-availability-cache.js";
44
46
  export * from "./operational-intelligence.js";
45
47
  export * from "./plan.js";
48
+ export * from "./planning-evidence-common.js";
46
49
  export * from "./pre-dispatch-audit-record.js";
47
50
  export * from "./production-approval-source.js";
48
51
  export * from "./production-enablement.js";
@@ -63,9 +66,15 @@ export * from "./session-evidence.js";
63
66
  export * from "./state-paths.js";
64
67
  export * from "./state-store.js";
65
68
  export * from "./status.js";
69
+ export * from "./task-agent-assignment.js";
70
+ export * from "./task-graph.js";
71
+ export * from "./task-model-selection.js";
66
72
  export * from "./task-result.js";
67
73
  export * from "./tool-contract-fixtures.js";
68
74
  export * from "./top-tier-reviewer-lane-probe.js";
69
75
  export * from "./usage-health.js";
70
76
  export * from "./validators.js";
77
+ export * from "./workflow-dispatch-plan.js";
78
+ export * from "./workflow-authoring-result.js";
79
+ export * from "./workflow-synthesis.js";
71
80
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,EAAG,gBAAyB,CAAC;AAEjE,eAAO,MAAM,qBAAqB,sHAMxB,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;;;CAMjC,CAAC;AAEX,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,4BAA4B,IAAI,KAAK,CAEpD;AAED,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,WAAW,CAAC;AAC1B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,EAAG,gBAAyB,CAAC;AAEjE,eAAO,MAAM,qBAAqB,sHAMxB,CAAC;AAEX,eAAO,MAAM,8BAA8B;;;;;;CAMjC,CAAC;AAEX,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,4BAA4B,IAAI,KAAK,CAEpD;AAED,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,WAAW,CAAC;AAC1B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -20,6 +20,7 @@ export function canUseRealDispatchInRelease1() {
20
20
  return false;
21
21
  }
22
22
  export * from "./agent-profiles.js";
23
+ export * from "./agent-registry.js";
23
24
  export * from "./audit.js";
24
25
  export * from "./authority-promotion.js";
25
26
  export * from "./bootstrap-foundation.js";
@@ -32,6 +33,7 @@ export * from "./config-policy.js";
32
33
  export * from "./connector-profile.js";
33
34
  export * from "./controlled-conformance-doc-write.js";
34
35
  export * from "./controlled-redacted-audit-export-write.js";
36
+ export * from "./controlled-workspace-file-write.js";
35
37
  export * from "./core-completion-safety-contracts.js";
36
38
  export * from "./dispatch-attempt-manifest.js";
37
39
  export * from "./dispatch-idempotency.js";
@@ -53,6 +55,7 @@ export * from "./managed-dispatch-evidence-shape.js";
53
55
  export * from "./model-availability-cache.js";
54
56
  export * from "./operational-intelligence.js";
55
57
  export * from "./plan.js";
58
+ export * from "./planning-evidence-common.js";
56
59
  export * from "./pre-dispatch-audit-record.js";
57
60
  export * from "./production-approval-source.js";
58
61
  export * from "./production-enablement.js";
@@ -73,9 +76,15 @@ export * from "./session-evidence.js";
73
76
  export * from "./state-paths.js";
74
77
  export * from "./state-store.js";
75
78
  export * from "./status.js";
79
+ export * from "./task-agent-assignment.js";
80
+ export * from "./task-graph.js";
81
+ export * from "./task-model-selection.js";
76
82
  export * from "./task-result.js";
77
83
  export * from "./tool-contract-fixtures.js";
78
84
  export * from "./top-tier-reviewer-lane-probe.js";
79
85
  export * from "./usage-health.js";
80
86
  export * from "./validators.js";
87
+ export * from "./workflow-dispatch-plan.js";
88
+ export * from "./workflow-authoring-result.js";
89
+ export * from "./workflow-synthesis.js";
81
90
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAyB,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACpC,kCAAkC;IAClC,SAAS;IACT,cAAc;IACd,sBAAsB;IACtB,kBAAkB;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC7C,WAAW,EAAE,0BAA0B;IACvC,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,UAAU;IACjC,uBAAuB,EAAE,UAAU;IACnC,qBAAqB,EAAE,UAAU;CACxB,CAAC;AAEX,MAAM,UAAU,4BAA4B;IAC3C,OAAO,GAAG,uBAAuB,KAAK,8BAA8B,CAAC,WAAW,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC3C,OAAO,KAAK,CAAC;AACd,CAAC;AAED,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,WAAW,CAAC;AAC1B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAyB,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACpC,kCAAkC;IAClC,SAAS;IACT,cAAc;IACd,sBAAsB;IACtB,kBAAkB;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC7C,WAAW,EAAE,0BAA0B;IACvC,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,UAAU;IACjC,uBAAuB,EAAE,UAAU;IACnC,qBAAqB,EAAE,UAAU;CACxB,CAAC;AAEX,MAAM,UAAU,4BAA4B;IAC3C,OAAO,GAAG,uBAAuB,KAAK,8BAA8B,CAAC,WAAW,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC3C,OAAO,KAAK,CAAC;AACd,CAAC;AAED,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uCAAuC,CAAC;AACtD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,WAAW,CAAC;AAC1B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC"}
@@ -146,4 +146,3 @@ export function buildFlowDeskLaneHeartbeatRecordV1(input) {
146
146
  return { ok: false, errors: validation.errors };
147
147
  return { ok: true, record };
148
148
  }
149
- //# sourceMappingURL=lane-heartbeat.js.map
@@ -137,4 +137,3 @@ export function validateFlowDeskLaneLifecycleRecordV1(value) {
137
137
  errors.push(...validateNoForbiddenRawPayloads(record, "lane_lifecycle_record").errors);
138
138
  return errors.length === 0 ? valid() : invalid(...errors);
139
139
  }
140
- //# sourceMappingURL=lane-lifecycle-record.js.map
@@ -135,4 +135,3 @@ export function validateFlowDeskLaneObservabilityArtifactV1(value) {
135
135
  errors.push(...validateNoForbiddenRawPayloads(record, "lane_observability").errors);
136
136
  return errors.length === 0 ? valid() : invalid(...errors);
137
137
  }
138
- //# sourceMappingURL=lane-observability.js.map
@@ -310,4 +310,3 @@ export function projectFlowDeskLaneStallV1(input) {
310
310
  entries,
311
311
  };
312
312
  }
313
- //# sourceMappingURL=lane-stall-projection.js.map
@@ -20,4 +20,3 @@ export function validateFlowDeskManagedDispatchBetaRuntimeEchoShapeV1(value) {
20
20
  export function validateFlowDeskManagedDispatchBetaTelemetryCorrelationShapeV1(value) {
21
21
  return shapeOnly(value, "flowdesk.managed_dispatch_beta.telemetry_correlation.v1", "telemetry_correlation_evidence");
22
22
  }
23
- //# sourceMappingURL=managed-dispatch-evidence-shape.js.map
@@ -1195,4 +1195,3 @@ export function validateFlowDeskReviewerFanoutPlanV1(value) {
1195
1195
  errors.push(...validateNoForbiddenRawPayloads(record, "reviewer_fanout_plan").errors);
1196
1196
  return errors.length === 0 ? valid() : invalid(...errors);
1197
1197
  }
1198
- //# sourceMappingURL=model-availability-cache.js.map
@@ -104,4 +104,3 @@ export function validateFlowDeskReferencePackV1(value) {
104
104
  errors.push(...validateNoForbiddenRawPayloads(record, "reference_pack").errors);
105
105
  return errors.length === 0 ? valid() : invalid(...errors);
106
106
  }
107
- //# sourceMappingURL=operational-intelligence.js.map
@@ -76,4 +76,3 @@ export function validateFlowDeskPendingAbortCancelV1(value) {
76
76
  errors.push(...validateNoForbiddenRawPayloads(record, "pending_abort_cancel").errors);
77
77
  return errors.length === 0 ? valid() : invalid(...errors);
78
78
  }
79
- //# sourceMappingURL=pending-abort.js.map
package/dist/plan.js CHANGED
@@ -166,4 +166,3 @@ export function evaluateFlowDeskPlanCommandV1(input) {
166
166
  return { ok: false, errors: validationErrors, ...artifacts };
167
167
  return { ok: true, errors: [], ...artifacts };
168
168
  }
169
- //# sourceMappingURL=plan.js.map
@@ -0,0 +1,18 @@
1
+ import { type ValidationResult } from "./validators.js";
2
+ export { invalid, type ValidationResult, valid } from "./validators.js";
3
+ export declare const FLOWDESK_PLANNING_AUTHORITY_KEYS_V1: readonly ["dispatch_authority_enabled", "provider_call_made", "runtime_execution", "actual_lane_launch", "write_authority_enabled"];
4
+ export declare function isPlanningEvidenceRecord(value: unknown): value is Record<string, unknown>;
5
+ export declare function rejectUnknownPlanningProperties(value: Record<string, unknown>, allowed: ReadonlySet<string>, label: string): string[];
6
+ export declare function requirePlanningKeys(value: Record<string, unknown>, keys: readonly string[], label: string): string[];
7
+ export declare function validatePlanningSafeText(value: unknown, label: string, maxLength: number, options?: {
8
+ allowEmpty?: boolean;
9
+ allowAuthorityWords?: boolean;
10
+ }): ValidationResult;
11
+ export declare function validatePlanningTimestamp(value: unknown, label: string): ValidationResult;
12
+ export declare function validatePlanningOpaqueId(value: unknown, label: string): ValidationResult;
13
+ export declare function validatePlanningOpaqueRef(value: unknown, label: string): ValidationResult;
14
+ export declare function validatePlanningOpaqueRefArray(value: unknown, label: string, maxItems: number): ValidationResult;
15
+ export declare function validatePlanningSafeLabelArray(value: unknown, label: string, maxItems: number): ValidationResult;
16
+ export declare function validatePlanningAuthorityFalse(value: Record<string, unknown>, label: string): string[];
17
+ export declare function validatePlanningNoForbiddenPayloads(value: unknown, label: string): ValidationResult;
18
+ //# sourceMappingURL=planning-evidence-common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning-evidence-common.d.ts","sourceRoot":"","sources":["../src/planning-evidence-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,gBAAgB,EAKrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExE,eAAO,MAAM,mCAAmC,qIAMtC,CAAC;AAiBX,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzF;AAED,wBAAgB,+BAA+B,CAC9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,MAAM,GACX,MAAM,EAAE,CAIV;AAED,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,KAAK,EAAE,MAAM,GACX,MAAM,EAAE,CAIV;AAED,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GACnE,gBAAgB,CAWlB;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAMzF;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAExF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAEzF;AAED,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACd,gBAAgB,CAOlB;AAED,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACd,gBAAgB,CAOlB;AAED,wBAAgB,8BAA8B,CAC7C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,GACX,MAAM,EAAE,CAWV;AAED,wBAAgB,mCAAmC,CAClD,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,GACX,gBAAgB,CAElB"}
@@ -0,0 +1,95 @@
1
+ import { invalid, valid, validateNoForbiddenRawPayloads, validateOpaqueId, validateOpaqueRef, } from "./validators.js";
2
+ export { invalid, valid } from "./validators.js";
3
+ export const FLOWDESK_PLANNING_AUTHORITY_KEYS_V1 = [
4
+ "dispatch_authority_enabled",
5
+ "provider_call_made",
6
+ "runtime_execution",
7
+ "actual_lane_launch",
8
+ "write_authority_enabled",
9
+ ];
10
+ const AUTHORITY_TRUE_KEYS = new Set([
11
+ ...FLOWDESK_PLANNING_AUTHORITY_KEYS_V1,
12
+ "realOpenCodeDispatch",
13
+ "providerCall",
14
+ "actualLaneLaunch",
15
+ "runtimeExecution",
16
+ "fallbackAuthority",
17
+ "toolAuthority",
18
+ "hardCancelOrNoReplyAuthority",
19
+ "fallback_allowed",
20
+ "reselection_allowed",
21
+ ]);
22
+ const AUTHORITY_SMUGGLING_PATTERN = /\b(?:approve(?:d|s)?|approval|authorize(?:d|s)?|authorization|guard(?:ed)?\s+approval|dispatch(?:able|ed|es)?|dispatch\s*-?authority|real\s*-?(?:opencode\s*-?)?dispatch|provider\s*-?(?:call|payload|response)|runtime\s*-?execution|runtime[-_\s]*lane[-_\s]*launch|actual\s*-?lane\s*-?launch|lane\s*-?launch|fallback|reselection|reselect|retry\s+with\s+(?:another|different)|switch\s+(?:provider|model)|no\s*-?reply|hard\s*-?(?:cancel|stop)|opencode\s+run|hidden\s+injection)\b/i;
23
+ export function isPlanningEvidenceRecord(value) {
24
+ return typeof value === "object" && value !== null && !Array.isArray(value);
25
+ }
26
+ export function rejectUnknownPlanningProperties(value, allowed, label) {
27
+ return Object.keys(value)
28
+ .filter((key) => !allowed.has(key))
29
+ .map((key) => `${label} has unknown property: ${key}`);
30
+ }
31
+ export function requirePlanningKeys(value, keys, label) {
32
+ return keys
33
+ .filter((key) => !(key in value))
34
+ .map((key) => `${label} missing required field: ${key}`);
35
+ }
36
+ export function validatePlanningSafeText(value, label, maxLength, options = {}) {
37
+ if (typeof value !== "string")
38
+ return invalid(`${label} must be a string`);
39
+ if (!options.allowEmpty && value.trim().length === 0)
40
+ return invalid(`${label} must be a non-empty string`);
41
+ if (value.length > maxLength)
42
+ return invalid(`${label} exceeds ${maxLength} chars`);
43
+ const redaction = validateNoForbiddenRawPayloads(value, label);
44
+ if (!redaction.ok)
45
+ return redaction;
46
+ if (!options.allowAuthorityWords && AUTHORITY_SMUGGLING_PATTERN.test(value)) {
47
+ return invalid(`${label} contains authority-smuggling language`);
48
+ }
49
+ return valid();
50
+ }
51
+ export function validatePlanningTimestamp(value, label) {
52
+ if (typeof value !== "string" || value.length === 0)
53
+ return invalid(`${label} must be a timestamp string`);
54
+ return Number.isFinite(Date.parse(value))
55
+ ? valid()
56
+ : invalid(`${label} must be a parseable timestamp`);
57
+ }
58
+ export function validatePlanningOpaqueId(value, label) {
59
+ return validateOpaqueId(value, label);
60
+ }
61
+ export function validatePlanningOpaqueRef(value, label) {
62
+ return validateOpaqueRef(value, label);
63
+ }
64
+ export function validatePlanningOpaqueRefArray(value, label, maxItems) {
65
+ if (!Array.isArray(value))
66
+ return invalid(`${label} must be an array`);
67
+ if (value.length > maxItems)
68
+ return invalid(`${label} exceeds ${maxItems} items`);
69
+ const errors = value.flatMap((item, index) => validateOpaqueRef(item, `${label}[${index}]`).errors);
70
+ return errors.length === 0 ? valid() : invalid(...errors);
71
+ }
72
+ export function validatePlanningSafeLabelArray(value, label, maxItems) {
73
+ if (!Array.isArray(value))
74
+ return invalid(`${label} must be an array`);
75
+ if (value.length > maxItems)
76
+ return invalid(`${label} exceeds ${maxItems} items`);
77
+ const errors = value.flatMap((item, index) => validatePlanningSafeText(item, `${label}[${index}]`, 120).errors);
78
+ return errors.length === 0 ? valid() : invalid(...errors);
79
+ }
80
+ export function validatePlanningAuthorityFalse(value, label) {
81
+ const errors = [];
82
+ for (const key of FLOWDESK_PLANNING_AUTHORITY_KEYS_V1) {
83
+ if (value[key] !== false)
84
+ errors.push(`${label}.${key} must be false`);
85
+ }
86
+ for (const [key, nested] of Object.entries(value)) {
87
+ if (AUTHORITY_TRUE_KEYS.has(key) && nested === true) {
88
+ errors.push(`${label}.${key} cannot be true`);
89
+ }
90
+ }
91
+ return errors;
92
+ }
93
+ export function validatePlanningNoForbiddenPayloads(value, label) {
94
+ return validateNoForbiddenRawPayloads(value, label);
95
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planning-evidence-common.js","sourceRoot":"","sources":["../src/planning-evidence-common.ts"],"names":[],"mappings":"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"}
@@ -58,4 +58,3 @@ export function validateFlowDeskPreDispatchAuditRecordV1(value) {
58
58
  errors.push(...validateNoForbiddenRawPayloads(value, "pre_dispatch_audit_record").errors);
59
59
  return errors.length === 0 ? valid() : invalid(...errors);
60
60
  }
61
- //# sourceMappingURL=pre-dispatch-audit-record.js.map
@@ -223,4 +223,3 @@ export function consumeFlowDeskProductionApprovalSourceV1(input) {
223
223
  ...disabledApprovalAuthority,
224
224
  };
225
225
  }
226
- //# sourceMappingURL=production-approval-source.js.map
@@ -669,4 +669,3 @@ export function evaluateFlowDeskProductionEnablementV1(input) {
669
669
  : ["/flowdesk-doctor", "/flowdesk-status"],
670
670
  };
671
671
  }
672
- //# sourceMappingURL=production-enablement.js.map
@@ -123,4 +123,3 @@ export function validateFlowDeskConfiguredVerificationResultV1(value, expectedWo
123
123
  .errors);
124
124
  return errors.length === 0 ? valid() : invalid(...errors);
125
125
  }
126
- //# sourceMappingURL=production-verification.js.map
@@ -113,4 +113,3 @@ export function getProviderFailureDiagnosticMappingsV1() {
113
113
  export function providerFailureClassIsDiagnosticOnlyV1(failureClass) {
114
114
  return failureClass !== "none";
115
115
  }
116
- //# sourceMappingURL=provider-failures.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider-usage-collector.d.ts","sourceRoot":"","sources":["../src/provider-usage-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-usage-collector.d.ts","sourceRoot":"","sources":["../src/provider-usage-collector.ts"],"names":[],"mappings":"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"}
@@ -180,20 +180,23 @@ async function collectGeminiUsage(acquisition, options, observedAt) {
180
180
  return refusedCollection("gemini", "gemini", "fetch is unavailable");
181
181
  const homeDir = normalizeHomeDir(acquisition.homeDir, options.env);
182
182
  const filesystem = options.filesystem ?? defaultFilesystem;
183
+ const openCodeCreds = readOpenCodeGeminiOAuthCredentials(homeDir, options.env, filesystem);
183
184
  const credsPath = geminiCredentialPaths(homeDir, options.env).find((candidate) => filesystem.exists(candidate));
184
- if (!credsPath)
185
+ if (!credsPath && !openCodeCreds)
185
186
  return refusedCollection("gemini", "gemini", "gemini auth evidence is missing");
186
187
  try {
187
- const creds = JSON.parse(filesystem.readFile(credsPath));
188
- const credsRecord = isRecord(creds) ? creds : {};
189
- const refreshToken = stringField(credsRecord, "refresh_token");
190
- const cachedAccessToken = stringField(credsRecord, "access_token");
191
- const cachedExpiryRaw = credsRecord.expiry_date;
192
- const cachedExpiryMs = typeof cachedExpiryRaw === "number" ? cachedExpiryRaw : typeof cachedExpiryRaw === "string" ? Number.parseInt(cachedExpiryRaw, 10) : NaN;
188
+ const geminiCliCreds = credsPath ? readGeminiCliOAuthCredentials(credsPath, filesystem) : null;
189
+ const selectedCreds = selectGeminiOAuthCredentials(openCodeCreds, geminiCliCreds, observedAt);
190
+ if (!selectedCreds)
191
+ return refusedCollection("gemini", "gemini", "gemini auth evidence is missing");
192
+ const refreshToken = selectedCreds.refreshToken;
193
+ const cachedAccessToken = selectedCreds.accessToken;
194
+ const cachedExpiryMs = selectedCreds.expiresAt ?? NaN;
193
195
  const cachedTokenStillValid = cachedAccessToken !== "" && Number.isFinite(cachedExpiryMs) && cachedExpiryMs > observedAt + 5 * 60_000;
194
196
  const env = options.env ?? {};
195
- const clientId = firstNonEmpty(acquisition.geminiOAuthClientId, env.FLOWDESK_GEMINI_OAUTH_CLIENT_ID);
196
- const clientSecret = firstNonEmpty(acquisition.geminiOAuthClientSecret, env.FLOWDESK_GEMINI_OAUTH_CLIENT_SECRET);
197
+ const inferredClient = readOpenCodeGeminiAuthOAuthClient(homeDir, env, filesystem);
198
+ const clientId = firstNonEmpty(acquisition.geminiOAuthClientId, env.FLOWDESK_GEMINI_OAUTH_CLIENT_ID, inferredClient?.clientId);
199
+ const clientSecret = firstNonEmpty(acquisition.geminiOAuthClientSecret, env.FLOWDESK_GEMINI_OAUTH_CLIENT_SECRET, inferredClient?.clientSecret);
197
200
  let accessToken = "";
198
201
  if (cachedTokenStillValid) {
199
202
  accessToken = cachedAccessToken;
@@ -213,7 +216,7 @@ async function collectGeminiUsage(acquisition, options, observedAt) {
213
216
  return refusedCollection("gemini", "gemini", "gemini oauth client evidence is missing and cached access token is expired");
214
217
  return refusedCollection("gemini", "gemini", "gemini token refresh failed");
215
218
  }
216
- let projectId = firstNonEmpty(env.GOOGLE_CLOUD_PROJECT, env.GOOGLE_CLOUD_PROJECT_ID, acquisition.geminiProjectId);
219
+ let projectId = firstNonEmpty(env.GOOGLE_CLOUD_PROJECT, env.GOOGLE_CLOUD_PROJECT_ID, acquisition.geminiProjectId, selectedCreds.projectId);
217
220
  const details = await codeAssistPost("loadCodeAssist", { cloudaicompanionProject: projectId, metadata: { ideType: "IDE_UNSPECIFIED", platform: "PLATFORM_UNSPECIFIED", pluginType: "GEMINI", duetProject: projectId } }, accessToken, fetcher);
218
221
  projectId = firstNonEmpty(projectId, stringField(details, "cloudaicompanionProject"));
219
222
  if (!projectId)
@@ -226,6 +229,85 @@ async function collectGeminiUsage(acquisition, options, observedAt) {
226
229
  return refusedCollection("gemini", "gemini", "gemini usage collection failed");
227
230
  }
228
231
  }
232
+ function readGeminiCliOAuthCredentials(credsPath, filesystem) {
233
+ try {
234
+ const creds = JSON.parse(filesystem.readFile(credsPath));
235
+ const record = isRecord(creds) ? creds : {};
236
+ const refreshToken = stringField(record, "refresh_token");
237
+ const accessToken = stringField(record, "access_token");
238
+ const expiryRaw = record.expiry_date;
239
+ const expiresAt = typeof expiryRaw === "number" ? expiryRaw : typeof expiryRaw === "string" ? Number.parseInt(expiryRaw, 10) : undefined;
240
+ if (!refreshToken && !accessToken)
241
+ return null;
242
+ return { accessToken, refreshToken, ...(expiresAt === undefined || !Number.isFinite(expiresAt) ? {} : { expiresAt }) };
243
+ }
244
+ catch {
245
+ return null;
246
+ }
247
+ }
248
+ function readOpenCodeGeminiOAuthCredentials(homeDir, env, filesystem) {
249
+ const fromEnv = authRecordFromOpenCodeAuthContent(env?.OPENCODE_AUTH_CONTENT);
250
+ if (fromEnv)
251
+ return fromEnv;
252
+ for (const authPath of openCodeAuthPaths(homeDir, env)) {
253
+ if (!filesystem.exists(authPath))
254
+ continue;
255
+ try {
256
+ const parsed = JSON.parse(filesystem.readFile(authPath));
257
+ const fromFile = authRecordFromOpenCodeAuthDatabase(parsed);
258
+ if (fromFile)
259
+ return fromFile;
260
+ }
261
+ catch { }
262
+ }
263
+ return null;
264
+ }
265
+ function authRecordFromOpenCodeAuthContent(value) {
266
+ if (!value)
267
+ return null;
268
+ try {
269
+ return authRecordFromOpenCodeAuthDatabase(JSON.parse(value));
270
+ }
271
+ catch {
272
+ return null;
273
+ }
274
+ }
275
+ function authRecordFromOpenCodeAuthDatabase(value) {
276
+ if (!isRecord(value))
277
+ return null;
278
+ return openCodeGeminiAuthRecordToCredentials(value.google) ?? openCodeGeminiAuthRecordToCredentials(value.gemini);
279
+ }
280
+ function openCodeGeminiAuthRecordToCredentials(value) {
281
+ if (!isRecord(value) || value.type !== "oauth")
282
+ return null;
283
+ const accessToken = stringField(value, "access");
284
+ const expiresAt = numberField(value, "expires");
285
+ const refresh = stringField(value, "refresh");
286
+ const [refreshToken = "", projectId = "", managedProjectId = ""] = refresh.split("|", 3);
287
+ if (!refreshToken && !accessToken)
288
+ return null;
289
+ return { accessToken, refreshToken, ...(expiresAt === undefined ? {} : { expiresAt }), ...(firstNonEmpty(projectId, managedProjectId) ? { projectId: firstNonEmpty(projectId, managedProjectId) } : {}) };
290
+ }
291
+ function selectGeminiOAuthCredentials(openCodeCreds, geminiCliCreds, observedAt) {
292
+ const candidates = [openCodeCreds, geminiCliCreds].filter((candidate) => candidate !== null);
293
+ const fresh = candidates.find((candidate) => candidate.accessToken && candidate.expiresAt !== undefined && candidate.expiresAt > observedAt + 5 * 60_000);
294
+ return fresh ?? candidates.find((candidate) => candidate.refreshToken) ?? candidates[0] ?? null;
295
+ }
296
+ function readOpenCodeGeminiAuthOAuthClient(homeDir, env, filesystem) {
297
+ for (const candidate of openCodeGeminiAuthPackageEntrypoints(homeDir, env)) {
298
+ if (!filesystem.exists(candidate))
299
+ continue;
300
+ try {
301
+ const source = filesystem.readFile(candidate);
302
+ const clientId = source.match(/GEMINI_CLIENT_ID\s*=\s*["']([^"']+)["']/)?.[1] ?? "";
303
+ const clientSecret = source.match(/GEMINI_CLIENT_SECRET\s*=\s*["']([^"']+)["']/)?.[1] ?? "";
304
+ if (clientId && clientSecret)
305
+ return { clientId, clientSecret };
306
+ }
307
+ catch { }
308
+ }
309
+ return null;
310
+ }
229
311
  function availableCollection(providerFamily, modelFamily, authProfile, accountBoundary, providerBucket) {
230
312
  if (providerBucket.remaining === null || providerBucket.remaining <= 0 || providerBucket.uncertainty !== "available") {
231
313
  return { providerFamily, modelFamily, bucket: providerBucket, failureClass: "rate_limited", availabilityState: "unavailable", redactedReason: "usage is not available" };
@@ -493,6 +575,18 @@ function geminiCredentialPaths(homeDir, env) {
493
575
  const geminiHome = env?.GEMINI_CLI_HOME;
494
576
  return uniqueNonEmpty([geminiHome ? path.join(geminiHome, ".gemini", "oauth_creds.json") : undefined, geminiHome ? path.join(geminiHome, "oauth_creds.json") : undefined, path.join(homeDir, ".gemini", "oauth_creds.json")]);
495
577
  }
578
+ function openCodeAuthPaths(homeDir, env) {
579
+ const dataHome = firstNonEmpty(env?.OPENCODE_DATA_DIR, env?.XDG_DATA_HOME ? path.join(env.XDG_DATA_HOME, "opencode") : undefined, path.join(homeDir, ".local", "share", "opencode"));
580
+ return uniqueNonEmpty([dataHome ? path.join(dataHome, "auth.json") : undefined]);
581
+ }
582
+ function openCodeGeminiAuthPackageEntrypoints(homeDir, env) {
583
+ const cacheHome = firstNonEmpty(env?.OPENCODE_CACHE_DIR, env?.XDG_CACHE_HOME ? path.join(env.XDG_CACHE_HOME, "opencode") : undefined, path.join(homeDir, ".cache", "opencode"));
584
+ return uniqueNonEmpty([
585
+ cacheHome ? path.join(cacheHome, "packages", "opencode-gemini-auth@latest", "node_modules", "opencode-gemini-auth", "dist", "index.js") : undefined,
586
+ cacheHome ? path.join(cacheHome, "packages", "opencode-gemini-auth@latest", "dist", "index.js") : undefined,
587
+ cacheHome ? path.join(cacheHome, "packages", "opencode-gemini-auth", "node_modules", "opencode-gemini-auth", "dist", "index.js") : undefined,
588
+ ]);
589
+ }
496
590
  function claudeKeychainServiceName(env) {
497
591
  const configDir = env?.CLAUDE_CONFIG_DIR;
498
592
  const defaultService = configDir ? `Claude Code-credentials-${createHash("sha256").update(configDir).digest("hex").slice(0, 8)}` : "Claude Code-credentials";