@feltdb/core 0.8.0 → 0.8.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.
- package/dist/application-development.d.ts +7 -2
- package/dist/application-development.d.ts.map +1 -1
- package/dist/application-development.js +7 -13
- package/dist/application-manifest.d.ts +1 -0
- package/dist/application-manifest.d.ts.map +1 -1
- package/dist/application-manifest.js +1 -1
- package/dist/application-understanding.d.ts +76 -0
- package/dist/application-understanding.d.ts.map +1 -0
- package/dist/application-understanding.js +282 -0
- package/dist/cli/ai-model-config.js +3 -3
- package/dist/cli/commands.js +131 -38
- package/dist/cli/proposal-client.js +5 -1
- package/dist/cli/publish-engine.js +1 -1
- package/dist/cli/repository-evidence.js +55 -0
- package/dist/cli/source-sync.js +190 -75
- package/dist/convergence.d.ts +55 -0
- package/dist/convergence.d.ts.map +1 -0
- package/dist/convergence.js +63 -0
- package/dist/create/managed-account.js +1 -0
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/crates/feltdb/src/application.rs +23 -0
- package/dist/create/server-source/crates/feltdb/src/authority.rs +349 -0
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority-client.rs +32 -0
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority.rs +19 -0
- package/dist/create/server-source/crates/feltdb/src/lib.rs +444 -189
- package/dist/create/server-source/crates/feltdb/src/state_contract.rs +244 -51
- package/dist/create/server-source/crates/feltdb/tests/authority_process.rs +297 -0
- package/dist/create/server-source/crates/feltdb-server/src/auth.rs +41 -11
- package/dist/create/server-source/crates/feltdb-server/src/connections.rs +14 -0
- package/dist/create/server-source/crates/feltdb-server/src/key_management.rs +8 -3
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +1262 -173
- package/dist/create/server-source/crates/feltdb-server/src/tenancy.rs +142 -1
- package/dist/create/template/default-project/src/context/AuthContext.tsx +9 -1
- package/dist/create/template/default-project/src/pages/SignUp.tsx +1 -1
- package/dist/flowspec.d.ts.map +1 -1
- package/dist/flowspec.js +6 -1
- package/dist/http-client.d.ts +32 -1
- package/dist/http-client.d.ts.map +1 -1
- package/dist/http-client.js +14 -2
- package/dist/http-db.d.ts +6 -0
- package/dist/http-db.d.ts.map +1 -1
- package/dist/http-db.js +30 -4
- package/dist/index-core.d.ts +3 -0
- package/dist/index-core.d.ts.map +1 -1
- package/dist/index-core.js +3 -0
- package/dist/intent.d.ts +98 -0
- package/dist/intent.d.ts.map +1 -0
- package/dist/intent.js +343 -0
- package/dist/module-intent.d.ts +19 -5
- package/dist/module-intent.d.ts.map +1 -1
- package/dist/module-intent.js +211 -62
- package/dist/module.d.ts +41 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +543 -38
- package/dist/proposal.d.ts +13 -1
- package/dist/proposal.d.ts.map +1 -1
- package/dist/proposal.js +21 -4
- package/dist/state-contract.d.ts +4 -1
- package/dist/state-contract.d.ts.map +1 -1
- package/dist/state-contract.js +1 -1
- package/dist/studio/components/AskFeltDB.d.ts.map +1 -1
- package/dist/studio/components/ProposalBrowser.d.ts +1 -1
- package/dist/studio/components/ProposalBrowser.d.ts.map +1 -1
- package/dist/studio/components/index.js +1 -1
- package/dist/studio/{components-CNSNrmA9.js → components-Duq2xQWt.js} +251 -193
- package/dist/studio/index.js +1 -1
- package/dist/studio/studio.css +1 -1
- package/dist/studio/utils/proposal-api.d.ts +4 -1
- package/dist/studio/utils/proposal-api.d.ts.map +1 -1
- package/dist/studio/utils/proposal-api.js +3 -0
- package/dist/studio-app/assets/{feltdb_wasm-CSB6KVgw.js → feltdb_wasm-DB8cX151.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-ClhDHp0S.wasm +0 -0
- package/dist/studio-app/assets/index-B0k4UAlI.js +29 -0
- package/dist/studio-app/assets/{index-yazaWMUN.css → index-Cd_NPw14.css} +1 -1
- package/dist/studio-app/index.html +2 -2
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/dist/workspace/local-development-authority.d.ts +2 -0
- package/dist/workspace/local-development-authority.d.ts.map +1 -1
- package/dist/workspace/local-development-authority.js +65 -2
- package/package.json +1 -1
- package/dist/studio-app/assets/dist-CCOk39Uc.js +0 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-Dd1fnO9U.wasm +0 -0
- package/dist/studio-app/assets/index-Bncji3aN.js +0 -43
- package/dist/studio-app/assets/lib-B2_7fcn7.js +0 -69
- package/dist/studio-app/assets/worker-CARZ5g7K.js +0 -69
|
@@ -41,6 +41,41 @@ pub struct Application {
|
|
|
41
41
|
pub active_revision: Option<String>,
|
|
42
42
|
#[serde(default)]
|
|
43
43
|
pub environment_revisions: std::collections::BTreeMap<String, String>,
|
|
44
|
+
#[serde(default)]
|
|
45
|
+
pub qualification: Option<QualificationMarker>,
|
|
46
|
+
}
|
|
47
|
+
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
|
|
48
|
+
pub struct QualificationMarker {
|
|
49
|
+
pub purpose: String,
|
|
50
|
+
pub disposable: bool,
|
|
51
|
+
pub environment: String,
|
|
52
|
+
pub proof_run_id: String,
|
|
53
|
+
pub expires_at: u64,
|
|
54
|
+
}
|
|
55
|
+
impl QualificationMarker {
|
|
56
|
+
fn valid_for_creation(&self, timestamp: u64) -> bool {
|
|
57
|
+
self.purpose == "qualification"
|
|
58
|
+
&& self.disposable
|
|
59
|
+
&& self.environment == "qualification"
|
|
60
|
+
&& !self.proof_run_id.trim().is_empty()
|
|
61
|
+
&& self.expires_at > timestamp
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
fn authorize_destruction(&self, proof_run_id: &str, timestamp: u64) -> Result<(), String> {
|
|
65
|
+
if self.purpose != "qualification" || !self.disposable {
|
|
66
|
+
return Err("refusing destructive qualification: application is not marked disposable".into());
|
|
67
|
+
}
|
|
68
|
+
if self.environment != "qualification" {
|
|
69
|
+
return Err("refusing destructive qualification: environment is not qualification".into());
|
|
70
|
+
}
|
|
71
|
+
if self.proof_run_id.trim().is_empty() || proof_run_id.trim().is_empty() || self.proof_run_id != proof_run_id {
|
|
72
|
+
return Err("refusing destructive qualification: proof run does not match".into());
|
|
73
|
+
}
|
|
74
|
+
if self.expires_at <= timestamp {
|
|
75
|
+
return Err("refusing destructive qualification: disposable marker has expired".into());
|
|
76
|
+
}
|
|
77
|
+
Ok(())
|
|
78
|
+
}
|
|
44
79
|
}
|
|
45
80
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
46
81
|
pub struct TenantMembership {
|
|
@@ -609,7 +644,7 @@ impl TenancyStore {
|
|
|
609
644
|
.find(|app| app.id == application_id)?
|
|
610
645
|
.clone();
|
|
611
646
|
drop(records);
|
|
612
|
-
self.authorize_application(user_id, &app.tenant_id, &app.id, "
|
|
647
|
+
self.authorize_application(user_id, &app.tenant_id, &app.id, "application:read")
|
|
613
648
|
.then_some(app)
|
|
614
649
|
}
|
|
615
650
|
pub fn application_tenant(&self, application_id: &str) -> Option<String> {
|
|
@@ -765,10 +800,25 @@ impl TenancyStore {
|
|
|
765
800
|
actor: &str,
|
|
766
801
|
tenant_id: &str,
|
|
767
802
|
name: &str,
|
|
803
|
+
) -> Result<Application, String> {
|
|
804
|
+
self.create_application_with_qualification(actor, tenant_id, name, None)
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
pub fn create_application_with_qualification(
|
|
808
|
+
&self,
|
|
809
|
+
actor: &str,
|
|
810
|
+
tenant_id: &str,
|
|
811
|
+
name: &str,
|
|
812
|
+
qualification: Option<QualificationMarker>,
|
|
768
813
|
) -> Result<Application, String> {
|
|
769
814
|
if !self.authorize_tenant(actor, tenant_id, "applications:write") {
|
|
770
815
|
return Err("forbidden".into());
|
|
771
816
|
}
|
|
817
|
+
if let Some(marker) = qualification.as_ref() {
|
|
818
|
+
if !marker.valid_for_creation(now()) {
|
|
819
|
+
return Err("invalid disposable qualification marker".into());
|
|
820
|
+
}
|
|
821
|
+
}
|
|
772
822
|
let mut records = self
|
|
773
823
|
.records
|
|
774
824
|
.write()
|
|
@@ -794,6 +844,7 @@ impl TenancyStore {
|
|
|
794
844
|
status: application_status(),
|
|
795
845
|
active_revision: None,
|
|
796
846
|
environment_revisions: Default::default(),
|
|
847
|
+
qualification,
|
|
797
848
|
};
|
|
798
849
|
records.application_memberships.push(ApplicationMembership {
|
|
799
850
|
application_id: application.id.clone(),
|
|
@@ -816,6 +867,22 @@ impl TenancyStore {
|
|
|
816
867
|
Ok(application)
|
|
817
868
|
}
|
|
818
869
|
|
|
870
|
+
pub fn delete_qualification_application(
|
|
871
|
+
&self,
|
|
872
|
+
actor: &str,
|
|
873
|
+
application_id: &str,
|
|
874
|
+
proof_run_id: &str,
|
|
875
|
+
) -> Result<(), String> {
|
|
876
|
+
let application = self
|
|
877
|
+
.application_for(actor, application_id)
|
|
878
|
+
.ok_or_else(|| "application not found".to_string())?;
|
|
879
|
+
let marker = application.qualification.ok_or_else(|| {
|
|
880
|
+
"refusing destructive qualification: application is not marked disposable".to_string()
|
|
881
|
+
})?;
|
|
882
|
+
marker.authorize_destruction(proof_run_id, now())?;
|
|
883
|
+
self.delete_application(actor, application_id)
|
|
884
|
+
}
|
|
885
|
+
|
|
819
886
|
pub fn delete_application(&self, actor: &str, application_id: &str) -> Result<(), String> {
|
|
820
887
|
let tenant_id = self
|
|
821
888
|
.application_tenant(application_id)
|
|
@@ -1238,6 +1305,73 @@ mod tests {
|
|
|
1238
1305
|
assert!(!store.authorize_application("user_a", &tenant_a.id, &app_b.id, "state:read"));
|
|
1239
1306
|
}
|
|
1240
1307
|
|
|
1308
|
+
#[test]
|
|
1309
|
+
fn destructive_qualification_requires_an_unexpired_matching_marker() {
|
|
1310
|
+
let valid_marker = QualificationMarker {
|
|
1311
|
+
purpose: "qualification".into(), disposable: true, environment: "qualification".into(), proof_run_id: "proof-1".into(), expires_at: now() + 300,
|
|
1312
|
+
};
|
|
1313
|
+
assert!(valid_marker.authorize_destruction("", now()).unwrap_err().contains("does not match"));
|
|
1314
|
+
assert!(valid_marker.authorize_destruction("proof-other", now()).unwrap_err().contains("does not match"));
|
|
1315
|
+
let mut wrong_environment = valid_marker.clone();
|
|
1316
|
+
wrong_environment.environment = "production".into();
|
|
1317
|
+
assert!(wrong_environment.authorize_destruction("proof-1", now()).unwrap_err().contains("environment"));
|
|
1318
|
+
let mut not_disposable = valid_marker.clone();
|
|
1319
|
+
not_disposable.disposable = false;
|
|
1320
|
+
assert!(not_disposable.authorize_destruction("proof-1", now()).unwrap_err().contains("not marked disposable"));
|
|
1321
|
+
let mut expired = valid_marker.clone();
|
|
1322
|
+
expired.expires_at = now().saturating_sub(1);
|
|
1323
|
+
assert!(expired.authorize_destruction("proof-1", now()).unwrap_err().contains("expired"));
|
|
1324
|
+
assert!(valid_marker.authorize_destruction("proof-1", now()).is_ok());
|
|
1325
|
+
|
|
1326
|
+
let store = store("qualification-guard");
|
|
1327
|
+
let tenant = store.create_tenant("owner", "Qualification").unwrap();
|
|
1328
|
+
let normal = store
|
|
1329
|
+
.create_application("owner", &tenant.id, "Normal")
|
|
1330
|
+
.unwrap();
|
|
1331
|
+
assert!(store
|
|
1332
|
+
.delete_qualification_application("owner", &normal.id, "proof-1")
|
|
1333
|
+
.unwrap_err()
|
|
1334
|
+
.contains("not marked disposable"));
|
|
1335
|
+
assert!(store
|
|
1336
|
+
.create_application_with_qualification(
|
|
1337
|
+
"owner",
|
|
1338
|
+
&tenant.id,
|
|
1339
|
+
"Expired",
|
|
1340
|
+
Some(QualificationMarker {
|
|
1341
|
+
purpose: "qualification".into(),
|
|
1342
|
+
disposable: true,
|
|
1343
|
+
environment: "qualification".into(),
|
|
1344
|
+
proof_run_id: "proof-expired".into(),
|
|
1345
|
+
expires_at: now().saturating_sub(1),
|
|
1346
|
+
}),
|
|
1347
|
+
)
|
|
1348
|
+
.unwrap_err()
|
|
1349
|
+
.contains("invalid disposable"));
|
|
1350
|
+
|
|
1351
|
+
let proof = store
|
|
1352
|
+
.create_application_with_qualification(
|
|
1353
|
+
"owner",
|
|
1354
|
+
&tenant.id,
|
|
1355
|
+
"Proof",
|
|
1356
|
+
Some(QualificationMarker {
|
|
1357
|
+
purpose: "qualification".into(),
|
|
1358
|
+
disposable: true,
|
|
1359
|
+
environment: "qualification".into(),
|
|
1360
|
+
proof_run_id: "proof-1".into(),
|
|
1361
|
+
expires_at: now() + 300,
|
|
1362
|
+
}),
|
|
1363
|
+
)
|
|
1364
|
+
.unwrap();
|
|
1365
|
+
assert!(store
|
|
1366
|
+
.delete_qualification_application("owner", &proof.id, "proof-other")
|
|
1367
|
+
.unwrap_err()
|
|
1368
|
+
.contains("does not match"));
|
|
1369
|
+
store
|
|
1370
|
+
.delete_qualification_application("owner", &proof.id, "proof-1")
|
|
1371
|
+
.unwrap();
|
|
1372
|
+
assert!(store.application_for("owner", &proof.id).is_none());
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1241
1375
|
#[test]
|
|
1242
1376
|
fn invitation_acceptance_and_revocation_change_authorization() {
|
|
1243
1377
|
let store = store("invitation");
|
|
@@ -1322,7 +1456,14 @@ mod tests {
|
|
|
1322
1456
|
.unwrap();
|
|
1323
1457
|
|
|
1324
1458
|
assert!(store.authorize_application("key_runtime", &tenant.id, &app.id, "state:read"));
|
|
1459
|
+
assert_eq!(
|
|
1460
|
+
store
|
|
1461
|
+
.application_for("key_runtime", &app.id)
|
|
1462
|
+
.map(|application| application.id),
|
|
1463
|
+
Some(app.id.clone())
|
|
1464
|
+
);
|
|
1325
1465
|
assert!(!store.authorize_application("key_runtime", &tenant.id, &app.id, "state:write"));
|
|
1466
|
+
assert!(store.application_for("key_runtime", &other.id).is_none());
|
|
1326
1467
|
assert!(!store.authorize_application("key_runtime", &tenant.id, &other.id, "state:read"));
|
|
1327
1468
|
}
|
|
1328
1469
|
}
|
|
@@ -17,7 +17,15 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
|
|
17
17
|
const loading = sessionRecords.loading || userRecords.loading || membershipRecords.loading || organizationRecords.loading;
|
|
18
18
|
const establish = (next: Session) => { sessionStorage.setItem(SESSION_KEY, next.id); setSessionId(next.id); };
|
|
19
19
|
const value = useMemo<AuthValue>(() => ({ loading, authenticated: Boolean(session && user && membership && organization), session, user, membership, organization,
|
|
20
|
-
signUp: async input => {
|
|
20
|
+
signUp: async input => {
|
|
21
|
+
try {
|
|
22
|
+
await db.auth.signUp({ email: input.email, password: input.password, display_name: input.name });
|
|
23
|
+
} catch (error) {
|
|
24
|
+
if ((error as { code?: string }).code !== 'CONFLICT') throw error;
|
|
25
|
+
await db.auth.signIn({ email: input.email, password: input.password });
|
|
26
|
+
}
|
|
27
|
+
establish(await createAccount(input));
|
|
28
|
+
},
|
|
21
29
|
signIn: async (email, password) => { await db.auth.signIn({ email, password }); establish(await createSession(email)); },
|
|
22
30
|
signOut: async () => { if (session) await sessions.delete(session.id); await db.auth.signOut(); sessionStorage.removeItem(SESSION_KEY); setSessionId(null); },
|
|
23
31
|
}), [loading, session, user, membership, organization]);
|
|
@@ -3,6 +3,6 @@ import { useAuth } from '../context/AuthContext';
|
|
|
3
3
|
|
|
4
4
|
export function SignUp() {
|
|
5
5
|
const { signUp } = useAuth(); const [error, setError] = useState(''); const [busy, setBusy] = useState(false);
|
|
6
|
-
async function submit(event: FormEvent<HTMLFormElement>) { event.preventDefault(); setBusy(true); setError(''); const form = new FormData(event.currentTarget); try { await signUp({ name: String(form.get('name')), email: String(form.get('email')), password: String(form.get('password')), organization: String(form.get('organization')) }); } catch { setError('We could not create your account. Check the details and try again.'); setBusy(false); } }
|
|
6
|
+
async function submit(event: FormEvent<HTMLFormElement>) { event.preventDefault(); setBusy(true); setError(''); const form = new FormData(event.currentTarget); try { await signUp({ name: String(form.get('name')), email: String(form.get('email')), password: String(form.get('password')), organization: String(form.get('organization')) }); } catch (error) { setError(error instanceof Error ? error.message : 'We could not create your account. Check the details and try again.'); setBusy(false); } }
|
|
7
7
|
return <><span className="eyebrow">Create your workspace</span><h2>Start with durable state.</h2><p className="muted">Your actor, account, and organization are established at the FeltDB boundary.</p><form onSubmit={submit}><label>Name<input name="name" autoComplete="name" required placeholder="Ada Lovelace" /></label><label>Work email<input name="email" type="email" autoComplete="email" required placeholder="ada@example.com" /></label><label>Password<input name="password" type="password" autoComplete="new-password" minLength={8} required /></label><label>Organization<input name="organization" required placeholder="Analytical Engines" /></label>{error && <p className="error">{error}</p>}<button disabled={busy}>{busy ? 'Creating…' : 'Create account'}</button></form><p className="switch">Already have an account? <a href="?view=signin">Sign in</a></p></>;
|
|
8
8
|
}
|
package/dist/flowspec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowspec.d.ts","sourceRoot":"","sources":["../src/flowspec.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE;AAC5E,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAC7E,MAAM,WAAW,cAAc;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,SAAS,EAAE,CAAA;CAAE;AAC3F,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE;AACjE,MAAM,WAAW,QAAS,SAAQ,SAAS;CAAG;AAC9C,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE;AACrF,MAAM,WAAW,WAAW;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE;AACpE,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,CAAC,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,aAAa,EAAE,qBAAqB,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,cAAc;IAAG,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AACjG,MAAM,WAAW,YAAY;IAAG,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE;AACvF,MAAM,WAAW,sBAAsB;IAAG,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,GAAG,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AAEpK,eAAO,MAAM,oBAAoB,yLAA0L,CAAC;AAC5N,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQ1D;AAED,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,sHAAsH;AACtH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,mBAAmB,
|
|
1
|
+
{"version":3,"file":"flowspec.d.ts","sourceRoot":"","sources":["../src/flowspec.ts"],"names":[],"mappings":"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"}
|
package/dist/flowspec.js
CHANGED
|
@@ -26,7 +26,12 @@ export function flowSpecToManifest(spec, tenantId, applicationId) {
|
|
|
26
26
|
const enumValues = field.type.startsWith('enum(') && field.type.endsWith(')') ? field.type.slice(5, -1).split(',').map(value => value.trim()) : undefined;
|
|
27
27
|
return { name: field.name, type: reference ? 'reference' : enumValues ? 'enum' : field.type, required: !field.optional, ...(reference ? { reference } : {}), ...(enumValues ? { enum_values: enumValues } : {}) };
|
|
28
28
|
};
|
|
29
|
-
|
|
29
|
+
const indexFields = (expression) => {
|
|
30
|
+
const trimmed = expression.trim();
|
|
31
|
+
const match = trimmed.match(/^(?:[A-Za-z_][A-Za-z0-9_]*)?\((.*)\)$/);
|
|
32
|
+
return (match?.[1] ?? trimmed).split(',').map(value => value.trim()).filter(Boolean);
|
|
33
|
+
};
|
|
34
|
+
return { application_id: applicationId, tenant_id: tenantId, schema: 1, metadata: { name: spec.app, labels: {} }, collections: spec.collections.map(value => ({ name: value.name, fields: value.fields.map(manifestField) })), indexes: spec.collections.flatMap(collection => collection.indexes.map(index => ({ name: `${collection.name}.${index.name}`, collection: collection.name, fields: indexFields(index.expression), unique: index.kind === 'unique' }))), references: [], queries: [], actions: [], workflows: spec.workflows.map(value => ({ name: value.name, steps: value.steps.map(step => ({ name: step.name, capability: step.statements.find(statement => statement.startsWith('capability '))?.slice('capability '.length) })) })), triggers: spec.triggers.map((value, index) => ({ name: `trigger-${index + 1}`, event: value.event, workflow: spec.workflows[0]?.name || '' })), schedules: spec.schedules.map(value => ({ name: value.name, expression: value.statements[0] || '', workflow: spec.workflows[0]?.name || '' })), agents: spec.agents.map(value => ({ name: value.name, capabilities: capabilities.map(capability => capability.name).filter(name => value.statements.some(statement => statement.includes(name))) })), capabilities, modules: resolveFeltDBModules(spec.modules), connections: [], policies: spec.policies.map(value => ({ name: value.name, resource: value.name, read: policySubject(value.statements, 'read'), write: policySubject(value.statements, 'write'), capabilities: [] })), ui: { routes: [], bindings: [], forms: [], dashboards: [] }, environments: ['development', 'preview', 'staging', 'production'].map(name => ({ name, configuration: {} })), artifacts: [], deployment: { environments: ['development', 'preview', 'staging', 'production'] }, runtime: { contract: 1, minimum_engine: '0.2.0', maximum_engine_exclusive: '2.0.0' } };
|
|
30
35
|
}
|
|
31
36
|
export function manifestToFlowSpec(manifest) {
|
|
32
37
|
const fieldType = (field) => field.reference ? `ref ${field.reference}` : field.enum_values?.length ? `enum(${field.enum_values.join(',')})` : field.type;
|
package/dist/http-client.d.ts
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* For applications that only need HTTP access without the full core framework.
|
|
6
6
|
*/
|
|
7
7
|
import type { FeltDBProposalEvent, FeltDBProposalPreviewArtifact, FeltDBProposalRecord, ProposalReadiness, ProposalStatus } from './proposal.js';
|
|
8
|
+
import type { ApplicationUnderstanding } from './application-understanding.js';
|
|
9
|
+
import type { ConvergenceResult } from './convergence.js';
|
|
10
|
+
import type { ImplementationPlan, Intent, IntentEvent, IntentExecutionResult } from './intent.js';
|
|
8
11
|
import type { CanonicalQuery, QueryResult, TransactionResult } from './state-contract.js';
|
|
9
12
|
export interface ClientOptions {
|
|
10
13
|
url: string;
|
|
@@ -106,6 +109,20 @@ export declare class FeltDBClient {
|
|
|
106
109
|
readonly capabilities: {
|
|
107
110
|
run: (name: string, input: unknown) => Promise<unknown>;
|
|
108
111
|
};
|
|
112
|
+
/** Canonical intent execution and its durable semantic artifacts. */
|
|
113
|
+
readonly intents: {
|
|
114
|
+
execute: (rawRequest: string) => Promise<IntentExecutionResult>;
|
|
115
|
+
list: () => Promise<{
|
|
116
|
+
intents: Intent[];
|
|
117
|
+
}>;
|
|
118
|
+
get: (id: string) => Promise<Intent>;
|
|
119
|
+
understanding: (id: string) => Promise<ApplicationUnderstanding>;
|
|
120
|
+
plan: (id: string) => Promise<ImplementationPlan>;
|
|
121
|
+
proposal: (id: string) => Promise<FeltDBProposalRecord>;
|
|
122
|
+
history: (id: string) => Promise<{
|
|
123
|
+
events: IntentEvent[];
|
|
124
|
+
}>;
|
|
125
|
+
};
|
|
109
126
|
/** Canonical Proposal lifecycle. Repository application is intentionally absent. */
|
|
110
127
|
readonly proposals: {
|
|
111
128
|
create: (proposal: {
|
|
@@ -117,6 +134,16 @@ export declare class FeltDBClient {
|
|
|
117
134
|
metadata?: Record<string, string>;
|
|
118
135
|
parent_proposal_id?: string;
|
|
119
136
|
expires_at?: string | number;
|
|
137
|
+
contract_diff?: string[];
|
|
138
|
+
source_plan?: {
|
|
139
|
+
files: Array<{
|
|
140
|
+
path: string;
|
|
141
|
+
action: string;
|
|
142
|
+
}>;
|
|
143
|
+
};
|
|
144
|
+
understanding?: ApplicationUnderstanding;
|
|
145
|
+
evidence_hash?: string;
|
|
146
|
+
understanding_hash?: string;
|
|
120
147
|
}) => Promise<FeltDBProposalRecord>;
|
|
121
148
|
list: (options?: {
|
|
122
149
|
status?: ProposalStatus;
|
|
@@ -133,7 +160,7 @@ export declare class FeltDBClient {
|
|
|
133
160
|
history: (id: string) => Promise<{
|
|
134
161
|
events: FeltDBProposalEvent[];
|
|
135
162
|
}>;
|
|
136
|
-
status: (id: string) => Promise<ProposalReadiness>;
|
|
163
|
+
status: (id: string, currentEvidenceHash?: string) => Promise<ProposalReadiness>;
|
|
137
164
|
validate: (id: string, proposedManifest?: unknown) => Promise<FeltDBProposalRecord>;
|
|
138
165
|
createPreview: (id: string) => Promise<FeltDBProposalPreviewArtifact>;
|
|
139
166
|
preview: (previewId: string) => Promise<FeltDBProposalPreviewArtifact>;
|
|
@@ -150,6 +177,10 @@ export declare class FeltDBClient {
|
|
|
150
177
|
}>;
|
|
151
178
|
approve: (id: string, approveAuthorization?: boolean) => Promise<FeltDBProposalRecord>;
|
|
152
179
|
reject: (id: string, reason?: string) => Promise<FeltDBProposalRecord>;
|
|
180
|
+
convergence: (id: string) => Promise<{
|
|
181
|
+
convergence: ConvergenceResult[];
|
|
182
|
+
}>;
|
|
183
|
+
recordConvergence: (id: string, result: ConvergenceResult) => Promise<ConvergenceResult>;
|
|
153
184
|
};
|
|
154
185
|
}
|
|
155
186
|
export declare function createClient(options: ClientOptions): FeltDBClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/http-client.js
CHANGED
|
@@ -99,13 +99,23 @@ export class FeltDBClient {
|
|
|
99
99
|
capabilities = {
|
|
100
100
|
run: (name, input) => this.request(this.scoped(`/v1/capabilities/${encodeURIComponent(name)}/run`), { method: 'POST', body: JSON.stringify(input) }),
|
|
101
101
|
};
|
|
102
|
+
/** Canonical intent execution and its durable semantic artifacts. */
|
|
103
|
+
intents = {
|
|
104
|
+
execute: (rawRequest) => this.request('/v1/intents', { method: 'POST', body: JSON.stringify(this.scopeBody({ raw_request: rawRequest })) }),
|
|
105
|
+
list: () => this.request(this.scoped('/v1/intents')),
|
|
106
|
+
get: (id) => this.request(this.scoped(`/v1/intents/${encodeURIComponent(id)}`)),
|
|
107
|
+
understanding: (id) => this.request(this.scoped(`/v1/intents/${encodeURIComponent(id)}/understanding`)),
|
|
108
|
+
plan: (id) => this.request(this.scoped(`/v1/intents/${encodeURIComponent(id)}/plan`)),
|
|
109
|
+
proposal: (id) => this.request(this.scoped(`/v1/intents/${encodeURIComponent(id)}/proposal`)),
|
|
110
|
+
history: (id) => this.request(this.scoped(`/v1/intents/${encodeURIComponent(id)}/history`)),
|
|
111
|
+
};
|
|
102
112
|
/** Canonical Proposal lifecycle. Repository application is intentionally absent. */
|
|
103
113
|
proposals = {
|
|
104
|
-
create: (proposal) => this.request('/v1/proposals', { method: 'POST', body: JSON.stringify(this.scopeBody(proposal)) }),
|
|
114
|
+
create: (proposal) => this.request('/v1/proposals', { method: 'POST', body: JSON.stringify(this.scopeBody({ proposal_version: 1, contract_diff: [], source_plan: { files: [] }, ...proposal })) }),
|
|
105
115
|
list: (options = {}) => this.request(this.scoped('/v1/proposals', options)),
|
|
106
116
|
get: (id) => this.request(this.scoped(`/v1/proposals/${encodeURIComponent(id)}`)),
|
|
107
117
|
history: (id) => this.request(this.scoped(`/v1/proposals/${encodeURIComponent(id)}/history`)),
|
|
108
|
-
status: (id) => this.request(this.scoped(`/v1/proposals/${encodeURIComponent(id)}/status
|
|
118
|
+
status: (id, currentEvidenceHash) => this.request(this.scoped(`/v1/proposals/${encodeURIComponent(id)}/status`, { current_evidence_hash: currentEvidenceHash })),
|
|
109
119
|
validate: (id, proposedManifest) => this.request(`/v1/proposals/${encodeURIComponent(id)}/validate`, { method: 'POST', body: JSON.stringify(this.scopeBody({ proposed_manifest: proposedManifest })) }),
|
|
110
120
|
createPreview: (id) => this.request(`/v1/proposals/${encodeURIComponent(id)}/preview`, { method: 'POST', body: JSON.stringify(this.scopeBody()) }),
|
|
111
121
|
preview: (previewId) => this.request(this.scoped(`/v1/previews/${encodeURIComponent(previewId)}`)),
|
|
@@ -113,6 +123,8 @@ export class FeltDBClient {
|
|
|
113
123
|
simulatePreview: (previewId, event) => this.request(this.scoped(`/v1/previews/${encodeURIComponent(previewId)}/simulate`), { method: 'POST', body: JSON.stringify({ event }) }),
|
|
114
124
|
approve: (id, approveAuthorization = false) => this.request(`/v1/proposals/${encodeURIComponent(id)}/approve`, { method: 'POST', body: JSON.stringify(this.scopeBody({ approve_authorization: approveAuthorization })) }),
|
|
115
125
|
reject: (id, reason) => this.request(`/v1/proposals/${encodeURIComponent(id)}/reject`, { method: 'POST', body: JSON.stringify(this.scopeBody({ reason })) }),
|
|
126
|
+
convergence: (id) => this.request(this.scoped(`/v1/proposals/${encodeURIComponent(id)}/convergence`)),
|
|
127
|
+
recordConvergence: (id, result) => this.request(`/v1/proposals/${encodeURIComponent(id)}/convergence`, { method: 'POST', body: JSON.stringify(this.scopeBody(result)) }),
|
|
116
128
|
};
|
|
117
129
|
}
|
|
118
130
|
export function createClient(options) {
|
package/dist/http-db.d.ts
CHANGED
|
@@ -41,8 +41,11 @@ export declare class HttpJsDb implements JsDb {
|
|
|
41
41
|
private readonly applicationId?;
|
|
42
42
|
private readonly environment;
|
|
43
43
|
private activeRevision?;
|
|
44
|
+
private readonly authWaiters;
|
|
44
45
|
constructor(options: HttpRuntimeOptions);
|
|
45
46
|
private headers;
|
|
47
|
+
private updateToken;
|
|
48
|
+
private waitForAuthChange;
|
|
46
49
|
auth_request<T extends {
|
|
47
50
|
access_token?: string;
|
|
48
51
|
}>(operation: 'signup' | 'signin' | 'signout' | 'session', body?: unknown): Promise<T>;
|
|
@@ -83,6 +86,9 @@ export declare class HttpJsDb implements JsDb {
|
|
|
83
86
|
}>;
|
|
84
87
|
}): Promise<{
|
|
85
88
|
transactionId: string;
|
|
89
|
+
baseRevision: number;
|
|
90
|
+
commitRevision: number;
|
|
91
|
+
status: 'committed';
|
|
86
92
|
duplicate: boolean;
|
|
87
93
|
operations: number;
|
|
88
94
|
stateBefore: number;
|
package/dist/http-db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-db.d.ts","sourceRoot":"","sources":["../src/http-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGpE,UAAU,QAAQ;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACxH,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,iFAAiF;AACjF,qBAAa,QAAS,YAAW,IAAI;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,cAAc,CAAC,CAAkB;
|
|
1
|
+
{"version":3,"file":"http-db.d.ts","sourceRoot":"","sources":["../src/http-db.ts"],"names":[],"mappings":"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"}
|
package/dist/http-db.js
CHANGED
|
@@ -6,6 +6,7 @@ export class HttpJsDb {
|
|
|
6
6
|
applicationId;
|
|
7
7
|
environment;
|
|
8
8
|
activeRevision;
|
|
9
|
+
authWaiters = new Set();
|
|
9
10
|
constructor(options) {
|
|
10
11
|
this.url = options.url.replace(/\/$/, '');
|
|
11
12
|
this.token = options.token || '';
|
|
@@ -19,19 +20,35 @@ export class HttpJsDb {
|
|
|
19
20
|
...(json ? { 'Content-Type': 'application/json' } : {}),
|
|
20
21
|
};
|
|
21
22
|
}
|
|
23
|
+
updateToken(token) {
|
|
24
|
+
this.token = token;
|
|
25
|
+
for (const wake of this.authWaiters)
|
|
26
|
+
wake();
|
|
27
|
+
this.authWaiters.clear();
|
|
28
|
+
}
|
|
29
|
+
waitForAuthChange(signal) {
|
|
30
|
+
if (signal.aborted)
|
|
31
|
+
return Promise.resolve();
|
|
32
|
+
return new Promise(resolve => {
|
|
33
|
+
const onAbort = () => { this.authWaiters.delete(wake); wake(); };
|
|
34
|
+
const wake = () => { signal.removeEventListener('abort', onAbort); resolve(); };
|
|
35
|
+
this.authWaiters.add(wake);
|
|
36
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
37
|
+
});
|
|
38
|
+
}
|
|
22
39
|
async auth_request(operation, body) {
|
|
23
40
|
const response = await fetch(`${this.url}/v1/auth/${operation}`, {
|
|
24
41
|
method: operation === 'session' ? 'GET' : 'POST',
|
|
25
42
|
headers: this.headers(body !== undefined),
|
|
26
|
-
...(body !== undefined ? { body: JSON.stringify(operation === 'signup' ? { application_id: this.applicationId, ...body } : body) } : {}),
|
|
43
|
+
...(body !== undefined ? { body: JSON.stringify(operation === 'signup' || operation === 'signin' ? { application_id: this.applicationId, ...body } : body) } : {}),
|
|
27
44
|
});
|
|
28
45
|
const value = response.status === 204 ? {} : await response.json();
|
|
29
46
|
if (!response.ok)
|
|
30
47
|
throw new FeltDBServiceError(value.message || value.error || 'Authentication failed', value.code || value.error || 'AUTHENTICATION_FAILED', value.request_id, response.status);
|
|
31
48
|
if (value.access_token)
|
|
32
|
-
this.
|
|
49
|
+
this.updateToken(value.access_token);
|
|
33
50
|
if (operation === 'signout')
|
|
34
|
-
this.
|
|
51
|
+
this.updateToken('');
|
|
35
52
|
return value;
|
|
36
53
|
}
|
|
37
54
|
splitKey(key) {
|
|
@@ -183,7 +200,7 @@ export class HttpJsDb {
|
|
|
183
200
|
collection: operation.collection, id: operation.id, value: operation.value, if_version: operation.expectedVersion,
|
|
184
201
|
}));
|
|
185
202
|
const result = await this.canonicalTransaction(operations, request.transactionId);
|
|
186
|
-
return { transactionId: result.transaction_id, duplicate: result.duplicate, operations: operations.length, stateBefore: result.state_before, stateAfter: result.state_after };
|
|
203
|
+
return { transactionId: result.transaction_id, baseRevision: result.base_revision, commitRevision: result.commit_revision, status: result.status, duplicate: result.duplicate, operations: operations.length, stateBefore: result.state_before, stateAfter: result.state_after };
|
|
187
204
|
}
|
|
188
205
|
const response = await fetch(`${this.url}/transactions`, {
|
|
189
206
|
method: 'POST',
|
|
@@ -322,6 +339,7 @@ export class HttpJsDb {
|
|
|
322
339
|
: '';
|
|
323
340
|
const response = await fetch(`${this.url}/v1${path}${context}`, {
|
|
324
341
|
...init,
|
|
342
|
+
signal: init.signal ?? AbortSignal.timeout(30_000),
|
|
325
343
|
headers: { ...this.headers(init.body !== undefined), ...(init.headers || {}) },
|
|
326
344
|
});
|
|
327
345
|
const text = await response.text();
|
|
@@ -344,12 +362,20 @@ export class HttpJsDb {
|
|
|
344
362
|
}
|
|
345
363
|
async consumeEvents(controller, callback) {
|
|
346
364
|
while (!controller.signal.aborted) {
|
|
365
|
+
if (!this.token) {
|
|
366
|
+
await this.waitForAuthChange(controller.signal);
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
347
369
|
try {
|
|
348
370
|
const eventPath = this.applicationId ? `/v1/events?application_id=${encodeURIComponent(this.applicationId)}&environment=${encodeURIComponent(this.environment)}` : '/events';
|
|
349
371
|
const response = await fetch(`${this.url}${eventPath}`, {
|
|
350
372
|
headers: this.headers(),
|
|
351
373
|
signal: controller.signal,
|
|
352
374
|
});
|
|
375
|
+
if (response.status === 401 || response.status === 403) {
|
|
376
|
+
await this.waitForAuthChange(controller.signal);
|
|
377
|
+
continue;
|
|
378
|
+
}
|
|
353
379
|
if (!response.ok || !response.body)
|
|
354
380
|
throw new Error(`Event stream failed: HTTP ${response.status}`);
|
|
355
381
|
const reader = response.body.getReader();
|
package/dist/index-core.d.ts
CHANGED
|
@@ -57,6 +57,9 @@ export * from './application-development.js';
|
|
|
57
57
|
export * from './proposal.js';
|
|
58
58
|
export * from './module.js';
|
|
59
59
|
export * from './module-intent.js';
|
|
60
|
+
export * from './application-understanding.js';
|
|
61
|
+
export * from './convergence.js';
|
|
62
|
+
export * from './intent.js';
|
|
60
63
|
export { ProtocolHandler, type Message, type Operation as ProtocolOperation, type Response as ProtocolResponse, } from './protocol.js';
|
|
61
64
|
/**
|
|
62
65
|
* Agent Runtime APIs
|
package/dist/index-core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-core.d.ts","sourceRoot":"","sources":["../src/index-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC9E,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,OAAO,EACL,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,IAAI,iBAAiB,EACnC,KAAK,QAAQ,IAAI,gBAAgB,GAClC,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzE;;GAEG;AACH,YAAY,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index-core.d.ts","sourceRoot":"","sources":["../src/index-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC9E,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,iCAAiC,CAAC;AAChD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,IAAI,iBAAiB,EACnC,KAAK,QAAQ,IAAI,gBAAgB,GAClC,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzE;;GAEG;AACH,YAAY,EACV,eAAe,EACf,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC"}
|
package/dist/index-core.js
CHANGED
|
@@ -56,6 +56,9 @@ export * from './application-development.js';
|
|
|
56
56
|
export * from './proposal.js';
|
|
57
57
|
export * from './module.js';
|
|
58
58
|
export * from './module-intent.js';
|
|
59
|
+
export * from './application-understanding.js';
|
|
60
|
+
export * from './convergence.js';
|
|
61
|
+
export * from './intent.js';
|
|
59
62
|
export { ProtocolHandler, } from './protocol.js';
|
|
60
63
|
/**
|
|
61
64
|
* Agent Runtime APIs
|