@orchestraworks/cli 0.5.1 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/api/compute-provider-check.d.ts +29 -0
  3. package/dist/cli/api/compute-provider-check.js +207 -0
  4. package/dist/cli/api/tail.d.ts +66 -0
  5. package/dist/cli/api/tail.js +564 -0
  6. package/dist/cli/main.d.ts +5 -1
  7. package/dist/cli/main.js +22 -0
  8. package/dist/constructs/agent.d.ts +10 -0
  9. package/dist/constructs/agent.js +39 -4
  10. package/dist/constructs/environment.d.ts +29 -1
  11. package/dist/constructs/environment.js +28 -1
  12. package/dist/constructs/skill.d.ts +6 -1
  13. package/dist/constructs/skill.js +21 -2
  14. package/dist/engine/reconcile.js +15 -1
  15. package/dist/generated/cli-commands.json +876 -1
  16. package/dist/generated/managed-skills.d.ts +2 -0
  17. package/dist/generated/managed-skills.js +13 -0
  18. package/dist/index.d.ts +1 -1
  19. package/docs/REFERENCE.md +21 -1
  20. package/node_modules/@orchestraworks/client/dist/esm/models/ApiKey.d.ts +6 -0
  21. package/node_modules/@orchestraworks/client/dist/esm/models/ApiKey.js +2 -0
  22. package/node_modules/@orchestraworks/client/dist/esm/models/ComputeProvider.d.ts +3 -3
  23. package/node_modules/@orchestraworks/client/dist/esm/models/CreateApiKeyRequest.d.ts +7 -1
  24. package/node_modules/@orchestraworks/client/dist/esm/models/CreateApiKeyRequest.js +2 -0
  25. package/node_modules/@orchestraworks/client/dist/esm/models/CreateEnvironmentRequest.d.ts +13 -0
  26. package/node_modules/@orchestraworks/client/dist/esm/models/CreateEnvironmentRequest.js +5 -0
  27. package/node_modules/@orchestraworks/client/dist/esm/models/Environment.d.ts +13 -0
  28. package/node_modules/@orchestraworks/client/dist/esm/models/Environment.js +5 -0
  29. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentHook.d.ts +38 -0
  30. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentHook.js +45 -0
  31. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentHooks.d.ts +39 -0
  32. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentHooks.js +44 -0
  33. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentHooksRequest.d.ts +39 -0
  34. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentHooksRequest.js +44 -0
  35. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentProvisionSpec.d.ts +2 -1
  36. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentProvisionSpecRequest.d.ts +2 -1
  37. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentSnapshot.d.ts +19 -0
  38. package/node_modules/@orchestraworks/client/dist/esm/models/EnvironmentSnapshot.js +7 -0
  39. package/node_modules/@orchestraworks/client/dist/esm/models/Machine.d.ts +7 -1
  40. package/node_modules/@orchestraworks/client/dist/esm/models/Machine.js +2 -0
  41. package/node_modules/@orchestraworks/client/dist/esm/models/UpdateEnvironmentRequest.d.ts +13 -0
  42. package/node_modules/@orchestraworks/client/dist/esm/models/UpdateEnvironmentRequest.js +5 -0
  43. package/node_modules/@orchestraworks/client/dist/esm/models/index.d.ts +3 -0
  44. package/node_modules/@orchestraworks/client/dist/esm/models/index.js +3 -0
  45. package/node_modules/@orchestraworks/client/dist/models/ApiKey.d.ts +6 -0
  46. package/node_modules/@orchestraworks/client/dist/models/ApiKey.js +2 -0
  47. package/node_modules/@orchestraworks/client/dist/models/ComputeProvider.d.ts +3 -3
  48. package/node_modules/@orchestraworks/client/dist/models/CreateApiKeyRequest.d.ts +7 -1
  49. package/node_modules/@orchestraworks/client/dist/models/CreateApiKeyRequest.js +2 -0
  50. package/node_modules/@orchestraworks/client/dist/models/CreateEnvironmentRequest.d.ts +13 -0
  51. package/node_modules/@orchestraworks/client/dist/models/CreateEnvironmentRequest.js +5 -0
  52. package/node_modules/@orchestraworks/client/dist/models/Environment.d.ts +13 -0
  53. package/node_modules/@orchestraworks/client/dist/models/Environment.js +5 -0
  54. package/node_modules/@orchestraworks/client/dist/models/EnvironmentHook.d.ts +38 -0
  55. package/node_modules/@orchestraworks/client/dist/models/EnvironmentHook.js +52 -0
  56. package/node_modules/@orchestraworks/client/dist/models/EnvironmentHooks.d.ts +39 -0
  57. package/node_modules/@orchestraworks/client/dist/models/EnvironmentHooks.js +51 -0
  58. package/node_modules/@orchestraworks/client/dist/models/EnvironmentHooksRequest.d.ts +39 -0
  59. package/node_modules/@orchestraworks/client/dist/models/EnvironmentHooksRequest.js +51 -0
  60. package/node_modules/@orchestraworks/client/dist/models/EnvironmentProvisionSpec.d.ts +2 -1
  61. package/node_modules/@orchestraworks/client/dist/models/EnvironmentProvisionSpecRequest.d.ts +2 -1
  62. package/node_modules/@orchestraworks/client/dist/models/EnvironmentSnapshot.d.ts +19 -0
  63. package/node_modules/@orchestraworks/client/dist/models/EnvironmentSnapshot.js +7 -0
  64. package/node_modules/@orchestraworks/client/dist/models/Machine.d.ts +7 -1
  65. package/node_modules/@orchestraworks/client/dist/models/Machine.js +2 -0
  66. package/node_modules/@orchestraworks/client/dist/models/UpdateEnvironmentRequest.d.ts +13 -0
  67. package/node_modules/@orchestraworks/client/dist/models/UpdateEnvironmentRequest.js +5 -0
  68. package/node_modules/@orchestraworks/client/dist/models/index.d.ts +3 -0
  69. package/node_modules/@orchestraworks/client/dist/models/index.js +3 -0
  70. package/node_modules/@orchestraworks/client/package.json +1 -1
  71. package/package.json +4 -4
  72. package/skills/orchestra/SKILL.md +167 -42
  73. package/skills/orchestra-fdk/SKILL.md +112 -545
  74. package/skills/orchestra-fdk/references/authoring.md +130 -3
  75. package/skills/orchestra-fdk/references/environment.md +352 -43
  76. package/skills/orchestra-fdk/references/integrations/analytics.md +18 -0
  77. package/skills/orchestra-fdk/references/integrations/ci-cd.md +20 -0
  78. package/skills/orchestra-fdk/references/integrations/cloud.md +19 -0
  79. package/skills/orchestra-fdk/references/integrations/code-repo.md +76 -0
  80. package/skills/orchestra-fdk/references/integrations/databases.md +22 -0
  81. package/skills/orchestra-fdk/references/integrations/dependencies.md +29 -0
  82. package/skills/orchestra-fdk/references/integrations/design.md +18 -0
  83. package/skills/orchestra-fdk/references/integrations/feature-flags.md +19 -0
  84. package/skills/orchestra-fdk/references/integrations/incident.md +29 -0
  85. package/skills/orchestra-fdk/references/integrations/issue-tracker.md +65 -0
  86. package/skills/orchestra-fdk/references/integrations/knowledge-base.md +43 -0
  87. package/skills/orchestra-fdk/references/integrations/messaging.md +38 -0
  88. package/skills/orchestra-fdk/references/integrations/observability.md +36 -0
  89. package/skills/orchestra-fdk/references/integrations/secrets-managers.md +25 -0
  90. package/skills/orchestra-fdk/references/integrations/support-desk.md +31 -0
  91. package/skills/orchestra-fdk/references/phases/0-start.md +62 -0
  92. package/skills/orchestra-fdk/references/phases/1-discover.md +111 -0
  93. package/skills/orchestra-fdk/references/phases/2-plan.md +157 -0
  94. package/skills/orchestra-fdk/references/phases/3-connect.md +99 -0
  95. package/skills/orchestra-fdk/references/phases/4-build.md +159 -0
  96. package/skills/orchestra-fdk/references/phases/5-prove.md +107 -0
  97. package/skills/orchestra-fdk/references/phases/6-handover.md +42 -0
  98. package/skills/orchestra-fdk/references/troubleshooting.md +128 -0
  99. package/templates/bug-fix/agents/bugfix.md +1 -1
  100. package/templates/bug-fix/main.ts +1 -1
  101. package/templates/engineering-team/README.md +45 -181
  102. package/templates/engineering-team/agents/engineer-agent.md +10 -7
  103. package/templates/engineering-team/agents/manager-agent.md +23 -120
  104. package/templates/engineering-team/inputs.json +1 -3
  105. package/templates/engineering-team/lib/environment.ts +10 -90
  106. package/templates/engineering-team/lib/inputs.ts +5 -97
  107. package/templates/engineering-team/lib/setup.sh +5 -5
  108. package/templates/engineering-team/main.ts +22 -69
  109. package/templates/todo-factory/agents/bugfix.md +1 -1
  110. package/templates/todo-factory/main.ts +1 -1
  111. package/templates/engineering-team/agents/engineer-bare.md +0 -22
  112. package/templates/engineering-team/onboarding/create-score-metrics.sh +0 -33
@@ -0,0 +1,2 @@
1
+ /** The ids of the skills the platform manages, which the kit adds to each agent's skills at synth. */
2
+ export declare const MANAGED_SKILL_IDS: readonly string[];
@@ -0,0 +1,13 @@
1
+ // GENERATED — do not edit; run node scripts/generate-catalog-skills.mjs
2
+ //
3
+ // Source: PlatformSkillDefinition.declared in the platform, the skills every stack serves.
4
+ /** The ids of the skills the platform manages, which the kit adds to each agent's skills at synth. */
5
+ export const MANAGED_SKILL_IDS = Object.freeze([
6
+ "skill_artifacts",
7
+ "skill_code-review",
8
+ "skill_visualize",
9
+ "skill_assessment",
10
+ "skill_bug-fixing",
11
+ "skill_feature-development",
12
+ "skill_progress-report",
13
+ ]);
package/dist/index.d.ts CHANGED
@@ -29,7 +29,7 @@ export type { GatewayKeyProps } from "./constructs/gateway-key.js";
29
29
  export { ModelProviderKey } from "./constructs/model-provider-key.js";
30
30
  export type { ModelProviderKeyProps } from "./constructs/model-provider-key.js";
31
31
  export { EgressPolicy, Environment, basic, bearer, header, inject, } from "./constructs/environment.js";
32
- export type { AllowConnectionOptions, DenyRuleOptions, DiskMount, EnvironmentProps, IngressEndpoint, PlatformSpec, ResourceSpec, RouteModelsViaGatewayOptions, VolumeMount, } from "./constructs/environment.js";
32
+ export type { AllowConnectionOptions, DenyRuleOptions, DiskMount, EnvironmentHook, EnvironmentHooks, EnvironmentProps, IngressEndpoint, PlatformSpec, ResourceSpec, RouteModelsViaGatewayOptions, VolumeMount, } from "./constructs/environment.js";
33
33
  export { egressPreset } from "./constructs/egress-preset.js";
34
34
  export type { EgressRuleBundle, PresetRule } from "./constructs/egress-preset.js";
35
35
  export { Agent } from "./constructs/agent.js";
package/docs/REFERENCE.md CHANGED
@@ -188,7 +188,7 @@ fitting a starter to your codebase.
188
188
  ### Start from another starter: `orchestra fdk init --template <name>`
189
189
 
190
190
  The kit carries more than one starter. `engineering-team` is a factory for one engineering team: a Manager
191
- Agent and Engineer Agents sm, md and lg, their machines, and four pipelines. A starter other than `bug-fix`
191
+ Agent and Engineer Agents sm, md and lg, their machines, and three pipelines. A starter other than `bug-fix`
192
192
  brings its own `package.json`, so run it in a new, empty folder, with nothing installed:
193
193
 
194
194
  ```bash
@@ -1109,6 +1109,25 @@ and polls until the grant activates — you finish it in your own signed-in brow
1109
1109
  what the platform's authenticated callback requires. `--timeout 0` mints and prints without waiting. Grants
1110
1110
  carry lifecycle metadata only; no surface ever reads the credential back.
1111
1111
 
1112
+ ### Check a Launcher (`orchestra compute-providers check`)
1113
+
1114
+ A Launcher is the program that runs machines in your own cloud. It polls the platform once a second
1115
+ for its compute provider record. When it does not run machines, run this command first:
1116
+
1117
+ ```bash
1118
+ orchestra compute-providers check azure-east
1119
+ ```
1120
+
1121
+ The command reads the record once. It shows the record's name and state (`connected`, `silent` or
1122
+ `never_connected`), the last poll time and its age, the protocol version and any protocol refusal,
1123
+ the health counts (orders held, cloud errors, reports pending), and each target with `passed` or
1124
+ the reason the platform refused it. A target whose self-check failed shows the cloud's message.
1125
+
1126
+ The exit code is 0 when the Launcher polls, its protocol was accepted, and every target passed.
1127
+ Otherwise it is 1, and stderr has one line that names each failure, so a script can wait on it.
1128
+ `--output json` prints the record as the platform returns it. A managed provider has no Launcher,
1129
+ so the command exits 0.
1130
+
1112
1131
  ### Chat presence (Slack and Microsoft Teams)
1113
1132
 
1114
1133
  There is **no chat construct** — the `Channel` construct was removed, because the orchestra convention is
@@ -1244,6 +1263,7 @@ every derived slug (factory name + construct path) must stay ≤ 60 chars, so ke
1244
1263
  | **401 / 403** | The token lacks access to the resolved org, or it expired and could not be renewed. A profile from a browser `login` renews itself silently, so a 401 that survives that means the renewal credential is gone too — re-run `orchestra auth login`. A pasted or exported token has no renewal path at all: replace it, or fix `ORCHESTRA_ORGANIZATION_ID`. |
1245
1264
  | **"the platform rejected the stored refresh credential… Run `orchestra auth login` to sign in again."** | The stored renewal credential was refused (revoked, expired, or a sibling process already rotated past it). Nothing on disk is changed by that failure, so re-running `orchestra auth login` is the whole remedy. A *retryable* failure — the platform unreachable, timing out, or answering `temporarily_unavailable` — reports itself as such and never tells you to log in again; run the command again. |
1246
1265
  | **`ERR_PACKAGE_PATH_NOT_EXPORTED` at first import** | The factory program's own `package.json` is missing `"type": "module"` (a fresh `npm init -y` defaults to CommonJS). orchestra is ESM-only — its `exports` map defines only an `import` condition — so add `"type": "module"` to the factory `package.json` (see §4). |
1266
+ | **A Launcher runs no machines** | Run `orchestra compute-providers check <id-or-slug>` (§7). It names what failed: no poll for 60 seconds, a refused protocol version, or a target the platform refused, with the reason. |
1247
1267
  | **Import 404** | The referenced slug/id isn't visible in the resolved org. Check the org and the reference. |
1248
1268
  | **"refusing to send secrets over plain HTTP to non-loopback host …"** | A secret write needs TLS. Use an `https://` base URL; only loopback (`127.0.0.1`/`localhost`/`::1`) dev stacks may use `http://`. |
1249
1269
  | **`tsc` error on `target: Targets.…({ binding })`** | The binding is scoped to events the trigger does not fully select (its field is absent from one payload shape). Split into per-shape triggers sharing one binding constant and one anchor (the composition pattern), or author a binding valid for the whole selection. |
@@ -45,6 +45,12 @@ export interface ApiKey {
45
45
  * @memberof ApiKey
46
46
  */
47
47
  lastUsedAt?: Date;
48
+ /**
49
+ * When the key stops signing its principal in, fixed at create; absent when it never expires
50
+ * @type {Date}
51
+ * @memberof ApiKey
52
+ */
53
+ expiresAt?: Date;
48
54
  /**
49
55
  * Creation timestamp
50
56
  * @type {Date}
@@ -50,6 +50,7 @@ export function ApiKeyFromJSONTyped(json, ignoreDiscriminator) {
50
50
  'principalId': json['principalId'],
51
51
  'name': json['name'],
52
52
  'lastUsedAt': json['lastUsedAt'] == null ? undefined : (new Date(json['lastUsedAt'])),
53
+ 'expiresAt': json['expiresAt'] == null ? undefined : (new Date(json['expiresAt'])),
53
54
  'createdAt': (new Date(json['createdAt'])),
54
55
  'updatedAt': (new Date(json['updatedAt'])),
55
56
  };
@@ -67,6 +68,7 @@ export function ApiKeyToJSONTyped(value, ignoreDiscriminator = false) {
67
68
  'principalId': value['principalId'],
68
69
  'name': value['name'],
69
70
  'lastUsedAt': value['lastUsedAt'] == null ? value['lastUsedAt'] : value['lastUsedAt'].toISOString(),
71
+ 'expiresAt': value['expiresAt'] == null ? value['expiresAt'] : value['expiresAt'].toISOString(),
70
72
  'createdAt': value['createdAt'].toISOString(),
71
73
  'updatedAt': value['updatedAt'].toISOString(),
72
74
  };
@@ -20,7 +20,7 @@ import type { ComputeProviderHealth } from './ComputeProviderHealth';
20
20
  */
21
21
  export interface ComputeProvider {
22
22
  /**
23
- * Compute provider id: a self-hosted record's TypeID, or a managed provider's key
23
+ * Compute provider id: a self-hosted record's TypeID, or cprov_orchestra for the managed provider
24
24
  * @type {string}
25
25
  * @memberof ComputeProvider
26
26
  */
@@ -32,7 +32,7 @@ export interface ComputeProvider {
32
32
  */
33
33
  kind: ComputeProviderKindEnum;
34
34
  /**
35
- * A self-hosted record's slug, fixed at create
35
+ * A self-hosted record's slug, fixed at create, or orchestra for the managed provider
36
36
  * @type {string}
37
37
  * @memberof ComputeProvider
38
38
  */
@@ -92,7 +92,7 @@ export interface ComputeProvider {
92
92
  */
93
93
  state?: ComputeProviderStateEnum;
94
94
  /**
95
- * The operating systems and architectures a managed provider runs
95
+ * The operating systems and architectures the managed provider runs
96
96
  * @type {Array<EnvironmentPlatform>}
97
97
  * @memberof ComputeProvider
98
98
  */
@@ -16,7 +16,7 @@
16
16
  */
17
17
  export interface CreateApiKeyRequest {
18
18
  /**
19
- * The type of the principal the key signs in. A key of a type that cannot sign in yet is refused 403; today a service account's key alone signs in
19
+ * The type of the principal the key signs in. A key of a type that cannot sign in is refused 403; a person's key and a service account's key sign in, and an agent's does not
20
20
  * @type {CreateApiKeyRequestPrincipalTypeEnum}
21
21
  * @memberof CreateApiKeyRequest
22
22
  */
@@ -33,6 +33,12 @@ export interface CreateApiKeyRequest {
33
33
  * @memberof CreateApiKeyRequest
34
34
  */
35
35
  name: string;
36
+ /**
37
+ * When the key stops signing its principal in, after the request's time and fixed at create; absent means the key never expires
38
+ * @type {Date}
39
+ * @memberof CreateApiKeyRequest
40
+ */
41
+ expiresAt?: Date;
36
42
  }
37
43
  /**
38
44
  * @export
@@ -42,6 +42,7 @@ export function CreateApiKeyRequestFromJSONTyped(json, ignoreDiscriminator) {
42
42
  'principalType': json['principalType'],
43
43
  'principalId': json['principalId'],
44
44
  'name': json['name'],
45
+ 'expiresAt': json['expiresAt'] == null ? undefined : (new Date(json['expiresAt'])),
45
46
  };
46
47
  }
47
48
  export function CreateApiKeyRequestToJSON(json) {
@@ -55,5 +56,6 @@ export function CreateApiKeyRequestToJSONTyped(value, ignoreDiscriminator = fals
55
56
  'principalType': value['principalType'],
56
57
  'principalId': value['principalId'],
57
58
  'name': value['name'],
59
+ 'expiresAt': value['expiresAt'] == null ? value['expiresAt'] : value['expiresAt'].toISOString(),
58
60
  };
59
61
  }
@@ -10,6 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import type { EnvironmentIngressPolicy } from './EnvironmentIngressPolicy';
13
+ import type { EnvironmentHooks } from './EnvironmentHooks';
13
14
  import type { EnvironmentPlatformRequest } from './EnvironmentPlatformRequest';
14
15
  import type { EnvironmentEgressPolicy } from './EnvironmentEgressPolicy';
15
16
  import type { EnvironmentProvisionSpecRequest } from './EnvironmentProvisionSpecRequest';
@@ -67,6 +68,18 @@ export interface CreateEnvironmentRequest {
67
68
  * @memberof CreateEnvironmentRequest
68
69
  */
69
70
  projectId?: string;
71
+ /**
72
+ * The absolute folder every conversation's agent starts in, on every kind: a path starting with / on linux and macos, and a drive or UNC path on windows, at most 1024 characters. A machine keeps the value it was created with. The worker creates the folder when it is missing, owned by the account the agent runs as, and an agent placement whose folder cannot be created or entered fails. Absent, the agent starts in the worker's own folder for its harness. An empty value declares none.
73
+ * @type {string}
74
+ * @memberof CreateEnvironmentRequest
75
+ */
76
+ workingDirectory?: string;
77
+ /**
78
+ * Scripts the worker runs at points of a machine's and an agent's life. onStartMachine and onStartAgent are built; onStartSession, onStopSession, onStopAgent and onStopMachine are reserved.
79
+ * @type {EnvironmentHooks}
80
+ * @memberof CreateEnvironmentRequest
81
+ */
82
+ hooks?: EnvironmentHooks;
70
83
  /**
71
84
  * Labels: the customer's key-to-value tags; the platform reads no key
72
85
  * @type {{ [key: string]: string; }}
@@ -12,6 +12,7 @@
12
12
  * Do not edit the class manually.
13
13
  */
14
14
  import { EnvironmentIngressPolicyFromJSON, EnvironmentIngressPolicyToJSON, } from './EnvironmentIngressPolicy';
15
+ import { EnvironmentHooksFromJSON, EnvironmentHooksToJSON, } from './EnvironmentHooks';
15
16
  import { EnvironmentPlatformRequestFromJSON, EnvironmentPlatformRequestToJSON, } from './EnvironmentPlatformRequest';
16
17
  import { EnvironmentEgressPolicyFromJSON, EnvironmentEgressPolicyToJSON, } from './EnvironmentEgressPolicy';
17
18
  import { EnvironmentProvisionSpecRequestFromJSON, EnvironmentProvisionSpecRequestToJSON, } from './EnvironmentProvisionSpecRequest';
@@ -46,6 +47,8 @@ export function CreateEnvironmentRequestFromJSONTyped(json, ignoreDiscriminator)
46
47
  'kind': json['kind'] == null ? undefined : json['kind'],
47
48
  'provisionSpec': json['provisionSpec'] == null ? undefined : EnvironmentProvisionSpecRequestFromJSON(json['provisionSpec']),
48
49
  'projectId': json['projectId'] == null ? undefined : json['projectId'],
50
+ 'workingDirectory': json['workingDirectory'] == null ? undefined : json['workingDirectory'],
51
+ 'hooks': json['hooks'] == null ? undefined : EnvironmentHooksFromJSON(json['hooks']),
49
52
  'labels': json['labels'] == null ? undefined : json['labels'],
50
53
  };
51
54
  }
@@ -65,6 +68,8 @@ export function CreateEnvironmentRequestToJSONTyped(value, ignoreDiscriminator =
65
68
  'kind': value['kind'],
66
69
  'provisionSpec': EnvironmentProvisionSpecRequestToJSON(value['provisionSpec']),
67
70
  'projectId': value['projectId'],
71
+ 'workingDirectory': value['workingDirectory'],
72
+ 'hooks': EnvironmentHooksToJSON(value['hooks']),
68
73
  'labels': value['labels'],
69
74
  };
70
75
  }
@@ -11,6 +11,7 @@
11
11
  */
12
12
  import type { EnvironmentIngressPolicy } from './EnvironmentIngressPolicy';
13
13
  import type { EnvironmentPlatformWithRuntime } from './EnvironmentPlatformWithRuntime';
14
+ import type { EnvironmentHooks } from './EnvironmentHooks';
14
15
  import type { EnvironmentEgressPolicy } from './EnvironmentEgressPolicy';
15
16
  import type { EnvironmentProvisionSpec } from './EnvironmentProvisionSpec';
16
17
  /**
@@ -79,6 +80,18 @@ export interface Environment {
79
80
  * @memberof Environment
80
81
  */
81
82
  provisionSpec?: EnvironmentProvisionSpec;
83
+ /**
84
+ * The absolute folder every conversation's agent starts in, on every kind: a path starting with / on linux and macos, and a drive or UNC path on windows, at most 1024 characters. A machine keeps the value it was created with. The worker creates the folder when it is missing, owned by the account the agent runs as, and an agent placement whose folder cannot be created or entered fails. Absent, the agent starts in the worker's own folder for its harness.
85
+ * @type {string}
86
+ * @memberof Environment
87
+ */
88
+ workingDirectory?: string;
89
+ /**
90
+ * Scripts the worker runs at points of a machine's and an agent's life. onStartMachine and onStartAgent are built; onStartSession, onStopSession, onStopAgent and onStopMachine are reserved.
91
+ * @type {EnvironmentHooks}
92
+ * @memberof Environment
93
+ */
94
+ hooks?: EnvironmentHooks;
82
95
  /**
83
96
  * Creation timestamp
84
97
  * @type {Date}
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import { EnvironmentIngressPolicyFromJSON, EnvironmentIngressPolicyToJSON, } from './EnvironmentIngressPolicy';
15
15
  import { EnvironmentPlatformWithRuntimeFromJSON, EnvironmentPlatformWithRuntimeToJSON, } from './EnvironmentPlatformWithRuntime';
16
+ import { EnvironmentHooksFromJSON, EnvironmentHooksToJSON, } from './EnvironmentHooks';
16
17
  import { EnvironmentEgressPolicyFromJSON, EnvironmentEgressPolicyToJSON, } from './EnvironmentEgressPolicy';
17
18
  import { EnvironmentProvisionSpecFromJSON, EnvironmentProvisionSpecToJSON, } from './EnvironmentProvisionSpec';
18
19
  /**
@@ -66,6 +67,8 @@ export function EnvironmentFromJSONTyped(json, ignoreDiscriminator) {
66
67
  'ingressPolicy': json['ingressPolicy'] == null ? undefined : EnvironmentIngressPolicyFromJSON(json['ingressPolicy']),
67
68
  'kind': json['kind'],
68
69
  'provisionSpec': json['provisionSpec'] == null ? undefined : EnvironmentProvisionSpecFromJSON(json['provisionSpec']),
70
+ 'workingDirectory': json['workingDirectory'] == null ? undefined : json['workingDirectory'],
71
+ 'hooks': json['hooks'] == null ? undefined : EnvironmentHooksFromJSON(json['hooks']),
69
72
  'createdAt': (new Date(json['createdAt'])),
70
73
  'updatedAt': (new Date(json['updatedAt'])),
71
74
  'labels': json['labels'],
@@ -88,6 +91,8 @@ export function EnvironmentToJSONTyped(value, ignoreDiscriminator = false) {
88
91
  'egressPolicy': EnvironmentEgressPolicyToJSON(value['egressPolicy']),
89
92
  'ingressPolicy': EnvironmentIngressPolicyToJSON(value['ingressPolicy']),
90
93
  'provisionSpec': EnvironmentProvisionSpecToJSON(value['provisionSpec']),
94
+ 'workingDirectory': value['workingDirectory'],
95
+ 'hooks': EnvironmentHooksToJSON(value['hooks']),
91
96
  'createdAt': value['createdAt'].toISOString(),
92
97
  'updatedAt': value['updatedAt'].toISOString(),
93
98
  'labels': value['labels'],
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Orchestra platform API
3
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
4
+ *
5
+ * The version of the OpenAPI document: 0.1.0
6
+ *
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ /**
13
+ *
14
+ * @export
15
+ * @interface EnvironmentHook
16
+ */
17
+ export interface EnvironmentHook {
18
+ /**
19
+ * The script's text. Required, at most 64 KiB.
20
+ * @type {string}
21
+ * @memberof EnvironmentHook
22
+ */
23
+ script: string;
24
+ /**
25
+ * How long the script may run, in whole seconds. onStartAgent takes 1 to 240, and absent means 120. onStartMachine takes 1 to 3600, and absent means the deployment's bound, 600 unless it sets another. At the bound the worker kills the script and every process it started.
26
+ * @type {number}
27
+ * @memberof EnvironmentHook
28
+ */
29
+ timeoutSeconds?: number;
30
+ }
31
+ /**
32
+ * Check if a given object implements the EnvironmentHook interface.
33
+ */
34
+ export declare function instanceOfEnvironmentHook(value: object): value is EnvironmentHook;
35
+ export declare function EnvironmentHookFromJSON(json: any): EnvironmentHook;
36
+ export declare function EnvironmentHookFromJSONTyped(json: any, ignoreDiscriminator: boolean): EnvironmentHook;
37
+ export declare function EnvironmentHookToJSON(json: any): EnvironmentHook;
38
+ export declare function EnvironmentHookToJSONTyped(value?: EnvironmentHook | null, ignoreDiscriminator?: boolean): any;
@@ -0,0 +1,45 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Orchestra platform API
5
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
6
+ *
7
+ * The version of the OpenAPI document: 0.1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+ /**
15
+ * Check if a given object implements the EnvironmentHook interface.
16
+ */
17
+ export function instanceOfEnvironmentHook(value) {
18
+ if (!('script' in value) || value['script'] === undefined)
19
+ return false;
20
+ return true;
21
+ }
22
+ export function EnvironmentHookFromJSON(json) {
23
+ return EnvironmentHookFromJSONTyped(json, false);
24
+ }
25
+ export function EnvironmentHookFromJSONTyped(json, ignoreDiscriminator) {
26
+ if (json == null) {
27
+ return json;
28
+ }
29
+ return {
30
+ 'script': json['script'],
31
+ 'timeoutSeconds': json['timeoutSeconds'] == null ? undefined : json['timeoutSeconds'],
32
+ };
33
+ }
34
+ export function EnvironmentHookToJSON(json) {
35
+ return EnvironmentHookToJSONTyped(json, false);
36
+ }
37
+ export function EnvironmentHookToJSONTyped(value, ignoreDiscriminator = false) {
38
+ if (value == null) {
39
+ return value;
40
+ }
41
+ return {
42
+ 'script': value['script'],
43
+ 'timeoutSeconds': value['timeoutSeconds'],
44
+ };
45
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Orchestra platform API
3
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
4
+ *
5
+ * The version of the OpenAPI document: 0.1.0
6
+ *
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ import type { EnvironmentHook } from './EnvironmentHook';
13
+ /**
14
+ *
15
+ * @export
16
+ * @interface EnvironmentHooks
17
+ */
18
+ export interface EnvironmentHooks {
19
+ /**
20
+ * A script run once as root on each new machine before it registers: bash on Linux, PowerShell on Windows. Provisioned environments only. A machine keeps the value it was created with. provisionSpec.setup is the same script under its older name.
21
+ * @type {EnvironmentHook}
22
+ * @memberof EnvironmentHooks
23
+ */
24
+ onStartMachine?: EnvironmentHook;
25
+ /**
26
+ * A script the worker runs once for each agent placement, after the agent's content is installed and before its first conversation starts: as the account the agent runs as, in workingDirectory, with the agent's environment and the egress edge's authority, so a rule binding a credential applies to it. bash -e on linux and macos, PowerShell on windows. A script that fails or runs past its bound fails the placement with on_start_agent_failed. A machine keeps the value it was created with.
27
+ * @type {EnvironmentHook}
28
+ * @memberof EnvironmentHooks
29
+ */
30
+ onStartAgent?: EnvironmentHook;
31
+ }
32
+ /**
33
+ * Check if a given object implements the EnvironmentHooks interface.
34
+ */
35
+ export declare function instanceOfEnvironmentHooks(value: object): value is EnvironmentHooks;
36
+ export declare function EnvironmentHooksFromJSON(json: any): EnvironmentHooks;
37
+ export declare function EnvironmentHooksFromJSONTyped(json: any, ignoreDiscriminator: boolean): EnvironmentHooks;
38
+ export declare function EnvironmentHooksToJSON(json: any): EnvironmentHooks;
39
+ export declare function EnvironmentHooksToJSONTyped(value?: EnvironmentHooks | null, ignoreDiscriminator?: boolean): any;
@@ -0,0 +1,44 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Orchestra platform API
5
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
6
+ *
7
+ * The version of the OpenAPI document: 0.1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+ import { EnvironmentHookFromJSON, EnvironmentHookToJSON, } from './EnvironmentHook';
15
+ /**
16
+ * Check if a given object implements the EnvironmentHooks interface.
17
+ */
18
+ export function instanceOfEnvironmentHooks(value) {
19
+ return true;
20
+ }
21
+ export function EnvironmentHooksFromJSON(json) {
22
+ return EnvironmentHooksFromJSONTyped(json, false);
23
+ }
24
+ export function EnvironmentHooksFromJSONTyped(json, ignoreDiscriminator) {
25
+ if (json == null) {
26
+ return json;
27
+ }
28
+ return {
29
+ 'onStartMachine': json['onStartMachine'] == null ? undefined : EnvironmentHookFromJSON(json['onStartMachine']),
30
+ 'onStartAgent': json['onStartAgent'] == null ? undefined : EnvironmentHookFromJSON(json['onStartAgent']),
31
+ };
32
+ }
33
+ export function EnvironmentHooksToJSON(json) {
34
+ return EnvironmentHooksToJSONTyped(json, false);
35
+ }
36
+ export function EnvironmentHooksToJSONTyped(value, ignoreDiscriminator = false) {
37
+ if (value == null) {
38
+ return value;
39
+ }
40
+ return {
41
+ 'onStartMachine': EnvironmentHookToJSON(value['onStartMachine']),
42
+ 'onStartAgent': EnvironmentHookToJSON(value['onStartAgent']),
43
+ };
44
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Orchestra platform API
3
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
4
+ *
5
+ * The version of the OpenAPI document: 0.1.0
6
+ *
7
+ *
8
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
9
+ * https://openapi-generator.tech
10
+ * Do not edit the class manually.
11
+ */
12
+ import type { EnvironmentHook } from './EnvironmentHook';
13
+ /**
14
+ *
15
+ * @export
16
+ * @interface EnvironmentHooksRequest
17
+ */
18
+ export interface EnvironmentHooksRequest {
19
+ /**
20
+ * A script run once as root on each new machine before it registers: bash on Linux, PowerShell on Windows. Provisioned environments only. A machine keeps the value it was created with. provisionSpec.setup is the same script under its older name. On an update, absent leaves the stored hook and null removes it.
21
+ * @type {EnvironmentHook}
22
+ * @memberof EnvironmentHooksRequest
23
+ */
24
+ onStartMachine?: EnvironmentHook | null;
25
+ /**
26
+ * A script the worker runs once for each agent placement, after the agent's content is installed and before its first conversation starts: as the account the agent runs as, in workingDirectory, with the agent's environment and the egress edge's authority, so a rule binding a credential applies to it. bash -e on linux and macos, PowerShell on windows. A script that fails or runs past its bound fails the placement with on_start_agent_failed. A machine keeps the value it was created with. On an update, absent leaves the stored hook and null removes it.
27
+ * @type {EnvironmentHook}
28
+ * @memberof EnvironmentHooksRequest
29
+ */
30
+ onStartAgent?: EnvironmentHook | null;
31
+ }
32
+ /**
33
+ * Check if a given object implements the EnvironmentHooksRequest interface.
34
+ */
35
+ export declare function instanceOfEnvironmentHooksRequest(value: object): value is EnvironmentHooksRequest;
36
+ export declare function EnvironmentHooksRequestFromJSON(json: any): EnvironmentHooksRequest;
37
+ export declare function EnvironmentHooksRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): EnvironmentHooksRequest;
38
+ export declare function EnvironmentHooksRequestToJSON(json: any): EnvironmentHooksRequest;
39
+ export declare function EnvironmentHooksRequestToJSONTyped(value?: EnvironmentHooksRequest | null, ignoreDiscriminator?: boolean): any;
@@ -0,0 +1,44 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Orchestra platform API
5
+ * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
6
+ *
7
+ * The version of the OpenAPI document: 0.1.0
8
+ *
9
+ *
10
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
11
+ * https://openapi-generator.tech
12
+ * Do not edit the class manually.
13
+ */
14
+ import { EnvironmentHookFromJSON, EnvironmentHookToJSON, } from './EnvironmentHook';
15
+ /**
16
+ * Check if a given object implements the EnvironmentHooksRequest interface.
17
+ */
18
+ export function instanceOfEnvironmentHooksRequest(value) {
19
+ return true;
20
+ }
21
+ export function EnvironmentHooksRequestFromJSON(json) {
22
+ return EnvironmentHooksRequestFromJSONTyped(json, false);
23
+ }
24
+ export function EnvironmentHooksRequestFromJSONTyped(json, ignoreDiscriminator) {
25
+ if (json == null) {
26
+ return json;
27
+ }
28
+ return {
29
+ 'onStartMachine': json['onStartMachine'] == null ? undefined : EnvironmentHookFromJSON(json['onStartMachine']),
30
+ 'onStartAgent': json['onStartAgent'] == null ? undefined : EnvironmentHookFromJSON(json['onStartAgent']),
31
+ };
32
+ }
33
+ export function EnvironmentHooksRequestToJSON(json) {
34
+ return EnvironmentHooksRequestToJSONTyped(json, false);
35
+ }
36
+ export function EnvironmentHooksRequestToJSONTyped(value, ignoreDiscriminator = false) {
37
+ if (value == null) {
38
+ return value;
39
+ }
40
+ return {
41
+ 'onStartMachine': EnvironmentHookToJSON(value['onStartMachine']),
42
+ 'onStartAgent': EnvironmentHookToJSON(value['onStartAgent']),
43
+ };
44
+ }
@@ -56,9 +56,10 @@ export interface EnvironmentProvisionSpec {
56
56
  */
57
57
  command?: Array<string>;
58
58
  /**
59
- * A script run once as root on each new machine before it registers: bash on Linux, PowerShell on Windows. At most 64 KiB.
59
+ * Deprecated: use hooks.onStartMachine. A script run once as root on each new machine before it registers: bash on Linux, PowerShell on Windows. At most 64 KiB. A request may send it beside hooks.onStartMachine only when the two scripts are the same, and a read carries both.
60
60
  * @type {string}
61
61
  * @memberof EnvironmentProvisionSpec
62
+ * @deprecated
62
63
  */
63
64
  setup?: string;
64
65
  /**
@@ -48,9 +48,10 @@ export interface EnvironmentProvisionSpecRequest {
48
48
  */
49
49
  command?: Array<string>;
50
50
  /**
51
- * A script run once as root on each new machine before it registers: bash on Linux, PowerShell on Windows. At most 64 KiB. On an update, absent leaves the stored value and an empty one clears it.
51
+ * Deprecated: use hooks.onStartMachine. A script run once as root on each new machine before it registers: bash on Linux, PowerShell on Windows. At most 64 KiB. A request may send it beside hooks.onStartMachine only when the two scripts are the same, and a read carries both. On an update, absent leaves the stored value and an empty one clears it.
52
52
  * @type {string}
53
53
  * @memberof EnvironmentProvisionSpecRequest
54
+ * @deprecated
54
55
  */
55
56
  setup?: string;
56
57
  /**
@@ -10,6 +10,7 @@
10
10
  * Do not edit the class manually.
11
11
  */
12
12
  import type { EnvironmentIngressPolicy } from './EnvironmentIngressPolicy';
13
+ import type { EnvironmentHooks } from './EnvironmentHooks';
13
14
  import type { EnvironmentVolumeMount } from './EnvironmentVolumeMount';
14
15
  import type { EnvironmentEgressPolicy } from './EnvironmentEgressPolicy';
15
16
  import type { EnvironmentDisk } from './EnvironmentDisk';
@@ -137,6 +138,24 @@ export interface EnvironmentSnapshot {
137
138
  * @memberof EnvironmentSnapshot
138
139
  */
139
140
  shutdownGracePeriodSeconds?: number;
141
+ /**
142
+ * Working directory captured at machine creation; absent means none was declared
143
+ * @type {string}
144
+ * @memberof EnvironmentSnapshot
145
+ */
146
+ workingDirectory?: string;
147
+ /**
148
+ * Hooks captured at machine creation; absent means none was declared
149
+ * @type {EnvironmentHooks}
150
+ * @memberof EnvironmentSnapshot
151
+ */
152
+ hooks?: EnvironmentHooks;
153
+ /**
154
+ * Setup script bound captured at machine creation; absent means the deployment's
155
+ * @type {number}
156
+ * @memberof EnvironmentSnapshot
157
+ */
158
+ setupTimeoutSeconds?: number;
140
159
  }
141
160
  /**
142
161
  * @export
@@ -12,6 +12,7 @@
12
12
  * Do not edit the class manually.
13
13
  */
14
14
  import { EnvironmentIngressPolicyFromJSON, EnvironmentIngressPolicyToJSON, } from './EnvironmentIngressPolicy';
15
+ import { EnvironmentHooksFromJSON, EnvironmentHooksToJSON, } from './EnvironmentHooks';
15
16
  import { EnvironmentVolumeMountFromJSON, EnvironmentVolumeMountToJSON, } from './EnvironmentVolumeMount';
16
17
  import { EnvironmentEgressPolicyFromJSON, EnvironmentEgressPolicyToJSON, } from './EnvironmentEgressPolicy';
17
18
  import { EnvironmentDiskFromJSON, EnvironmentDiskToJSON, } from './EnvironmentDisk';
@@ -82,6 +83,9 @@ export function EnvironmentSnapshotFromJSONTyped(json, ignoreDiscriminator) {
82
83
  'keepAliveWhenIdle': json['keepAliveWhenIdle'],
83
84
  'ttl': json['ttl'] == null ? undefined : json['ttl'],
84
85
  'shutdownGracePeriodSeconds': json['shutdownGracePeriodSeconds'] == null ? undefined : json['shutdownGracePeriodSeconds'],
86
+ 'workingDirectory': json['workingDirectory'] == null ? undefined : json['workingDirectory'],
87
+ 'hooks': json['hooks'] == null ? undefined : EnvironmentHooksFromJSON(json['hooks']),
88
+ 'setupTimeoutSeconds': json['setupTimeoutSeconds'] == null ? undefined : json['setupTimeoutSeconds'],
85
89
  };
86
90
  }
87
91
  export function EnvironmentSnapshotToJSON(json) {
@@ -111,5 +115,8 @@ export function EnvironmentSnapshotToJSONTyped(value, ignoreDiscriminator = fals
111
115
  'keepAliveWhenIdle': value['keepAliveWhenIdle'],
112
116
  'ttl': value['ttl'],
113
117
  'shutdownGracePeriodSeconds': value['shutdownGracePeriodSeconds'],
118
+ 'workingDirectory': value['workingDirectory'],
119
+ 'hooks': EnvironmentHooksToJSON(value['hooks']),
120
+ 'setupTimeoutSeconds': value['setupTimeoutSeconds'],
114
121
  };
115
122
  }
@@ -43,11 +43,17 @@ export interface Machine {
43
43
  */
44
44
  environmentId: string;
45
45
  /**
46
- * Compute registration key this machine launched on
46
+ * The internal registration key this machine launched on, for operators; computeProviderId names the compute provider
47
47
  * @type {string}
48
48
  * @memberof Machine
49
49
  */
50
50
  computeProviderKey: string;
51
+ /**
52
+ * The compute provider this machine runs on: cprov_orchestra on hosted compute, or the self-hosted record whose Launcher runs it. Absent on a customer's own enrolled machine
53
+ * @type {string}
54
+ * @memberof Machine
55
+ */
56
+ computeProviderId?: string;
51
57
  /**
52
58
  * Compute-provider instance id
53
59
  * @type {string}